掌握DEBUG基本命令
debug常见命令使用说明

五、DEBUG调试程序DEBUG.EXE程序是专门为分析、研制和开发汇编语言程序而设计的一种调试工具,具有跟踪程序执行、观察中间运行结果、显示和修改寄存器或存储单元内容等多种功能。
它能使程序设计人员或用户触及到机器内部,因此可以说它是80X86CPU的心灵窗口,也是我们学习汇编语言必须掌握的调试工具。
1)DEBUG程序使用在DOS提示符下键入命令:C>DEBUG [盘符:][路径][文件名.EXE][参数1][参数2]这时屏幕上出现DEBUG的提示符“-”,表示系统在DEBUG管理之下,此时可以用DEBUG 进行程序调试。
若所有选项省略,仅把DEBUG装入内存,可对当前内存中的内容进行调试,或者再用N和L命令,从指定盘上装入要调试的程序;若命令行中有文件名,则DOS把DEBUG 程序调入内存后,再由DEBUG将指定的文件名装入内存。
2)DEBUG的常用命令(1)汇编命令A格式:A[起始地址]功能:将输入源程序的指令汇编成目标代码并从指定地址单元开始存放。
若缺省起始地址,则从当前CS:100地址开始存放。
A命令按行汇编,主要是用于小段程序的汇编或对目标程序的修改。
(2)反汇编命令U格式1:U[起始地址]格式2:U[起始地址][结束地址|字节数]功能:格式1从指定起始地址处开始将32个字节的目标代码转换成汇编指令形式,缺省起始地址,则从当前地址CS:IP开始。
格式2将指定范围的内存单元中的目标代码转换成汇编指令。
(3)显示、修改寄存器命令R格式:R[寄存器名]功能:若给出寄存器名,则显示该寄存器的内容并可进行修改。
缺省寄存器名,则按以下格式显示所有寄存器的内容及当前值(不能修改)。
AX=0000 BX=0004 CX=0020 DX=0000 SP=0080 BP=0000 SI=0000DI=0000 DS=3000 ES=23A0 CS=138E IP=0000NV UP DI PL NZ NA PO NC138E:0000 MOV AX,1234-R AX ;输入命令AX 0014 ;显示AX的内容:;供修改,不修改按回车。
DEBUG的使用及调试方法

DEBUG的使用及调试方法1、实验目的和要求:掌握DEBUG下的主要命令如:U、T、D、E、R、A、G、Q命令等。
掌握调试方法,理解CS:IP的作用,要求能在DEBUG下编写简单程序。
2. DEBUG的功能DEBUG是专门为汇编语言设计的调试工具,它通过单步、设置断点等方式,为使用者提供了非常有效的调试手段。
在DEBUG下所有输入的数据都是十六进制,所以不需要后面加H。
并且不区分大、小写字母。
3. DEBUG的调用在DOS下有两种方式调用DEBUG:(1)把执行(调试)文件装入存储器中,格式为:C>DEBUG 文件名.EXE(2)先调用DEBUG,然后用N、L命令把执行(调试)文件装入存储器。
格式为:C>DEBUG-N 文件名.EXE-L4. DEBUG的主要命令(1) U(反汇编):将机器指令进行反汇编,默认的寄存器是CS:IP,从指定地址开始反汇编32个字节,它的格式是:-U[ START-ADDR]-U[ START—ADDR END—ADDR]-U 100 ;汇编开始于CS:100-U 100 150 ;反汇编从100H 到150H的内容。
⑵T(跟踪):以单步方式执行程序。
-T ;执行一条指令。
-T 10 ;执行下面10H(16)条指令。
-T=3 2 ;从指定IP=0003开始,执行下面2条指令.(3)A (把符号指令汇编成机器码):-A 100 ;从指定地址100H开始汇编,结果写入内存。
-A ;不指定地址,则从上次A命令开始汇编。
在A命令下不能使用字段名,A命令只识别指令和DB、DW的伪指令。
⑷G (运行可执行程序):-G 200 ;从程序当前地址执行到200H结束-G ;从程序当前位置执行到程序结束-G =200 260 ;从指定(200H)或当前地址开始执行,遇到断点(260H)停止,显示寄存器和标志寄存器的内容。
⑸E(检查修改内存单元内容):默认寄存器是DS,格式是:-E[ ADDRESS] [表]-E 105 13 3A 21 ;从DS:105H开始输入3个字节的内容-E CS:211 21 2A ;从CS:211H开始输入2个字节的内容-E 110 ‘anything’;输入从DS:110H开始的字符串-E 12C ;检查修改DS:12C的内容该操作等待从键盘的输入一个或多个十六进制值的字节,字节之间用空格隔开。
Debug常用命令实践

