实验2

(1)

ax=3130
ax=6462
bx=3534
bx=6C6A
sp=00FE  修改的内存单元的地址是0100H(偏移地址) 内存为6462
sp=00FC  修改的内存单元的地址是00FEH(偏移地址)内存为6C6A
sp=00FE   ax=6C6A
sp=00FC   bx=6462  (ax和bx的值进行交换)
sp=00FE  修改的内存单元的地址是 0100  内存为3534
sp=00FC  修改的内存单元的地址是 00FE  内存为3736 

 

(2)

第一行 mov ax,2000

第二行 mov ss,ax

第三行 mov sp,10

因为在下面会有push指令,则首先会sp=sp-2,再把ax里存放的值入栈,所以这里的sp要为10,这样sp-2后栈顶指针才为2000:E。初始时栈顶为2000:E,栈底也为2000:E。

 

当用t命令在执行修改寄存器SS的指令时,下一条指令也紧接着被执行,所以当完成指令mov ss,ax后直接进行mov ax,3123. 用t命令进行调试时会产生终端。为了保护现场,CPU则先将标志寄存器进栈,再把当前CS的值进栈,最后将IP的值进栈。所以2000:0到2000:f中的内容会改变。

 

总结与体会

栈是一个特殊的存储空间,为先进后出,后进先出。用栈来暂存以后需要恢复的寄存器的内容时,要注意出栈和入栈的顺序。也可用来进行逆序复制。入栈指令push要注意,先进行sp=sp-2,再入栈。出栈指令pop却与其相反,先出栈,再sp=sp+2。这一点尤其要注意。入栈和出栈均是以字(等于两个字节)为单元。在使用时要自行控制栈顶超界的问题。

 

posted @ 2018-11-18 19:08  Sgolden  阅读(186)  评论(0编辑  收藏  举报