实验一DEBUG命令及其操作.docx

上传人:b****1 文档编号:352903 上传时间:2022-10-09 格式:DOCX 页数:11 大小:99.18KB
下载 相关 举报
实验一DEBUG命令及其操作.docx_第1页
第1页 / 共11页
实验一DEBUG命令及其操作.docx_第2页
第2页 / 共11页
实验一DEBUG命令及其操作.docx_第3页
第3页 / 共11页
实验一DEBUG命令及其操作.docx_第4页
第4页 / 共11页
实验一DEBUG命令及其操作.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

实验一DEBUG命令及其操作.docx

《实验一DEBUG命令及其操作.docx》由会员分享,可在线阅读,更多相关《实验一DEBUG命令及其操作.docx(11页珍藏版)》请在冰豆网上搜索。

实验一DEBUG命令及其操作.docx

实验一DEBUG命令及其操作

实验一--DEBUG命令及其操作

实验一DEBUG命令及其操作

一、实验目的

1.熟练掌握debug的常用命令,学会用debug命令汇编和调试程序。

2.深入了解数据在存储器中的存取方法及堆栈中数据的压入与弹出。

3.掌握各种寻址方法以及简单指令的执行过程。

二、实验要求

1.实验前先预习附录1的内容,写出完成各实验内容的汇编程序清单。

2.本实验要求在PC机上进行。

3.本实验只要求在DEBUG调试状态下进行,包括汇编程序,调试程序,执行程序。

三、实验内容

●实验内容1:

学习用DEBUG调试工具进行源程序的输入、汇编、调试和执行。

1.打开计算机,将系统切换到MS-DOS方式下,键入DEBUG后回车,将出现debug的提示符“-”。

2.在DEBUG提示符后键入字母“-a100”,回车后,屏幕上就会出现下面类似的内容:

-a100

1272:

