文档库 最新最全的文档下载
当前位置:文档库 › 《微机原理与接口技术》DEBUG调试命令介绍

《微机原理与接口技术》DEBUG调试命令介绍

《微机原理与接口技术》DEBUG调试命令介绍
《微机原理与接口技术》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指定。range是反

汇编的地址范围。

例1 -U↙:

从当前IP处开始,对连续约32字节内容反汇编。如对TEST.EXE,刚装入DEBUG时的IP=0000,则在输入U命令后有如

下显示:

-U↙

13C2:0000 B402 MOV AH,02

13C2:0002 B241 MOV DL,41

13C2:0004 CD21 INT 21

13C2:0006 B44C MOV AH,4C

13C2:0008 CD21 INT 21

13C2:000A 8B4606 MOV AX,[BP+06]

………………

13C2:0020 8B07 MOV AX,[BX]

-

图1.5 反汇编命令的执行结果

在上例中,13C2:0000表示CS:IP的内容(其中CS的值是动态值);B402代表该处存放的二进制数据,亦即指令MOV AH,02H的机器代码;当连续约32字节的数据反汇编完后,重新回到DEBUG提示符“-”下,如果再键入U命令,则将继续对后面的内存区反汇编。

特别应该注意的是,由于反汇编命令针对内存区的二进制数据,而被调试程序仅占内存区的某一部分,故反汇编出来的内容并非全是被调试程序的代码,如上例中13C2:000A单元以后的部分,显然不是TEST.EXE的内容。另外还需注意,DEBUG默认使用十六进制。

例2 –U 0123↙:

从指定的IP=0123处开始,对连续约32字节内容反汇编。

例3 –U 0123 0143↙:

从指定的IP=0123处开始反汇编,直至指定的0143处结束。

2、显示寄存器命令R:

显示或修改寄存器的内容。有三种使用格式:

(1)R↙

(2)R register name↙

(3)R F↙

其中,register name是一个16位寄存器名。F表示标志位。

如图1.6所示。一般常用以下形式:

例 1 -R↙:显示所有寄存器当前的内容及当前将执行的指令。如对TEST.EXE,在程序运行之前,键入R命令:

-R↙

AX=0000 BX=0000 CX=000A DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=13B2 ES=13B2 SS=13C2 CS=13C2 IP=0000 NV UP EI PL NZ NA PO NC

13C2:0000 B402 MOV AH,02

-

图1.6 显示寄存器命令执行结果

在显示寄存器内容时,状态标志寄存器F表示成各个分离的标志位,其意义如下表1.1所示:

表1.1 标志寄存器的标志为含义

例2 -R AX↙:显示指定的AX寄存器当前的内容,并等待键入新值;如果不作修改,可直接回车。如:

-R AX↙

AX 0000

:4321↙

-

例3 -R F↙:显示标志寄存器F各个标志位的内容,并等待键入新的标志位;

如果不作修改,可直接回车。如:

-R F↙

NV UP EI PL NZ NA PO NC -ZR↙

-

3、显示内存命令D:

以十六进制及ASCII两种方式显示内存区的二进制数据。通常用来观察数据段内的缓冲区内容。有三种使用格式:

(1)D↙

(2)D address ↙

(3)D range↙

其中,address是内存地址,由DS:偏移地址指定。range是内存的地址

范围。显示数据段内存内容分三个部分:左边是地址部分,表示此行的首地址(段:偏移量);中间是存储器内容以16进制标示部分,以两位16进制数字标示一存储单元内容;右边是存储器内容的ASCII码部分。

例1 -D↙:从0000单元开始,连续显示128个内存单元的内容。如果继续键入D命令,则继续显示后128个单元内容。例如:

在上例中,128个单元分成8行,每行16个单元,每个单元的内容分别以十六进制形式和ASCII码形式显示。如果该单元的内容不是可显示字符,则在ASCII 区内显示为“.”。

例2 –D 0B77:0000↙:从指定的DS 段之0000单元开始显示。

例3 –D DS:0↙:

4、修改存储单元命令 E:

用于修改存储单元的内容。有两种使用格式:

(1)E address list↙

(2)E address↙

其中,address是内存地址。List表示16进制数字或字符列表。

一般常用以下二种形式:

例1-E[起始地址] [内容表]↙:按内容表的内容修改从起始地址开始的多个存储单元内容,即用内容表指定的内容来代替存储单元当前内容,如图 1.10所示。例如:—E DS:0100 'ABC' 12 34 表示从DS:0100 为起始单元的连续五个字节单元内容依次被修改为

'A'、'B'、'C'、12H、34H。

图1.10 修改存储单元命令执行结果

例2-E[地址] ↙:逐个修改指定地址单元的当前内容。

如:—E DS:0110↙

13B2:0110 26.55

其中13B2:0110单元原来的值是26H,55H为输入的修改值。若只修改一个单元的内容,这时按回车键即可;若还想继续修改下一个单元内容,此时应按空格键,就显示下一个单元的内容,需修改就键入新的内容,不修改再按空格跳过,如此重复直到修改完毕,按回车键返回DEBUG“-”提示符。如果在修改过程中,将空格键换成按“-”键,则表示可以修改前一个单元的内容。

