debug命令调试_第1页
debug命令调试_第2页
debug命令调试_第3页
debug命令调试_第4页
debug命令调试_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 DEBUG 命令及汇编指令调试 微机原理与接口技术研究性学习通信 1101 | 汪广超 | 11211018指导教师:戴胜华 2013/9/19目录1 DEBUG命令调试 . 2 1.1 R命令的使用 . 2 1.2 D命令的使用 . 3 1.3 H命令的使用 . 4 1.4 C命令的使用 . 5 1.5 E命令的使用 . 6 1.6 F命令的使用 . 6 1.7 M命令的使用 . 71.8 A、 T 命令功能介绍 . 72汇编语言常用指令调试 . 8 2.1 数据传送指令 MOV . 8 2.2 数据交换指令 XCHG .10 2.3 堆栈操作指令 PUSH/POP . .11 2.4 有

2、效地址传送指令 LEA . .12 2.5 I/O数据传送指令 . .13 2.6 加法指令 . .14 2.6 减法指令 . .16 2.8 乘法指令 . .18 2.9 除法指令 . .19 2.10 逻辑运算指令 . .20 2.11 位移指令 .222.12 无条件转移指令 .233小结 .241 DEBUG命令调试当 DEBUG 启动成功后,将显示连接符“ -” ,这时,可输入各种 DEBUG 命 令。 DEBUG 中所有命令及其含义如 DEBUG 各命令功能说明表所示,在提示符 “ -”下输入以下命令:?,执行结果如下图所示。关于使用命令的几点说明:在提示符“ -”下才能输入命令,

3、在按“回车”键 后, 该命令才开始执行; 命令是单个字母, 命令和参数的大小写可混合输入; 当 命令出现语法错误时,将在出错位置显示“ Error” 。DEBUG 命令很多且复杂,这里不再对所有命令一个一个调试,下面将举例 介绍我通过学习摸索出来的几个命令的常用用法。1.1 R命令的使用R 命令作用:显示或改变一个或多个寄存器。在提示符“ -”下输入以下命令:r , DEBUG 将会显示当前所有寄存器和标 志位的状态。标志位寄存器状态位解读方法如下表格。 接下来再输入命令 rbx ,在提示符“:“后输入 100。该命令的作用是将寄存 器 BX 的值设置为 100, DEBUG 默认使用的是十六

4、进制,这里的 100相当于十 进制的 256。最后再执行 r 命令,观看修改后的寄存器值。结果如下图。1.2 D命令的使用D 命令作用:显示部分内存的内容。在提示符“ -”下连续执行命令 d 、 r 、 d 。观看命令执行结果,如下图。 前面已经介绍过了,命令 R 的作用是显示当前寄存器的值。而命令 D 的作 用是显示内存区域的内容, 最左边是内存的起始地址, 中间以十六进制的形式显 示内存值,最右边是以 ASCII 码的形式显示内存值。每行最多显示 16个字节的 内容。从 R 命令中可以看出,四个段寄存器内存放的就是存储器各个段的段基 址,为 0AE3,这四个段基址相同,表明存储器的四个段完

5、全重叠。从命令 D 显 示内容可以看出, DEBUG 默认以 DS :100为起始,每行 16字节,每次显示 128个字节的内容, 以后再执行命令 D 时, DEBUG 将按上次的位置接着显示下 去。当 D 命令带参数时, DEBUG 能够显示指定地址范围的内容。 具体有下列三 种格式。格式一:d 起始位置 。 DEBUG 从起始位置开始显示 128个字节的内容。 在提示符“ -”下执行命令 d 2ae5:200,观看命令执行结果,如下图。 格式二:d起始位置 结束位置 。 DEBUG 从起始位置开始一直显示到结束位置。 在提示符 “ -” 下执行命令 d es:100 1ff, 观看命令执行

6、结果, 如下图。 格式三:d 起始位置 L长度 , 长度以 L 参数为标识。 DEBUG 从起始位置 开始显示指定长度的内容。在提示符“ -”下执行命令 d ss:100 l10,观看命令 执行结果,如下图。 1.3 H命令的使用H 命令作用:执行十六进制运算。在提示符“ -”下输入以下命令:H 1f 1,观看命令执行结果,如下图。 由执行结果可以看出, H 命令执行两个运算,第一个数是执行加法的结果, 第二个数是执行减法的结果,默认为 16进制。1.4 C命令的使用C 命令作用:将两块内存的内容进行比较。C 命令使用时, 要指定好要比较的内存第一个区域的起始和结束地址, 或起 始地址和长度,

7、 同时要指定要比较的第二个内存区域的起始地址。 具体有如下两 种格式。格式一:c 起始位置1 结束位置 起始位置 2。在提示符“ -”下执行命令 c 100 10f 300,观看命令执行结果,如下图。 格式二:c 起始位置 1 L长度 起始位置 2。 在提示符 “ -” 下执行命令 c 100 lf 300,观看命令执行结果,如下图。 起始位置处若不特殊指定, 则默认段基址为 DS 。 另外要注意的是, 如果比较 区域内的内容完全相同, 则不显示任何内容。 在提示符 “ -” 下执行命令 c 2ae5:100 lf 2ae5:300,观看命令执行结果,如下图。 1.5 E命令的使用E 命令作用

