王爽汇编+15
进入了debug的学习,王老师书中用的是win2000下的debug,我这是在2020年,这样的系统已经被淘汰,所以我只能用模拟器,电脑端的模拟器不方便随时随地学习,所以我使用的是手机端的模拟器:安卓dos模拟器,模拟器如下图
学习需要实践,所以开始实践
先准备好了代码一会儿执行,我这里由于是模拟器所以会跟王老师win2000下看到的debug初始化的寄存器数据有区别,但没关系,不影响学习。
接下来开始单步执行查看寄存器中的数据的变化情况
mov ax,[0]之前ax=2200 ds:[0]=5bea
所以mov ax,[0]之后ax=5bea
接着要执行的指令是add ax,[2]
执行前ax=5bea ds:[2]=00e0
执行后ax=5cca
接着要执行的指令是mov bx,[4]
执行之前bx=0000 ds:[4]=30f0
执行后bx=30f0
接着要执行的指令是adx bx,[6]
执行前bx=30f0 ds:[6]=2f31
执行后bx=6021
接着要执行的指令是push ax
执行前ax=5cca bx=6021 ss=2500 sp=0100
执行后sp=00fe
接着要执行的指令是push bx
执行前bx=6021 ax=5cca ss=250 sp=00fe
执行后sp=00fc
接着要执行的指令是pop ax
执行前ax=5cca bx=6021 ss:sp=6021
执行后ax=6021 bx=6021 ss=2200 sp=00fe
接着要执行的指令是pop bx
执行前ax=6021 bx=6021 ss:sp=5cca
执行后ax=6021 bx=5cca sp=0100
接着要执行的指令是push [4]
执行前ax=6021 bx=5cca ds=ffff ss=2200 sp=0100
执行后sp=00fe
最后要执行的指令是push [6]
执行前sp=00fe
执行后sp=00fc
如上就是整个过程,很有意思,只要不要混淆了push和pop的时候sp分别是加还是即可。