debug调试汇编语言程序段 的常用命令及练习题(x86汇编)

1、R命令(显示当前寄存器的内容)

显示修改寄存器命令
显示所有寄存器和标志位状态;
显示当前CS:IP指向的指令。

使用 -r 修改寄存器的内容

在这里插入图片描述
-r 一般的格式是 -r 寄存器,然后系统会进行冒号提示,后面就是你要修改的内容。

-r 查看和修改 CPU 寄存器内容

在这里插入图片描述

-r    指令,得到右下角信息: NV UP EI PL NZ NA PO NC

这些符号代表的就是标志寄存器里常用标志位的值。这个是符号值对应表:

溢出标志OF(Over flow flag)              	OV(1) NV(0)
方向标志DF(Direction flag) 				DN(1) UP(0)
中断标志IF(Interrupt flag)				 EI(1) DI(0)
符号标志SF(Sign flag) 					 NG(1) PL(0)
零标志ZF(Zero flag) 			       ZR(1) NZ(0)
辅助标志AF(Auxiliary carry flag) 		AC(1) NA(0)
奇偶标志PF(Parity flag) 						PE(1) PO(0)
进位标志CF(Carry flag) 						CY(1) NC(0)

显示标志时使用的符号速查表:

标志        标志=1         标志=0
OF          OV              NV
DF          DN              UP
IF          EI              DI
SF          NG              PL
ZF          ZR              NZ
AF          AC              NA
PF          PE              PO
CF          CY              NC

2、T命令(设置陷井,单步执行)

T;从当前IP开始执行一条指令。
T 数值;从当前IP开始执行多条指令, 数值:执行的指令条数。
T =地址;从给定的地址执行一条指令
T =地址 数值;从给定的地址执行多条指令, 数值:执行的指令条数.

-T ; 从当前IP开始执行一条指令
-T5 ; 从当前IP开始执行5条指令
-T=100   5 ; 从当前0100H开始执行5条指令

3、A命令(将指令直接汇编成机器码输入到内存)

汇编命令A
A [地址];从指定的地址开始输入符号指令;如省略地址,则接着上一个A命令的最后一个单元开始;若第一次使用A命令省略地址,则从当前CS:IP开始(通常是CS:100)。
注释:
①在DEBUG下编写简单程序即使用A命令。
②每条指令后要按回车。
③不输入指令按回车,或按Ctrl+C结束汇编。
④支持所有8086符号硬指令,伪指令只支持DB、DW,不支持各类符号名。

例题:
使用A命令在0100H开始输入指令mov ax, 10 inc cx mov bl, al
在这里插入图片描述
单步执行上述指令
在这里插入图片描述
在这里插入图片描述

win11使用debug命令

在windows10 64位系统上使用debug命令

我的debug在D盘,所以使用命令是:

运行桌面上的DOSBox。

输入以下命令:

mount d d:\ 回车
d: 回车

再输入debug (按回车)

在这里插入图片描述
如果是在C盘上建文件夹,放入debug:
在这里插入图片描述

x86汇编练习题

一段x86汇编程序如下:( )
PUSH BX;
PUSH AX;
PUSH BX
POP CX;
PUSH BX;
PUSH AX
POP CX
假设AX=1357H,BX=2468H,DS=2000H,SS=4000H则程序执行完后,CX等于多少?( A )
A.1357H

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

设(SS)=0FFA0H,(SP)=00B0H,(AX)=8057H,(BX)=0F79H,
执行指令"PUSH AX"后,(SP)= ( 00AE );
再执行指令:
PUSH BX
POP AX
后,(SP)= ( 00AE ) ,(AX)= ( 0F79 ),(BX)= ( 0F79 )。

注:这里不用-r输入SS的值,只输入SP、AX、BX的值。

MOV AX, 0001H
MOV BX, 0002H
PUSH BX
PUSH AX
POP BX ;执行后 BX=( 01 )
POP AX ;执行后 AX=( 02 )
MOV AX,3F5FH ;执行后 AL=( 5F )
AND AL,0FH ;执行后 AL=( 0F )

分析:
MOV AX,0001H ~AX<=1
MOV BX,0002H ~BX<=2
PUSH AX ~1进栈
PUSH BX ~2进栈
POP AX ~2出栈=>AX
POP BX ~1出栈=>BX
所以 AX=2,BX=1

MOV BX.01H
MOV AX.02H
PUSH BX
PUSH AX
POP BX ;执行后BX=_____
POP AX ;执行后AX=_____
MOV AX ,3F5EH ;执行后AL=_____
MOV CX,4H
ROR AL,CL ;执行后AL=_____
AND AL,0FH ;执行后AL=_____

BX = 02H
AX = 01H
AL = 5EH
AL = E5H
AL = 05H

posted @ 2022-03-14 22:04  Hardworking666  阅读(178)  评论(0编辑  收藏  举报  来源