Debug常用命令实践一实验目的<1>学习Debug常用命令、掌握观察寄存器和内存单元的方法。
<2>获取计算机只认识机器语言的直接感受。
<3>熟悉汇编语言编程工具的使用。
二 Debug常用命令1.汇编命令A 格式:-A [地址]功能:从指定地址开始允许输入汇编指令,并将汇编成机器指令代码从指定代码开始存放,若不指定地址则系统默认的地址开始存放,按回车键退出汇编状态。
应用:用于调试一条指令或几条指令组成的一个程序段。
2.显示或修改寄存器命令R 格式: -R [寄存器名]功能:若指定寄存器,则显示指定寄存器的内容,并可进行修改;若不要修改,则按Enter键,若为指定寄存器,则默认显示所有寄存器内容。
应用:常用于寄存器的值查看指令的执行结果。
3.内存单元内容的,命令E 格式:-E [地址] 内容表功能:若指定内容表,则用内容表中的内容代替指定地址开始存储单元的值,否则,从指定地址考试逐个单元显示其内容,并等待用户修改。
按空格键继续显示下一个单元的值,按回车键结束。
应用:常用于在调试程序的过程中改变变量的初始值。
4.显示内存单元内容的命令D,格式:-D [地址] 或–D [范围]功能:前者为显示指定地址开始的一段存储单元的值;后者为显示指定范围内存存储单元的值。
应用:常用于在调试过程中检查变量的值.例如:-D 200 ;显示从DS:200单元开始的各单元的值-D 200 L10 ; 显示从DS:200单元开始的10个字节单元的值。
5.单步执行命令T 格式:-T [=地址]功能:从从指定地址执行一条指令后停下来,显示寄存器内容和状态值,若未指定地址,则执行当前指令的下一条指令。
6.反汇编命令U 格式:-U [地址] 或–U [范围]功能:从指定地址开始,反汇编32个字节,或者对指定范围内的主存内容进行反汇编,若没有指定地址,则接着上一个U命令的最后一个单元开始;若还没有使用过U命令,则从当前cs:ip开始。
汇编语言程序设计实验DEBUG基本命令的使用

ERROR:
MOV AH,9
LEA DX,WARN
INT 21H
JMP RESTINT 21H
CODES ENDS
END START
调试分析
运行截图
教师评阅:
年月日
评分
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
RESTORE:
MOV AH,9
LEA DX,HINT
INT 21H
MOV AH,10
LEA DX,STRING
INT 21H
MOV BL,STRING+1
MOV BH,0
LEA SI,STRING+2
MOV BYTE PTR [SI+BX],'$'
MOV CX,BX
MOV BL,2
CHECK:
CMP STRING[BX],'A'
JL ERROR
CMP STRING[BX],'Z'
JG ERROR
ADD BL,1
LOOP CHECK
MOV BL,STRING+1
MOV BH,0
MOV CX,BX
MOV BL,2
《微机原理与汇编语言程序设计》实验(上机)报告
班级·学号姓名实验日期任课教师
实验名称
实验一DEBUG基本命令的使用
验证型
实验目的及要求:
1. 掌握DEBUG的基本命令及功能;
实验内容:
1.编写一个小程序,从键盘接收一个大写字母,存放到指定内存单元BUF1,并转换成为对应的小写字符,存放到内存单元BUF2。上机编辑、汇编、连接并运行。
debug 的使用

Debug是一种程序调试工具,主要用于帮助程序员检查和修复程序中的错误。
以下是如何使用Debug的基本步骤:
设置断点:断点是一种标记,告诉Debug从标记的地方开始查看。
在要设置断点的代码行上单击鼠标左键即可。
运行程序:在代码区域右击,选择Debug执行。
单步执行:点击Step Into(F7)这个箭头,或者直接按F7,以一行一行地操纵代码,从而判断程序的执行流程是否与预期一致。
查看变量值:在执行过程中,可以查看变量的当前值,以了解程序状态。
删除或禁用断点:选择要删除的断点,单击鼠标左键即可。
如果是多个断点,可以每一个再点击一次。
也可以一次性全部删除。
以上是使用Debug的基本步骤,但请注意,具体使用方式可能会根据Debug的具体版本和配置有所不同。
dos汇编debug基本命令程序