8、:从指定地址开始,将数据输入到内存。E 命令的格式为: E 起始位置 。 在提示符 “ -”下输入以下命令:e 2ae5:100, 依次输入数据,再输入命令:d 2ae5:100, , 命令执行结果如下图。 DEBUG 首先显示 2AE5:0100的内容 00. ,这时可以修改该字节的值。如果 还要修改后续的内容, 可以按空格键继续。 当要跳过某个字节时, 可以按连续的 两个空格跳到后一个字节去。1.6 F命令的使用F 命令作用:使用指定的值填充指定内存区域中的地址。F 命令的格式为:F L长度 填充列表 。在提示符“ -”下输入以下命令:f 2ae5:100 l20 12 23 34 45

9、56, 再输入命令:d 2ae5:100, 观看命令执行结果。 由执行结果可以看出,该命令是用字节序列 12、 23、 34、 45、 56,循环填 充从 2ae5:100开始长度为 20H 的内存区域。1.7 M命令的使用M 命令作用:将指定内存区域的数据复制到指定的地址去。M 命令的格式为:M 起始位置 1 范围 起始位置 2。紧接上一条 E 指令结果,在提示符“-”下输入以下命令:m 2ae5:100 11f 2ae5:140,再输入命 令:d 2ae5:100,观看命令执行结果如下图。1.8 A、 T 命令功能介绍A 命令作用:输入汇编指令。T 命令作用:执行汇编程序,单步跟踪。T 命

10、令的格式为:T =地址 指令数 。如果忽略“地址”的话, T 命令默认 从 CS:IP处开始运行。 “指令数”是要单步执行的指令的数量,忽略的话默认为 1。A 、 T 指令都是调试汇编语言编程的常用指令,其作用将在下面的调试中得 到体现。2 汇编语言常用指令调试2.1 数据传送指令 MOV格式:MOV dst, srt功能:源操作数传送至目标单元,源操作数保持不变。例如: MOV ax, 1fMOV bx, 100MOV bx+20, ax前两步采用立即寻址,将 1fH 传入 AX 中,将 100H 传入 BX 中,第三步采 用寄存器相对寻址,将 AX 中的操作数,传到地址为 0AE3:bx+