5、运行命令G:

使程序在DEBUG控制下运行,一般有全程、断点运行两种方式。有两种使用格式:

(1)G [=addrss]↙

(2)G [=addrss][ addrss][ addrss…]↙

例1 -G↙:

控制程序由当前IP处运行,直至程序结束。就是连续执行。

如果当前IP为初始值,其作用则相当于直接在DOS下运行程序,一般用于快速观察程序的运行情况,如图1.7所示。

图1.7 运行命令执行结果

例2 -G 0008↙:

控制程序由当前IP处运行,直至指定的断点IP=0008H处,程序暂停。就是断点执行。

显示各个寄存器的当前值及断点处指令,然后返回DEBUG提示符“-”下。

如对TEST.EXE,若想观察字符串显示的入口参数是否设置好,则可以断点运行至0008处:

-G 0008↙

AX=4C41 BX=0000 CX=000A DX=0041 SP=0000 BP=0000 SI=0000 DI=0000

DS=13B2 ES=13B2 SS=13C2 CS=13C2 IP=0008 NV UP EI PL ZR NA PO NC

13C2:0008 CD21 INT 21

-

断点一般选取在需要观察的地方,当程序停下来后,可以根据各方面的情况(如寄存器、缓冲区、标志等)来判断程序是否运行正确。

断点执行前,可用R IP命令,先改IP的值。再断点执行。

6、单步命令T:

控制程序运行一条指令后暂停,显示各个寄存器的当前值及断点处指令,然后返回DEBUG提示符“-”下。

有两种使用格式:

(1)T [=addrss]↙

(2)T[=addrss][ Value]↙

其中,等号后边的addrss是程序执行的起始地址。若没有指定地址,则从当前CS:IP开始执行。Value是执行指令的条数。

如图1.8所示。例如对TEST.EXE,若当前IP为初始值,则键入T命令后有如下显示:

-T↙

AX=0200 BX=0000 CX=000A DX=0000 SP=0000 BP=0000 SI=0000 DI=0000

DS=13B2 ES=13B2 SS=13C2 CS=13C2 IP=0002 NV UP EI PL NZ NA PO NC

13C2:0002 B241 MOV DL,41

-

图1.8 单步命令执行结果

单步命令一般用于需对程序运行作仔细分析的地方,如判断分支转移、观察运算结果等。若能综合运用断点及单步指令,则可大大提高DEBUG 调试的速度及效率。

但应注意,当IP指针位于INT 21H一类指令处时,执行T命令将会使程序进入该功能调用子程序中,因此,这种情况下最好不用T命令,而用断点运行命令跳过该类功能调用指令。

T命令用于程序调试,能跟踪程序执行情况,迅速找出错误原因。

7、装载命令L:

用来将被调试程序重新装载进内存中,一般用于程序运行结束后需继续调试程序时,或需从头开始调试程序时。如对TEST.EXE:

-G↙

A

Program terminated normally

-L↙

-

8、汇编命令A:

用于对指定的汇编语言程序进行汇编。使用格式为:

A[address]↙

本命令是从指定地址开始,输入汇编语言语句,由A命令把他们汇编为机器代码并从指定地址单元连续存放。本命令可输入整段程序汇编。

若在命令中没有指定地址,但前面用过汇编命令时,则接着上一条汇编命令的最后一个单元开始存放。

若输入语法有错,DEBUG就显示:^Error。

例如:-A 08↙

9、退出命令Q:

键入此命令,即退出DEBUG状态,返回DOS。

以上是在调试程序中经常用到的DEBUG命令解释,DEBUG中还有其它命令,在检查程序中使用较少,就不再介绍了。

软件二宏汇编MASM

软件三连接程序LINK

软件四编辑程序UltraEdit

软件五集成开发环境QTH-PCIH

ODB调试指令汇总

整理:袁嘉璐 要对网上下载资料进行比对 帮助: 1.help Lists available topics列出所有可用的栏目 2.help Lists available commands for topic 3.help Lists usage of command Maps 1.Objassoc——print object association information. 2.objid ——obtain object ID from hierarchical name. 3.objmap ——print list of specified object(s). 4.objpkmap——print list of packets owned by specified object. 5.pktimemap——print list of specified packet(s). 6.pkmap print——list of specified packet(s). 7.ptmapprint ——list of packets in specified tree. Entity Information实体信息 1.attrget ——print object attribute value 2.attrprint——print object attribute information 3.attrset ——set object attribute value 4.evprint ——print specified pending events 5.iciprint_ev——print ICI (if any) associated with current event 6.iciprint_pk ——print ICI associated with packet (if any) 7.interfaceset——set a value on an esys interface 8.objprint ——print object information 9.pkprint ——print packet contents 10.proprint——print information about specified process 11.simprint——print simulation attribute for all that match pattern Breakpoints 1.actstop——reactivate breakpoint https://www.wendangku.net/doc/ed2470339.html,stop ——set breakpoint at specific communication 3.cont——continue event execution until breakpoint 4.delstop——delete specified breakpoint(s) 5.evstop——set breakpoint for specified event 6.interfacestop——set breakpoint for a specified esys interface 7.intstop——set breakpoint at module for specified interrupt 8.lstop——set breakpoint for specified label 9.mlstop——set breakpoint at module for specified label 10.mstop——set breakpoint at module

