收藏 分享(赏)

debug 命令使用祥解推荐.doc

上传人:无敌 文档编号:1058834 上传时间:2018-06-08 格式:DOC 页数:10 大小:29.02KB
下载 相关 举报
debug 命令使用祥解推荐.doc_第1页
第1页 / 共10页
debug 命令使用祥解推荐.doc_第2页
第2页 / 共10页
debug 命令使用祥解推荐.doc_第3页
第3页 / 共10页
debug 命令使用祥解推荐.doc_第4页
第4页 / 共10页
debug 命令使用祥解推荐.doc_第5页
第5页 / 共10页
点击查看更多>>
资源描述

1、debug 命令使用祥解 前段时间我在学习汇编语言,发现这语言不是太难学,他里面的算法思想和高级语言都是一样的,我在学这个之前学过 c+ ,所以我才这样说的,学习一门语言固然重要,但是学会使用你所用的平台去调试也很重要,下面这个实验是我们现在正在上的接口原理实验,debug 命令使用都是我们教员自己总结的,感觉很好,所以就发过来供大家分享。实验 1 DEBUG 调试命令练习一、实验目的1、熟悉 DEBUG 调试程序的常用命令;2、掌握利用 DEBUG 命令查看和修改 CPU 中寄存器及内存单元内容的方法;3、学会汇编、反汇编、运行和调试简单程序段的方法。二、实验内容和步骤1、Debug 程序的

2、启动方法 1:键入 debug 后回车只是装入 Debug 程序,并没指定要调试程序;方法 2:相继装入 Debug 程序和要调试的程序格式: 路径 debug filename屏幕上出现提示符“-”注意:filename 必须是可执行文件,要带扩展名 exe2、Debug 程序的退出在提示符“-”后输入“Q”回车即可。3、D 命令功能:显示数据段中指定单元或单元块的内容。【例 1】D1000 结果显示 128(80H)个字节的内容,一行 16 个字节,共 8 行。其中每一行的第一列是数据段段寄存器 DS 的当前值,第二列是每一行的第一个字节在段中的偏移量,中间是 16 个单元的内容(十六进制

3、) ,单元地址依次加 1。最右边是该单元内容(十六进制形式的 ASCII 码)所对应的字符。【例 2】D DS:1000结果显示和上例相同,因此在没有定义具体的数据段时,可以省略 DS。【例 3】D 1234:1000结果显示数据段中以 1234H 为段地址、偏移量从 1000H 开始的 128 个单元的内容。该例定义了显示范围,显示结果的段地址不一定是段寄存器 DS 中的当前内容,而是一个指定的段地址。【例 4】D 1234:1000 100F结果显示数据段中以 1234H 为段地址、偏移量从 1000H 开始到 100FH 结束的 16 个单元的内容。该例不仅定义了具体的段地址,而且定义了

4、显示的起始和结束地址,不一定显示 128 个字节。4、E 命令功能:修改内存单元内容【例 1】E 1000该命令的功能是从 DS:1000H 处修改若干个数据。响应如下:1BD3:1000 CD. 这里 1BD3H 是 DS 的当前值(每台计算机内容可能不一样) ,CDH 是偏移量为 1000H 单元的原来内容。输入一个新的数据后,如果按空格键,将显示(修改)相邻高地址 1001H 单元的内容,输入新数据后再按空格键,将显示(修改)相邻高地址 1002H 单元的内容,以此类推。如果输入新的数据后回车,将不再提示修改后面的单元内容。【例 2】E DS: 1000功能和上例相同【例 3】E 123

5、4:1000功能是修改数据段中以 1234H 为段地址、偏移量从 1000H 开始的单元内容。5、命令 U功能:从代码段中指定的位置对机器代码进行反汇编,得到相应的助记符形式的指令。【例 1】U 1000功能是从代码段中以 CS 寄存器的值为段地址,偏移量为 1000H 开始的地方执行反汇编,一次反汇编 32 个字节的机器代码。【例 2】U若地址省略,如果是第一次使用 U 命令,则从 CS、IP 的当前地址处开始反汇编。如果不是第一次使用,则从上一个 U 命令的最后一条指令的下一单元开始反汇编 32 个字节。【例 3】U CS :1000同上例【例 4】U 1234:1000 从指定的 CS、