11、20的存储器 中。若传送正确,则最终地址为 0AE3:0120的存储器中应存操作数为 1F 。操 作过程如下图所示。 首先用 D 命令查看 0AE3:0120中最初操作数为 42H 。执行第一步,将 1F 传到 AX 中。 执行第二步, 将 100H 传到 BX 中。 执行第三步后, 再用 D 命令查看 0AE3: 0120中的操作数,此时变为 1F 。注意:(1立即数只能作为源操作数,不能作为目标操作数。如 MOV 12, al 是错误的。(2立即数不能直接传送到段寄存器。如 MOV ds, 1000是错误的。(3源操作数和目标操作数不能同时为存储器寻址。如 MOV bx, 2000H是错误

12、的。(4源操作数和目标操作数类型要匹配。如 MOV ax, bl 是错误的。(5两个段寄存器之间不能直接传送数据,段寄存器 CS 只能作为源操作数, 不能作为目标操作数。如 MOV ds, es 和 MOV CS, bx 是错误的。(6 AX 无默认段, 不能直接用作寄存器间接寻址。 如 MOV bx, ax是错误的。 错误举例执行结果如下图所示。CS 作为源操作数时,虽然不出现“ Error” ,但执行 T 命令时会报错,如下 图所示。 2.2 数据交换指令 XCHG格式:XCHG dst, src功能:源操作数与目标操作数相互交换。 例如:MOV ax, 1000 MOV bx, 2000

13、 XCHG ax, bx 执行结果如下图所示。 要注意的是, 源操作数和目标操作数寻址可以是通用寄存器和存储器, 不能 为立即数,存储器之间不能直接进行数据交换。2.3 堆栈操作指令 PUSH/POP格式:PUSH src功能:先将 SP 减 2修改,然后将源操作数压入 SP 指定的位置。高字节数 据放在高地址单元,低字节数据放在低地址单元。 格式:POP dst功能:先将 SP 指定位置的一个字数据弹出到目标单元,然后 SP 加 2修改, 指向新的栈顶。 例如:MOV ax, 1234 PUSH ax POP bx执行结果如下图所示。 如图可以看出, SP 在执行 PUSH 指令后进行了减

14、2修改,由 FFEEH 变为 FFECH 。 同时 AX 中操作数被压入 SP 指定位置, 满足高位高地址, 低位低地址, 即 0AE3:FFEC 处存放 34H , 0AE3:FFED 处存放 12H 。 如图,在执行 POP 指令后, SP 指定位置数据 1234H 弹入 BX 中,之后 SP 进行了加 2修改,重新变为 FFEEH。2.4 有效地址传送指令 LEA格式:LEA dst, src功能:源操作数的有效地址 EA 传送到目标。其中,源操作数必须是存储器 寻址,目标数为 16位或 32位通用寄存器。例如MOV si, 1000 MOV bx, 3000 LEA cx, 1500b

15、xsi 执行结果如下图所示。 2.5 I/O数据传送指令1输入指令 IN 格式:IN ac, port功能:将端口的数据送入 CPU 累加器。 2输出指令 OUT 格式:OUT port, ac功能:将 CPU 累加器中的数据写入端口。注意:当端口地址为00FFH是,可以用指令直接指定;当端口地址大于 00FFH 时,需将端口地址装入 DX 寄存器中,再用 I/O传送指令传送数据。例如MOV dx, 01ffIN al, dxOUT dx, al执行结果如下图所示。2.6 加法指令1 不带进位的加法指令格式:ADD dst, src功能:源操作数和目标操作数相加,结果送至目标单元。2带进位的加

16、法指令格式:ADC dst, src功能:源操作数和目标操作数的和与进位标志 CF 相加,结果送至目标单元。 3加 1指令格式:INC dst 功能:目标操作数加 1,结果送至目标单元。4 BCD 码运算调整指令格式:DAA/AAA功能:对 AL 中的加法结果调整为组合型 /非组合型 BCD 码。例如MOV al, 28MOV bl, 34ADD al, blDAA执行结果如下图所示。28H 和 34H 按 16进制运算,相加后结果为 5CH ,进行 BCD 码运算调整之 后,即变成 10进制加法运算,结果为 62。再例如MOV al, ffMOV bl, 10 ADD al, blMOV a

17、l, ffADC al, bl执行结果如下图所示。 这个加法运算最高位有进位, CF=1,在 ADD 指令中,不带 CF ,所以结果 为 0F ,在 ADC 指令中带 CF ,所以结果加 1,为 10。2.7 减法指令1不带借位的减法指令格式:SUB dst, src功能:目标操作数减去源操作数,结果送至目标单元。2带借位的减法指令格式:SBB dst, src功能:目标操作数减去源操作数再减去借位标志 CF, 结果送至目标单元。3减 1指令格式:DEC dst功能:目标操作数减 1,结果送至目标单元。4 BCD 码运算调整指令格式:DAS/AAS功能:对 AL 中的减法结果调整为组合型 /非

18、组合型 BCD 码。例如MOV al, 90MOV bl, 62SUB al, blDAS执行结果如下图所示。 和加法类似, 90H 和 62H 按 16进制运算, 相减后结果为 2EH , 进行 BCD 码 运算调整之后,即变成 10进制减法运算,结果为 28。5比较指令格式:CMP dst, src功能:目标操作数减源操作数,不回送结果,只是形成标志位。例如MOV al,14 MOV bl, 26CMP al, bl执行结果如下图所示。 执行 CMP 指令后, AX 和 BX 的值没有发生变化, CF 标志位置为 1,说明 AL 的值小于 BL 的值。反之无借位。2.8 乘法指令格式:MU

19、L/IMUL src功能:MUL 为无符号数乘法, IMUL 为有符号数乘法,源操作数为乘数。 注意:字节乘, 被乘数存入 AL 中, 积存入 AX 中; 字乘, 被乘数存入 AX 中, 积存入 DX (高位和 AX (地位中。BCD 码运算调整指令:AAM 。对 AL 中的乘法结果调整,结果存入 AH 和 AL 中。例如MOV al, 04MOV bl, 06MUL blAAM执行结果如下图所示。 如图所示, 04H 和 06H 相乘,运算结果用 16进制表示为 18H ,即为十进制 的 24,用非组合型 BCD 码表示就是 0204。2.9 除法指令格式:DIV/IDIV src功能:DI

20、V 为无符号数除法, IDIV 为有符号数除法,源操作数为除数。注意:字节除,被除数存入 AX 中,商存入 AL ,余数存入 AH ;字除,被除数 存入 DX (高位和 AX (地位中,商存入 AX ,余数存入 DX 。BCD 码运算调整指令:AAD 。 对 AX 中的非组合型 BCD 码调整为 2进制, 存 入 AL 中。例如MOV ax, 0204MOV bl, 06AADDIV bl执行结果如下图所示。如图所示, 0204先由非组合型 BCD 码调整为 16进制的 18H , 再进行除法运 算,商为 04,余数为 00。2.10 逻辑运算指令 例如MOV al, 36AND al, 0f

21、MOV al, 6OR al, 30MOV al, 0fXOR al, alMOV al, 0f NOT al MOV al, 79 TEST al, 80执行结果如下图所示。 TEST 指令执行后,不影响 AX 中的值,而 ZF 为置1,表示测试结果为零,即表示 AL 最高位为 0。2.11 位移指令 例如MOV ax, feSHL ax, 1MOV cl, 3SAR ax, clMOV bl, ffROL bl, 1MOV bx, ff00 RCL bx, cl执行结果如下图所示。 逻辑左移时,移动一位,最低位补 0,最后移出的位是 0,保存在 CF 中;算 数右移时, 移动三位, 最高位保持正数补 0, 最后移出的位是 1, 保存在 CF 中。 不带进位循环左移,由 FE 变为

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论