【微机原理】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:0500 0100:0500 jmp 502 ; a 2-byte short jump 0100:0502 jmp near 505 ; a 3-byte near jump 0100:0505 jmp far 50a ; a 5-byte far jump 1

可以将near 前缀缩写为ne。 区分字和字节内存位置当某个操作数可以引用某个字内存位置或者字节内存位置时,必须用前缀word ptr 或者前缀byte ptr 指定数据类型。可接受的缩写分别是wo 和by。以下范例显示两种格式: dec wo [si] neg byte ptr [128] 指定操作数Debug 使用包括在中括号([ ]) 的操作数引用内存地址的习惯用法。这是因为另一方面Debug 不能区分立即操作数和内存地址的操作数。以下范例显示两种格式: mov ax,21 ; load AX with 21h mov ax,[21] ; load AX with the ; contents of ; memory location 21h 使用伪指令使用a 命令提供两个常用的伪指令:db 操作码,将字节值直接汇编到内存,dw 操作码,将字值直接汇编到内存。以下是两个伪指令的范例: db 1,2,3,4,"THIS IS AN EXAMPLE" db 'THIS IS A QUOTATION MARK:"' db "THIS IS A QUOTATION MARK:'" dw 1000,2000,3000,"BACH" 范例a 命令支持所有形式的间接注册命令,如下例所示: 2

汇编语言调试DEBUG命令详解

汇编语言调试DEBUG命令详解 1、显示命令D ① D [地址] ② D [范围] 如不指定范围,一次显示8行×16个字节。 -D ;默认段寄存器为DS,当前偏移地址 -D DS:100 / -D CS:200 -D 200:100 -D 200;200为偏移地址,默认段寄存器DS -D DS:100 110/ -D 100 L 10 2.修改命令E ① E 地址;从指定地址开始,修改(或连续修改)存储单元内容。DEBUG首先显示指定单元内容,如要修改,可输入新数据;空格键显示下一个单元内容并可修改,减号键显示上一个单元内容并可修改;如不修改,可直接按空格键或减号键;回车键结束命令。 ② E 地址数据表;从指定的地址开始用数据表给定的数据修改存储单元。 -E DS:100 F3 ‘AB’ 8D。 3.添充命令F F 范围数据表; 将数据表写入指定范围的存储单元;数据个数多,忽略多出的数据,个数少,则重复使用数据表。 -F DS:0 L5 01,02,03,04,05 -F DS:0 L5 01 02 03 04 05(空格分隔) -F DS:0 L5 FF ;5个字节重复使用FF 4.显示修改寄存器命令R R;★显示所有寄存器和标志位状态; ★显示当前CS:IP指向的指令。 显示标志时使用的符号: 标志标志=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

5.汇编命令A A [地址];从指定的地址开始输入符号指令;如省略地址,则接着上一个A命令的最后一个单元开始;若第一次使用A命令省略地址,则从当前CS:IP 开始(通常是CS:100)。 注释:①在DEBUG下编写简单程序即使用A命令。 ②每条指令后要按回车。 ③不输入指令按回车,或按Ctrl+C结束汇编。 ④支持所有8086符号硬指令,伪指令只支持DB、DW,不支持各类符号名。 6.反汇编命令U ① U [地址];从指定地址开始反汇编32个字节的机器指令;省略地址时,则接着上一个U命令的最后一个单元开始;若第一次使用U命令省略地址,则从当前CS:IP开始(通常是CS:100)。 ② U 范围;对指定范围的单元进行反汇编。 -U -U100 -U100L10 7.运行程序命令G ① G;从CS:IP指向的指令开始执行程序,直到程序结束或遇到INT 3。 ② G=地址;从指定地址开始执行程序,直到程序结束或遇到INT 3。 ③ G 断点1[,断点2,…断点10];从CS:IP指向的指令开始执行程序,直到遇到断点。 ④G=地址断点1[,断点2,…断点10] -G ;从CS:IP指向的指令开始执行程序。 -G=100 ;从指定地址开始执行程序。 -G=100 105 110 120 8.跟踪命令(单步执行命令)T ① T;从当前IP开始执行一条指令。 ② T 数值;从当前IP开始执行多条指令。 ② T =地址; ③ T =地址数值; -T -T5 / -T=100 5 9.跟踪执行并跳过子程序命令P P [=地址] [数值];类似T命令,但跳过子程序和中断服务程序。 10.退出DEBUG命令Q Q;返回DOS环境。 -Q 11.命名命令N N 文件标示符;指定文件,以便用W命令在磁盘上生成该文件,或者用L命令从磁盘装入该文件。 -N MY_https://www.wendangku.net/doc/ed2470339.html,

常用Linux系统Debug命令