6、 IP 地址开始反汇编【例 5】U 1234:1000 L9从指定的 CS、 IP 地址开始反汇编,长度不是 32 个字节,而是 9 个字节。6、寄存器的显示和修改命令 R【例 1】R如果 R 后面什么都不带,这时 R 命令就用来显示所有寄存器内容,包括标志寄存器中的 8 个状态标志位的状态,并在最后提示下一条将要执行的指令。【例 2】RAX如果 R 后面跟上一个寄存器的名称,这时 R 命令就用来显示这个寄存器的内容并等待修改。如 RAX,系统将响应显示出 AX 的内容并在下一行显示出冒号。如果在冒号后键入进值后回车,AX 即修改为新值;如果不输入新值而直接回车,则不改变原值。【例 3】RF

7、功能是显示和修改标志位状态。注意 8 位状态标志位不是以 0 或 l 的形式显示的,而是用两个字母显示的,这样更直观。字母和状态对应关系如下表所示:标志名 置位 复位溢出 Overflow(是/ 否) OV NV方向 Direction(减量/ 增量) DN UP中断 Interrupt(允许/屏蔽) EI DI符号 Sign(负/正) NG PL零 Zero(是/否) ZR NZ辅助进位 Auxiliary Carry(是 /否) AC NA奇偶 Parity(偶/ 奇) PE PO进位 Carry(是/否) CY NC系统响应显示当前 8 个状态标志位的状态,如果直接回车,将不改变标志位的

8、状态。也可以键入其中一个或多个新的状态符,重新设置其状态。键入时可以不考虑标志位的顺序,中间也可以不加空格。7、运行命令 G【例 1】G=1000 1023功能是从代码段 1000H 处开始运行程序,到 1023H 处停止程序执行。【例 2】G=1000 此处没给出结束地址,则系统会自动在程序应该停止的地方结束。因此在我们编写的汇编语言源程序中,就需要一个程序结束返回到操作系统的指令。【例 3】G如 G 后不带任何参数,则从当前指令即从 CS:IP 指定的地址开始执行,并一直执行到该停止的地方结束。因为今天是练习 DEBUG 命令,并没有涉及到具体的程序,所以最好不要使用不带结束地址的G 命令

9、,否则会可能因为内存中没有程序结束相关指令而导致死机。8、单步执行命令 T【例 1】T=1000 3功能是从代码段偏移量为 1000H 的地方开始执行 3 条指令后停下来,并在执行每条指令后显示寄存器的当前内容、状态值和下一条将要执行的指令,IP 值自动加 1。【例 2】T=1000当后面的步数省略时,则从指定地址默认执行 1 条指令后停下来,并在执行该指令后显示寄存器的当前内容、状态值和下一条将要执行的指令,IP 值自动加 1。【例 3】T功能是从 CS、 IP 的当前值开始执行 1 条指令后停下来,IP 值自动加 1。另外,DEBUG 还有如小汇编命令 A、命名命令 N、装入命令 L、写命

10、令 W 等很多命令,这里不再讲述。实验 2 编辑、汇编、连接、调试简单程序练习一、实验目的1、熟悉编辑汇编源程序的方法;2、掌握汇编程序 Masm 和链接程序 Link 的使用方法;3、进一步掌握用 Debug 调试具体程序、观察参数和运行结果的方法。二、实验内容与步骤1、输入和编辑汇编源程序进入 E 编辑程序所在目录,假设该程序同 Debug 程序一样,也在 D 盘的 ASM 目录中。D:ASM EDIT LX1.ASM如 EDIT 后面可以不带文件名,这样它会新建一个文件,此时可以用菜单打开一个文件,或者编辑完毕保存时要提供文件名。如 EDIT 后面带一个文件名,它将会打开这个文件。如果这

