王爽汇编+19

说几句题外话,每天坚持打卡王爽汇编是种态度,贵在坚持,自己给自己加油

回到正题,让我们一起来做一下第四章结尾的实验

%title插图%num

实验第一题,下图已经是成品,没有截编译和链接的过程图

%title插图%num

实验第二题

这个实验实际上是交换ax和bx寄存器的值,我这边用的是安卓dos模拟器,过程如下

首先看看debug加载程序时各寄存器的初始状态

%title插图%num

如上图我仅挑几个重要的寄存器,ax=ffff bx=0000 cx=0016 ds=075a ss=0769 sp=0000 cs=076a ip=0000

单步执行mov ax,2000h,执行后

ax=2000 bx=0000 cx=0016 ds=075a ss=0769 sp=0000 cs=076a ip=0003

接着继续单步执行mov ss,ax,执行后

ax=2000 bx=0000 cx=0016 ds=075a

ss=2000 sp=0000 cs=076a ip=0008

此处mov sp,0000被一起执行了,所以ip变成了8

继续单步执行此时,此时由于mov sp,0000在上一步紧跟着执行了,所以当前执行的是add sp,0010,执行完毕后

ax=2000 bx=0000 cx=0016 ds=075a ss=2000 sp=0010 cs=076a ip=000b

再继续单步执行pop ax,执行后

ax=076a bx=0000 cx=0016 ds=075a ss=2000 sp=0012 cs=076a ip=000c

继续单步执行pop bx,执行后

ax=076a bx=01a3 cx=0016 ds=075a

ss=2000 sp=0014 cs=076a ip=000d

继续单步执行push ax,执行后

ax=076a bx=01a3 cx=0016 ds=075a

ss=2000 sp=0012 cs=076a ip=000e

继续单步执行push bx,执行后

ax=076a bx=01a3 cx=0016 ds=075a

ss=2000 sp=0010 cs=076a ip=000f

继续单步执行pop ax,执行后

ax=01a3 bx=01a3 cx=0016 ds=075a

ss=2000 sp=0012 cs=076a ip=0010

继续单步执行pop bx,执行后

ax=01a3 bx=076a cx=0016 ds=075a

ss=2000 sp=0014 cs=076a ip=0011

实验第三题

发现原来psp里最开始存放的是当前栈段段地址,cs代码段段地址,IP偏移地址这些信息

%title插图%num

发表回复