常用Linux系统Debug命令 常用Linux系统Debug命令 命令系统,是一种计算机代码控制系统。常用Linux系统Debug 命令有哪些呢?下面是相关的知识,欢迎阅读。 1、查看TCP连接状态 netstat-nat|awk'{print$6}'|sort|uniq-c|sort-rn netstat- n|awk'/^tcp/{++S[$NF]};END{for(ainS)printa,S[a]}' netstat- n|awk'/^tcp/{++state[$NF]};END{for(keyinstate)printkey,"",s tate[key]}' netstat- n|awk'/^tcp/{++arr[$NF]};END{for(kinarr)printk,"",arr[k]}' netstat-n|awk'/^tcp/{print$NF}'|sort|uniq-c|sort-rn netstat-ant|awk'{print$NF}'|grep-v'[a-z]'|sort|uniq-c netstat-nat|awk'{print$6}'|sort|uniq-c|sort-rn netstat- n|awk'/^tcp/{++S[$NF]};END{for(ainS)printa,S[a]}' netstat- n|awk'/^tcp/{++state[$NF]};END{for(keyinstate)printkey,"",s tate[key]}' netstat- n|awk'/^tcp/{++arr[$NF]};END{for(kinarr)printk,"",arr[k]}' netstat-n|awk'/^tcp/{print$NF}'|sort|uniq-c|sort-rn

实验一 DEBUG的使用

实验一 DEBUG的使用 实验目的: 1.学习使用DEBUG程序的各种命令。 2.掌握8088/86指令系统---算数指令。 3.掌握用DEBUG调试自编程序的方法。 4.掌握8088/8086 CPU寄存器的用途和存储器组织及它们之间的关系。 5.掌握内存操作数及寻址方法。 6.掌握汇编语言伪操作:BYTE PTR,WORD PTR。 内容及步骤: 一、DEBUG 命令使用: 1、敲 DEBUG 进入 DEBUG 环境,显示提示符 '_ '。 2、用命令 D100 10F 观察内存中的16进制码及屏幕右边的ASCII字符。 3、用命令 E100 30 31 32 …… 3F 将30H~3FH写入地址为100H开始的内存单元中, 再用D命令观察结果,看键入的16进制数是什么字符的ASCII码? 4、用命令 F100 10F 'A' 将'A'的ASCII码填入内存,用D命令查看结果。 5、用命令 F110 11F 41 将41H 填入内存,用D命令观察结果并比较。 6、用R 命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF和AF的内 容。 7、用R命令将AX,BX内容改写为1234H及5678H。 8、用H命令检查下列各组16进制数加减结果并和你的手算结果比较: (1)34H,22H (2)56H,78H (3)A5,79H (4)1284H,5678H (5)A758,347FH 二、8088常用指令练习 1、传送指令 1)用A命令在内存100H处键入下列内容: MOV AX,1234 MOV BX,5678 XCHG AX,BX MOV AH,34 MOV AL,56 MOV CX,75AB XCHG AX,CX 2)用U命令检查键入的程序,特别注意左边的机器码。 3)用T命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况。并注意标志位有无变化。 2、加减法指令: 1)用A命令在内存200H处键入下列内容:

利用DEBUG调试汇编语言程序段

利用DEBUG调试汇编语言程序段一.实验目的 1.熟悉DEBUG有关命令的使用方法; 2.利用DEBUG掌握有关指令的功能; 3.利用DEBUG运行简单的程序段。 二.实验容 1.进入和退出DEBUG程序; 1)开始—运行,输入cmd,点确定进入命令窗口 2)在命令窗口中输入dubug进入debug程序

3)进入debug窗口后,输入q命令退出debug 2.学会DEBUG中的 1)D命令(显示存数据D 段地址:偏移地址) 例1:-D100 ;显示DS段, 0100开始的128个字节容 说明:指定要显示其容的存区域的起始和结束地址,或起始地址和长度。 ①DSEGREG[起始地址] [L 长度] ;显示SEGREG段中(缺省默认为DS), 以[起始地址] (缺省为当前的偏移地址),开始的[L 长度] (缺省默认为128)个字节的容. ② D SEGREG[段地址:偏移地址]

;显示SEGREG段中(缺省默认为DS), [段地址:偏移地址] 开始的[L 长度] (缺省默认为128)个字节容 -D ;默认段寄存器为DS,当前偏移地址(刚进入debug程序偏移地址为0100H) -D DS:100 ;显示DS段, 0100H开始的128个字节容 -D CS:200 ;显示CS段, 0200H开始的128个字节容 -D 200:100 ;显示DS段, 0200:0100H开始的128个字节容 -D 200;显示DS段, 0200H开始的128个字节容 -D 100 L 10 ;显示DS段, 100H开始的100H个字节容 2)E命令(修改指定存) 例1:-E100 41 42 43 44 48 47 46 45 -D 100,L08

实验一--掌握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) 进入Debug Debug是在DOS方式下使用的程序。我们在进入Debug前,应先进入到DOS方式。用以下方式可以进入DOS: ①重新启动计算机,进入DOS方式,此时进入的是实模式的DOS。 ②在Windows中进入DOS方式,此时进入的是虚拟8086模式的DOS。 三.实验任务 1. 从网上下载Dosbox和debug.exe(文件夹中有)。 2. debug.exe放在D:根目录,然后安装,安装完成以后,点击快捷方式进入Dos界面:

