AlunX 发表于 2018-6-8 23:04:33

debug单步出现没有的代码

在做实验9的时候代码如图,但单步到mov ss,ax后就出现db 60的代码,继续单步就卡死了,求大家解答一下。

13572044595 发表于 2018-6-9 09:15:38

最佳答案给我就可以了!{:5_91:}

AlunX 发表于 2018-6-9 09:44:17

13572044595 发表于 2018-6-9 09:15
最佳答案给我就可以了!

明白了。。。

57158597@qq.com 发表于 2018-6-9 09:50:31

你百度的答案对一半吧,cs的值不能用MOV改变,但SS的值是可以用MOV改变的。
首先不能用B800后的地址段做栈空间,用显存的地址做栈空间你也是第一个了,怪不得一堆显示乱码
还有你最好在mov ss,ax后面加一句mov sp,0设置栈顶指针,至于为什么要加这句等后期你就知道了,当然不设置影响也不大,看你需求吧

AlunX 发表于 2018-6-9 12:25:19

57158597@qq.com 发表于 2018-6-9 09:50
你百度的答案对一半吧,cs的值不能用MOV改变,但SS的值是可以用MOV改变的。
首先不能用B800后的地址段做栈 ...

首先感谢你的回答,其次下面是我结合你的回答的分析,希望你给点意见。
我不是把显存地址当做栈空间,我是想把ss当做数据段寄存器用,应该是mov ss,   的时候cpu把ss认作栈寄存器,修改了显存地址中的元素造成的。

57158597@qq.com 发表于 2018-6-10 09:05:00

想用mov对ss栈空间进行数据的读写是可以的,但你要很了解它的原理才行,不然你的数据会很混乱。
比如mov ss,ax,CPU执行这代码的时候会跟着连续执行这代码的下一行代码,你可以在DEBUG下单步试试看
这里是防止中断引起的栈空间混乱,让你在设置完栈空间后连着设置栈顶指针

用mov对栈空间进行数据的读写,要注意控制好SP的值,不然程序在运行的过程很容易数据混乱
总之想用mov对SS段地址进行操作你就必须很了解它,它可不像DS,ES那么单纯
页: [1]
查看完整版本: debug单步出现没有的代码