微机原理实验debug调试

更新时间:2023-12-15 19:01:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

汇编语言调试程序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+5 2)利用乘法指令求3*5

3)利用算术运算指令求3的补码

4)学习使用逻辑运算指令。求5和17相与、相或的结果。 5)学习数据传送指令

三、设备

PC机一台

四、练习步骤

1、实现3加5:

2、实现3*5:

3、实现求3的补码:

4、实现5和17相与:

5、传送指令(独立练习)

1)用A命令在内存100H处键入下列内容:

MOV AX,1234 MOV BX,5678 XCHG AX,BX MOV AH,35 MOV AL,48 MOV DX,75AB XCHG AX,DX

2)用U命令检查键入的程序并记录,特别注意左边的机器码。

3)用T命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况。并 注意标志位有无变化。

说明:

下面所有操作均在DOS状态下进行。DEBUG.EXE是DOS操作系统提供的一个调试汇编语言

程序的工具程序。其主要功能为:

1.可动态调试汇编语言程序;

2.可检查或修改CPU各寄存器、标志及内存单元的内容; 3.可输入汇编指令到指定的内存; 4.可把要调试的程序(通常以可执行文件形式存储在磁盘上)调入到内存中,控制CPU按单步、设置断点等方式执行程序,检查程序运行过程中的中间结果,以便寻找程序出错的原因。

一、进入DEBUG C:\\MASM>DEBUG

二、常用DEBUG 命令

1、

DEBUG命令概述 (1) 特点

A. 除命令RF外,DEBUG命令本身均为单字符,后面跟一个或多个参数,有些命

令不给参数也能运行,如下表[]中的参数,这种情况下用默认值作为参数; B. DEBUG下输入和显示的数均为十六进制数,故数字后不可加后缀H,O,B等,

否则认为命令错;

C. 命令和参数不区分大小写; 分类 读写寄存器 命令格式 R R 寄存器名 RF 汇编和反汇编 A[内存地址] U[内存块] T[=内存地址][条数] 执行指令 P[=内存地址][条数] G[=内存地址] G[=内存地址] 断点地址 D[内存块] E 内存地址 字符或数值串 读写内存 F 内存块 字符或数值串 S 内存块 字符串或数值 M 内存块1 内存块2的首地址 C内存块1 内存块2的首地址 退出DEBUG

(2) 常用参数含义

A、 内存地址

内存地址表示一个内存区域的起始地址,由段地址和偏移地址两部分组成。段地址可用一个1至4位的十六进制数表示,也可用某个段寄存器表示,偏移地址只能用1至4位的十

六进制数表示。段地址和偏移地址之间必须用冒号分隔。

例 300:800 表示300:800H的内存地址

CS:100 表示以CS的内容为段地址,偏移地址为100H的内存地址

B、

内存块

功能简介 显示所有寄存器内容 显示和修改指定寄存器内容 显示和修改FR的内容 从指定地址开始汇编指令 对指定内存块进行反汇编 单步或多步执行指令 单步或多步执行指令 连续执行指令 设断点执行程序 显示指定内存块内容 修改指定内存内容 填充指定内存块 在指定内存块中查找串 复制内存块内容 比较两个指定内存块 退出DEBUG,返回DOS Q DEBUG主要命令一览表

内存块表示一个内存区域,有两种表示方法:一种是用首地址和末地址表示,其中首地址用前面介绍的内存地址表示法,而末地址只用偏移地址表示,其段地址默认为首地址的段值,末地址的偏移地址应比首地址的偏移地址大。

另一种是用首地址和长度表示,其中长度由字符L引出。内存块的最大值是64K。 命令D默认的长度为80H个字节,命令U默认的长度为20H个字节。 例 下面两种表示法均表示DS:200H~DS:24FH的内存块 DS:200 24F DS:200 L50

例 下面两种表示法均表示3000H:5100H~3000H:51FFH的内存块 3000:5100 51FF 3000:5100 L100

C、 D、

2、

字符串参数一般用单引号‘’给出 例:-F DS:1000 ‘Please Input:’

数值参数为一个字节的十六进制数。多个数值参数之间必须用分隔符分隔。

例:-E DS:2000 12 34 56 78 90 常用DEBUG命令介绍 (1)

A、

显示、修改寄存器内容 显示所有寄存器内容

格式:-R

功能:以十六进制形式显示CPU内部各寄存器的值;以符号形式显示标志寄存器各标志位(TF除外);并将CS:IP所指向的内存内容反汇编成一条指令,可视为将要执行的指令。

标志名称 溢出标志(OF)(overflow flag) 方向标志(DF)(direction flag) 中断标志(IF)(interrupt flag) 符号标志(SF)(sign flag) 零标志(ZF)(zero flag) 辅助标志(AF)(auxiliary carru flag) 奇偶标志(PF)(parity flag) 进位标志(CF)(carry flag) 标志位的符号表示

例 进入DEBUG后,查看各寄存器的值,并记录当前CS和IP的值。 -R

AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=1270 ES=1270 SS=1270 CS=1270 IP=0100 NV UP EI PL NZ NA PO NC

1270:0100 0409 ADD AL,09 从显示可知,CS=1270H,IP=0100H

由于所装的系统不同,可用内存会有所不同,应记录自己系统进入DEBUG后的CS和IP值。

B、

修改寄存器

格式:-R 寄存器名

