一 实验目的和要求
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的值则可能引发其他位置的值发生对应的变化
我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!