汇编实验二
(1)使用DEBUG,将上面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空。
e 0021:0 0021:7 30H,31H,32H,33H,34H,34H,35H,36H,37H
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
以上是实验指令执行后结果
按照要求输入指令,使用a指令输入。
实验2 用机器指令和汇编指令编程
(2)仔细观察图3.19中的实验过程,然后分析:为什么2000:0~2000:F中的内容会发生改变?
输入指令
中断机制,Debug的T命令在执行修改寄存器SS的指令时,下一条指令也紧接着被执行。
后来查找资料,得知中断过程使用当前栈空间存放cpu关键数据,所以,你的栈里就有些不是所操作的数据。
mov ss,ax改变了栈堆段寄存器的内存地址。