王爽汇编+15

进入了debug的学习,王老师书中用的是win2000下的debug,我这是在2020年,这样的系统已经被淘汰,所以我只能用模拟器,电脑端的模拟器不方便随时随地学习,所以我使用的是手机端的模拟器:安卓dos模拟器,模拟器如下图

%title插图%num

学习需要实践,所以开始实践

%title插图%num

先准备好了代码一会儿执行,我这里由于是模拟器所以会跟王老师win2000下看到的debug初始化的寄存器数据有区别,但没关系,不影响学习。

%title插图%num

接下来开始单步执行查看寄存器中的数据的变化情况

mov ax,[0]之前ax=2200 ds:[0]=5bea

所以mov ax,[0]之后ax=5bea

%title插图%num

接着要执行的指令是add ax,[2]

执行前ax=5bea ds:[2]=00e0

执行后ax=5cca

%title插图%num

接着要执行的指令是mov bx,[4]

执行之前bx=0000 ds:[4]=30f0

执行后bx=30f0

%title插图%num

接着要执行的指令是adx bx,[6]

执行前bx=30f0 ds:[6]=2f31

执行后bx=6021

%title插图%num

接着要执行的指令是push ax

执行前ax=5cca bx=6021 ss=2500 sp=0100

执行后sp=00fe

%title插图%num

接着要执行的指令是push bx

执行前bx=6021 ax=5cca ss=250 sp=00fe

执行后sp=00fc

%title插图%num

接着要执行的指令是pop ax

执行前ax=5cca bx=6021 ss:sp=6021

执行后ax=6021 bx=6021 ss=2200 sp=00fe

%title插图%num

接着要执行的指令是pop bx

执行前ax=6021 bx=6021 ss:sp=5cca

执行后ax=6021 bx=5cca sp=0100

%title插图%num

接着要执行的指令是push [4]

执行前ax=6021 bx=5cca ds=ffff ss=2200 sp=0100

执行后sp=00fe

%title插图%num

最后要执行的指令是push [6]

执行前sp=00fe

执行后sp=00fc

%title插图%num

如上就是整个过程,很有意思,只要不要混淆了push和pop的时候sp分别是加还是即可。

发表回复