0100(表示此时代码段的段地址为1272,

:

8

-w

Writing00008bytes

因为文件的字节数必须事先放在BX和CX中,其中BX保存高16位,CX保存低16位,整个32位的数保存文件的字节数,一般来说,BX设置为0,因为CX可存放的字节数为64K,对于一般的程序已足够了。

3.用Q命令退出DEBUG程序。

实验内容1报告要求:

1.写出上述每一步执行的目的;

2.小结debug常用命令及使用体会

●实验内容2

设AX=3000H,BX=5000H,通过堆栈实现将AX和BX的内容进行交换。

用DEBUG进行程序的汇编与调试。

提示:

AX和BX的值可用debug主的r命令将其送入相应寄存器中,也可用MOV指令完成。

实验内容2报告要求:

1.写出完成上述功能的程序段;

2.单步执行,并记录寄存器AX,BX及堆栈指针SP的变化。

●实验内容3

设DS=当前段地址,BX=0300H,SI=0002H。

用DEBUG的e命令将内存单元0300H~0304H装入0AH,0BH,0CH,0DH,0EH。

键入下列程序,单步执行。

程序清单如下:

MOVBX,0300

MOVSI,0002

MOVAX,BX

MOVAX,0304

MOVAX,[0304]

MOVAX,[BX]

MOVAX,0001[BX]

MOVAX,[BX][SI]

MOVAX,0001[BX][SI]

实验内容3报告要求:

1.写出源操作数的寻址方式;

2.单步执行,并记录相关寄存器及存储单元的内容

●实验内容4

设AX=0002H,编写程序将AX的内容乘10,要求用移位的方法完成。

提示:

左移指令要用SHL,而不能使用SAL

实验内容4报告要求:

1.写出实现上述功能的程序段;

2.单步执行程序,记录每条指令的机器码及相关寄存器的内容

附录1调试程序——debug

在编写和运行汇编程序的过程中,会遇到一些错误和问题,需要对程序进行分析和调试,DEBUG就是为汇编语言设计的一种调试工具,它通过单步、设置断点等方式为汇编语言程序员提供了非常有效的调试手段。

它在调试汇编语言程序时有很强的功能,能使程序设计者接触到机器内部,能观察和修改寄存器和存储单元的内容,并能监视目标程序的执行情况,使用户真正接触到CPU内部,与计算机产生最紧密的工作联系。

在debug状态下,用户可以进行编辑、调试、监督、执行用户编写的汇编程序,可以修改内存单元、寄存器的内容,为调试程序、修改程序带来方便。

但在debug状态下运行的程序不能使用宏汇编程序中的宏命令,大部分伪指令也不能使用,因此只能把程序分段执行。

一、DEBUG程序的进入

在DOS的提示符下,可键入命令:

DEBUG[D:

][PATH][FILENAME[.EXT]][PARM1][PARM2]

其中:

●命令中的D指定驱动器,PATH为路径;

●[FILENAME[.EXT]文件名是被调试文件的名字,注意扩展名必不可少。

如用户键入文件名,则DEBUG将指定的文件装入存储器中,用户可对其进行调试。

如果未键入文件名,则用户可以用当前存储器的内容工作,或者用DEBUG命令N和L把需要的文件装入存储器后再进行调试。

●PARM1和PARM2则为运行被调试文件时所需要的命令参数。

在DEBUG程序调入后,将出现提示符“_”,此时就可用DEBUG命令来调试程序。

启动debug后,寄存器和标志位的状态:

1、段寄存器(CS,DS,ES和SS)被置到自由存储空间的底部,即第一段位于debug程序的末尾处。

2、指令指针(IP)置为0100H。

3、堆栈指针(SP)置为段的尾部或装入程序暂存区域的底部。

4、寄存器(AX,BX,CX,DX,BP,SI,DI)置为0。

若启动debug程序时指定了文件,则CX寄存器内装入文件长度(字节数),如果文件长度大于64K,则文件长度置于BX和CX中(高位在BX中)。

5、标志位为清除状态。

二、DEBUG的主要命令

1、显示存储单元的命令D(DUMP),格式为:

-D[address]或-D[range]

例如,按指定范围显示存储单元内容的方法为:

-d100120

18E4:

0100c70604023801c706-06020002c7060802G...8.G.....G...

18E4:

01100202bb0402e80200-CD20505156578B37..;..h..MPQVW.7

18E4:

01208B

其中0100至0120是DEBUG显示的存储单元内容,左边用十六进制表示每个字节,右边用ASCII字符表示每个字节,·表示不可显示的字符。

这里没有指定段地址,D命令自动显示DS段的内容。

如果只指定首地址,则显示从首地址开始的80个字节的内容。

如果完全没有指定地址,则显示上一个D命令显示的最后一个单元后的内容。

2、修改存储单元内容的命令有两种。

●输入命令-E(ENTER),有两种格式如下:

格式1:

可以用给定的内容来替代指定范围的存储单元内容。

命令格式为:

-Eaddress[list]

例如,-EDS:

100F3'XYZ'8D

其中F3,'X','Y','Z'和8D各占一个字节,该命令可以用这五个字节来替代存储单元DS:

0100到0104的原先的内容。

格式2:

则是采用逐个单元相继修改的方法。

命令格式为:

-Eaddress

例如,-EDS:

100

则可能显示为:

18E4:

010089.-

如果需要把该单元的内容修改为78,则用户可以直接键入78,再按“空格”键可接着显示下一个单元的内容,如下:

18E4:

010089.781B.-

这样,用户可以不断修改相继单元的内容,直到用ENTER键结束该命令为止。

●填写命令F(FILL),其格式为:

-Frangelist

例如:

-F4BA:

01005F3'XYZ'8D

使04BA:

0100~0104单元包含指定的五个字节的内容。

如果list中的字节数超过指定的范围,则忽略超过的项;如果list的字节数小于指定的范围,则重复使用list填入,直到填满指定的所有单元为止。

3、检查和修改寄存器内容的命令R(register),它有三种格式如下:

●显示CPU内所有寄存器内容和标志位状态,其格式为:

-R

例如,-r

AX=0000BX=0000CX=010ADX=0000SP=FFFEBP=0000SI=0000DI=0000

DS=18E4ES=18E4SS=18E4CS=18E4IP=0100NVUPDIPLNZNAPONC

18E4:

0100C70604023801MOVWORDPTR[0204],0138DS:

0204=0000

●显示和修改某个寄存器内容,其格式为:

-Rregistername

例如,键入

-RAX

系统将响应如下:

AXF1F4

即AX寄存器的当前内容为F1F4,如不修改则按ENTER键,否则,可键入欲修改的内容,如:

-Rbx

BX0369

059F

则把BX寄存器的内容修改为059F。

●显示和修改标志位状态,命令格式为:

-RF系统将响应,如:

OVDNEINGZRACPECY-

此时,如不修改其内容可按ENTER键,否则,可键入欲修改的内容,如:

OVDNEINGZRACPECY-PONZDINV

即可,可见键入的顺序可以是任意的。

PSW中标志位的符号表示

标志名

标志为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

4、运行命令G,其格式为:

-G[=address1][address2[address3…]

其中,地址1指定了运行的起始地址,如不指定则从当前的CS:

IP开始运行。

后面的地址均为断点地址,当指令执行到断点时,就停止执行并显示当前所有寄存器及标志位的内容,和下一条将要执行的指令。

5、跟踪命令T(Trace),有两种格式:

●逐条指令跟踪

-T[=address]

从指定地址起执行一条指令后停下来,显示所有寄存器内容及标志位的值。

如未指定地址则从当前的CS:

IP开始执行。

●多条指令跟踪

-T[=address][value]

从指定地址起执行n条指令后停下来,n由value指定。

6、汇编命令A(Assemble),其格式为:

-A[address]

该命令允许键入汇编语言语句,并能把它们汇编成机器代码,相继地存放在从指定地址开始的存储区中。

当键入A命令,自动产生程序所送内存单元的段地址和偏移地址,通过偏移地址可以看到每条指令占内存单元多少个字节。

其中送入的数据为十六进制数,不需要键入H表示数据为十六进制数。

该命令允许键入汇编语言语句,并能把它们汇编成机器代码,相继地存放在从指定地址开始的存储区中。

必须注意:

DEBUG把键入的数字均看成十六进制数,所以如要键入十进制数,则其后应加以说明,如100D。

(注:

使用A命令键入的程序,一般不使用标号及伪指令,仅允许使用DB、DW伪指令)。

7、反汇编命令U(Unassemble)有两种格式。

●从指定地址开始,反汇编32个字节,其格式为:

-U[address]

例如:

-u100

18E4:

0100C70604023801MOVWORDPTR[0204],0138

18E4:

0106C70606020002MOVWORDPTR[0206],0200

18E4:

010CC70606020202MOVWORDPTR[0208],0202

18E4:

0112BBO4O2MOVBX,0204

18E4:

0115E80200CALL011A

18E4:

0118CD20INT20

18E4:

011A50PUSHAX

18E4:

011B51PUSHCX

18E4:

011C56PUSHSI

18E4:

011D57PUSHDI

18E4:

011E8B37MOVSI,[BX]

如果地址被省略,则从上

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1