3.输入mount c d:\ 接着输入c: Dosbox 5.接着,你就可以使用Debug: debug 6.备注:debug.exe放在D:根目录下,你也可以把debug.exe放在任何一个文件夹下面。 其中这个文件夹就是mount c d:所对应的。 一.(1) 使用Debug,将下面的程序段写入内存,逐条执行,观察每条指令执行后,CPU 中相关寄存器中内容的变化。(逐条执行,每条指令执行结果截图) 机器码汇编指令 b8 20 4e mov ax,4E20H 05 16 14 add ax,1416H bb 00 20 mov bx,2000H 01 d8 add ax,bx 89 c3 mov bx,ax

1DEBUG命令的功能及使用

实验一DEBUG命令的功能及使用 一实验目的 掌握汇编语言基本运行环境和熟悉DEBUG调试程序的命令。包括:学习使用指令,掌握常用的指令功能和简单程序设计;掌握DEBUG调试程序的命令,熟悉程序输入、存储器和CPU寄存器及标志位的检查方法,单步、断点、连续等运行程序的调试方法。 二实验内容 DEBUG的主要命令功能与格式 1.汇编命令A 格式:A [[<段寄存器名>/<段地址>:] <段内偏移>] 上式等价于: (1)A <段寄存器名>:<段内偏移> (2)A <段地址>:<段内偏移> (3)A <段内偏移> (4)A 功能:键入该命令后显示段地址和段内偏移并等待用户从键盘逐条键入汇编命令,逐条汇编成代码指令,顺序存放到段地址和段内偏移所指定的内存区域,直到显示下一地址时用户直接键入回车键返回到提示符“-”。 注:其中(1)用指定段寄存器的内容作段地址,(3)用CS的内容作段地址,(4)以CS:100作地址。以后命令中提及的各种‘地址’形式,均指(1)、(2)、(3)中A后的地址形式。 2.显示内存命令D 格式:D [<地址>/<范围>] 上式等价于: (1)D <地址> (2)D <范围> (3)D 功能:以两种形式显示指定范围的内存内容。一种形式为十六进制内容,一种形式为以相应字节的内容作为ASCII码的字符,对不可见字符以‘.’代替。 注:其中(1)以CS为段寄存器。(3)显示CS:100起始的一片内容。 3.修改内存命令E 格式:E <地址> [<单元内容表>] 上式等价于: (1)E <地址> (2)E <地址> <单元内容表>

其中<单元内容表>是以逗号分隔的十六进制数,或用’或”括起来的字符串,或者是二者的组合。 功能:(1)不断显示地址,可连续键入修改内容,直至新地址出现后键入回车Enter 为止。(2)将<单元内容表>逐一写入由<地址>开始的一片单元。 4.填充内存命令F 格式:F <范围> <单元内容表> 功能:将单元内容表中的值逐个填入指定范围,单元内容表中内容用完后重复使用。 例如:-F 5BC:200 L 10 B2,‘XYZ’,3C 5.执行命令G 格式:G [=<地址>[,<断点>]] 上式等价于: (1)G (2)G=<地址> (3)G=<地址>,<断点> 功能: 执行内存中的指令序列 注:(1)从CS:IP所指处开始执行 (2)从指定地址开始执行 (3)从指定地址开始执行,到断点自动停止。 6.内存搬家命令M 格式:M <源地址范围> <目标起始地址> 其中源及目标地址若仅输入偏移量,则隐含相对DS。 功能:把<源地址范围>中的内容顺序搬至<目标起始地址>起的一片连续单元。 例如:-M CS:100 110 600 把从CS:100起至CS:110止17个字节搬至DS:600至DS:610的一片单元。 7.结束DEBUG返回DOS命令Q 格式:Q 功能:返回DOS提示符下 8.显示修改寄存器命令R 格式:R [<寄存器名>] 上式等价于: (1)R (2)R <寄存器名> 功能:(1)显示当前所有寄存器内容,状态标志及将要执行的下一指令的地址,代码及汇编语句形式。其中对状态标志FLAG以每位的形式显示,见下表。

掌握DEBUG基本命令

实验课程名称微型计算机原理实验报告_实验项目名称掌握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

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=0000 DI=0000 DS=3000 ES=23A0 CS=138E IP=0000 NV UP DI PL NZ NA PO NC 138E:0000 MOV AX,1234 -R AX ;输入命令 AX 0014 ;显示AX的内容 :;供修改,不修改按回车。 若对标志寄存器进行修改,输入:-RF 屏幕显示如下信息,分别表示OF、DF、IF、SF、ZF、AF、PF、CF的状态。 NV UP DI PL NZ NA PO NC 不修改按回车键。要修改需个别输入一个或多个此标志的相反值,再按回车键。R命令只能显示、修改16位寄存器。 (4)显示存储单元命令D 格式1:D[起始地址]

汇编 DEBUG主要 命令 大全 最详细

