实验任务
(1)使用debug,将下面的程序段写入内存,逐条执行。
实验前先修改0021:0-0021:7的值为30 31 32 33 34 35 36 37
程序段如下:
mov ax,0021
mov ds,ax
mov ax,2000
mov ss,ax
mov sp,0100
mov ax.[0]
add ax,[2]
mov bx,[4]
add bx,[6]
push ax
push bx
pop ax
pop bx
push [4]
push [6]
在实验之前,我对各值做了预想,结果如下:


用d命令查看 从0021:0开始的8个内存单元的内容
再用e命令修改值为 30 31 32 33 34 35 36 37
再次查看从0021:0开始的8个内存单元的内容

用r命令查看ax,bx,sp最初的值,以做比较
使用a命令,输入代码段

T命令单步执行
ax 赋值0021
ds 赋值0021
修改ax值2200
ss赋值2200
ip赋值0100

ax赋值3130
ax加上[2]的内容为6462(3130+3332)
bx赋值3536
bx加上[6]的内容6C6A (3534+3736 )
ax入栈,sp=00FE;修改内存单元的地址是2200:00FE内容为6462
[粗体字为所需填空内容,实际电脑运行出来的值]


bx入栈,sp=00FC;修改内存单元的地址是2200:00FC内容为6C6A
ax出栈,sp=00FE,ax=6C6A
bx出栈,sp=0100,bx=6462
内存单元[4]进栈,sp=00FE.;修改内存单元的地址是2200:00FE内容为3534
内存单元[6]进栈,sp=00FC.;修改内存单元的地址是2200:00FC内容为3736
[粗体字为所需填空内容,实际电脑运行出来的值]
所有结果与初步猜想一致
(2)

用a命令,输入图上指令
E命令修改从2000:0开始的16个内容为0
再用d命令查看2000:0开始的16个的内容
R命令查看各寄存器的初始值以做比较

t命令,单步执行mov ax,2000,此时ax的值改为2000
t命令,单步执行mov ss,ax,此时ss的值改为2000,2000:0-2000:f的值全部为0,mov sp,10指令在mov ss,ax执行完后紧接着执行了,ip值改为了0010,此时2000:0-2000:f的值为00 00 00 00 00 00 00 20-00 00 08 01 3F 07 A3 01
t命令,单步执行mov ax,3123,ax值改为3123,此时2000:0-2000:f的值为00 00 00 00 00 00 23 31-00 00 0B 01 3F 07 A3 01

t命令,单步执行push ax,此时2000:0-2000:f的值为00 00 00 00 23 31 00 00-0C 01 3F 07 A3 01 23 31
t命令,单步执行mov ax,3366,ax值改为3366,此时2000:0-2000:f的值为00 00 00 00 66 33 00 00-0F 01 3F 07 A3 01 23 31
t命令,单步执行push ax,此时2000:0-2000:f的值为00 00 66 33 00 00 10 01- 3F 07 A3 01 66 33 23 31
刚开始栈顶地址为2000:0010
push a后,栈顶为2000:000E
再次push a后,栈顶为2000:000C
2000:0-2000:f的内容变化如下:
00 00 00 00 00 00 00 20-00 00 08 01 3F 07 A3 01
00 00 00 00 00 00 23 31-00 00 0B 01 3F 07 A3 01
00 00 00 00 23 31 00 00-0C 01 3F 07 A3 01 23 31
00 00 00 00 66 33 00 00-0F 01 3F 07 A3 01 23 31
00 00 66 33 00 00 10 01- 3F 07 A3 01 66 33 23 31
因为在debug中使用了t命令,导致2000:0-2000:f的内容发生了变化
总结与体会
1.在汇编中,可以用ds来存放段地址,例:
d 1000:0命令查看1000:0开始的内容,可以写成d ds:0
e 1000:0 11 22 33 44 55 66可以写成e ds:0 11 22 33 44 55 66
a ds:0命令则表示向从1000:0开始的内存单元写入指令
[D\E\A\U这些可以带有内存单元地址的命令中,可以用段寄存器表示内存单元的段地址]
2.mov ss,ax\ mov ss,bx\ mov ss,[0]\ pop ss(修改栈段寄存器ss的指令)等指令在用t命令单步调试的时候,会直接执行其下一条指令
浙公网安备 33010602011771号