掌握DEBUG基本命令
- 格式:doc
- 大小:342.00 KB
- 文档页数:13
五、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的使用及调试方法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常用命令实践一实验目的<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是一种程序调试工具,主要用于帮助程序员检查和修复程序中的错误。
以下是如何使用Debug的基本步骤:
设置断点:断点是一种标记,告诉Debug从标记的地方开始查看。
在要设置断点的代码行上单击鼠标左键即可。
运行程序:在代码区域右击,选择Debug执行。
单步执行:点击Step Into(F7)这个箭头,或者直接按F7,以一行一行地操纵代码,从而判断程序的执行流程是否与预期一致。
查看变量值:在执行过程中,可以查看变量的当前值,以了解程序状态。
删除或禁用断点:选择要删除的断点,单击鼠标左键即可。
如果是多个断点,可以每一个再点击一次。
也可以一次性全部删除。
以上是使用Debug的基本步骤,但请注意,具体使用方式可能会根据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的常用指令(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的主要命令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的命令及功能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各命令详细说明(很详细)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码的形式显示内存值。
DEBUG的十八命令讲解虽然Debug只是MS-DOS的一个外部命令,但它为我们编辑、调试程序提供了一个丰富的系统环境,曾红极一时的2.13汉字系统,就是吴晓军用Debug编辑生成的,可见其功能非同一般。
那么它到底有什么绝世武功呢?且看Debug绝学为您一一分解。
第一命令A(Assemble)招式:A[地址]功能:从指定地址开始(当地址缺省时,如果以前未用过此命令则从CS:100开始,如果以前用过此命令,则从它最后停止的地址开始,对输入的语句汇编到内存。
心法:1,支持8086/8087/8088指令集;2,可使用near或far修饰跳转或调用,near可缩写为ne;3,可以用word ptr 或byte ptr说明操作单元,word ptr可缩写为wo,byte ptr可缩写为by;4,支持伪指令db和dw;5,远返回助记符为retf;6,支持所有形式的寄存器间接寻址和所有操作码的同义词。
演练:请打开电脑跟我做(注:0B66是段地址,可能与您的不一样)。
c:\>Debug-a0B66:0100 jmp 1f0 '由于跳转地址未定,暂用1f0代替0B66:0103 db 0d,0a,07. 'Press enter key to return...',240B66:0123 mov al,00B66:0125 mov bx,2000B66:0128 mov cs,1Error 每行输完回车后,Debug自动检查语句是否正确,错误则给予提示,并要求重新输入0B66:0128 mov cx,10B66:012B mov dx,00B66:012E int 26 将A盘boot区装入内存ds:2000B66:0130 inc by [bx+1fd] 将ds:3fd字节加一0B66:0134 mov si,2000B66:0137 mov di,4000B66:013A cld0B66:013B mov cx,2000B66:013E repz0B66:013F movsb 将boot区从ds:20复制到ds:4000B66:0140 mov al,00B66:0142 mov bx,4000B66:0145 mov cx,10B66:0148 mov dx,00B66:014B int 26 把ds:400 boot区写回A盘0B66:014D mov dx,1030B66:0150 mov ah,90B66:0152 int 21 显示提示信息0B66:0154 xor ah,ah0B66:0156 int 16 从键盘读一字符0B66:0158 cmp al,0d0B66:015A jnz 154 是回车则退出,否则循环读0B66:015C int 200B66:015E 回车结束-a1000B66:0100 jmp 123 修正跳转地址0B66:0102 回车结束-rcxCX 0000:5e-wWriting 0005E bytes-q恭喜您,现在您已用Debug写出了第一个程序!各位可以用dir命令在当前目录查看一下,哈!不知什么时候已经在您的硬盘里安了家。
GUIZHOU UNIVERSITY实验报告实验课程名称微型计算机实验项目名称DEBUG命令的使用学院理学院专业班级电技091 学生姓名学号指导教师贵 州 大 学 实 验 报 告 纸 系 别 理学院 班 级 电技091 姓 名学号课 程 名 称 微型计算机 成 绩评 定 教师签名 实 验 时 间2011年 月 日实验一 DEBUG 命令的使用一.实验目的:掌握DEBUG 的基本命令及其功能二.实验任务:1、用DIR 命令查看当前工作目录的文件。
先用R 命令 -r cs 查看CS 寄存器中内容,并将其值改为0FFFFH,再用R 命令查看IP 寄存器中的内容,并将其改为0H,最后用R 命令查看CPU 寄存器中的内容,第一条指令为 :JMP F000:EO5B2、用命令COPY 将DEBUG .COM 复制到当前工作目录,目的文件名为BUG 。
3、用命令DEL将文件BUG删除。
4、用R命令查看8086/8088CPU在开机后执行的第一条指令。
(8086/8088CPU在开机后执行的第一条指令在内存FFFF:0H开始处)用命令D查看DS:200~22F和F000:200~22F两内存块内容,用命令E将字符“A”分别填入这两个内存块,比较填入前后的结果,了解可读写用R命令查看可知ds=08ad,用-d 08ad:200 22f 查看的这段内存中的内容为用-d f000:200 22f 查看的相应内存中的内容是5、内存RAM和只读内存ROM的区别。
6、PC机主板上的ROM中写有一个生产日期,在内存FFF000~FFFFFH的某个单元中,请找到这个生产日期并试图改变它。
用D命令查看内存FFF00H到FFFFFH中的内容:-D FFFF0: 0000 00FF,即可查看该段内存中的内容:如上图右下角所示所示,有一个日期:06\24\107、向内存从B8100H开始的单元中填写数据,如:-e B810:0000 01 01 02 02 03 03 04 04填写不同的数据观察产生的现象;改变填写的地址。
实验一--掌握DEBUG-的基本命令及其功能实验一掌握DEBUG 基本命令及其功能【上篇】查看CPU和内存,用机器指令和汇编指令编程一.实验目的:掌握DEBUG 的基本命令及其功能掌握win7 win8 使用DEBUG功能二.实验内容:1. 预备知识:Debug的使用(1) 什么是Debug?Debug是DOS、Windows都提供的实模式(8086方式)程序的调试工具。
使用它,可以查看CPU 各种寄存器中的内容、内存的情况和在机器码级跟踪程序的运行。
(2) 我们用到的Debug功能●用Debug的R命令查看、改变CPU寄存器的内容;●用Debug的D命令查看内存中的内容;●用Debug的E命令改写内存中的内容;●用Debug的U命令将内存中的机器指令翻译成汇编指令;●用Debug的T命令执行一条机器指令;用Debug的A命令以汇编指令的格式在内存中写入一条机器指令。
(3) 进入DebugDebug是在DOS方式下使用的程序。
我们在进入Debug前,应先进入到DOS方式。
用以下方式可以进入DOS:①重新启动计算机,进入DOS方式,此时进入的是实模式的DOS。
②在Windows中进入DOS方式,此时进入的是虚拟8086模式的DOS。
三.实验任务解决方案1. 从网上下载Dosbox和debug.exe(文件夹中有)。
2. d ebug.exe放在D:根目录,然后安装,安装完成以后,点击快捷方式进入Dos界面:3.输入mount c d:\ 接着输入c:01 d8 add ax,bx89 c3 mov bx,ax01 d8 add ax,bxb8 1a 00 mov ax,001AH bb 26 00 mov bx,0026H 00 d8 add al,bl00 dc add ah,bl00 c7 add bh,alb4 00 mov ah,000 d8 add al,bl04 9c add al,9CH提示:可用E命令和A命令以两种方式将指令写入内存。
实验一 DEBUG的启动及其基本命令的使用一、实验学时1学时。
二、实验目的掌握DEBUG 的基本命令及其功能。
三、实验设备计算机。
四、实验内容DEBUG是专门为汇编语言设计的一种调试工具,它通过步进,设置断点等方式为汇编语言程序员提供了非常有效的调试手段。
1、DEBUG程序的启动在DOS提示符下,可键入命令:C>DEBUG[d:][path][文件名][ 参数1][参数2]其中文件名是被调试文件的名称,它须是执行文件(EXE),两个参数是运行被调试文件时所需要的命令参数,在DEBUG程序调入后,出现提示符“-”,此时,可键入所需的DEBUG 命令。
在启动DEBUG时,如果输入了文件名,则DEBUG程序把指定文件装入内存。
用户可以通过DEBUG的命令对指定文件进行修改、显示和执行。
如果没有文件名,则是以当前内存的内容工作,或者用命名命令和装入命令把需要的文件装入内存,然后再用DEBUG的命令进行修改、显示和执行。
2、DEBUG的主要命令(1)汇编命令A,格式为:-A[地址]该命令从指定地址开始允许输入汇编语句,把它们汇编成机器代码相继存放在从指定地址开始的存储器中。
(2)反汇编命令U,有两种格式:1)-U[地址]该命令从指定地址开始,反汇编32个字节,若地址省略,则从上一个U命令的最后一条指令的下一个单元开始显示32个字节。
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由[值]确定。
汇编_DEBUG的使用汇编语言是一种低级语言,它与机器语言非常接近,每一个汇编语言的指令几乎都对应着一条机器指令。
因此,了解并掌握汇编语言对于理解计算机内部工作原理以及进行底层编程是非常有帮助的。
下面,我将详细介绍DEBUG的使用方法和功能。
1.DEBUG的启动和退出:在DOS命令行下输入DEBUG命令,即可启动DEBUG。
DEBUG启动后,会显示一个短横线"-”,表示等待执行命令。
在DEBUG中输入"q"命令,即可退出DEBUG。
2.DEBUG的命令格式和常用命令:-a:将键盘输入的ASCII码写入指定地址-d:显示内存中的指定地址的内容-e:修改内存中的指定地址的内容-g:从指定地址开始执行程序-r:查看和修改寄存器的值-t:查看和修改标志寄存器的值-u:以汇编代码的格式显示内存中的指令-w:将内存中的内容写入指定文件-n:加载并执行指定文件-i:打印当前的执行指令-f:在段间切换3.DEBUG的常用调试操作:- 通过“d”命令查看内存中的指令和数据内容,可以使用不同的参数来控制显示格式,如"d 100"表示从100H地址处开始显示,"d cs:100"表示从CS:100H地址处开始显示。
-通过“e”命令修改内存中的指令和数据内容。
- 通过“r”命令查看和修改寄存器的值,如"r ax"表示查看和修改AX寄存器的值。
-通过“u”命令以汇编代码的格式显示内存中的指令。
-通过“g”命令从指定地址开始执行程序。
-通过“n”命令加载并执行指定的二进制文件。
4.示例:下面给出一个使用DEBUG调试的示例过程:-启动DEBUG,进入DEBUG命令行界面。
-使用“n”命令加载一个二进制文件。
-使用“d”命令查看内存中的指令和数据,以及寄存器的值。
-使用“e”命令修改内存中的指令和数据。
-使用“g”命令执行程序。
-使用“r”命令查看和修改寄存器的值。
Debug主要命令1. A[地址] 汇编命令功能: 将指令直接汇编成机器码输入到内存中。
说明: 用于小段程序的汇编及修改目标程序,所有输入的数字均采用十六进制,用户装入内存的汇编语句是连续存放的,若没有指定地址,并且前面没有使用汇编命令,该语句被汇编到 CS:0100区域。
-a 010008F1:0100 MOV AH,0908F1:0102 MOV DX,10908F1:0105 INT 21H08F1:0109 db 'HELLO WORLD!$'08F1:0115-g2.D[地址] 或D[起始地址][目的地址] 转储命令功能: 以内存映象方式显示内存中的信息。
说明: 转储用左右两部分显示内存映象内容,左边以十六进制,右边以ASCII字符显示,所有不可打印字符用句号(.)表示。
每行显示16个字节的内容,在第八和第九个字节之间有一个连字符 - 此命令隐含的段地址为DS的值。
若未指定起始地址,则D命令从显示的最后一个单元的下一个单元开始显示,若以前没有使用给D命令,则从初使化的段寄存器的内容,加上地址偏移量 0100H 开始显示。
3.E[地址] [字节串) 修改内存命令功能: 从指定的地址开始修改内存值。
说明: 若地址部分只输入偏移量,则 E 命令认为段包括在DS寄存器中。
命令格式有两种:其一是用命令中包含的字节串替换从指定的地址开始的多个字节的内容;其二是命令后不跟字节串,则允许按顺序方式显示和修改字节,按下空格键为显示下一字节内容,若想修改,直接输入相应值。
4.F[地址范围] [字节或字节串] 填写命令功能: 将要填写的字节或字节串填入由地址范围指定的存储器中。
5.G[=起始地址] [[断点]……] 执行命令功能: 执行正在调试的程序,当达到断点时停止执行,并且显示寄存器标志和下一条要执行的命令。
说明: 如果没有指定起始地址,那么当前指令地址由CS,IP寄存器的内容来决定,如果用户指定起始地址就从指定的起始地址开始执行。
DEBUG主要命令DEBUG是为汇编语言设计的一种高度工具,它通过单步、设置断点等方式为汇编语言程序员提供了非常有效的调试手段。
一、DEBUG程序的调用在DOS的提示符下,可键入命令:C:\DEBUG [D:][PATH][FILENAME[.EXT>[PARM1][PARM2]其中,文件名是被调试文件的名字。
如用户键入文件,则DEBUG将指定的文件装入存储器中,用户可对其进行调试。
如果未键入文件名,则用户可以用当前存储器的内容工作,或者用DEBUG命令N和L把需要的文件装入存储器后再进行调试。
命令中的D指定驱动器PATH为路径,PARM1和PARM2则为运行被调试文件时所需要的命令参数。
在DEBUG程序调入后,将出现提示符,此时就可用DEBUG命令来调试程序。
二、DEBUG的主要命令1、显示存储单元的命令D(DUMP),格式为:_D[address]或_D[range]例如,按指定范围显示存储单元内容的方法为:-d100 12018E4:0100 c7 06 04 02 38 01 c7 06-06 02 00 02 c7 06 08 02 G...8.G.....G...18E$:0110 02 02 bb 04 02 e8 02 00-CD 20 50 51 56 57 8B 37 ..;..h..M PQVW. 718E4:0120 8B其中0100至0120是DEBUG显示的单元内容,左边用十六进制表示每个字节,右边用ASCII字符表示每个字节,·表示不可显示的字符。
这里没有指定段地址,D命令自动显示DS段的内容。
如果只指定首地址,则显示从首地址开始的80个字节的内容。
如果完全没有指定地址,则显示上一个D命令显示的最后一个单元后的内容。
2、修改存储单元内容的命令有两种。
·输入命令E(ENTER),有两种格式如下:第一种格式可以用给定的内容表来替代指定范围的存储单元内容。
Debug的基本使用1.使用r命令查看或修改CPU寄存器的内容。
(1)使用r的命令查看:(2)使用r来改变寄存器中的内容:例如修改AX的值,就需输入“r ax”后按Enter键,在出现的“:”后面输入要写入的数据,并按Enter,再用r查看,修改成功,如图1所示。
图1用r来修改Ip的值,如图2所示。
2.用d来查看内存的内容。
(1)直接输入d,debug将输出3部分内容,如图3所示。
图3(2)可以使用“d 段地址:偏移地址”的格式,例如想查看内存10000H处的内容。
(3)在使用“d 段地址:偏移地址”之后,接着使用d命令,可列出后续的内容,如图5所示。
图5(4)使用d命令查看范围,格式为“d 段地址:起始偏移地址结尾偏移地址”。
例如要查看1000:0到1000:9中的内容,如图6所示。
图63.用e来改写内存中的内容。
(1)将内存1000:0-1000:9中的内容分别改为0、1、2、3、4、5、6、7、8、9,其格式为“e 起始地址数据数据数据。
”,如图7所示。
图7(2)用提问的方法改写内存的内容。
以1000:10为起始地址进行改写,其步骤为:输入“e 1000:10”,并按Enter,在显示光标后面输入想要修改的内容,如果想停止输入,就按Enter,继续就按空格键。
(在显示光标后面直接按空格键,则表示不对当前内存单元进行改写)(3)用e向内存中写入字符。
(4)用e命令向内存中写入字符串。
(5)用e命令向内存中写入机器码,用u命令查看内存中机器码的含义,用t命令执行内存中的机器码。
例如要从内存1000:0单元开始写入机器码:b80100b9020001c8,其方法如图8所示。
图8用u将从1000:0开始的内存单元中的内容翻译为汇编指令并显示出来。
(见图9)使用t命令可以执行CS:IP指向的指令。
(图10)图10执行T命令后,cpu执行CS:IP指向的指令,则1000:0处的指令b8 01 00(mov ax,0001)得到执行。
实验课程名称微型计算机原理实验报告_实验项目名称掌握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内部所有寄存器内容和标志位状态;格式为:-R2)显示和修改某个指定寄存器内容,格式为:-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的区别。
实验课程名称微型计算机原理实验报告_实验项目名称掌握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)分析出现死机的几种情况。
如何理解死机现象?试从计算机的工作原理进行
解释。
四、实验总结:。