功能:DEBUG首先显示指定寄存器的当前值,并在下一行首给出提示符“:”,等待用户输入新值。若直接回车相当于不修改寄存器的值。

标志为1 OV DN EI NG ZR AC PE CY 标志为0 NV UP DI PL NZ NA PO NC

例 –R DS 1270 :12A3

DS的内容由原来的1270H修改为12A3H。 (2)

A、

汇编、反汇编指令 汇编命令A

格式:-A 内存地址

功能:先显示汇编的内存地址,等待用户输入一条助记符指令。用户输入指令并回车后,DEBUG将把这条指令对应的机器码顺序存放在指定的内存单元中,并提示下一地址,等待用户继续输入下一条指令。

若直接回车,则退出A命令。

若输入指令有误,则显示出错信息,仍然提示当前的汇编地址,用户可重新输入指令。 -A 1270:100

1270:0100 MOV AH,2 1270:0102 MOV DL,’a’

error

1270:0102 MOV DL,61 1270:0104 INT 21 1270:0106 INT 20 1270:0108 B、

反汇编指令U

格式1:-U 内存地址 格式2:-U 内存块

功能:格式1从指定地址处开始将20H个字节的目标代码转换成汇编指令形式,缺省内存地址

时,从当前地址CS:IP开始。

格式2将指定范围的内存单元中的目标代码转换成汇编指令。 例 反汇编从1270:100开始长度为20H个字节的内存单元内容。 -U 1270:100

1270:0100 B402 MOV AH,02 1270:0102 B261 MOV DL,61 ? (3)

A、

显示、修改内存内容 显示命令D

格式1:D 内存地址 格式2:D 内存块

功能:格式1从起始地址开始按十六进制显示80H个单元的内容,每行16个单元,共8行,每行右边显示16个单元的ASCII码,不可显示的ASCII码则显示“· ”。 格式2显示指定范围内的存储单元的内容。若地址缺省,则按格式1显示。 例如 -D 200 ;表示从DS:0200H开始显示128个单元内容 -D 100 120 ;表示显示DS:1000~DS:0120单元的内容 例:-D 12AF:100 L30

12AF:0100 41 42 43 44 45 00???ABCDE.W?. 12AF:0110

12AF:0120 B、

修改命令E

格式1:-E 内存地址 字符或数值串 格式2:-E 内存地址

功能:对于格式1,用命令中的字符串或数字修改指定的内存单元。

对于格式2,先给出命令中指定内存单元的内容,并给出提示符“· ”,可在其后输入要修改的值,若直接按空格则不修改该单元内容,而接着提示下一单元的内容,若直接回车表示结束E命令。

例 用字符串‘HELLO‘对应的ASCII码修改从DS:1000H开始的5个内存单元。 -E DS:1000 ‘HELLO‘

例 用数值12H,34H,56H,78H,90H,FAH 修改从12FA:100H开始的6个单元。 -E 12FA:100

12FA:0100 41.12 42.34 43.56 44.78 45.90 00.FA 57 C、

填充命令F

格式:-F 内存块 字符或数值串

功能:用命令中指定的字符或数值串填入指定的内存块,当指定的字符或数值串的总字节数小于指定的内存块,则在指定的内存块重复输入。

例 将字符串‘HELLO WORLD’填入DS:2000至2100H的内存块中: -F DS:2000 2100 ‘HELLO WORLD’ D、

搜索命令S

格式:-S 内存块 字符或数据串

功能:在指定的内存块内搜索指定的字符或数据串,如找到则显示字符或数据串在内存中的首地址。

例:在DS:2000H开始,大小为20H的内存块中查找字符串‘HELLO WORLD’ -S DS:2000 L20 ‘HELLO WORLD’ 12A3:2000 12A3:200C E、

复制命令M

格式:-M 内存块1 内存块2的首地址

功能:将内存块1的内容复制到内存块2,内存块1的内容不变。 例 将2000:100H开始,大小为20H的内存块复制到DS:200H -M 2000:100 L20 DS:200 F、

比较命令C

格式:-C 内存块1 内存块2的首地址

功能:顺序比较两内存块各单元的内容,如两个内存块内容相同,则不显示任何信息,直接返回DEBUG状态;

如有不同,则将各自的地址和内容显示出来。

例 比较DS:200H和2000H:100H开始,大小为20H的两内存块。 -C DS:200 L20 2000:100 (5)执行程序

A、

单步执行 -P=内存地址

格式:-T=内存地址

功能:用命令中内存地址的段地址和偏移地址修改CS和IP,然后执行由CS:IP指向的内存单

元处的一条指令,显示各寄存器的值,并反汇编下一条指令,返回DEBUG状态。

若命令中不用“=”给出执行的首地址,则从当前CS:IP指向的指令的命令开始执行。 例 执行1270:100处的指令MOV AH,2 -T=1270:100

AX=0200 BX=0000 DS=12A3 ES=1270 1270:0102 B261 MOV DL,61 B、

连续执行

格式:-G=内存地址

功能:从命令给出的内存地址开始执行指令,直到执行完能控制返回DEBUG。 例 -G=1270H:100

Program terminated normally C、

断点执行

格式:-G=内存地址 断点地址

功能:程序从内存地址开始执行,到断点地址停下来,断点地址通常是某一条指令的起始地址。 (4) 格式:-Q

返回DOS

本文来源:https://www.bwwdw.com/article/ini5.html

Top