11、个文件不存在,它就以这个文件名建立一个文件。显然这样更方便。进入编辑环境后输入以下程序:DATA SEGMENTMSG DB This is an example.$DATA ENDSSTACK SEGMENT STACKDW 64 DUP(?)STACK ENDSCODE SEGMENTASSUME CS: CODE,DS :DATA,SS :STACKSTART:MOV AX,DATAMOV DS,AX ;获得数据段的可寻址性MOV DX,OFFSET MSGMOV AH,09H INT 21H ;显示字符串MOV AH,4CHINT 21H ;程序结束,返回操作系统CODE ENDSEN

12、D START输入完毕后,存盘退出。注意:也可以使用别的编辑软件(如记事本) ,保存时一定要以 ASM 为扩展名。使用记事本时,第一次保存时使用的扩展名为 txt。存盘的时候要与 Masm 和 Link 程序保存在同一个文件夹下(假设都在 D:ASM 文件夹下) 。2、用汇编程序 MASM 对源程序进行汇编进入 Masm.exe 汇编程序所在目录,比如该程序也在 D 盘的 ASM 中。D:ASM MASM LX1LX1 后面可以不跟扩展名 ASM(汇编时默认是对 ASM 进行汇编) 。系统响应如下(汇编程序版本不同,响应不太一样):Microsoft (R) Macro Assembler V

13、ersion 5.00 Copyright (C) Microsoft Corp 1981-1985, 1987. All rights reserved.Object filename LX1.OBJ: ;生成的目标文件名默认为 LX1.OBJ,回车键确认Source listing NUL.LST: LX1;输入列表文件名,如不需要可直接回车Cross-reference NUL.CRF: ;输入交叉索引文件名,如不需要可直接回车50502 + 385338 Bytes symbol space free0 Warning Errors0 Severe Errors如编译通过,这时 D 盘

14、的 ASM 中将会生成一个 LX1.OBJ 文件。如果编译时发现存在语法错误,系统将给出错误提示(警告性错误和致命性错误) 。警告性错误并不影响 OBJ 文件的产生,如有致命性错误不可能生成对应的 OBJ 文件,这时必须再对程序进行修改、再汇编,直到没有错误为止。如果在文件名 LX1 后跟上一个分号,上述提示将省略。3、用链接程序 LINK 产生可执行文件进入 Link.exe 汇编程序所在目录,比如该程序也同样在 D 盘的 ASM 中。D:ASM LINK LX1后面可也以不跟后缀名.OBJ 。系统响应如下:Microsoft (R) Segmented-Executable Linker

15、Version 5.13Copyright (C) Microsoft Corp 1984-1991. All rights reserved.Run File LX1.exe: ;生成的可执行文件名默认为 LX1.EXE,按回车键确认List File NUL.MAP: ;输入映象文件名, 如不需要可直接回车Libraries .LIB: ;输入库文件名, 如不需要可直接回车如果链接成功,这时 D 盘的 ASM 中将会生成一个 LX1.EXE 文件。同样,如果在文件名后跟上一个分号,上述提示也将省略。4、执行程序因该程序的执行结果是在屏幕上输出一个字符串,可以直接运行程序,通过观察屏幕上是否

16、正确输出该字符串来判断程序是否正确。D:ASM LX1屏幕将会显示:This is an example.5、用 DEBUG 调试.EXE 文件注意:如果程序的执行结果并没有在屏幕上显示,这时不能直接运行程序,只能通过在 DEBUG中对它进行调试,通过观察相关内存单元的内容来判断程序是否正确。进入 D 汇编程序所在目录,比如该程序也在 D 盘的 ASM 中:D:ASM DEBUG LX1.EXE ;扩展名必须带上1)反汇编U1C03:0000 B8041C MOV AX,1C041C03:0003 8ED8 MOV DS,AX1C03:0005 BA0000 MOV DX,00001C03:0