DEBUG主要命令 DEBUG是为汇编语言设计的一种调试工具,它通过单步、设置断点等方式为汇编语言程序员提供了非常有效的调试手段。 1.DEBUG程序的调用 在DOS的提示符下,可键入命令: C:>DEBUG [d:][path][文件名][参数1][参数2] 其中文件名是被调试文件的名字,它必须是可执行文件(EXE),两个参数是运行被调试文件所需要的命令参数,在DEBUG程序调入后,出现提示符“-”,此时,可键入所需的DEBUG命令。 2.DEBUG的主要命令 ⑴显示内存单元内容的命令D,格式为: -D [地址] 或-D [范围] 例如,显示指定范围内存单元内容的方法为: -D 100 1FF 18E4:0100 47 06 04 02 38 01 47 06 -06 02 00 02 47 06 08 02 G...8.G.....G... 18E4:0110 02 02 3B 04 02 68 02 00 -4D 20 50 51 56 57 8B 37 ..;..h..M PQVW.7 其中左边为十六进制表示形式,右边为ASCII码表示形式,“.”表示不可显示字符。这里没有指定段地址,D命令自动显示DS段的内容。 ⑵修改内存单元内容的命令E,它有两种格式 1)用给定内容代替指定范围的单元内容,格式为: -E 地址内容表 例如:-E DS:100 F358595A8D,即用F3,58,59,5A,8D五个字节代替内存单元DS:100到DS:104的内容。 2)逐个单元相继地修改,格式为: -E 地址 例如:-E DS:100 18E4:0100 89.78 此命令是将0100单元内容89改为78。78是程序员从键盘输入的。程序员在修改完一个单元后,可按“空格”键继续修改下一单元内容,直至按“回车”键结束该命令。 ⑶检查和修改寄存器内容的命令R,它有三种方式 1)显示CPU内部所有寄存器内容和标志寄存器中的各标志位状态 -R 该命令可显示AX,BX,CX,DX,SP,BP,SI,DI,DS,ES,SS,CS,IP及标志寄存器内容。

DEBUG的基本调试命令

实验一 DEBUG的基本调试命令 一、实验目的 1.熟悉Pentium微处理器指令系统和寻址方式 2.掌握DEBUG调试软件的基本命令、调试方法。 二、DEBUG调试软件介绍 DEBUG.EXE程序是专门为分析、研制和开发汇编语言程序而设计的一种调试工具,具有跟踪程序执行、观察中间运行结果、显示和修改寄存器或存储单元内容等多种功能。它能使程序设计人员或用户触及到机器内部,因此可以说它是80X86CPU的心灵窗口,也是我们学习汇编语言必须掌握的调试工具。WINDOWS操作系统安装时自带有DEBUG.EXE程序,不需另外安装。 1、DEBUG程序的使用 在DOS提示符下键入命令: C:\> DEBUG [盘符:][路径][文件名.EXE][参数1][参数2] 这时屏幕上出现DEBUG的提示符“-”,表示系统在DEBUG管理之下,此时可以用DEBUG 进行程序调试。若所有选项省略,仅把DEBUG装入内存,可对当前内存中的内容进行调试,或者再用N和L命令,从指定盘上装入要调试的程序;若命令行中有文件名,则DOS把DEBUG 程序调入内存后,再由DEBUG将指定的文件名装入内存。 2、DEBUG的常用命令 (1)汇编命令 A 格式:A [起始地址] 或 A ;每输入完一条指令,用回车键来确认。 功能:将输入源程序的指令汇编成目标代码并从指定地址单元开始存放。若缺省起始地址,则从当前CS:100 (段地址:偏移地址)地址开始存放。A命令是按行进行汇编,主要是用于小段程序的汇编或对目标程序的修改,具有检查错误的功能。如有错误,用^Error提示。然后重新输入正确命令即可。 注:DEBUG的A命令中数字部分输入的默认格式是16进制。如输入10,对于计算机而言,就是10H。另外A命令不支持标识符的输入。只能用准确的段地址:偏移地址来设置跳转的位置。 (2)反汇编命令 U 格式1:U [起始地址] 格式2:U [起始地址][结束地址|字节数] 功能:格式1从指定起始地址处开始固定将32个字节的目标代码转换成汇编指令形式,缺省起始地址,则从当前地址CS:IP开始。 格式2将指定范围的内存单元中的目标代码转换成汇编指令。 (3)显示、修改寄存器命令 R 格式:R[寄存器名]或R 功能:若给出寄存器名,则显示该寄存器的内容并可进行修改。缺省寄存器名,则按以下格式显示所有寄存器的内容及当前值(不能修改)。 AX=0000 BX=0004 CX=0020 DX=0000 SP=0080 BP=0000 SI=0000 DI=0000 DS=3000 ES=23A0 CS=138E IP=0000 NV UP DI PL NZ NA PO NC 138E:0000 MOV AX,1234 -R AX ;输入命令 AX 0014 ;显示AX的内容 : ;供修改,不修改按回车。 若对标志寄存器进行修改,输入:-RF 屏幕显示如下信息,分别表示OF、DF、IF、SF、ZF、AF、PF、CF的状态。 NV UP DI PL NZ NA PO NC 不修改按回车键。要修改需个别输入一个或多个此标志的相反值,再按回车键。R命令只能显示、修改16位寄存器。

