微机原理 debug指令详解
【微机原理】DEBUG命令详解
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)
演示: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 的功能。
(记录验证过程)。
实验3.1调试工具Debug的使用及基本指令的用法
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指令详解
2014-12-3
6
D命令使用
-d cs:100 按以下格式显示地址范围中的内容(假定 CS=0AF6): 0AF6:0100 77 61 6E 67 78 69 61 6F- wangxiao 69 6A 6B FF 0E 00 01 FF ijk…..
2014-12-3
7
三、DEBUG 命令详解
2014-12-3
5
三、DEBUG 命令详解
★ D命令 格式:D [地址] 或D [起始地址][目的地址] 功能:以内存映象方式显示内存中的数据。 参数说明:指定要显示内容的内存单元的起始 地址和结束地址,或起始地址和长度。如果不 指定 [地址],Debug将从以前 d 命令中所指 定的地址范围的末尾开始显示 128个字节的内 容;第一次从DS:100处开始显示。
2014-12-3
9
三、DEBUG 命令详解
★ T命令 格式:T [=地址] [指令条数] 功能: 逐条跟踪程序的执行,每条指令执行后都 将显示各寄存器的内容。 参数说明:[=地址] 指定第一 条要执行指令的位置。如果 不指定地址,则默认地址是在 CS:IP 寄存器中指定的当前地址,[指令条数] 指定在将 控制返回给 Debug 之前要执行的指令数,默认 值为 1。
debug指令详解
2014-12-3
1
一、DEBUG概述
1、 DEBUG是在DOS状态下面供程序员使用的 程序调试工具。 2、它可以用来检查内存中任何地址中的内容以 及修改特定地址中的内容。 3、DEBUG还可以用于逐指令执行某个程序,追 踪程序的执行过程,比较一条指令执行前后数值 变化情况,读写文件与磁盘扇区。 4、DEBUG还可以用于读写端口中的数值。
微机原理实验debug调试
汇编语言调试程序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 主要命令一览表 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 调试程序的应用一、实验目的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的使用
南通大学计算机学院
DEBUG的使用 的使用
Edit 指令
这是修改内存单元的命令,先进入 debug 模式,再进行以下操作: C:\WINDOWS\COMMAND>debug [Enter] -d 100 L20 [Enter] 146F:0100 65 20 68 69 67 68 20 6D-41 6D 6F 72 79 20 61 72 e high mAmory ar 146F:0110 65 61 2E 0D 0A 22 4D 6F-64 75 6C 65 34 00 5E 14 ea..."Module4.^. -e 107 [Enter] 146F:0107 6D.41 [Enter] 注意!用-E显示后,如果不要修改內容,可以直接按 Enter 键结束E命令;如果要继续修 改的话,就按空格键,DEBUG 会自动显示原来内容,等待输入新值。 C:\WINDOWS\COMMAND>debug [Enter] -d 100 L20 [Enter] 146F:0100 65 20 68 69 67 68 20 6D-41 6D 6F 72 79 20 61 72 e high mAmory ar 146F:0110 65 61 2E 0D 0A 22 4D 6F-64 75 6C 65 34 00 5E 14 ea..."Module4.^. -e 107 [Enter] 146F:0107 6D.41 [Space] 146F:0108 41.42 [Space] 6D.43 [Enter] 这时显示内存可以看到: -d 100 L10 [Enter] 146F:0100 65 20 68 69 67 68 20 41-42 43 6F 72 79 20 61 72 e high ABCory ar
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环境下执行汇编指令。
然而,在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指令研究报告
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指令详解
功能:从指定的地址开始修改内存值。参数说明:[地址]指定存放[字节串]第一个内存的位置,[字节串]是要放入内存单元中的数据。
★F命令
格式:F[地址范围] [字节或字节串]
功能:将要填写的字节或字节串填入由地址范围指定的存储器中。
参数说明:[地址范围]指定要填充内存区域的起始和结束地址,或起始地址和长度。[字节或字节串]指定要输入的数据,可以由十六进制数或引号包括起来的字符串组成。
★H命令
格式:H[数值][数值]
功能:分别显示两个十六进制数相加的和以及第一个数减去第二个数的差。
参数说明:[数值]表示从0到FFFFh范围内的任何十六进制数字。
★I命令
格式:I[端口地址]
功能:从指定的端口输入并显示(用十六进制)指定端口中的数据(字节)。参数说明:[端口地址]指定要读取数据的端口地址。
★U命令
格式:U[起始地址]或者[地址范围]
功能:将内存中的内容转换为汇编语句。
参数说明:[起始地址]或者[地址范围]指定要反汇编代码的起始地址和结束地址,或起始地址和长度。
★W命令
格式:W[地址] [盘符:] [起始扇区] [扇区数]
功能:将内存中的数据写入磁盘中。
参数说明:[地址]指定要写到磁盘文件的文件或部分文件的起始内存地址。如果不指定address,Debug程序将从CS:100开始。[盘符:]指定包含目标盘的驱动器。该值是数值型:0 = A, 1 = B, 2 = C,等等。[起始扇区]指定要写入第一个扇区的十六进制数。[扇区数]指定要写入的扇区数。
在DEBUG状态下,所有数据都作为字节序列,可以用DEBUG把任何类型的文件读入内存中。DEBUG能够处理的数据为两种:十六进制数和ASCⅡ码,使用两位数表示十六进制数据(0~9,A~F)。在DEBUG中涉及内存中的数据时,要指定数据所在的内存单元的地址,地址的输入格式是: [段地址]: [位移]。如果没有输入地址,DEBUG将假定为当前内存段,从位于地址100H的字节开始。前100H字节保留给程序段前缀使用(称PSP结构,包含程序执行的各种信息),该区域用于建立DOS与程序之间的联系。在DEBUG中,使用四位十六进制数表示地址(0~9,A~F)。
调试工具debug的使用及基本指令的用法 (实验2)
10DD:0100 7C0A JL 010C(标志寄存器的各个标志位)
(当前CS:IP所指向的指令)
标志寄存器各标志位的含义:
溢出标志OF: OV/NV(1溢出/0不溢出)
方向标志DF: DN/UP(1减/0增)
《微机原理与接口技术》实验报告
实验序号:实验2实验项目名称:调试工具debug的使用及基本指令的用法
学 号
姓 名
专业、班
实验地点
指导教师
实验时间
一、实验目的及要求
1、掌握debug的基本命令和8086的各种基本指令的用法。
2、掌握DEBUG下的主要命令及在DEBUG下编写简单程序、调试程序的方法;
3、理解CPU各种寄存器的作用:
10DD:2010 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
10DD:2020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
10DD:2030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
10DD:2070 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
4、观察和修改内存单元的内容
-e 2000修改从地址DS:2000H开始内存单元的内容
10DD:2000 00.01 00.02
微机原理 实验一 DEBUG的使用(1)
什么是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程序的运行,可以显示或修改寄存器的内容。
也可以显示或修改存储器的内容。
可以单步执行,可以断点执行,可以连续执行。
也可以对存储器的目标代码进行反汇编。
通过这些操作,可以查看程序的运行情况和查找错误。
一、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指定。
微机原理 实验1(DEBUG的使用)
(3)显示和修改标志位状态 ) 格式: 格式:RF 若不需要修改任一个状态标志,则直接按 若不需要修改任一个状态标志,则直接按enter键; 键 若有一个或多个标志需要修改, 若有一个或多个标志需要修改,则可以输入此标志的 相反值。输入的标志的次序是无关的,输入的各个标 相反值。输入的标志的次序是无关的, 志之间,可以没有空格。 志之间,可以没有空格。 在调试程序DEBUG中提供了测试标志位的手段,它用符 中提供了测试标志位的手段, 在调试程序 中提供了测试标志位的手段 号表示标志位的值。每种标志位的符号表示如下表: 号表示标志位的值。每种标志位的符号表示如下表:
4、运行命令G(Go) 、运行命令 ( ) 格式: 格式:G [=address1] [address2 [address3 . . . ] ] 说明: 指定了运行的起始地址, 说明:address1指定了运行的起始地址,如不指定则从 指定了运行的起始地址 当前的CS:IP开始运行。后面的地址均为断点地址,当 开始运行。后面的地址均为断点地址, 当前的 开始运行 指令执行到断点时, 指令执行到断点时,就停止执行并显示当前所有寄存器 及标志位的内容和下一条将要执行的指令。 及标志位的内容和下一条将要执行的指令。
* 地址的格式为: [段地址 偏移地址 地址的格式为: 段地址 段地址:] 其中,段地址可以是段寄存器名,也可以是一个数值。 其中,段地址可以是段寄存器名,也可以是一个数值。若 命令中没有指定段地址, 命令自动显示DS段的内容 命令中没有指定段地址,则D命令自动显示 段的内容 。 命令自动显示 如:D DS:0100 、D 0400:0200、D 0100 、 * 范围的格式为: 范围的格式为 段地址:] (1)[段地址 开始偏移地址 结尾偏移地址 ) 段地址 * 结尾地址只允许有地址位移量,不允许有段地址 结尾地址只允许有地址位移量, 如:D CS:100 CS:110 是错误的。 是错误的。 应为: 应为:D CS:100 110 段地址:] (2) [段地址 开始偏移地址 ) 段地址 L长度 长度
微机原理 debug 使用
修改内存单元内容的命令E
给定内容代替指定范围的单元内容,格式为: -E 地址 内容表 例如: -E DS:100 F3 58 59 5A 8D 用F3,58,59,5A,8D五个字节代替内存 单元DS:100到DS:100的内容。
修改内存单元内容的命令E
逐个单元相继地修改,格式为: -E 地址 例如: -E DS:100 18E4:0100 89.78 此命令是将0100单元内容89改为78。78是 程序员从键盘输入的。程序员在修改完一个 单元后,可按“空格”键继续修改下一单元 内容,直至按“回车”键结束该命令。
运行命令G
格式为: -G [=地址1][地址2[地址3…]] 例如: -G 0100 地址1指定了运行的起始地址,后面的均为 断点地址,当指令执行到断点时,就停止执 行并显示当前所有寄存器及标志位的内容和 下一条要执行的指令。
汇编命令A
格式为: -A [地址] 例如: -A 该命令允许输入汇编语言语句,并能把它 们汇编成机器代码,相继地存放在从指定地 址开始的存储区中。必须注意:输入的数字 均默认为十六进制数。
关于参数的几点说明:
7、当命令出现语法错误时,将在出错位置显 示“^ Error” 8、可用^C或^Break来终止当前命令的执行, 还可用^S来暂停屏幕显示(当连续不断地显 示信息时)
标志位状态的含义如下所示:
标志名, OF(溢出标志) DF (方向标志) IF (中断标志) SF (符号标志位) ZF (零标志) AF () PF (奇偶标志) CF (进位标志 ) 标志 1 OV UP DI PL NZ NA PO NC 标志 0 NV DN EI NG ZR AC PE CY
退出DEBUG命令Q
格式为: -Q 该命令退出DEBUG程序,返回DOS。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、DEBUG概述
DEBUG是在DOS状态下面供程序员使用的程序调试工具。它可以用来检查内存中任何地址中的内容以及修改特定地址中的内容。DEBUG还可以用于逐指令执行某个程序,追踪程序的执行过程,比较一条指令执行前后数值变化情况,读写文件与磁盘扇区。此外,DEBUG还可以用于读写端口中的数值。
参数说明:[地址]指定存放键入汇编语言指令的内存单元的位置。
★C命令
格式:C[源地址范围][目的地址]
功能:比较两内存区域中的内容是否相同。若不同则按字节显示其地址和内容,若相同则不显示任何内容。
参数说明:[源地址范围]指定要比较的内存第一个区域的起始和结束地址,或起始地址和长度。[目的地址]指定要比较的第二个内存区域的起始地址。
格式:E[地址] [字节串]或E[地址]
功能:从指定的地址开始修改内存值。参数说明:[地址]指定存放[字节串]第一个内存的位置,[字节串]是要放入内存单元中的数据。
★F命令
格式:F[地址范围] [字节或字节串]
功能:将要填写的字节或字节串填入由地址范围指定的存储器中。
参数说明:[地址范围]指定要填充内存区域的起始和结束地址,或起始地址和长度。[字节或字节串]指定要输入的数据,可以由十六进制数或引号包括起来的字符串组成。
功能:定义DEBUG使用的文件。
参数说明:[盘号: ] [路径] [文件名] [扩展名]指定文件所在的盘符,路径,文件名和扩展名。
★O命令
格式:O[端口地址] [数据]
功ቤተ መጻሕፍቲ ባይዱ:发送数据(字节)到指定的输出端口。
参数说明:[端口地址]指定要写入数据的端口地址,[数据]指定要向[端口地址]中写入的字节值。
注意:在D命令中若不指定段寄存器,默认规定为DS。
★E命令使用说明:当使用E命令时,有两种使用格式: 1、用E命令中包含的字节串替换从指定的地址开始的多个字节的内容;2、E命令后不跟字节串,则允许按顺序方式显示和修改内存值,按下空格键显示下一字节内容,若想修改,直接输入相应值;按下减号键显示上一字节内容,若想修改,直接输入相应值。3、停止执行e命令。按ENTER键。在任何字节位置都可以按ENTER。
0AF6:0101 C0 00 1000:0301
0AF6:0102 89 00 1000:0302
0AF6:0103 D8 00 1000:0303
0AF6:0104 65 00 1000:0304
0AF6:0105 66 00 1000:0305
★D命令使用
说明:当使用d命令时,Debug分两个部分显示内存单元内容:左边显示内存单元中存放的十六进制数;右边显示左边的十六进制所表示的ASCII字符,所有不可打印字符用句号(.)表示。每行显示16个字节的内容,在第八和第九个字节之间有一个连字符“–“。
★L命令
格式:L[地址][盘号:][逻辑扇区号][扇区数]
功能:将一个文件或盘的绝对扇区装入存储器。
参数说明:[地址]指定要在其中加载文件或扇区内容的内存空间的起始位置。[盘号:]指定包含读取指定扇区的磁盘的驱动器。该值是数值型,表示为:0 = A, 1 = B, 2 = C,……等。[逻辑扇区号]指定要加载其内容的第一个扇区的十六进制数。[扇区数]指定要加载其内容的连续扇区的十六进制数。
格式:S[地址范围] [字符串]
功能:在指定的地址范围内查找给定的字符串。
参数说明:[地址范围]指定要搜索范围的开始和结束地址。[字符串]指定要搜索的字节值或字符串。字符串应包括在引号中。
★T命令
格式:T[=地址] [指令条数]
功能:逐条跟踪程序的执行,每条指令执行后都将显示各寄存器的内容。
参数说明:[=地址]指定第一条要执行指令的位置。如果不指定地址,则默认地址是在CS:IP寄存器中指定的当前地址,[指令条数]指定在将控制返回给Debug之前要执行的指令数,默认值为1。
DEBUG输入数据时有两种方法:提示方法和非提示方法。在提示方法下,输入要求输入数据的命令,后跟保存数据的地址。执行后可以看到该地址中已有的内容及一个冒号提示符。此时可以在提示符下输入一个新的值或者按下回车键或CTRL+C回到“—”提示符。在非提示方法下,输入保持数据的内存地址以及要输入的数据。DEBUG的启动:进入DOS状态下,键入DEBUG,按ENTER键,如:C:\>DEBUG,则屏幕显示:-
★H命令
格式:H[数值][数值]
功能:分别显示两个十六进制数相加的和以及第一个数减去第二个数的差。
参数说明:[数值]表示从0到FFFFh范围内的任何十六进制数字。
★I命令
格式:I[端口地址]
功能:从指定的端口输入并显示(用十六进制)指定端口中的数据(字节)。参数说明:[端口地址]指定要读取数据的端口地址。
★P命令
格式:P[=地址] [数据]
功能:执行一个子程序调用指令,循环指令,中断指令或一个重复字符串指令,停止在下一条指令上。
参数说明:[=地址]指定第一条要执行指令的位置。如果不指定地址,则默认地址是在CS:IP寄存器中指定的当前地址,[数据]指定在将控制返回给Debug之前要执行的指令数,默认值为1。
0100:0100 dec word ptr [100]
0100:0102 dec wo ptr [100]
0100:0105 dec byte ptr [100] 2.在DEBUG下,应注意区分立即操作数和内存地址的操作数,使用包括在中括号([ ])中的操作数表示内存地址。3.在DEBUG下,能够使用的伪指令仅有DB和DW两个,分别用于定义字节和字操作数,此时定义的操作数被存放在该定义指令所在的内存空间中。如下列所示(注意内存空间的变换,why?):-a 0100:0100
★D命令
格式:D[地址]或D[起始地址][目的地址]
功能:以内存映象方式显示内存中的数据。参数说明:指定要显示内容的内存单元的起始地址和结束地址,或起始地址和长度。如果不指定[地址],Debug将从以前d命令中所指定的地址范围的末尾开始显示128个字节的内容;第一次从DS:100处开始显示。
★E命令
★M命令
格式:M[地址范围][起始地址]
功能:把地址范围内的存储器单元的内容移到起始地址的指定地址中
参数说明:[地址范围]指定要复制内容的内存区域的起始和结束地址,或起始地址和长度。[起始地址]指定要将range内容复制到该位置的起始地址。
★N命令
格式:N[盘号: ] [路径] [文件名] [扩展名]
★G命令
格式:G[=起始地址] [[断点]……]
功能:执行正在调试的程序,当达到断点时停止执行,并且显示寄存器标志和下一条要执行的命令。参数说明:[=起始地址]指定当前在内存中要开始执行的指令所在的内存单元的地址。如果不指定[=起始地址],DEBUG将从CS:IP寄存器中的当前地址开始执行程序。[[断点]……]指定可以设置为g命令的部分的1到10个临时断点。
从键盘键入下面命令:-d cs:10010fDebug按以下格式显示地址范围中的内容(假定CS=0AF6):
0AF6:0100 77 61 6E 67 78 69 616F-696A6B FF 0E 00 01 FF wangxiaoijk…..键入以下命令,Debug将从CS:100开始显示20h个字节的内容:-d cs:100 l20键入以下命令,Debug将显示范围从DS段的100h到115h中所有字节的内容:-d 100 115
0100:0100 DB ‘ABCDEFG’
0100:0107
★C命令使用说明:如果[源地址范围]和[目的地址]中内存单元的数据相同,Debug将不显示任何内容而直接返回到Debug提示符。如果有差异,Debug将按如下格式显示:[源地址]源地址中内容目的地址中内容[目的地址]
如下列所示:
-C CS:100 105 DS:300;(假定CS=0AF6;DS=1000)0AF6:0100 88 00 1000:0300
0100:0100 jmp 102
0100:0102 jmp near 105
0100:0105 jmp far10a2.汇编语言指令所涉及到的操作数可以是字操作数也可以是字节操作数,在语句不能判别操作数的类型时,可以使用前缀word ptr或者前缀byte ptr指定操作数的类型。缩写分别是:wo和by。如下列所示:-a0100:0100
注意:
1.若地址部分只输入偏移量,则E命令认为段包括在DS寄存器中。
2. [字节串]的值可以是十六进制字节或字符串。使用空格、逗号或制表符来分隔值。必须将字符串包括在单或双引号中。
3.使用E命令后,内存单元中原来的数据将丢失,或者说被新输入的数据覆盖。从键盘键入下面命令:-E 100 Debug按下面的格式显示第一个字节的内容(假定DS=0AF6):0AF6:0100 EB.要将该值更改为61,请在插入点键入(使用符号”_”表示) 61,如下所示:0AF6:0100 AB.61_此时,若按下空格键,将显示下一个内存单元中的内容: 0AF6:0100 AB.61 EF._此时,又可以在插入点键入新的内容,改写当前显示的内存内容,若不需要改写当前内存单元的内容,可以直接按下空格键,将显示下一个内存单元的内容,如此,一直到按ENTER停止e命令并返回到Debug提示符下。若使用减号键,操作和按下空格键一样,区别在于将显示上一个内存单元的内容。
★U命令
格式:U[起始地址]或者[地址范围]
功能:将内存中的内容转换为汇编语句。
参数说明:[起始地址]或者[地址范围]指定要反汇编代码的起始地址和结束地址,或起始地址和长度。
★W命令
格式:W[地址] [盘符:] [起始扇区] [扇区数]
功能:将内存中的数据写入磁盘中。
参数说明:[地址]指定要写到磁盘文件的文件或部分文件的起始内存地址。如果不指定address,Debug程序将从CS:100开始。[盘符:]指定包含目标盘的驱动器。该值是数值型:0 = A, 1 = B, 2 = C,等等。[起始扇区]指定要写入第一个扇区的十六进制数。[扇区数]指定要写入的扇区数。