17、008 B409 MOV AH,091C03:000A CD21 INT 211C03:000C B44C MOV AH,4C1C03:000E CD21 INT 211C03:0010 注意:原来的源程序第一行的 DATA 此时变成了 1C04(不同的机器可能不一样) 。因此这条指令和后面的指令 MOV DS,AX 一起用来建立数据段的可寻址性。第一条指令获得系统分配给程序中数据段的段地址,第二条指令将该段地址送到段寄存器 DS 中。2)观察数据区D 1C04:0 1F1C04:0000 54 68 69 73 20 69 73 20-61 6E 20 65 78 61 6D 70 This

18、 is an examp1C04:0010 6C 65 2E 24 FF B7 48 36-FF B7 46 36 2A C0 50 E8 le.$.H6.F6*.P.大家看到,最右边是相应数据对应的字符, “54 68 69 73 20 69 73 20 61 6E 20 65 78 61 6D 70 6C 65 2E 24”分别是字符串“This is an example. $”中各字符的 ASCII 码。注意:因为此时上两条指令还没有执行,还没有将系统分配给程序使用的数据段段地址送到 DS中,因此使用 D 命令时,须采用上述方法,而不能用 D DS:0 1F 形式。3)运行程序GThi

19、s is an example.Program terminated normally前面一句话是程序的执行结果,输出一个字符串。后一句话表明程序正常结束。出现这句话的原因就是程序中有一个返回 DOS 的功能号为 4CH的功能调用。4)修改数据区,使程序运行时显示“This is a computer.”。E 1C04:0009 computer.$ G = 0This is a computer.Program terminated normallyQC因两个字符串前 9 个字符相同,从第 10 个字符开始不一样。因此是采用“E0009”的命令形式。三、自主实验题1、编写计算 Y=X2+50

20、 的汇编语言源程序,并保存为 LX2.ASM 文件。2、对 LX2.ASM 进行汇编和链接,直到形成 LX2.EXE 可执行文件。3、用 DEBUG 调试和运行 LX2.EXE 文件,查看 X 和 Y 变量单元结果。多试几个数据,验证程序的正确性。实验 3 DOS 功能调用一、实验目的1、学习常用的系统功能调用的使用方法。2、掌握在屏幕上输出程序运行结果的方法。3、掌握给程序输入参数的方法。4、进一步掌握 DEBUG 调试程序的使用方法。二、实验内容及步骤1、在屏幕上显示一个字符【实验要求】编写程序,在屏幕上显示一个字符“A”并换行。【编程思路】单个字符输出,可以利用 DOS 功能调用的 02

21、 号功能来实现。入口参数:将需显示字符的 ASCII 码送 DL 寄存器;功能号 02H 送 AH 寄存器。该程序是在显示“A”后再显示回车换行符号(含 0A、0D 两个字符) 。因此可以使用三次 02H 功能调用。【参考程序】STACK SEGMENT STACKDW 64 DUP (?)STACK ENDSCODE SEGMENTASSUME CS:CODE,SS:STACKSTART:MOV DL, AMOV AH,02HINT 21HMOV DL,0DHMOV AH,02HINT 21HMOV DL,0A HMOV AH,02HINT 21HMOV AH,4CHINT 21HCODE

22、ENDSEND START注意:在使用一次 INT 21H 后,除了获得相应的结果外,也将包括 AX 在内的相关寄存器的内容清 0。因此,如后面还需要使用 INT 21H,即使调用功能一样,功能号也必须重新输入。2、在屏幕上显示一个字符串【实验要求】编写程序,在屏幕上显示一个字符串“HOW DO YOU DO?”。【编程思路】如果要显示或打印一个字符串,可使用 09 号功能调用。入口参数:要显示的字符串要先在数据段中定义好,且以“$”为结束标志。使用时,要先将 DS:DX 指向该缓冲区。DS 为该字符串所在数据段的段地址;DX 为该字符串的第一个字符在数据段中的偏移量;【参考程序】STACK

