实验 2 用机器指令和汇编指令编程
实验结论
实验任务(1)
1.使用 e 命令修改 0021:0~0021:f 数据,及修改后查看是否正确写入的操作
2.使用 a 命令输入指令
3.每一行指令单步调试
4.指令执行后各个寄存器存值情况
mov ax,[0]; ax=3130H
add ax,[2]; ax=6462H
mov bx[4]; bx=3534H
add bx,[6]; bx=6C6AH
push ax; sp=00FEH;修改的内存单元的地址是2200:FE,内容为3130H
push bx; sp=00FCH;修改的内存单元的地址是2200:FC,内容为6462H
pop ax; sp=00FEH;ax=6C6AH
pop bx; sp=0100H;bx=6462H
push [4]; sp=00FEH;修改的内存单元的地址是2200:FE,内容为3534H
push [6]; sp=00FCH;修改的内存单元的地址是2200:FC,内容为6C6AH
5.发现:在执行"mov ss,ax"后,直接执行了“mov ax,[0]”,跳过了“mov sp,0100”。
原因:Debug的T命令在执行修改寄存器SS的指令时,下一条指令也紧接着被执行。
实验任务(2)
1.使用 a命令输入7行指令,使用 e 命令修改 2000:0~2000:f 的值,查看修改后的部分
mov ax,2000; 将数字2000H存入寄存器ax中
mov ss,ax; 将存在寄存器ax中的数字2000H存入栈段寄存器ss中
mov sp,10; 将数字10H存入栈地址寄存器sp中
初始栈顶为2000:0010,初始栈底为2000:0010。
2.单步调试每一行汇编指令,且每一条指令单步调试后,都使用 d 命令查看2000:0~2000:f 的值
执行“mov ss,ax”后,内存2000:0到2000:f中的值变了后9个,之后每执行一条指令,内存2000:0到2000:f中的值变化量增加一个。
总结与体会
通过本次实验,我基本了解了栈的原理和基本操作。同时,我还发现了:Debug的T命令在执行修改寄存器SS的指令时,下一条指令也紧接着被执行。