《2022年2022年汇编步骤和Debug使用方法 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年汇编步骤和Debug使用方法 .pdf(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1 实验预备知识汇编程序的建立与调试一、 汇编程序的建立1. 使用工具(1)EDIT,记事本等文本编辑软件, 编辑源程序, 保存为 .asm文件;(2)ASM,MASM 汇编程序,对源程序进行汇编,生成.obj 文件-目标文件,以及调试用 .LST-列表文件和 .CRF-交叉引用表;(3)Link 连接程序,对使用的目标文件和库文件进行连接,生成.exe文件,同时调试用 .map-地址映像文件;如果源程序无语法错误,上述三步将生成可运行的.exe文件,如果运行结果无误,则完成对汇编程序的编程,如果运行后结果存在错误,需要进行调试。(4)Debug 调试程序,对 .exe文件进行调试,修改,直到
2、程序正确。图 3 目标程序生成步骤图2. 编程过程(1)用文本编辑软件,编写扩展名为.asm的源文程序文件。(2)用汇编程序对编好的源文件进行汇编。命令行:masm *.asm 如果源文件中存在语法错误, 则汇编程序将指出错误类型及位置,可根据这些信息重新编辑源文件,直至无语法错误,汇编后,将生成指定名称的目标文件.obj。使用 MASM50 汇编程序进行汇编,输入命令行masm或者 masm *.asm 后,根据提示,输入文件名,在汇编没有错误的情况下,如屏幕所示:汇编程序可生成三个文件,*.obj ,*.lst 和*.crf。*.obj- 目标文件,用于连接生成可执行文件;*.lst- 列
3、表文件 (可选),汇编语言汇编的机器语言与汇编语言对照表,可用于调试;*.crf- 交叉引用文件(可选) ,给出了用户定义的所有符号和对每个符号定义、引用的行号。使 用 文 本 编辑 软 件汇 编 程 序*.a sm*.o bj连 接 程 序*. ex e名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 9 页 - - - - - - - - - 2 (3)目标文件的连接命令行: link *.obj *.obj *.lib 连接程序,将多个目标程序及库文件,连接生成可执行
4、的*.exe 文件 ,同时可选择生成*.map 文件。*.map-地址映像文件,给出内存地址分配的有关信息。下图所示屏幕,为Link 连接两个目标文件,没有错误的情况下,生成*.exe 文件。(4)执行程序执行 *.exe 文件,观察程序运行结果,如果存在错误,需要进行调试。调试工具DEBUG 是针对汇编语言程序设计的一种调试工具,熟练使用DEBUG 有助于汇编语言程序员对于逻辑错误的调试。二、 汇编程序的调试1. 调试方法DEBUG 工具的调试文件为可执行文件*.exe,在命令行窗口或者DOS 环境下,执行 DEBUG 命令:命令行 Debug *.exe DEBUG 程序如果正常启动,提示
5、符显示为“_” 。出现“ _”提示符后,根据调试名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 9 页 - - - - - - - - - 3 的需要,输入正确的Debug命令,根据显示内容,修改源文件。2. 常用 DEBUG 命令(1) D 命令-内存显示命令命令格式格式 1:D起始地址 格式 2:D起始地址 结束地址 |L 字节数 调试程序的过程中,可利用该命令可以察看指定范围的内存单元的内容,以确定对内存单元的修改是否正确。可以通过命令指定显示的范围(格式2) ,在
6、不指定显示长度的情况下(格式1) ,将显示从起始地址开始128 个字节的内容,如果只写D,则将从上一个D 命令显示结束的位置开始显示128个字节。在内存显示过程中,可以通过“Ctrl+S”键暂停,按任意键可继续显示,以防显示过快,来不及察看,另外可以通过“Ctrl+S”中止该命令的执行。(2)E 命令-数据编辑命令命令格式格式 1:E起始地址 列表 格式 2:E起始地址 调试过程中,为了进行程序测试, 需要改变内存或者寄存器的数据, 此时利用 DEBUG的 E命令可以非常方便的进行修改。E 命令可以使用一连串的数据对内存连续地址单元进行修改,此时使用格式1,也可以修改某个地址单元的内容后,按“
7、空格”键,继续修改高地址 单元内容。使用E命令时,可以同时配合使用D命令,以确定是否正确的完成了对内存单元的修改。(3)U 命令 -反汇编命令命令格式: U起始地址 结束地址 调试过程中, 可以利用 U 命令将目标程序反汇编为汇编程序,以观察汇编指令的存放位置,汇编指令的正确与否,对于无源码的目标程序,还可以利用反汇编获取目标程序的源码。(4)G 命令 -运行程序命令命令格式: G=起始地址 第一断点地址 第二断点地址 . 调试过程中,可以利用G 命令运行程序,观察结果的正确性,或者设置断点,利用G 命令观察程序运行到某一位置是否正确,G 命令最多可以设置10 个断点,当程序运行置断点时,停止
8、执行,并显示当前所有寄存器和标志位的内容,以及下一条将要执行名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 9 页 - - - - - - - - - 4 的指令。如果 G 命令无起始地址,则从当前CS:IP 内容为开始运行。(5)T 命令-单步执行命令命令格式格式 1:T=地址 格式 2:T=地址 执行指令的条数 调试过程中,可以利用该指令单步执行, 从指定地址开始 (如果不指定,则从 CS:IP开始) ,执行一条指令(格式1)或者执行指定条数的指令(格式2)后,停止执
9、行,并显示当前所有寄存器和标志位的内容。(6)R 命令 -寄存器访问命令命令格式格式 1:R 格式 2:R 寄存器名称一般汇编程序中,会频繁的使用寄存器,使用R 命令,可以在调试程序的过程中方便的进行寄存器内容的察看。如果不指定寄存器名称(格式1) ,则显示所有寄存器和标志位内容; 可以指定需要察看的寄存器的名称(格式 2) ,只显示察看寄存器的内容。(7)Q 命令-Debug退出命令命令格式Q Debug 程 序 使 用 结 束 后 , 使 用该 命 令 退 出Debug。3.Debug使用举例右边所示的汇编源程序EX.asm, 在命令行窗口中输入下面命令行:MASM EX.asm 对 EX
10、.asm 文件进行汇编,如果没有语法错误,则生成 EX.obj 目标文件。输入下面命令行:LINK EX.obj 对目标文件进行连接,连接后得到可执行文件EX.exe,使用 Debug 对该程序进行调试。(1)U-反汇编对 EX.exe 反汇编后,得到代码段地址和指令的对应图如下图所示。从反汇编的结果,可以得到指令在代码段的偏移地址,常与T 命令和 G 命令联合使用,使程序运行到固定的位置,查看结果。同时,可以从反汇编代码中看出,变量会被名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第
11、 4 页,共 9 页 - - - - - - - - - 5 汇编为直接寻址方式,使用变量在数据段内的有效地址表示。(2)T-单步每按一下 T,执行一步,屏幕上显示执行指令后, 通用寄存器、 段寄存器和标志位的状态,下一条指令,以及指令中操作的存储器寻址方式对应的内存单元的内容。(3)G-执行根据反汇编的情况, G 断点常设置在正常返回DOS 调用之前,即 MOV AH,4CH ,执行后,可以通过查看寄存器内容,或者D 命令查看内存地址单元的内容,检查程序的运行是否正常。(4)D-查看存储器内容查看数据段内容,屏幕上会给出128 字节存储单元的内容,每行为顺序的16 个字节。因此可以根据定义的
12、数据段中,变量的偏移量,查看运行结果。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 9 页 - - - - - - - - - 6 (5)E-修改存储单元内容在调试程序的过程中,如果要修改变量的值,可以使用 E 命令。如下图所示,通过E 命令修改了程序变量X 和 Y 的值,而不需要修改程序,因此E 命令为程序调试提供了方便。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - -
13、- - 第 6 页,共 9 页 - - - - - - - - - 7 DOS功能调用(1) 系统调用的方法所有系统功能的调用方法都是一致的,包括以下几步:将入口参数传递到指定寄存器中;将系统调用子功能号写入AH 寄存器中;使用 INT 21H 指令执行功能调用;通过指定的寄存器获取出口参数,或者无出口参数;(2)常用的几种 DOS 功能调用01H 号功能调用 -单字符键盘输入调用格式:MOV AH, 01H INT 21H 该功能调用执行时,等待从键盘输入的单个字符,当有键按下的时候,将按键的ASCII 值送入 AL 寄存器中,并在屏幕上显示按下的字符,此调用没有入口参数,调用完成后,通过读
14、取AL 寄存器的值,获取按键ASCII。02H 号功能调用 -单字符显示调用格式:MOV DL, 字符MOV AH, 02H INT 21H 该调用在显示屏幕上显示一个字符,调用时,将待显示字符的 ASCII 值送入 DL 寄存器后,调用 02H 号功能调用,进行显示。09H 号功能调用 -显示字符串调用格式:MOV DS,字符串段首地址MOV DX, 字符串段内偏移量MOV AH,09H INT 21H 该调用将在屏幕上显示以DS:DX 作在起始地址,以 $ 结束的一串字符串,因此需要在调用前,需要将字符串的起始地址存放在指定的DS:DX 寄存器中。例: BUF DB Hello!$MOV
15、AX,SEG BUF 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 9 页 - - - - - - - - - 8 MOV DS,AX LEA DX,BUF MOV AH,09H INT 21H 0AH 号功能调用 -字符串输入调用格式: MOV DS,字符串输入缓冲区段首地址MOV DX, 字符串输入缓冲区段内偏移地址MOV AH,0AH INT 21H 该功能调用执行过程中, 首先需要一块用于存放写入字符的缓冲区,并将缓冲区的起始地址写入 DS:DX 起始的位置,在
16、该缓冲区的第一个字节写入缓冲区允许写入的最大字符数,系统调用结束后,将实际输入的字符数写入第二个字节,而将键盘输入,写入指定起始地址开始的缓冲区的第三个单元开始的位置,键盘输入回车键作为字符串输入结束标记。如果实际输入的字符数多于允许写入的最多字符数,则响铃报警。4CH 号功能调用 -返回操作系统调用格式:MOV AH, 4CH INT 21H 结束当前正在执行的程序, 并将控制权交给启动这个程序的上一级,多用于汇编运行结束后,返回 DOS 操作系统。DOS 功能调用例程从键盘上输入一个字符串,然后将该字符串逆序输出。参考程序如下:DATA SEGMENT BUF DB 50 DUP(?) D
17、ATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DA TA START: MOV AX, DATA MOV DS, AX MOV BUF,20 ;输入缓冲区第一个字节存放允许输入的最多字符数MOV DX,OFFSET BUF ;10号功能调用,数据缓冲区起始地址参数存入DX MOV AH,0AH 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 9 页 - - - - - - - - - 9 INT 21H LEA SI,BUF ADD S
18、I,2 MOV BX,SI ADD BL,byte ptrBUF+1;10号功能调用,缓冲区的第二个字节存放实际输入的字符数。ADC BH,0 MOV byte ptrBX+2,$ ;09号输出字符串,字符串要以 $ 结束。MOV DI,BX L: MOV AL,SI XCHG AL,DI MOV SI,AL INC SI DEC DI CMP SI,DI JNG L MOV DL,0DH MOV AH,02H INT 21H MOV DL,0AH MOV AH,02H INT 21H LEA DX,BUF ADD DX,2 ;输出时,应注意,缓冲区的第三个字节开始才是输入的字符。MOV AH,09H INT 21H MOV AH, 4CH INT 21H CODE ENDS END START名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 9 页 - - - - - - - - -