本帖最后由 丨一灬一丨 于 2021-11-2 10:33 编辑
最近在学汇编,看王爽的书。(为此在鱼C论坛办了至尊会员,可惜十一假期的求助到现在还没人回复我。所以本着广撒网多捕鱼的原则,把我的求助搬到吾爱来。)
学到栈段了,在看例题的时候,比如10010H~1001FH 作为栈段,
经常给 SS 赋值 1000H。
为了测试多出的push 会被送到哪,用 debug 做了测试,结果是入栈到了 0000 之后 会在 相同 SS 的 FFFE 开始继续入栈,得出结论是因为不能改 SS,所以8086的栈在 sp 的范围 0~FFFFH之间是个大循环。
这时突然想到,如果给 SS 赋值 1001H 会发生什么?// 测试的代码
测试代码
// ss=1001H
// sp=10H
// 按照我的想法,现在的SS:SP 会指向 10020 应该从这开始入栈
结果1
// 结果没问题,确实从1000:001E 开始入栈
// 接下来有疑问
结果2
// 多出的 PUSH 往 2000:0 那里入栈一行(16字节)后才去 1000:FFF0 入栈的
// 这是什么原理呢 刚才结论不是不能修改SS么,为什么指向1001H 会跑到2000H入栈?
// 这里让我十分不解
// 后面补上 调试过程
调试过程
// 可以看到调试过程中 SP 没有指向 2000E 2000C 之类的 而是按照之前的结论到 0000 (1000:0000) 之后,又到 FFFE (1000:FFFE) 去了
// 那为什么我的数据会出现 在2000:0~ 2000F 这一行呢?
|