微机原理与接口技术 微机原理与接口技术 朱华贵 2015年10月30日
微机原理与接口技术 汇编语言程序上机调试 朱华贵 2015年10月30日
4.5汇编语言程序的上机过程 4.5.1上机环境 要运行调试汇编语言程序,至少需要以下程序文件: 编辑程序:EDIT.COM或其他文本编辑工具软件,用于编辑源程序。 汇编程序:MASM.EXE,用于汇编源程序,得到目标程序。 连接程序:LINK.EXE,用于连接目标程序,得到可执行程序。 调试程序:DEBUG.EXE,用于调试可执行程序。
4.5.2上机过程 汇编语言程序上机操作包括:编辑、汇编、连接和调试几个阶段。 1.编辑源程序 用文本编辑软件创建、编辑汇编源程序。常用编辑工具有:EDIT.COM、记事本、Word等。 无论采用何种编辑工具,生成的文件必须是纯文本文件,所有字符为半角,且文件扩展名为.asm(文件名不分大小写,由1~8个字符组成)。
4.5.2上机过程(续) 2.汇编 用汇编工具对上述源程序文件(.asm)进行汇编,产生目标文件(.obj)等文件。 汇编程序的主要功能是:检查源程序的语法,给出错误信息;产生目标程序文件;展开宏指令。
4.5.2上机过程(续) 汇编过程如下: 在DOS状态下,输入命令:MASM MYFILE.ASM(回车),即启动了汇编程序。 此命令执行后,会出现下面的3行信息,依次按回车键(即选择默认值)即可建立3个输出文件,其扩展名分别为:.OBJ(目标文件),.LST(列表文件)和.CRF(交叉引用文件)。 Object Filename [MYFILE.OBJ]: Source Listing [Nul.LST]: Cross Reference [Nul.CRF]:
4.5.2上机过程(续) 如果汇编过程中发现有语法错误,则屏幕上会显示出错语言的位置和出错的类型。此时,需要进行修改,然后再进行汇编。 如此进行,直至汇编无错误,得到目标文件为止。
4.5.2上机过程(续) 3.连接 汇编产生的目标文件(.obj)并不是可执行的程序,还要用连接程序把它转换为可执行的EXE文件。连接过程如下: 在DOS状态下,输入命令:LINK MYFILE.OBJ(回车),即可完成连接。 与汇编过程类似,如果连接过程中出错,那么程序会在屏幕上显示提示信息。此时,需要对源程序进行查错、修改,然后再进行汇编、连接,直至连接无错误,得到可执行文件为止。
4.5.2上机过程(续) 4.程序运行 在DOS提示符下输入可执行程序的文件名即可运行程序。若程序能够运行但不能得到预期结果,则就需要检查源程序,改错后再汇编、连接、运行。 5.程序调试 在程序运行阶段,有时不容易发现问题,尤其是碰到复杂的程序更是如此,这时就需要使用调试工具进行动态查错。常用的动态调试工具为DEBUG。
4.5.3 运行调试 DEBUG是为汇编语言设计的一种调试工具,它通过单步、设置断点等方式为汇编语言程序员提供了非常有效的调试手段,它可以直接调试COM文件和EXE文件。 DEBUG状态下的所有数据都采用十六进制形式显示,无后缀H。
4.5.3 运行调试(续) 1.DEBUG的运行 在DOS状态下,输入下列命令之一,就可以进入DEBUG调试状态。 进入DEBUG调试状态后,将显示提示符“-”,此时,可输入所需的DEBUG命令。
调试程序DEBUG DEBUG是常用的汇编语言级调试工具,为汇编语言程序员提供了分析指令、跟踪程序的有效手段。 常用DEBUG命令: -A 汇编 -U 反汇编 -T 单步执行 -G 断点执行 -D 数据显示 -R 寄存器
4.5.3 运行调试-DEBUG的主要命令 (1)显示内存单元内容的命令D 格式为:-D [地址] 或 -D [范围] 例如,显示指定范围(DS:100~DS:1FF)内存单元内容的命令是: -D 100 10F 这里没有指定段地址,D命令自动显示DS段的内容。
4.5.3 运行调试-DEBUG的主要命令 (2)修改内存单元内容的命令E 格式一:用给定内容代替指定范围的单元内容 -E 地址 内容表 例如,-E DS:100 F3 58 59 5A 8D 格式二:逐个单元相继地修改 -E 地址 例如: -E DS:100↙ 18E4:0100 89.78 ↙ 此命令是将0100单元内容89改为78。 78是程序员从键盘输入的。 程序员在修改完一个单元后,可按空格键继续修改下一单元内容,直至按回车键结束该命令。
4.5.3 运行调试-DEBUG的主要命令 (3)检查和修改寄存器内容的命令R 格式一:显示CPU内部所有寄存器内容和标志寄存器中的各标志位状态 -R 格式二:显示和修改某个指定寄存器内容 -R寄存器名 例如:-R AX 格式三:显示和修改标志寄存器内容 -RF
4.5.3 运行调试-DEBUG的主要命令 (4)运行命令G 格式为:-G [=地址1][地址2[地址3…]] 其中,地址1指定了运行的起始地址,后面的均为断点地址。当指令执行到断点时,就停止执行并显示当前所有寄存器及标志位的内容和下一条要执行的指令。
4.5.3 运行调试-DEBUG的主要命令 (5)跟踪命令T 格式一:逐条指令跟踪 -T[=地址] 该命令从指定地址起执行一条指令后停下来,显示所有寄存器及标志位的内容。若未指定地址,则从当前的CS:IP开始执行。 格式二:多条指令跟踪 -T[=地址][值] 该命令从指定地址起执行n条指令后停下来,n由[值]确定。
4.5.3 运行调试-DEBUG的主要命令 (6)汇编命令A 格式为:-A [地址] 该命令允许输入汇编语言语句,并能把它们汇编成机器代码,相继地存放在从指定地址开始的存储区中。必须注意:输入的数字均默认为十六进制数。
4.5.3 运行调试-DEBUG的主要命令 (7)反汇编命令U 格式一:从指定地址开始,反汇编32字节 -U [地址] 格式二:对指定范围内的存储单元进行反汇编 -U [范围]
4.5.3 运行调试-DEBUG的主要命令 (8)执行命令P 格式为:-P [=地址] [指令数] 该命令控制CPU执行指定地址处的指令。若指定了指令数,则CPU执行从指定地址开始的若干条指令。若未指定地址和指令数,则CPU执行由(CS:IP)指定地址处的一条指令。 P命令与T命令的差别在于P命令把子程序调用(CALL)、重复字符串指令(REP)或软件中断(INT)当成一条指令来执行,简化了跟踪过程。
4.5.3 运行调试-DEBUG的主要命令 (9)退出DEBUG命令Q 格式为:-Q 该命令退出DEBUG程序,返回DOS。 如:ES: MOV AX,[BX]
4.5.3 运行调试-DEBUG使用说明 ① 在DEBUG中的提示符“-”下才能输入命令,在按回车键后,该命令才开始执行。 ② 命令是单个字母,命令和参数的大小写可混合输入。 ③ 命令和参数、参数和参数之间要用空格、逗号或制表符等分隔。 ④ 可以用“段值:偏移量”的形式来表示地址,也可以用段寄存器来代表“段值”。例如,1000:0,DS:10,CS:30等。
4.5.3 运行调试-DEBUG使用说明(续) ⑤ 范围:用来表示地址范围,从哪个地址开始,到哪个地址结束。它有两种表示方式。 地址 地址——前者表示起始地址,要用“段值:偏移量”来表达,后者表示终止地址,只用“偏移量”来表示。 地址 长度——前者表示起始地址,要用“段值:偏移量”来表达,后者表示该区域的大小,用字母“L”开头的数值来表示。 例如: 100:50 100 100:50 L100
4.5.3 运行调试-DEBUG使用说明(续) ⑥ 当命令出现语法错误时,将在出错位置显示"^ Error"。 ⑦ 可用组合键Ctrl+C或Ctrl+Break来终止当前命令的执行,还可用组合键Ctrl+S来暂停屏幕显示(当连续不断地显示信息时)。
5、标志寄存器FR 状态标志的状态表示在PC 中,可由调试程序(DEBUG)显示出来。 对应符号如下表所示: 标志位名 为1对应符 为0对应符 OF DF IF SF ZF AF PF CF OV DN EI NG ZR AC PE CY NV UP DI PL NZ NA PO NC