实验2 用机器指令和汇编指令编程

实验任务:

使用Debug,将下面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空。

(为了便于验证实验结果,对「2. 实验任务」中的(1)做如下两点调整:① 在使用 a 命令输入指令调试前,使用 e 命令将内存单元 0021:0 ~0021:7 连续 8 个字节数据修改为 30H, 31H, 32H, 33H,34H,35H,36H,37H  ② 将 P74 实验任务(1)中第 1行的 mov ax, ffff → 改为 mov ax, 0021)

实验结果:

mov ax,0021

mov ds,ax

mov ax,2200

mov ss,ax

mov sp,0100

mov ax,[0]    ;ax= 3130

add ax,[2]    ;ax= 6462

mov bx,[4]    ;bx= 3534

add bx,[6]    ;bx= 6c6A

push ax       ;sp= 00FEH ,修改的内存单元地址是 2200:00FE 内容为 6462H

push bx       ;sp= 00FCH ,修改的内存单元地址是 2200:00FC 内容为 6c6AH

pop ax        ;sp= 00FEH ,ax= 6c6AH

pop bx        ;sp= 0100H ,bx= 6462H

push [4]      ;sp= 00FEH ,修改的内存单元地址是 2200:00FE 内容为 3534

push [6]      ;sp= 00FCH ,修改的内存单元地址是 2200:00FC 内容为 3736

实验截图:

(2)仔细观察图3.19中的实验过程,然后分析:为什么2000:0~2000:f中的内容会发生改变?

 

第一行汇编指令功能:将2000送入AX寄存器

第二行:将ax的值赋给ss

第三行:将0100赋给ss

初始时栈顶和栈底分别是2000:0010和2000:000E。

并且2000:0~2000:f的内容发生改变是因为在debug使用t等指令引发了中断造成的,中断过程使用当前栈空间存放cpu关键数据,所以,你的栈里就有些不是你操作的数据了。

原文地址:https://www.cnblogs.com/Vincent12/p/9892635.html