实验一掌握DEBUG的基本命令及其功能Word文档下载推荐.docx

上传人:b****6 文档编号:21860275 上传时间:2023-02-01 格式:DOCX 页数:13 大小:355.87KB
下载 相关 举报
实验一掌握DEBUG的基本命令及其功能Word文档下载推荐.docx_第1页
第1页 / 共13页
实验一掌握DEBUG的基本命令及其功能Word文档下载推荐.docx_第2页
第2页 / 共13页
实验一掌握DEBUG的基本命令及其功能Word文档下载推荐.docx_第3页
第3页 / 共13页
实验一掌握DEBUG的基本命令及其功能Word文档下载推荐.docx_第4页
第4页 / 共13页
实验一掌握DEBUG的基本命令及其功能Word文档下载推荐.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

实验一掌握DEBUG的基本命令及其功能Word文档下载推荐.docx

《实验一掌握DEBUG的基本命令及其功能Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《实验一掌握DEBUG的基本命令及其功能Word文档下载推荐.docx(13页珍藏版)》请在冰豆网上搜索。

实验一掌握DEBUG的基本命令及其功能Word文档下载推荐.docx

●用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.输入mountcd:

\接着输入c:

01d8addax,bx

89c3movbx,ax

01d8addax,bx

b81a00movax,001AH

bb2600movbx,0026H

00d8addal,bl

00dcaddah,bl

00c7addbh,al

b400movah,0

049caddal,9CH

提示:

可用E命令和A命令以两种方式将指令写入内存。

注意用T命令执行时,CS:

IP的指向。

(2)将下面3条指令写入从2000:

0开始的内存单元中,利用这3条指令计算2的8次方。

movax,1

addax,ax

jmp2000:

0003

(3)查看内存中的内容

PC机主板上的ROM中写有一个生产日期,在内存FFF00H~FFFFFH的某几个单元中,请找到这个生产日期并试图改变它。

(内存ffff:

0005~ffff:

000C(共8个字节单元中)处)

无法改变,修改之后内容并没有变。

【下篇】用机器指令和汇编指令编程

一.实验内容

Debug命令的补充

(1)在D命令中使用段寄存器

格式:

“d段寄存器:

偏移地址”,以段寄存器中的数据为段地址SA,列出从SA:

偏移地址开始的内存区间中的数据。

以下是4个例子:

①-rds

:

1000

-dds:

0;

查看从1000:

0开始的内存区间中的内容

②-rds

1018;

查看1000:

10~1000:

18中的内容

③-dcs:

查看当前代码段中的指令代码

④-dss:

查看当前栈段中的内容

(2)在E、A、U命令中使用段寄存器

在E、A、U这些可以带有内存单元地址的命令中,也可以同D命令一样,用段寄存器表示内存单元的段地址。

以下是3个例子:

-eds:

0112233445566;

在从1000:

0开始的内存区间中写入数据

②-ucs:

以汇编指令的形式,显示当前代码段中的代码,0代码的偏移地址

③-rds

-ads:

以汇编指令的形式,向从1000:

0开始的内存单元中写入指令

(3)下一条指令执行了吗?

在Debug中,用A命令写一段程序:

movax,2000

movss,ax

movsp,10;

安排2000:

0000~2000:

000F为栈空间,初始化栈顶。

movax,3123

pushax

movax,3366

pushax;

在栈中压入两个数据。

在用T命令单步执行movax,2000后,显示出当前CPU各个寄存器的状态和下一步要执行的指令:

movss,ax;

在用T命令单步执行movss,ax后,下一条指令应该是movsp,10,却变成了movax,3123?

注意,在用T命令单步执行movss,ax前,ax=0000,ss=0b39,sp=ffee,而执行后ss=2000,sp=0010。

ss变为2000是正常的,这正是movss,ax的执行结果。

而能够将sp设为0010的只有指令movsp,10,看来,movsp,10一定是得到了执行。

在用T命令执行movss,ax的时候,它的下一条指令movsp,10也紧接着执行了。

整理一下我们分析的结果:

一般情况下,用T命令执行一条指令后,会停止继续执行,显示出当前CPU各个寄存器的状态和下一步要执行的指令,但T命令执行movss,ax的时候,没有做到这一点。

不单是movss,ax,对于如:

movss,bx,movss,[0],popss等指令都会发生上面的情况,这些指令有哪些共性呢?

它们都是修改栈段寄存器SS的指令。

结论:

Debug的T命令在执行修改寄存器SS的指令时,下一条指令也紧接着被执行。

二.实验任务

(1)使用Debug,将上面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空。

(逐条执行,每条指令执行结果截图)

movax,ffff

movds,ax

movax,2200

movsp,0100

movax,[0];

ax=C0EA

addax,[2];

ax=C0FC

movbx,[4];

bx=30F0

addbx,[6];

bx=6021

pushax;

sp=00FE;

修改的内存单元的地址是2200:

00FE内容为C0FC

pushbx;

sp=00FC;

00FC内容为6021

popax;

ax=6021

popbx;

sp=0010;

bx=C0FC

push[4];

00FE内容为30F0

push[6];

00FC内容为2F31

(2)使用Debug,将下面的程序段写入内存,逐条执行,观察每条指令执行后,CPU中相关寄存器中内容的变化。

(逐条执行,每条指令执行结果截图)如果有问题请说明原因

汇编指令

movax,1000H

movds,[0]

addds,ax

Ds为段寄存器,无法用在算术运算指令中。

(3)仔细观察下图中的实验过程,然后分析:

为什么2000:

0~2000:

f中的内容会发生改变?

发生改变的数据分别是SS、IP、CS等的值,其数据发生了改变,是对定义栈段时部分运行环境变量进行暂存。

[实验一补充:

Masm5.0解决方案]

1从网上下载Dosbox和masm5。

2先把masm5目录放在D:

中(也可以自己选择路径),然后安装Dosbox,安装完成以后,点击快捷方式DOSBox0.74进入软件虚拟的Dos界面,如下所示

3.把需要编译的asm程序放在masm5目录中,输入mountcd:

\masm5(虚拟加载你的d:

\masm5).接着输入c:

4.masmhw.asm

4.linkhw.obj

6.当你使用dir命令的时候,可以看到我们已经生成了HW.exe可执行文件

8.输入hw

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

当前位置:首页 > 高等教育 > 工学

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

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