焚琴煮鹤 发表于 2015-8-8 23:42:37

关于栈前的标记

刚刚看王爽的汇编语言,学到栈这一节,查看栈内数据的时候发现有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这串栈前标记后羿了两个储存单元,把栈内数据覆盖掉,并且把该数据移到标记之前


zhang99844 发表于 2015-9-2 08:54:28

学习下
页: [1]
查看完整版本: 关于栈前的标记