微机原理 debug指令详解
- 格式:doc
- 大小:76.50 KB
- 文档页数:11
DUBUG命令详解Debug:A(汇编)直接将8086/8087/8088 记忆码合并到内存。
该命令从汇编语言语句创建可执行的机器码。
所有数值都是十六进制格式,必须按一到四个字符输入这些数值。
在引用的操作代码(操作码)前指定前缀记忆码。
a [address] 参数address指定键入汇编语言指令的位置。
对address 使用十六进制值,并键入不以“h”字符结尾的每个值。
如果不指定地址,a 将在它上次停止处开始汇编。
有关将数据输入到指定字节中的信息,请单击“相关主题”列表中的Debug E(键入)。
有关反汇编字节的信息,请单击“相关主题”列表中的Debug U(反汇编)。
说明使用记忆码段的替代记忆码为cs:、ds:、es: 和ss:。
远程返回的记忆码是retf。
字符串处理的记忆码必须明确声明字符串大小。
例如,使用movsw 可以移动16 位的字串,使用movsb 可以移动8 位字节串。
汇编跳转和调用汇编程序根据字节替换自动将短、近和远的跳转及调用汇编到目标地址。
通过使用near 或far 前缀可以替代这样的跳转或调用,如下例所示:-a0100:05000100:0500 jmp 502 ; a 2-byte short jump0100:0502 jmp near 505 ; a 3-byte near jump0100:0505 jmp far 50a ; a 5-byte far jump1可以将near 前缀缩写为ne。
区分字和字节内存位置当某个操作数可以引用某个字内存位置或者字节内存位置时,必须用前缀word ptr 或者前缀byte ptr 指定数据类型。
可接受的缩写分别是wo 和by。
以下范例显示两种格式:dec wo [si]neg byte ptr [128]指定操作数Debug 使用包括在中括号([ ]) 的操作数引用内存地址的习惯用法。
这是因为另一方面Debug 不能区分立即操作数和内存地址的操作数。
演示:DEBUG常用命令(此环境下,所有数据均为十六进制,不加后缀)—A 汇编—U 反汇编—D 显示存储器值—E 修改存储器值—R 显示寄存器值—T 单步执行—G 断点执行—Q 退出实验内容:一、利用A命令编辑七条指令,采用MOV AX,源OP的形式,要求源OP使用七种不同寻址方式。
(适当记录结果)U命令对刚才的7条指令反汇编,查看其机器代码,体会不同寻址方式的差异性,注意偏移地址的变化。
R命令查看寄存器初始状态。
T命令执行,注意每条指令执行后AX 的变化,思考原因。
D命令查看相关存储单元的内容,看是否与AX的变化一致。
Q命令退出。
二、判断以下指令正误,并利用A命令、T命令编辑执行,看实际情况是否与你判断的一致。
(记录判断结果,你还可以对你感兴趣的情况加以尝试)1.PUSH SP2.MOV AX, CS3.PUSH [BX]4.MOV [200], 125.MOV [200], 12346.LEA BL, [100]7.LEA BX, [100]8.LEA BX, [100+1]9.LEA BX, [100*2]10.MOV BL, [100]11.MOV BX, [100]12.XCHG AX, BX13.XCHG [BX], [SI]14.XCHG BX, [BX]三、利用A命令编辑以下内容DB 0,1,4,9,10,19,24 此为转换表,表名省略LEA BX, […] 中括号填入上一条伪指令的偏移地址MOV AL, 3XLAT利用T命令或G命令执行,注意AL,BX值的变化,思考XLAT可以用哪些指令替换,从而实现同样的功能。
(记录替换的指令)四、自行设计试验内容,验证LDS、LES 的功能。
(记录验证过程)。
32位微机原理与接口技术实验报告
姓名王学杰专业计算机应用技术班级1362班
课程32位微机原理实验项目调试工具Debug的使用及基本指令用法
【实验目的】
①掌握Debug调试工具的的使用方法
②调试8086的各种指令用法
【实验设备】
PC机一台或者QTH-2008PC实验设备一套
【实验内容】
⑴ Debug的使用
①Debug的进入和退出
在DOS提示符下键入:DEBUG ↙(表示回车)Debug执行,屏幕显示提示符“-”,说明计算机当前处于DEBUG的管理之下,可接受、并执行DEBUG令。
② 修改CPU 内部的各寄存器 观察各寄存器的内容
显示并修改AX的内容
将AX的内容改为1234H
显示并修改标志寄存器的内容
将标志寄存器的OF置为OV:DF置为DN
③观察和修改内存单元的内容
④输入程序
⑤单步执行程序
⑥反汇编程序
⑦执行一段程序。
汇编语言调试程序DEBUG的练习一一、练习目的1、学习使用DEBUG程序的各种命令。
2、利用DEBUG学习8086指令系统。
二、练习任务1、参照说明,掌握DEBUG程序的各种命令,重点是命令R,D,A,U,T,P,G命令的使用。
用命令A汇编下列指令,判断指令正误并说明原因。
1).ROR AX,8;错误,因为ROR指令的源操作数只能是数字1或是CL。
2).LEA DI,[AX];错误,因为LEA指令的目的操作数不能是DI。
3).MOV DS,2010;错误,因为段寄存器和立即数不能在MOV指令间传。
4).PUSH AL;错误,因为PUSH指令的目的操作数只能是通用寄存器或是内存。
5).OUT 900,AL;错误,因为900已经超过了8位二进制数的范围。
6).MOV [BX],0;错误,因为内存和立即数之间的类型没有确定。
2、练习使用汇编命令1)利用加法指令求3+52)利用乘法指令求3*53)利用算术运算指令求3的补码4)学习使用逻辑运算指令。
求5和17相与、相或的结果。
5)学习数据传送指令三、设备PC机一台四、练习步骤1、实现3加5:2、实现3*5:3、实现求3的补码:4、实现5和17相与:5、传送指令(独立练习)1)用A命令在内存100H处键入下列内容:MOV AX,1234MOV BX,5678XCHG AX,BXMOV AH,35MOV AL,48MOV DX,75ABXCHG AX,DX2)用U命令检查键入的程序并记录,特别注意左边的机器码。
3)用T命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况。
并注意标志位有无变化。
说明:下面所有操作均在DOS状态下进行。
DEBUG.EXE是DOS操作系统提供的一个调试汇编语言程序的工具程序。
其主要功能为:1.可动态调试汇编语言程序;2.可检查或修改CPU各寄存器、标志及内存单元的内容;3.可输入汇编指令到指定的内存;4.可把要调试的程序(通常以可执行文件形式存储在磁盘上)调入到内存中,控制CPU 按单步、设置断点等方式执行程序,检查程序运行过程中的中间结果,以便寻找程序出错的原因。
DEBUG 主要命令一览表 DEBUG [d:] [path] [.exe] [ 参数]2节。
2)-U范围该命令对指定范围的内存单元进行反汇编,例如:-U 04BA:0100 0108或–U 04BA:0100 L9 此二命令是等效的。
(3)运行命令G,格式为:-G [=地址1][地址2[地址3。
]] 其中地址1规定了运行起始地址,后面的若干地址均为断点地址。
(4)追踪命令T,有两种格式:1)逐条指令追踪:-T[=地址] 该命令从指定地址起执行一条指令后停下来,显示寄存器内容和状态值。
2)多条指令追踪:-T[=地址][值] 该命令从指定地址起执行n条命令后停下来,n由[值]确定。
(5)显示内存单元内容的命令D,格式为:-D[地址]或-D[范围](6)修改内存单元内容的命令E,它有两种格式:1)用给定的内容代替指定范围的单元内容:-E地址内容表例如:-E 2000:0100 F3 “XYZ” 8D 其中F3,“X”“Y”“Z”和8D各占一个字节,用这五个字节代替原内存单元2000:0100到0104的内容,“X”“Y”“Z”将分别按它们的ASCII码值代入。
2)逐个单元相继地修改:-E地址例如:-E 100:18E4:0100 89.78 此命令是将原100号单元的内容89改为78。
78是程序员键入的。
(7)检查和修改寄存器内容的命令R,它有三种方式:1)显示CPU内部所有寄存器内容和标志位状态;格式为:-R R命令显示中标志位状态的含义如下表所示:标志名置位复位溢出Overflow(是/否)OVNV 方向Direction(减量/增量)DNUP 中断Interrupt(允许/屏蔽)EIDI 符号Sign(负/正)NGPL 零Zero(是/否)ZRNZ 辅助进位Auxiliary Carry(是/否)ACNA 奇偶Parity(偶/奇)PEPO 进位Carry(是/否)CYNC 2)显示和修改某个指定寄存器内容,格式为:-R 寄存器名例如打入:-R AX 系统将响应如下:AX FIF4 :表示AX当前内容为F1F4,此时若不对其作修改,可按ENTER键,否则,打入修改后内容,如:-R BX BX 0369 :059F 则BX内容由0369改为059F 3)显示和修改标志位状态,命令格式为:-RF 系统将给出响应,如OV DN EI NG ZR AC PE CY- 这时若不作修改可按ENTER键,否则在“-”号之后键入修改值,键入顺序任意。
实验一Debug 调试程序的应用一、实验目的1.掌握Debug常用命令的应用。
2.利用Debug调试可执行文件(*.EXE)。
二、实验内容1. 进入Debug,使用A命令将源程序写入100H开始的内存并汇编,然后使用G命令运行程序,接着用U命令反汇编,将机器指令送到起始地址为200H 的若干单元并加以验证,用Q命令退出Debug,返回DOS提示符。
2. 进入Debug,使用A命令将源程序写入100H开始的内存并汇编,然后使用G命令运行程序,接着用D命令观察运行结果后,在用U命令反汇编,用Q命令退出Debug,返回DOS提示符。
3.进入Debug,用A命令写入汇编源程序,接着用R命令显示状态,并用T命令单条执行指令,注意在执行命令的同时观察相应寄存器的状态。
4.练习使用填充命令F、搬家命令M和比较命令C。
5.利用Debug调试可执行文件(*.EXE)。
三、实验仪器、材料1. 软件DOSBOX、MASM2. PC微机一台四、实验步骤1.进入debug,使用A命令:-a100写入以下代码:MOV DL, 33H ;字符3的ASCII送DLMOV AH, 2 ;使用DOS的2号功能调用INT 21H ;进入功能调用,输出‘3’INT 20H ;执行INT 20H中断服务程序,结束程序,返回DOS 写完回车两下,再用-g=起始地址结束地址命令回车,再用-u命令回车,用-d100可得如图1-1,然后用-e200命令空格依次输入:B2 33 B4 02 CD 21 CD 20回车,用-d200可得如图1-2,用q退出debug。
2.进入dedug,使用A命令:-a300 写入以下代码MOV AL, [0120]ADD AL, [0122]DAAMOV BY[0124],ALMOV AL, [0121]ADC AL, [0123]DAAMOV BY[0125],ALINT 20用-g命令,再-d100查看结果如图2-1,在用U命令反汇编,用Q命令退出debug。
DEBUG的命令及功能1. A(assemble):将指令转换成机器码并存储到内存中。
-A100:在内存地址100处开始输入指令。
2. D(dump):显示内存中的内容。
-D100200:显示内存地址从100到200的内容。
3. E(enter):修改内存中的数据。
-E1004000:在内存地址100处将数据修改为40。
4. G(go):执行程序。
-G100:从内存地址100处开始执行程序。
6. Q(quit):退出DEBUG。
-Q:退出DEBUG程序。
7. R(registers):显示和修改CPU寄存器的值。
-R:显示所有寄存器及其值。
-RAX1234:将AX寄存器的值修改为12348. T(trace):单步跟踪程序的执行。
-T:执行下一条指令并停止。
9. P(proceed):继续执行程序直至下一个断点或程序结束。
-P:继续执行程序。
10. U(unassemble):将机器码转换成指令。
-U100120:从内存地址100处开始将机器码转换成指令。
11. B(breakpoint):设置断点。
-B100:在内存地址100处设置断点。
12. S (search):在内存中指定的内容。
- S 100 200 "Hello": 在内存地址100到200之间字符串"Hello"。
13. L(load):加载程序到内存中。
-L100:从内存地址100处加载程序。
14. W(write):将内存中的数据写入文件。
- W 100 200 file.txt: 将内存地址100到200的数据写入到文件file.txt。
15. M(move):将内存中的数据移动到指定的地址。
-M100200300:将内存地址100到200的数据移动到地址300处。
16. X (execute):执行子程序。
-X100:从内存地址100处执行子程序。
17. H(help):显示DEBUG命令的帮助信息。
常用DEBUG命令的功能及使用举例第一节 DEBUG的主要用途及DEBUG的调用DEBUG是为汇编语言设计的一种调试工具,它通过单步执行、设置断点等方式为汇编语言程序员提供了非常有效的程序调试手段。
DEBUG可以直接用来检查和修改内存单元、装入、存储及启动运行程序、检查及修改寄存器,也就是说DEBUG可深入到计算机的内部,可使用户更紧密地与计算机中真正进行的工作相联系。
不仅如此,对汇编语言初学者来说,DEBUG 也是练习使用汇编指令的一种有效工具。
初学者可以直接在DEBUG环境下执行汇编指令。
然而,在DEBUG下运行汇编语言源程序也受到了一些限制,它不宜汇编较长的程序,不便于分块程序设计,不便于形成以DOS外部命令形式构成的 .EXE文件,不能使用浮动地址,也不能使用ASM和MASM提供的绝大多数伪指令。
在DOS系统中,DEBUG是以DOS外部命令文件形式提供给用户的,名为DEBUG.EXE。
命令文件DEBUG.EXE一般存放在DOS子目录下,因此调用DEBUG时,只需在DOS提示符下键入: DEBUG [<驱动器名>:][<路径>][<文件名>[.<扩展名>]][<参数1>][<参数2>] < 回车>例如: C:\DOS>DEBUG A: B:进入DEBUG的提示符是符号“-”。
即,出现提示符“-”就表示可以接受DEBUG命令了。
当进入DEBUG时,寄存器和标志设成以下数值,这些值用于DEBUG调试中的程序。
段寄存器CS,DS,ES和SS均指向DEBUG末尾的第一个段。
IP寄存器置为0100H。
栈指针SP指向尾部或装入程序的暂存部分的底部。
其余寄存器皆取零值,但若用户调用时含文件说明,则CX含文件长度(长度大于64K 时BX含长度的高位);标志为各自的复位值;驱动器传送地址在代码段位移80H处。
注意,若DEBUG装入扩展名为.EXE的文件,则DEBUG需重定位且设置段寄存器指示器为文件中所定义的值。
debug指令研究1.数据传输指令(MOV)格式:MOV dst src功能:源操作数传送至目标单元,源操作数保持不变。
2.立即数不能直接传送到段寄存器应改为3.源操作数和目标操作数不能同时为存储器寻址如果需要在两个存储单元之间传输数据时,可借助于寄存器来实现:4.两个段寄存器之间不能直接传送数据可改为5.数据交换指令(XCHG)格式:XCHG dst,src功能:源操作数与目标操作数相互交换。
6.堆栈操作指令(PUSH/POP)(1)数据进栈指令(PUSH)格式:PUSH src(2)数据出栈指令(POP)格式:POP dst可以看出堆栈采用的是“后进先出“生成的数据结构。
7.查表转换指令(XLAT)功能:查表得到的字节数据送入AL中8.有效地址传送指令(LEA)格式:LEA dst,src功能:源操作数的有效地址EA传送到目标。
通过实验还发现有些通用寄存器都不能提供有效地址的存储单元:AX,CX,DX,SP只有BX,BP,SI,DI 可以提供有效地址的存储单元。
9.目标地址传送指令(LDS)格式:LDS dst,src功能:将源操作数中存放的地址指针“段基值:偏移地址“:的低16位传送到目标通用寄存器中,高16位传送到DS段寄存器中。
源操作数必须是存储器寻址,目标操作数为16位通用寄存器。
10.标志位传送指令LAHF 将标志寄存器的低8位传送到AH寄存器SAHF 将AH传送到标志寄存器的低8位PUSHF 标志位寄存器内容进栈POPF 将堆栈中弹出的数送标志位寄存器11.I/O数据传输指令(1)输入指令(IN)格式:IN ac,port功能:将端口的数据送入CPU累加器。
(2)输出指令(OUT)格式:OUT port,ac功能:将CPU累加器中的数据写入端口12.不带进位的加法指令格式:ADD dst,src功能:源操作数和目标操作数相加,结果送至目标单元。
13.带进位的加法指令格式:ADC dst,src功能:源操作数和目标操作数的和与进位标志CF相加,结果送至目标单元。
什么是DEBUG?DEBUG是DOS提供的用于调试可执行程序的工具软件,在DEBUG环境下,可直接检查和修改寄存器和内存的值,调试和运行程序,使用户进一步了解CPU内部的环境。
DEBUG程序的启动:在DOS的提示符下直接键入命令C:\>DEBUG ↙,进入DEBUG调试程序后,会出现DEBUG提示符“-”,此时就可以使用DEBUG 命令了。
在XP环境下,用鼠标点击“开始”→“所有程序”→“附件”→“提示符命令”。
出现:C:\ Document and Setting \ Administrator>_>CD C:\ ↙C:\>在C:盘的根目录下C:\>debug ↙进入DEBUG调试程序后,会出现DEBUG提示符“-”,此时就可以使用DEBUG命令了。
XP环境下Dos窗口大小的切换用 Alt +↙翻到讲义第12页。
1、R命令 (Register)。
功能:查看和修改寄存器的值。
格式:R↙在R命令后面直接打入回车,显示当前CPU内部所有寄存器的值、标志位状态及将要执行的下一条指令。
若要修改某个寄存器的值,直接在R后面输入该寄存器的名,然后回车,这时会显示该寄存器的当前值,新值直接输入即可。
如:R AX ↙AX 0000 ( 0000 当前值 ):1234 ↙( 1234 新值)翻回讲义到44页,修改实验内容第一部分12个寄存器的值。
AX=1020H BX=5060H CX=A0B0H DX=E0F0H SP=FFFFH BP=0200H SI=3040H DI=7080H DS=2000H ES=0300H SS=0400H CS=0100H翻回到讲义第10页2、D命令 (Dump)。
功能:显示存储器单元的值。
格式:D 段寄存器名:起始地址在使用D命令之前,我们首先要明白,内存已经被我们划分为4个段,即:代码段CS、数据段DS、堆栈段SS和附加段ES。
做题时要明确显示或修改的是哪个段的内容。
查看数据段100H单元开始的后面128个字节内存单元的值。
第四部分有关软件软件一调试程序DEBUG汇编语言源程序经过编译、连接后生成可执行文件。
当运行可执行文件时,避免不了出现错误的结果,如果直接查找错误就比较困难。
操作系统自带的动态调试程序DEBUG是调试汇编语言的有力工具。
通过DEBUG程序的运行,可以显示或修改寄存器的内容。
也可以显示或修改存储器的内容。
可以单步执行,可以断点执行,可以连续执行。
也可以对存储器的目标代码进行反汇编。
通过这些操作,可以查看程序的运行情况和查找错误。
一、DEBUG的调用:1、DEBUG的调用格式:DEBUG的调用格式有两种:(1) DEBUG↵(2) DEBUG<文件标识符>↵在DEBUG成功的调入内存后,将出现提示符“-”,说明系统是在DEBUG程序管理之下。
DEBUG所属的命令,只有在出现DEBUG提示符后才能有效。
第一种方法调入后,则DEBUG程序或者与正在内存中的内容打交道,或者可以通过NAME和LOAD命令从指定的盘上读入被调试的程序。
第二种方法,则由OS把DEBUG程序调入内存后,DEBUG又直接将“文件标识符”所指的可执行文件调入内存中(对于.EXE文件,DEBUG把它装入到最低可用的区段中,并从100H开始装入。
对于不同的机器,或同一机器的不同的环境,其段地址是不同的)。
2、寄存器的初始化:进入DEBUG后,各个寄存器和标志位均被初始化。
其值可以用寄存器查看命令查看。
比如下图:3、标志寄存器:二、DEBUG命令一览表:关于DEBUG程序的更详细用法,可再进入DEBUG程序后输入“?”而获得。
DEBUG的命令共有19条。
三、常用DEBUG命令:1、反汇编命令U:用于将存储器中的指令码进行反汇编,翻译成较有意义的助记符形式,以帮助理解。
显示它们的段地址、偏移地址、机器码和汇编语言程序。
如图1.5所示。
一般常用以下三种格式:(1)U↙(2)U[address] ↙(3)U range↙其中,address是反汇编的起始地址,由CS:IP或IP指定。