6.可执行程序的调试 经汇编、连接生成的可执行程序在DS提示符后键 入文件名即可直接运行。如运行有错误,可使用 DEBUG 程序调试 键入命令: DEBUG LT301A.EXE 即可将程序调入内存,由 DEBUG控制。用户可使用 单步执行、断点执行等方法进行调试。 注意寻找数据段的方法
第 三 章 汇 编 语 言 程 序 格 式 16 程序的调试(1) 6.可执行程序的调试 经汇编、连接生成的可执行程序在DOS提示符后键 入文件名即可直接运行。如运行有错误,可使用DEBUG 程序调试。 键入命令:DEBUG LT301A.EXE 即可将程序调入内存,由DEBUG控制。用户可使用 单步执行、断点执行等方法进行调试。 注意寻找数据段的方法
7.程序在内存中的定位及如何寻找数据段 参考:①教材P76/例题3.1a:lt301a.aSm; ②教材P80/1t301a.asm的列表文件; ③教材P81/1t301a.asm的影像文件; ④教材P82/1t301a.exe由 DEBUG装入内存后的反 汇编结果以及使用R命令显示的寄存器值。 操作步骤: ①按P82 DEBUG装入内存后显示的寄存器值,由 DS=ES=14B4H可知,14B4为最低的可用的段地址,即程 序段前缀(PSP)的起始地址。 CS=14C4H为代码段的段地址,即14C40为整个程序 的起始地址;14C40相当于影像文件的0000H
第 三 章 汇 编 语 言 程 序 格 式 17 程序的调试(2) 7.程序在内存中的定位及如何寻找数据段 参考:①教材P76/例题3.1a:lt301a.asm; ②教材P80/lt301a.asm的列表文件; ③教材P81/lt301a.asm的影像文件; ④教材P82/lt301a.exe由DEBUG装入内存后的反 汇编结果以及使用R命令显示的寄存器值。 操作步骤: ①按P82 DEBUG装入内存后显示的寄存器值,由 DS=ES=14B4H可知,14B4为最低的可用的段地址,即程 序段前缀(PSP)的起始地址。 CS=14C4H为代码段的段地址,即14C40为整个程序 的起始地址;14C40相当于影像文件的00000H
语言翟席格 ②在反汇编结果中,第一条指令为 MOV DX,14C6, 在影像文件中已经显示 DGROUP的“ Origin”为0002:0, 所以将14C6(14C4+0002)作为DS的值。 ③数据段第一个数据的地址:在影像文件中显示 DATA段的“ Start”为00024H,14C40+00024=14C64,这 是数据段第一个数据的物理地址,由于DS=14c6,其逻 辑地址为14c6:0004,在数据段的偏移地址当然是 0004。从反汇编结果的第13条指令( MOV DX,0004)也 可以看出第一个数据的偏移地址为04
第 三 章 汇 编 语 言 程 序 格 式 18 程序的调试(3) ②在反汇编结果中,第一条指令为MOV DX,14C6, 在影像文件中已经显示DGROUP的“Origin”为0002:0, 所以将14C6(14C4+0002)作为DS的值。 ③数据段第一个数据的地址:在影像文件中显示: DATA段的“Start”为00024H,14C40+00024=14C64,这 是数据段第一个数据的物理地址,由于DS=14C6,其逻 辑地址为14C6:0004,在数据段的偏移地址当然是 0004。从反汇编结果的第13条指令(MOV DX,0004)也 可以看出第一个数据的偏移地址为04
④教材82页SS=14C8: 14C40为整个程序的起始地址,81页的影像文件 显示: STACK段的“ Start”=00040h, 14c40h+00040h=14c80h,取高4位,即SS=14C8H。 这是未调整的堆栈段的段地址。 ⑤82页显示SP=0400:影像文件反映起始地址为 00040H,末地址为0043FH,长度为0400H(堆栈段默认 长度1024字节,16进制数为0400);堆栈区可表示成 14C8:0~03FF设置SP=0400,则入栈时第一个数据 将占用14c8:03FE和03FF单元,显然,SP的值应等于 堆栈区的长度值。 SP=040OH是未调整的堆栈指针。 返回3.1 返回第三章
第 三 章 汇 编 语 言 程 序 格 式 19 程序的调试(4)(end) ④教材82页SS=14C8: 14C40为整个程序的起始地址,81页的影像文件 显示:STACK段的“Start”=00040h, 14c40h+00040h=14c80h,取高4位,即SS=14C8H。 这是未调整的堆栈段的段地址。 ⑤82页显示SP=0400:影像文件反映起始地址为 00040H,末地址为0043FH,长度为0400H(堆栈段默认 长度1024字节,16进制数为0400);堆栈区可表示成 14C8:0~03FF。设置SP=0400,则入栈时第一个数据 将占用14C8:03FE和03FF单元,显然,SP的值应等于 堆栈区的长度值。 SP=0400H是未调整的堆栈指针。 返回3.1 返回第三章
3.2参数、变量和标号 3.2.1数值型参数 常数、数值表达式、运算符及运算符 的优先级 3.2.2变量定义伪指令 3.2.3变量和标号的属性 变量和标号的三种属性、属性操作符 返 回第三章
第 三 章 汇 编 语 言 程 序 格 式 20 3.2(目录)参数、变量和标号 3.2 参数、变量和标号 3.2.1 数值型参数 常数、数值表达式、运算符及运算符 的优先级 3.2.2 变量定义伪指令 3.2.3 变量和标号的属性 变量和标号的三种属性、属性操作符 返回第三章