dos汇编debug基本命令程序DOS汇编(Debug)基本命令程序在学习和编写DOS汇编语言程序时,了解和掌握调试程序是非常重要的。
DOS提供了一个非常有用的调试器,即Debug。
Debug是一个基本的汇编语言调试程序,它可以让程序员在运行程序时进行单步执行,查看寄存器和内存的内容,以及进行程序的调试和错误修复。
本文将介绍DOS汇编(Debug)基本命令程序。
一、启动Debug要启动Debug,可以在DOS命令提示符下输入"debug"命令,然后按Enter键。
此时,会显示Debug的提示符"-",表示Debug 已经启动。
二、基本命令Debug提供了一系列命令,用于执行和调试汇编语言程序。
下面是一些常用的基本命令:1. a(assemble):将汇编指令翻译成机器码,并将其写入内存中。
例如,输入"a 100"表示从内存地址100开始输入汇编指令。
2. d(dump):显示内存中的内容。
可以使用"d"命令来查看内存中的指令和数据。
例如,输入"d 100"表示从内存地址100开始显示内存内容。
3. e(enter):修改内存中的指令或数据。
可以使用"e"命令来修改内存中的指令或数据。
例如,输入"e 100"表示修改内存地址100处的内容。
4. g(go):执行程序。
使用"g"命令可以让程序开始执行。
例如,输入"g"表示开始执行程序。
5. r(register):显示和修改寄存器的内容。
可以使用"r"命令来查看和修改寄存器的内容。
例如,输入"r ax"表示显示或修改AX寄存器的内容。
6. t(trace):单步执行程序。
使用"t"命令可以让程序以单步执行的方式运行。
DEBUG的基本命令使用
实验一 DEBUG的基本命令使用实验名称:利用DEBUG验证寻址方式实验目的:掌握DEBUG的常用指令(R,D,E,A,U,T 指令)的使用方法,理解不同寻址方式的特点实验内容:在DEBUG中利用A命令输入以下汇编指令,并用U命令显示,利用T 命令单步跟踪指令的执行过程,利用R或者D命令观察相关寄存器或者内存单元内容的变化(相关过程和结果要体现在实验报告上)。
(1)立即寻址MOV AX,1MOV BL,02HMOV BH,34H-a13AE:0100 mov ax,113AE:0103 mov bl,0213AE:0105 mov bh,3413AE:0107-rAX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=13AE ES=13AE SS=13AE CS=13AE IP=0100 NV UP EI PL NZ NA PO NC13AE:0100 B80100 MOV AX,0001-tAX=0001 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=13AE ES=13AE SS=13AE CS=13AE IP=0103 NV UP EI PL NZ NA PO NC13AE:0103 B302 MOV BL,02-tAX=0001 BX=0002 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=13AE ES=13AE SS=13AE CS=13AE IP=0105 NV UP EI PL NZ NA PO NC13AE:0105 B734 MOV BH,34-tAX=0001 BX=3402 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=13AE ES=13AE SS=13AE CS=13AE IP=0107 NV UP EI PL NZ NA PO NC13AE:0107 0000 ADD [BX+SI],AL DS:3402=00(2)寄存器寻址在验证完(1)后,执行mov ax,bx-a13AE:0107 mov ax,bx13AE:0109-tAX=3402 BX=3402 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=13AE ES=13AE SS=13AE CS=13AE IP=0109 NV UP EI PL NZ NA PO NC13AE:0109 0000 ADD [BX+SI],AL DS:3402=00 -rAX=3402 BX=3402 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=13AE ES=13AE SS=13AE CS=13AE IP=0109 NV UP EI PL NZ NA PO NC13AE:0109 0000 ADD [BX+SI],AL DS:3402=00(3)直接寻址用e命令向DS:1000处写入1234H,用D命令DS:1000处内容,然后执行mov AX,[1000H]-e 13a8:1000 34 12-d 13a8:1000 100113A8:1000 34 12 4.-a13AE:0109 mov ax,[1000]13AE:010C-tAX=0000 BX=3402 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=13AE ES=13AE SS=13AE CS=13AE IP=010C NV UP EI PL NZ NA PO NC13AE:010C 0000 ADD [BX+SI],AL DS:3402=00 -rAX=0000 BX=3402 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=13AE ES=13AE SS=13AE CS=13AE IP=010C NV UP EI PL NZ NA PO NC13AE:010C 0000 ADD [BX+SI],AL DS:3402=00(4)寄存器间接寻址用E命令向DS:1000处改写5678H,用D命令观察DS:1000处内容,然后执行-e13a8:1000 78 56-d 13a8:1000 100113A8:1000 78 56 xV-a13AE:010C mov si,100013AE:010F mov ax,[si]13AE:0111-tAX=0000 BX=3402 CX=0000 DX=0000 SP=FFEE BP=0000 SI=1000 DI=0000DS=13AE ES=13AE SS=13AE CS=13AE IP=010F NV UP EI PL NZ NA PO NC13AE:010F 8B04 MOV AX,[SI] DS:1000=0000 -tAX=0000 BX=3402 CX=0000 DX=0000 SP=FFEE BP=0000 SI=1000 DI=0000DS=13AE ES=13AE SS=13AE CS=13AE IP=0111 NV UP EI PL NZ NA PO NC13AE:0111 0000 ADD [BX+SI],AL DS:4402=00 -rAX=0000 BX=3402 CX=0000 DX=0000 SP=FFEE BP=0000 SI=1000 DI=0000DS=13AE ES=13AE SS=13AE CS=13AE IP=0111 NV UP EI PL NZ NA PO NC13AE:0111 0000 ADD [BX+SI],AL DS:4402=00(5)变址寻址执行Mov BX,1000hMov AX,[BX+1]观察指令执行后AX,BX内容,以及[BX+1]内存单元处数据-a13AE:0111 mov bx,100013AE:0114 mov ax,[bx+1]13AE:0117-tAX=0000 BX=1000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=1000 DI=0000DS=13AE ES=13AE SS=13AE CS=13AE IP=0114 NV UP EI PL NZ NA PO NC13AE:0114 8B4701 MOV AX,[BX+01] DS:1001=0000 -tAX=0000 BX=1000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=1000 DI=0000DS=13AE ES=13AE SS=13AE CS=13AE IP=0117 NV UP EI PL NZ NA PO NC13AE:0117 0000 ADD [BX+SI],AL DS:2000=00 -rAX=0000 BX=1000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=1000 DI=0000DS=13AE ES=13AE SS=13AE CS=13AE IP=0117 NV UP EI PL NZ NA PO NC13AE:0117 0000 ADD [BX+SI],AL DS:2000=00 -d 1001 100213AE:1000 00 00 ..(6)变址加基址寻址用E命令向DS:1000~1004处写入0AB90H,03412H,然后执行Mov BX,1000hMov SI,1Mov AX,[BX+SI]Mov CX,[BX+SI+1]-e 1000 12-e 1001 34-e 1002 90-e 1003 ab-a13AE:0117 mov bx,100013AE:011A mov si,113AE:011D mov ax,[bx+si]13AE:011F mov cx,[bx+si+1]13AE:0122-tAX=0000 BX=1000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=1000 DI=0000DS=13AE ES=13AE SS=13AE CS=13AE IP=011A NV UP EI PL NZ NA PO NC13AE:011A BE0100 MOV SI,0001-tAX=0000 BX=1000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0001 DI=0000DS=13AE ES=13AE SS=13AE CS=13AE IP=011D NV UP EI PL NZ NA PO NC13AE:011D 8B00 MOV AX,[BX+SI] DS:1001=9034 -tAX=9034 BX=1000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0001 DI=0000DS=13AE ES=13AE SS=13AE CS=13AE IP=011F NV UP EI PL NZ NA PO NC13AE:011F 8B4801 MOV CX,[BX+SI+01] DS:1002=AB90 -rAX=9034 BX=1000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0001 DI=0000DS=13AE ES=13AE SS=13AE CS=13AE IP=011F NV UP EI PL NZ NA PO NC13AE:011F 8B4801 MOV CX,[BX+SI+01] DS:1002=AB90。
DEBUG使用总结
一、DEBUG的主要命令A命令功能: 将助记符指令转换为机器指令码存储在指定的内存单元,即汇编过程格式1: Axxxx:0100 助记符指令1(ENTER)xxxx:xxxx 助记符指令2(ENTER)……xxxx:xxxx ENTER结束功能: 逐次将助记符指令对应的指令码存入从CS: 0100h起的连续的内存单元格式2:A 起始地址start-addrxxxx:0100 助记符指令1(ENTER)xxxx:xxxx 助记符指令2(ENTER)……xxxx:xxxx ENTER结束功能: 逐次将助记符指令对应的指令码存入从CS: star-addr起的连续的内存单元注: 指令中可以包含数据定义伪指令DB/DW等语句D命令功能: 查看指定内存单元的内容格式1: D [起始地址start-addr [L长度length]]功能: 显示从起始地址start-addr开始的length个字节,省略start-addr时从DS:0100h开始,省略长度length时默认值为80H(128)注: start-addr可以为偏移地址, 此时其默认的段基址为DS;也可以显式地按段地址:偏移地址格式指明完整的逻辑地址, 段地址不一定是段寄存器, 还可以是任意16位地址格式2: D[起始地址start-addr 终结地址end-addr]功能: 显示从起始地址start-addr开始到结束地址end-addr之间的字节注: start-addr和end-addr同时为偏移地址时默认的段基址为DS;start-addr采用段地址:偏移地址格式指明时, end-addr可以不必再指明段地址, 直接以偏移地址形式给出(start-addr和end-addr的段地址始终相同);当start-addr和end-addr的偏移地址相同时只显示该存储单元的字节.E命令功能: 修改指定内存单元的内容格式1: E 起始地址start-addr 字节数据1 字节数据2 … 字节数据n功能: 逐次用后面的字节数据修改从起始地址起的连续内存单元的内容格式2: E 起始地址start-addr(按ENTER)起始地址该内存单元的原值.待输入新值/空格键功能:在提示情况下逐个修改从起始地址start-addr开始的字节数据的值, 输入空格表示不做修改, 直至输入ENTER键结束G命令功能: 执行正在调试的汇编程序至指定的断点格式: G [start-addr] break-addr1[, break-addr2, …]功能:star-addr是指令码的起始偏移地址, break-addr是断点处的偏移地址, 段地址均为CS, 可以指定多个断点位置P命令功能: 执行INT, CALL, LOOP及重复串指令(REP等)直至下一条指令格式: P [start-addr] [n]功能:star-addr是待执行指令码的起始偏移地址, n是往下执行指令的条数Q命令功能: 退出debug格式: QR命令功能:显示和修改寄存器的内容格式1:R;显示所有寄存器的内容格式2: R 寄存器名;显示指定寄存器的值, 再按ENTER后键入数值可修改该寄存器的值格式3:R F;显示标志寄存器中各标志位的值标志位符号的意义如下:标志位符号意义标志位1标志位0OF 溢出(是/否) OV NVDF 方向(减/增) DN UPIF 中断(允许/关闭)EI DISF 符号(负/正) NG PLZF 零(是/否) ZR NZAF 辅助进位(是/否)AC NAPF 奇偶(偶/奇) PE POCF 进位(是/否) CY NCT命令功能: 以单步方式执行指定的指令代码格式1: T功能: 以单步方式执行从CS:IP开始的1条指令格式2: T 指令条数n功能: 以单步方式执行从CS:IP开始开始的n条指令U命令功能: 将内存单元的机器指令码转换为助记符指令,即反汇编过程格式1: U 起始地址start-addr功能: 将从start-addr开始的32个字节的指令码转换为助记符格式2: U 起始地址start-addr终结地址end-addr功能: 将从start-addr开始至终结地址end-addr之间的指令码转换为助记符二、DEBUG的相关说明1.debug默认所有的数值都是16进制的,且无需在最后添加后缀h;2.debug不区分字母的大小写;3.快捷键: F1键--逐个重复前一条命令的字符,F3键--重复前面整条命令;4.在dos系统中文件名的最大长度为8个字符,扩展名的最大长度为3个字符.在给asm文件命名时若超过8个字符,虽然可以编译生成obj文件但在连接时却生成不了exe文件,从而引发一些错误.注意文件名不要超过8个字符;5.对于32位指令,debug并不显示其助记符,而是会以DB开头显示,这与数据定义伪指令不同;6.在[EA](EA为常数)作操作数时(如MOV 寄存器,[EA]和MOV [EA],寄存器),若不在[EA]前加段前缀, 则debug会将其视为常数EA而非偏移地址,此时必须显式指明段前缀.三、用DEBUG调试程序1.顺序指令的调试调试程序的指令格式路径>debug filename.exe接着可用R指令查看各寄存器的值, 说明如下:1)CX的值为整个程序的指令码的字节总数;2)CS:IP指向第一条指令, (CS)=(DS)+10h, (IP)=0000h, 这是因为程序在内存中的起始地址是DS:0000h,但前256个字节单元用于PSP,所以从(CS+10h): 0000h才是程序的指令码.用U命令可以查看程序的助记符指令下面以程序test.asm为例说明, 其源代码如下:.model small.databuff db 2 dup(?).codestart:mov ax,@datamov ds,axmov ax,100mov bl,3div blmov buff,almov buff+1,ahmov ah,4chint 21hend start可知数据段的段基址为1450h, 而buff内存的偏移地址为0008h, 从144F:00~144F:16都是源程序的机器码, 共计17个字节再接着可用T命令单步调试每单步执行一条指令, 都会显示执行指令后的寄存器的内容注意IP的变化代表了上一条指令的机器码长度下面执行3条指令, 如下所示:可以看到进行除法运算后AL=21h=33(商), AH=1h(余数), 同时提示下一条指令为: MOV [0008H], AL这里偏移量0008h就是buff的偏移量, 同时右下角显示了该内存单元的当前内容为14h上面在执行完商和余数的MOV指令后, 用D指令查看buff及其后一个单元的内容, 分别是商21h及余数1h, 程序执行完全正确.最后在单步执行INT 21H指令时要用P指令, 此时会显示程序正常结束字样!2.循环结构的调试以testloop.asm为例:.model small.databuff dw ?.codestart:mov ax,@datamov ds,axmov cx,9mov ax,2again:add ax,axloop againmov buff,axmov ah,4chint 21hend start对循环结构的调试方法是:只需调试2~3次循环即可确定循环逻辑是否正确,接着可让程序直接执行到循环结束,然后再单步调试.让程序执行到某个断点位置: G命令断点偏移地址让程序执行到循环结束: 在调试LOOP指令时使用P命令。
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各命令详细说明(很详细)2.启动DEBUG在命令窗口中启动DEBUG,启动命令一般为:DEBUG [文件名] [参数表]。
其中:文件名指定被调试的文件,其包括名和后缀,参数表是被调试文件运行时所需要的参数。
被调试的文件可以是系统中的任何文件,但通常它们的后缀为.EXE或.COM。
当DEBUG启动成功后,将显示连接符“-”,这时,可输入各种DEBUG命令。
DEBUG中所有命令及其含义如DEBUG各命令功能说明表所示。
关于使用命令的几点说明:在提示符“-”下才能输入命令,在按“回车”键后,该命令才开始执行命令是单个字母,命令和参数的大小写可混合输入可用F1、 F2、F3、Ins、Del、左移键、右移键等编辑键来编辑本行命令当命令出现语法错误时,将在出错位置显示“^ Error”可用Ctrl+C或Ctrl+Break来终止当前命令的执行,还可用Ctrl+S或Ctrl+Num Lock来暂停屏幕显示(当连续不断地显示信息时)以下通过实现十九个示例来熟悉DEBUG的命令集和基本的汇编指令。
R命令的使用R命令作用:观看和修改寄存器的值。
在提示符“-”下输入以下命令:R。
DEBUG将会显示出当前所有寄存器和标志位的状态。
接下来再输入命令RCX。
在提示符“:”后输入100。
该命令的作用是将寄存器CX的值设置为100(注意:DEBUG使用的是十六进制,这里的100相当于十进制的256。
)最后再执行R命令,观看修改后的寄存器值。
H命令的使用H命令作用:计算两个十六进制数的和与差。
在提示符“–”下输入以下命令:H 10 1。
观看命令执行结果。
运行结果的前一个数是计算出来的和,后一个数是计算出来的差。
计算结果均用十六进制形式表示。
D命令的使用D命令作用:显示内存区域的内容。
在提示符“–”下连续执行命令R、D、D。
观看命令执行结果。
前面已经介绍过了,命令R的作用是显示当前寄存器的值。
而命令D的作用是显示内存区域的内容,最左边是内存的起始地址,中间以十六进制的形式显示内存值,最右边是以ASCII码的形式显示内存值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验课程名称微型计算机原理实验报告_实验项目名称掌握DEBUG基本命令_专业班级电子信息科学与技术101班_学生姓名____________
学号_____
实验成绩
指导教师签字
贵 州 大 学 实 验 报 告 纸
系 别
班 级
姓 名
学号
课 程 名 称
成
绩 评 定
教师签名
实 验 时 间
2011年 11 月 23 日
一、实验目的
(1)熟悉DEBUG 有关命令的使用方法。
(2)利用DEBUG 掌握有关指令的功能。
(3)利用DEBUG 运行简单的程序段。
二、实验内容
Ⅰ.掌握DEBUG 程序的各种命令,重点掌握U ,G ,T ,D ,E ,R 命令。
⒈ 反汇编命令:-U[地址]
该命令从指定地址开始,反汇编32个字节,若地址省略,则从上一个U 命令的最后一条指令的下一个单元开始显示32个字节。
⒉运行命令G:
⒊追踪命令T,有两种格式:
1)逐条指令追踪:-T[=地址]
该命令从指定地址起执行一条指令后停下来,显示寄存器内容和状态值。
2)多条指令追踪:
-T[=地址][值]
该命令从指定地址起执行n条命令后停下来,n由[值]确定。
⒋显示内存单元内容的命令D,格式为:
-D[地址]或-D[范围]
1)D命令后跟寄存器表示的地址
2)D命令后不加地址
3)D命令后加直接地址
⒌修改内存单元内容的命令E,用给定的内容代替指定范围的单元内容:
-E地址内容表
6.检查和修改寄存器内容的命令R,它有三种方式:
1)显示CPU内部所有寄存器内容和标志位状态;格式为:-R
2)显示和修改某个指定寄存器内容,格式为:-R 寄存器名
3)显示和修改标志位状态,命令格式为:-RF
Ⅱ.用命令A汇编下列指令,判断指令正误并说明原因。
(1)ROR AX,8
(2)LEA DI,[AX]
(3)MOV DS,2010
(4)PUSH AL
(5)OUT 900,AL
(6)MOV [BX],0
Ⅳ.用命令D查看DS:200~22F和F000:200~22F两内存块内容,用命令F 将字符“A”分别填入这两个内存块,比较填入前后结果,了解可读写内存RAM和只读内存ROM的区别。
1)
2)
Ⅴ.用A命令汇编一条INT 1C指令,用命令T单步执行该指令,比较指令执行前后CS和IP、堆栈指针SP及堆栈内容变化情况,了解什么是中断向量表,中断
向量和中断子程,掌握中断指令的执行过程。
Ⅵ.利用T,P,G命令,执行下列指令段,注意它们的不同之处。
(1)程序代码如下:
利用T单步运行该程序段,一步一步检查程序:
利用P命令运行该程序段:
利用G命令运行该程序段:
(2)利用A命令编辑程序段,如下图所示:
运用T命令单步运行该程序段,一步一步检查该程序:
运用P命令一步一步执行该程序段,格式和T命令类似,但是结果稍有不同:
运用G命令执行改程序:
(3)利用A命令编辑程序段如下图所示:
利用T命令单步运行该程序段。
一步一步检查该程序段:
利用P命令执行该程序段:
利用G命令运行该程序段:
Ⅶ.用命令A汇编下列程序段,并将程序写到硬盘上,然后调试程序段,观察程序段能否完成指定功能,若不能,说明原因,并修改程序
(1)完成将DS:2000开始的5个字节内存内容相加,并把相加的结果存放在DS2005内存单元中。
Ⅷ.进入DEBUG后,首先用命令R查看当前DS内容,记录此值,假设为X。
在DEBUG下汇编、调试完成下列功能的程序。
(1)将内容F000:2000H起30H个字数据传送到内存X:1000H开始处。
(2)测试内存X:300H开始的10H个字节数据,计算其中正数、负数、0的个数,并将结果分别存放在X:400H开始的三个内存单元中。
(1)解:先用R命令检查当前的数据段寄存器DS的内容
利用M命令将数据串传送到目的地址
查看传送过后的内存中的内容
三、问题思考
a)假设某内存单元的内容为CCH,试问该内容如看作一条指令、看作无符号
数、看作带符号数,那将分别表示什么?不查看教材中的指令系统代码,如何在DEBUG下知道CCH表示一条什么指令?
b)在指令MOV[BX],AX中,操作数[BX]的寻址方式是什么?在DEBUG下执
行完该指令后,如何查看执行结果?
c)可否随意在DEBUG提示符“-”后不带参数发出命令G?什么情况下使用命
令G时,可不用“=”给出执行的首地址?
d)分析出现死机的几种情况。
如何理解死机现象?试从计算机的工作原理进行
解释。
四、实验总结:。