23、SEGMENT STACKDW 64 DUP(?)STACK ENDSDATA SEGMENTBUF DB HOW DO YOU DO?$DATA ENDSCODE SEGMENTASSUME CS: CODE,DS :DATA,SS :STACKSTART:MOV AX,DATAMOV DS,AXMOV DX,OFFSET BUFMOV AH,09HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START注意:当结果是多个字符但是通过逐个字符连续输出时,也可通过 02H 功能调用实现。如果要显示的结果不是字符串,而是一个数据,是不能直接用 09H 功能在显示器上显

24、示的。此时要将该数据的各位转化为相应的 ASCII 码,才能通过 02H 号功能调用实现显示(转换方法见后面的“数码转换”实验) 。如果屏幕上要显示的字符串中含有字符“$”,这时不能直接使用 09 号功能调用实现(因 09H默认以“$”结束标志) 。3、键入单个字符【实验要求】编写程序,等待用户选择。当用户输入的是“Y”,在屏幕上显示“You agree it.”如果用户输入的是“N”,在屏幕上显示 “You disagree it.”。如输入的不是“Y”也不是“N”,则在屏幕上显示“Please input again.”。【编程思路】程序在执行过程中如需要用户提供选择或输入一些可变数据,这

25、时可以利用 01H 号功能,直接从键盘上接收一个字符。出口参数:键入字符的 ASCII 码将存放 AL 寄存器中,同时显示在屏幕上。【参考程序】STACK SEGMENT DW 64 DUP(?)STACK ENDSDATA SEGMENTBUF1 DB Please input your choose:$BUF2 DB You agree it.$BUF3 DB You disagree it.$BUF4 DB Please input again.$DATA ENDSCODE SEGMENTASSUME CS:CODE,DS :DATA,SS :STACKSTART:MOV AX,DATA

26、MOV DS,AXMOV DX,OFFSET BUF1MOV AH,09HINT 21HMOV AH,01HINT 21HCMP AL, YJZ YESCMP AL, NJZ NOMOV DX,OFFSET BUF4JMP DONENO: MOV DX,OFFSET BUF3JMP DONEYES: MOV DX,OFFSET BUF2DONE: MOV AH,09HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START注意:调用时程序要等待用户按键,因此使用该功能时,最好先在屏幕上给出一定的信息,提示用户可以按键了,否则用户不好把握按键时机。提示符可以是一个字符

27、,也可以是一个字符串。总之只要使人感到提示含义清楚就可以了。4、键入字符串【实验要求】编写程序,提示用户输入信息。用户从键盘输入一个字符串,并显示在屏幕上。【编程思路】利用 DOS 功能调用的 0AH 号功能,直接从键盘上接收一个字符串。入口参数:在内存中事先定义好缓冲区。给缓冲区格式为:第一个字节表示接收的最大字符数(1 至 255,不能为 0) ;第二个字节保留,用做 DOS 功能调用后存放实际读入的字符数(不包括回车符) 。从第三字节开始存放输入的字符串。调用前要使 DS:DX 指向该缓冲区的首字节。输入的字符串长度要小于缓冲区的长度,否则,超过的缓冲区长度的输入字符将被视为无效。输入字

28、符串时,以回车符(0DH)作为结束标志。【参考程序】STACK SEGMENT STACKDW 64 DUP(?)STACK ENDSDATA SEGMENT BUF1 DB Please input a string:$BUF2 DB 50BUF3 DB ?BUF4 DB 50 DUP(0)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS :DATA,SS :STACKSTART:MOV AX,DATAMOV DS,AXMOV DX,OFFSET BUF1MOV AH,09HINT 21HMOV DX,OFFSET BUF2MOV AH,0AHINT 21HMOV DI,OFFSET BUF3MOV BL,DIMOV DI,OFFSET BUF4MOV BH,00HMOV AL, $MOV DI+BX,ALMOV DL,0AHMOV AH,02HINT 21HMOV DL,0DHMOV AH,02HINT 21HMOV DX,OFFSET BUF4MOV AH,09HINT 21HMOV AH,4CHINT 21H CODE ENDSEND START

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报