DEBUG命令使用及寻址方式使用

实验一 DEBUG命令使用及8088指令使用 一、实验目的 1、熟悉使用DEBUG命令 2、用DEBUG命令进行七种寻址方式的验证 二、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由[值]确定。 (5)显示内存单元内容的命令D,格式为:-D[地址]或-D[范围]

DOS的debug命令表

DOS的提示符下,可如下键入Debug启动调试程序: DEBUG [路径\文件名] [参数1] [参数2] Debug后可以不带文件名,仅运行Debug程序;需要时,再用N和L命令调入被调试程序。命令中可以带有被调试程序的文件名,则运行Debug的同时,还将指定的程序调入主存;参数1/2是被调试程序所需要的参数。 在Debug程序调入后,根据有无被调试程序及其类型相应设置寄存器组的内容,发出Debug的提示符“-”,此时就可用Debug命令来调试程序。 ?运行Debug程序时,如果不带被调试程序,则所有段寄存器值相等,都指向当前可用的主存段; 除SP之外的通用寄存器都设置为0,而SP指示当前堆栈顶在这个段的尾部;IP=0100h;状态标志都是清0状态。 ?运行Debug程序时,如果带入的被调试程序扩展名不是.EXE,则BX.CX包含被调试文件大小的字节数(BX为高16位),其他同不带被调试程序的情况。 ?运行Debug程序时,如果带入的被调试程序扩展名是.EXE,则需要重新定位。此时,CS : IP 和SS : SP根据被调试程序确定,分别指向代码段和堆栈段。DS=ES指向当前可用的主存段,BX.CX包含被调试文件大小的字节数(BX为高16位),其他通用寄存器为0,状态标志都是清0状态。 Debug的命令都是一个字母,后跟一个或多个参数:字母 [参数] 命令的使用中注意: ①字母不分大小写; ②只使用16进制数,没有后缀字母; ③分隔符(空格或逗号)只在两个数值之间是必须的,命令和参数间可无分隔符; ④每个命令只有按了回车键后才有效,可以用Ctrl+Break中止命令的执行; ⑤命令如果不符合Debug的规则,则将以“error”提示,并用“^”指示错误位置。 许多命令的参数是主存逻辑地址,形式是“段基地址 : 偏移地址”。其中,段基地址可以是段寄存器或数值;偏移地址是数值。如果不输入段地址,则采用默认值,可以是缺省段寄存器值。如果没有提供偏移地址,则通常就是当前偏移地址。 对主存操作的命令还支持地址范围这种参数,它的形式是:“开始地址结束地址”(结束地址不能具有段地址),或者是:“开始地址 L字节长度”。 显示命令D D(Dump)命令显示主存单元的内容,它的格式如下(注意分号后的部分用于解释命令功能,不是命令本身): D [地址];显示当前或指定开始地址的主存内容 D [范围];显示指定范围的主存内容

实验一 利用DEBUG调试程序调试程序段

实验一利用DEBUG调试程序调试程序段1.实验目的 (1)熟悉DEBUG有关命令的使用方法。 (2)利用DEBUG掌握有关指令的功能。 (3)利用DEBUG运行简单的程序段。 2.实验内容、实验步骤 (1)进入和退出DEBUG程序。 进入DEBUG程序,Windows中在命令提示符下进入DEBUG如图:退出DEBUG如图: (2)学会DEBUG中的D命令、E命令、R命令、T命令、A命令、G命 令等的使用。对于U命令、N命令、W命令等,也应试一下。 R命令: 1)显示所有寄存器内容: 格式:-R↙ 功能:以十六进制形式显示CPU内部各寄存器的值:以符号形式标志寄存 器各标志位(除TF外)的值,并将CS:IP所指的内存内容反汇编成一条指 令,可视为将要执行的指令。 ●从显示可知,CS=11A7H, IP=0000H. 2)修改寄存器 格式:-R 寄存器名↙ 功能:DEBUG首先显示指定寄存器的当前值,并在下一行首给出提示“:”, 等待用户输入新值,若直接回车相当于不个忙寄存器的值。 ●由显示可知,用E命令修改,再查看可发现数据已经被改了。

3)修改标志值 格式:-RF↙ 功能:先用符号显示当前各标志位的值,并在末尾给出提示符“-”,然后等待用户以符号形式输入新的标志值,对输入的次序没有要求,各标志值之间也可没有空格;若直接在“-”之后回车,则保留原标志值。 ●由显示可知,相应的标志值改变了。 A命令 格式:-A内存地址↙ ●执行汇编命令A后,相应的指令对应的机器码将会依次存放在指定的 内存单元中,并提示下一地址。 U命令 格式:-U 内存块↙

●由显示可知,反汇编命令U从指定的内存地址开始对内存块进行反汇 编,并分三列显示反汇编的结果。 N命令 格式:-N【e】【PA TH】文件名.扩展名↙ W命令L命令 格式:-W/L 内存地址 ●由显示可知,命令N为命令W和命令L指定文件,而命令W把指定 内存块的内容写入命令N指定文件中,命令L则将其文件装入内存地址中。 T命令 1)单步执行 格式:-T=内存地址↙ ●由显示可知,T命令将内存地址的段地址和偏移地址修改CS和IP,然 后执行由CS:IP指向的内存单元处的一条指令,显示各寄存器的值,并反编下一条指令,然后返回DEBUG状态。

