鱼C论坛

 找回密码
 立即注册
查看: 1618|回复: 1

[技术交流] 关于栈前的标记

[复制链接]
发表于 2015-8-8 23:42:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
刚刚看王爽的汇编语言,学到栈这一节,查看栈内数据的时候发现有8个字节老是重复出现,但是并不明白是什么意思,发上来看看
环境:DOSBox0.74,debug

测试1:
-r sp 12e
-d100
DS:0120: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
-r ax 1234
-a
命令:push ax
-t
-d100
DS:0120: 00 00 34 12 00 00 01 01-3F 07 A3 01 34 12 00 00

测试2(接上一测试):
-a
命令:pop bx
-t
-d100
DS:0120: 00 00 34 12 34 12 00 00-03 01 3F 07 A3 01 00 00


测试3:
-r sp 13e
-d100
DS:0130: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
-r ax 6789
-a
命令:push ax
-t
-d100
DS:0130: 00 00 89 67 00 00 02 01-3F 07 A3 01 89 67 00 00

测试4:
-r sp 15f
-d100
DS:0150: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
-r ax 8765
-a
命令:push ax
-t
-d100
DS:0150: 00 00 00 65 87 00 00 04-01 3F 07 A3 01 65 87 00

测试5(接上一测试):
-r ax 0001
-a
命令:pop ax
-t
SP=015F
-d100
DS:0150: 00 00 00 65 87 65 87 00-00 05 01 3F 07 A3 01 00

分析:
A、测试1是第一次使用push命令,测试3是第二次,测试4是第四次,在栈前的数据分别为:
1:00 00 34 12 00 00 01 01-3F 07 A3 01 34 12 00 00
2:00 00 89 67 00 00 02 01-3F 07 A3 01 89 67 00 00
4:00 00 00 65 87 00 00 04-01 3F 07 A3 01 65 87 00
初步认为01、02、04分别是使用入栈的次数的标记,可能可以通过这个标记来限定栈的使用次数
后面的数据基本相同,都是01 3F 07 A3 01,后面接入栈数据
可以推测,入栈后栈的前面有一个标记:00 00 0N 01 3F 07 A3 01,但是我仍然不知道这一串8个字节的数据代表什么

B、但是为什么要在入栈数据的8个储存单元前再存放一次入栈数据?

C、在测试2和测试5中使用了出栈命令,结果分别是:
2:00 00 34 12 34 12 00 00-03 01 3F 07 A3 01 00 00
5:00 00 00 65 87 65 87 00-00 05 01 3F 07 A3 01 00
可以看到,入栈前的标记从00 00 0N 01 3F 07 A3 01变成 入栈数据(1字)00 00 0N 01 3F 07 A3 01
N可能是使用栈命令的次数,00 00 0N 01 3F 07 A3 01这串栈前标记后羿了两个储存单元,把栈内数据覆盖掉,并且把该数据移到标记之前


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-2 08:54:28 | 显示全部楼层
学习下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-12 17:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表