王爽汇编+19
说几句题外话,每天坚持打卡王爽汇编是种态度,贵在坚持,自己给自己加油
回到正题,让我们一起来做一下第四章结尾的实验
实验第一题,下图已经是成品,没有截编译和链接的过程图
实验第二题
这个实验实际上是交换ax和bx寄存器的值,我这边用的是安卓dos模拟器,过程如下
首先看看debug加载程序时各寄存器的初始状态
如上图我仅挑几个重要的寄存器,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偏移地址这些信息