DEBUG指令的一些总结和调试方法

DEBUG指令的一些总结和调试方法.txt男人应该感谢20多岁陪在自己身边的女人。因为20岁是男人人生的最低谷,没钱,没事业;而20岁,却是女人一生中最灿烂的季节。只要锄头舞得好,哪有墙角挖不到? DEBUG指令的一些总结和调试方法 首先如入一下门,debug都是从这些东东来的 1。主要的命令及格式,这些命令是debug最基本的命令,如何灵活使用就看你自己的硬件知识了,不过我会举一些具体粒子的 A(Assemble):汇编语句 A[address] C(Compare):比较内存 C range address D(Dump):显示内存 D[address]或D[range] E(Enter):改变内存 E address[list] F(Fill):填充内存 F range list G(Go):执行程序 G[=address[address[address...]] H(Hexarithmetic):十六进制运算命令 H[address[drive|sector|sector]] I(Input):输入 I portaddress L(Load):装入内存 L[address[drive|sector|sector]] M(Move):传送内存 M range address N(Name):定义文件和参数 N[d:][path]filename[.ext] O(Output):输出字节 O portaddress byte P(Proceed):在下条指令前停止 P[=address][value] Q(Quit):结束DEBUG程序 Q R(Hexarithmetic):显示寄存器/标志位 R[registername] S(Search):捡索字符 S range list T(Trace):执行并显示(跟踪) T[=address][value] U(Unassemble):反汇编指令 U[address]或U[range] W(Write):把文件或数据写盘 W[address[drive|sector|sector]] 开始介绍一些具体应用,有些不光给出debug命令,还会列举其他方法 2。上次我写T40评测用的D命令,用来察看主板的生产日期或者版本与生产厂 D ffff:05 察看日起 D fe00:0e 察看版本 3。不知道bios密码怎么办? a debug法,清除bios密码 o 70 10 o 71 10 g g 重启 不过这一招太狠读了,还有 b debug法二,前提是进入系统 o70 21 o70 20 p

debug指令大全

一、预习内容 预习DEBUG程序的各种命令功能及使用方法。 二、实验目的 1、掌握DEBUG程序的各种命令,重点是A,R,D,E,U,T,G,N,W,Q等命令的使用。 2、掌握用DEBUG调试自编程序的方法,为以后实验打下基础。 三、实验内容 1、用命令A汇编下列指令,并判断指令正误并说明原因。 (1)ROR AX,8 (2)LEA DI,[AX] (3)MOV DS,2010 (4)PUSH AL (5)OUT 900,AL (6)MOV [BX],0 2、掌握用DEBUG编写程序的方法。 C:\MASM>DEBUG -A 136E:0100 MOV DX, 10C 136E:0103 MOV AH, 9 136E:0105 INT 21 136E:0107 MOV AX, 4C00 136E:010A INT 21 136E:010C -E10C 'Hello!$' -R CX ;文件字节数写在CX中 CX 0000 :13 -N https://www.wendangku.net/doc/ed2470339.html, ;给文件命名 -W;写入到磁盘中 Writing 00013 bytes -G Hello! C:\MASM> DEBUG https://www.wendangku.net/doc/ed2470339.html, -U -G -Q 四、问题 1、在指令MOV [BX],AX中,操作数[BX]的寻址方式是什么?在DEBUG下执行完该指令后,如何查看执行结果? 2、可否随意在DEBUG提示符“-”后不带参数发出命令G?什么情况下使用命令G时,可不用“=”给出程序的首地址?

五、预习内容 预习汇编程序的功能及汇编过程。 六、实验目的 熟悉宏汇编MASM 6.0的使用,掌握对汇编语言源文件的编辑、汇编及连接的方法。 七、实验内容 1、用编辑软件EDIT编辑源程序SAMPLE.ASM,功能是输出字符串“HELLO!”。SAMPLE.ASM程序代码如下: DATA SEGMENT STRING DB 'HELLO!',' $' DATA ENDS STACK SEGMENT 'STACK' DB 100 DUP(?) STACK ENDS CODE SEGMENT MAIN PROC FAR ASSUME DS:DATA,SS:STACK ASSUME CS:CODE START:PUSH DS MOV AX,0 PUSH AX MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX LEA DX,STRING MOV AH,9 INT 21H MOV AH,4CH INT 21H RET MAIN ENDP CODE ENDS END START 2、用MASM程序对其进行汇编,产生SAMPLE.OBJ文件。 3、用LINK程序对其进行连接,产生SAMPLE.EXE文件。 4、执行SAMPLE.EXE文件,并观察运行结果是否相符。 5、用DEBUG调试程序。 八、问题 1、汇编语言源程序、汇编程序及汇编之间的区别与联系? 程序中MOV AH,4CH 与 INT 21H 这两条语句的功能是什么?能否省略?

相关文档