汇编语言(王爽)实验三 编程、编译、连接、跟踪
2013-07-29 20:46
579 查看
(1)将下面程序保存为t1.asm,生成可执行文件t1.exe。
(2)用debug跟踪t1.exe的执行过程,写出每一步执行后,相关寄存器中的内容和栈顶内容。
step 0:通过debug t1.exe加载程序后:
ax=0000H;bx=0000H;
cx=0016H(表示程序长度,为22个字节);
ds=13D5H(表示操作系统给t1.exe分配的空闲区域的段地址);
cs=13e5H(=ds+10H,与之前描述一致);
ss=13e5H,sp=0000H;通过d 13e5:0 1命令查看栈顶内容,为00b8H;
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/06/3abf472759a50a63bff3582e60442740.jpg)
step1:单步执行第一条指令后:
ax=2000H;bx=0000H;
其余cx,ds,cs,ss,sp均不变;
此时栈顶内容理应不变,查看依旧为00b8H;
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/06/f4119ee51d7cd0c6ea8955ccd52bcbb1.jpg)
step2:单步执行第二条指令后,自动连带执行第三条指令:
ax=2000H;bx=0000H;
其余cx,ds,cs均不变;ss和sp被重置,栈顶指向:2000:0,查看栈顶内容,为:0ff1H;
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/06/b1a95e10afa5b356be80dc7bf5cc74d9.jpg)
step3:单步执行第四条指令后:
ax=2000H;bx=0000H;
其余cx,ds,cs,ss均不变;sp被重置,栈顶指向:2000:0a,查看栈顶内容,为:615fH;
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/06/04826fb8dd33818dbf7b2de4a262021b.jpg)
step4:单步执行第五条指令后:
ax=615fH(与上一步所得一致);bx=0000H;
其余cx,ds,cs,ss均不变;sp=sp+2,栈顶指向:2000:0c,查看栈顶内容,为:0DF0H;
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/06/b5358d9031af313663237dbd777ae3d0.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/06/a1d223e982d9a232497110b3d664b517.jpg)
----------因重新debug,导致前后ax不一致-----------
step5:单步执行第六条指令后:
ax=13e5H;bx=0DF0H(与上一步所得一致);
其余cx,ds,cs,ss均不变;sp=sp+2,栈顶指向:2000:0E,查看栈顶内容,为:0B16H;
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/06/3f631fb94c459d4a02890850440e1041.jpg)
step6:单步执行第七条指令后:
ax=13e5H;bx=0DF0H;
其余cx,ds,cs,ss均不变;sp=sp-2,栈顶指向:2000:0C,查看栈顶内容,为:13E5H(与AX一致);
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/06/a3a2a897e510a969e2d71156729ca927.jpg)
step7:单步执行第八条指令后:
ax,bx,cx,ds,cs,ss均不变;sp=sp-2,栈顶指向:2000:0A,查看栈顶内容,为:0DF0H(与BX一致);
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/06/4458efcae0cdf7f6810722586f59cac3.jpg)
step8:单步执行第九条指令后:
ax=0DF0H(与上步查看一致);
bx,cx,ds,cs,ss均不变;sp=sp+2,栈顶指向:2000:0C,查看栈顶内容,为:13E5H;
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/06/2a0a70f81e1b6b918a92a7f4e6c0261b.jpg)
step9:单步执行第十条指令后:
bx=13E5H(与上步查看一致);
ax,cx,ds,cs,ss均不变;sp=sp+2,栈顶指向:2000:0E,查看栈顶内容,为:0B16H;
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/06/fd7ad7e458abe7c4871b90937060f6fc.jpg)
(3)PSP头两个字节为CD 20,用debug加载t1.exe.查看PSP内容:
PSP区域地址范围为:ds:0~ds:ff.
assume cs:codesg codesg segment mov ax,2000H mov ss,ax mov sp,0 add sp,10 pop ax pop bx push ax push bx pop ax pop bx mov ax,4c00H int 21H codesg ends end
(2)用debug跟踪t1.exe的执行过程,写出每一步执行后,相关寄存器中的内容和栈顶内容。
step 0:通过debug t1.exe加载程序后:
ax=0000H;bx=0000H;
cx=0016H(表示程序长度,为22个字节);
ds=13D5H(表示操作系统给t1.exe分配的空闲区域的段地址);
cs=13e5H(=ds+10H,与之前描述一致);
ss=13e5H,sp=0000H;通过d 13e5:0 1命令查看栈顶内容,为00b8H;
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/06/3abf472759a50a63bff3582e60442740.jpg)
step1:单步执行第一条指令后:
ax=2000H;bx=0000H;
其余cx,ds,cs,ss,sp均不变;
此时栈顶内容理应不变,查看依旧为00b8H;
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/06/f4119ee51d7cd0c6ea8955ccd52bcbb1.jpg)
step2:单步执行第二条指令后,自动连带执行第三条指令:
ax=2000H;bx=0000H;
其余cx,ds,cs均不变;ss和sp被重置,栈顶指向:2000:0,查看栈顶内容,为:0ff1H;
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/06/b1a95e10afa5b356be80dc7bf5cc74d9.jpg)
step3:单步执行第四条指令后:
ax=2000H;bx=0000H;
其余cx,ds,cs,ss均不变;sp被重置,栈顶指向:2000:0a,查看栈顶内容,为:615fH;
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/06/04826fb8dd33818dbf7b2de4a262021b.jpg)
step4:单步执行第五条指令后:
ax=615fH(与上一步所得一致);bx=0000H;
其余cx,ds,cs,ss均不变;sp=sp+2,栈顶指向:2000:0c,查看栈顶内容,为:0DF0H;
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/06/b5358d9031af313663237dbd777ae3d0.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/06/a1d223e982d9a232497110b3d664b517.jpg)
----------因重新debug,导致前后ax不一致-----------
step5:单步执行第六条指令后:
ax=13e5H;bx=0DF0H(与上一步所得一致);
其余cx,ds,cs,ss均不变;sp=sp+2,栈顶指向:2000:0E,查看栈顶内容,为:0B16H;
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/06/3f631fb94c459d4a02890850440e1041.jpg)
step6:单步执行第七条指令后:
ax=13e5H;bx=0DF0H;
其余cx,ds,cs,ss均不变;sp=sp-2,栈顶指向:2000:0C,查看栈顶内容,为:13E5H(与AX一致);
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/06/a3a2a897e510a969e2d71156729ca927.jpg)
step7:单步执行第八条指令后:
ax,bx,cx,ds,cs,ss均不变;sp=sp-2,栈顶指向:2000:0A,查看栈顶内容,为:0DF0H(与BX一致);
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/06/4458efcae0cdf7f6810722586f59cac3.jpg)
step8:单步执行第九条指令后:
ax=0DF0H(与上步查看一致);
bx,cx,ds,cs,ss均不变;sp=sp+2,栈顶指向:2000:0C,查看栈顶内容,为:13E5H;
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/06/2a0a70f81e1b6b918a92a7f4e6c0261b.jpg)
step9:单步执行第十条指令后:
bx=13E5H(与上步查看一致);
ax,cx,ds,cs,ss均不变;sp=sp+2,栈顶指向:2000:0E,查看栈顶内容,为:0B16H;
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/06/fd7ad7e458abe7c4871b90937060f6fc.jpg)
(3)PSP头两个字节为CD 20,用debug加载t1.exe.查看PSP内容:
PSP区域地址范围为:ds:0~ds:ff.
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/06/d45cc502c0c7d949bbe09a7e3cd9e28f.jpg)
相关文章推荐
- 汇编语言 王爽(第三版) 实验3 编程、编译、连接、跟踪
- 汇编语言(王爽)实验三 编程、编译、连接、跟踪
- 汇编语言:实验三 编程、编译、连接、跟踪
- 汇编试验三:编程、编译、连接、跟踪
- 汇编语言 第三版 王爽 实验9 根据材料编程
- 汇编语言(王爽)--实验9根据材料编程
- 王爽 汇编语言第二版 实验9 根据材料编程 代码及分析
- 汇编语言(王爽第三版)实验9根据材料编程
- 王爽 汇编语言第二版 实验9 根据材料编程 代码及分析
- 实验3 编程、编译、连接、跟踪
- 汇编语言:实验10 根据材料编程—2.解决除法溢出的问题
- 汇编语言 第三版 王爽 实验四
- 王爽 汇编语言 实验十 2、数值显示
- 汇编语言:实验一 查看CPU和内存,用汇编指令和机器指令编程
- 王爽 汇编语言 实验九
- 汇编语言--王爽--实验9 子程序
- 汇编语言王爽 实验10.1
- 王爽 汇编语言 第三版 实验10 编写子程序
- 王爽汇编语言第六章学习笔记和实验五答案
- 汇编语言 王爽(第三版) 实验九