关于 8086汇编语言 “栈” 的一点疑惑
本帖最后由 孤不冷cing 于 2022-12-15 17:50 编辑纯属出于好奇问一下各位,没有答案的话我也不打算深究
操作环境为dosbox+debug
大致命令如下(我不知道怎么在dosbox里复制内容,看得清图片的话就看一下图片吧)
a 2000:0
mov ax,6666
push ax
mov ax,8888
push ax
r cs
2000
r ip
0
r ss
1000
r sp
20
t
t
d 1000:0 1f
t
t
d 1000:0 1f
问题:栈顶所指地址的前面大概10字节,总是这样一些数“xx xx 00 00 0n 00 00 20 a3 01”,并且他们会随着栈顶而移动
经过观察,“xx xx”就是上一次入栈的内容,“0n”则是“07”~“09”循环
有知道的大佬可以满足一下小白的好奇心吗(好奇心贼拉拉的浪费时间{:10_266:})
本帖最后由 孤不冷cing 于 2022-12-15 23:06 编辑
有办法删帖吗,我发现书后面有这个问题,是我想太多,想太前了,有点拖慢学习进度 本帖最后由 孤不冷cing 于 2022-12-15 23:09 编辑
试了一下,发现原本的说法有些错误
目前的发现是这样:
栈顶所指的字节的前10个字节,由低到高,分别为"AL"和"AH"、"BP"、“IP”、“CS”
最高的两字节的内容始终不变,且我多开debug测试,始终是A3、01,这与书上的9D、05不一致,不知道这两字节是什么内容
此外,
用“RIP”修改“IP”,相应内存的内容不会变,只有执行指令时,“IP”发生变化,内存里相应内容才会变化
进行入出栈操作,这些内容会随着栈顶的改变而移动,但是内容不会改变,且入栈时会覆盖低字节原本的内容,出栈时“AX”原本所占的位置的内容会留在原处不变,剩余部分右移
综上,我推测,可能是CPU将这些寄存器的值放在了“SP”所指的栈顶的低10字节,用于调用?查询?
或者说与书中提到的,后面的重点内容“中断”,有联系?
为了保护?应该不是,“IP”的内容一直在修改。
页:
[1]