1、熟悉并掌握debug工具的使用;
2、理解8086CPU的工作过程;
3、理解8086CPU的栈机制,掌握栈的使用。
Debug
(1).使用debug,将给定的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空。
mov ax,ffff
mov ds,ax
mov ax,2200
mov ss,ax
mov sp,0100
mov ax,[0] ;ax=C0EAH
add ax,[2] ;ax=C0FCH
mov bx,[4] ;bx=30F0H
add bx,[6] ;bx=6021H
push ax ;sp=00FEH; 修改的内存单元地址是0100H内容为C0FCH
push bx ;sp=00FCH; 修改的内存单元地址是00FEH内容为6021H
pop ax ;sp=00FEH; ax=6021H
pop bx ;sp=0100H; bx=C0FCH
push [4] ;sp=00FEH; 修改的内存单元地址是0100H内容为30F0H
push [6] ;sp=00FCH; 修改的内存单元地址是00FEH内容为2F31H
在debug里面运行截图
(2).仔细观察图下图的实验过程,然后分析:为什么2000:0~2000:f中的内容发生改变
(1).第一条指令使ax的内容修改为ffff,然后使ds指向ax,再通过ax将ss修改为2200,sp修改为0100再将ax改为0地址字单元对应的内容,ax的值再加上2地址字单元对应的值,bx的值修改为4地址字单元对应的值,bx的值再加上6地址字单元对应的值;最后将ax,bx的值 push进栈,再把ax,bx pop出栈,最后再把4地址字单元和6地址字单元对应的值push进栈;由于进栈的话sp的值会-2,出栈的时候,sp的值会+2由此可以得出每执行一步对应寄存器的值如上
(2).我感觉由于修改了ss的值则可能引发其他位置的值发生对应的变化
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。