2011.汇编语言实验指导书

  • 格式:doc
  • 大小:2.04 MB
  • 文档页数:32

汇编语言实验指导书

咸宁学院计算机学院

二00八年九月修订

第 1 页 共 32 页

目 录

实验一 DEBUG的启动及其基本命令的使用……………………………..2

实验二 内存操作数及寻址方法…………………………………………….6

实验三 汇编语言程序的调试与运行……………………………………….8

实验四 顺序程序设计………………………………………………………10

实验五 循环程序设计………………………………………………………12

实验六 分支程序设计………………………………………………………13

实验七 子程序设计…………………………………………………………15

实验八 DOS中断及BIOS中断程序设计…………………………………18

实验九 综合程序设计………………………………………………………20

附录 实验报告……………………………………………………………21

第 2 页 共 32 页 实验一 DEBUG的启动及其基本命令的使用

一.实验目的:

掌握DEBUG 的基本命令及其功能

二.实验内容:

DEBUG是专门为汇编语言设计的一种调试工具,它通过步进,设置断点等方式为汇编语言程序员提供了非常有效的调试手段。

DEBUG的命令都是一个字母,后跟一个或多个参数:字母 [参数]

命令的使用中注意:

① 字母不分大小写;

② 只使用16进制数,没有后缀字母;

③ 分隔符(空格或逗号)只在两个数值之间是必须的,命令和参数间可无分隔符;

④ 每个命令只有按了回车键后才有效,可以用Ctrl+Break中止命令的执行;

⑤ 命令如果不符合Debug的规则,则将以“error”提示,并用“^”指示错误位置。

许多命令的参数是主存逻辑地址,形式是“段基地址 : 偏移地址”。其中,段基地址可以是段寄存器或数值;偏移地址是数值。如果不输入段地址,则采用默认值,可以是缺省段寄存器值。如果没有提供偏移地址,则通常就是当前偏移地址。

对主存操作的命令还支持地址范围这种参数,它的形式是:“开始地址 结束地址”(结束地址不能具有段地址),或者是:“开始地址 L字节长度”。

DEBUG命令一览:

分类 命令格式 功能简介

读写寄存器 R 显示所有寄存器的当前内容

R寄存器名 显示和修改指定寄存器内容

RF 显示和修改标志寄存器内容

汇编和反汇编 A[内存地址] 从指定地址开始汇编指令

U[内存块] 对指定内存块进行反汇编

执行指令 T[:内存地址][条数] 单步或多步执行指令

P[=内存地址][条数] 单步或多步执行指令

G[=内存地址] 连续执行指令

G[=内存地址]断点地址 设断点执行程序

读写内存 D[内存块] 显示指定内存块内容

E 内存地址 字符或数值串 修改指定内存内容

F 内存块 字符或数值串 填充指定内存块

S 内存块 字符串或数值 在指定内存块中查找串

M 内存块1 内存块2的首地址 复制内存块内容

C 内存块1 内存块2的首地址 比较两个指定内存块

读写磁盘 N[d:][path]文件名.扩展名 指定欲读写的磁盘文件

W 内存地址 将指定内存块写入文件

L [内存地址] 将文件调入内存

读写I/O端口 I 端口地址 读入指定端口的内容

O 端口地址 数值 将数据写入指定端口

十六进制加减 H 数值1 数值2 计算并显示两数之和,两数之差

退出DEBUG Q 退出DEBUG,返回DOS

第 3 页 共 32 页 1、DEBUG程序的启动

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

C:\>DEBUG↙

DEBUG命令的完整格式为:DEBUG [d:][path][文件名][ 参数1][参数2]。其中[d:]是盘符,[path]是路径,文件名是被调试文件的名称,它须是执行文件(EXE),两个参数是运行被调试文件时所需要的命令参数,在DEBUG程序调入后,出现提示符“-”,此时,可键入所需的DEBUG命令。

在启动DEBUG时,如果输入了文件名,则DEBUG程序把指定文件装入内存。用户可以通过DEBUG的命令对指定文件进行修改、显示和执行。如果没有文件名,则是以当前内存的内容工作,或者用命名命令和装入命令把需要的文件装入内存,然后再用DEBUG的命令进行修改、显示和执行。

2、DEBUG的主要命令

(1)、检查和修改寄存器内容的命令R,它有三种方式:

1)显示CPU内部所有寄存器内容和标志位状态,格式为:-R

例如:输入-R↙,得到结果如下:

2)显示和修改某个指定寄存器内容,格式为:-R 寄存器名

例如:输入-R AX,得到结果如下:

表示AX当前内容为0000,此时若不对其作修改,可按ENTER键,否则,输入修改内容后,如:

则AX内容由0000改为0A0A

3)R命令显示标志寄存器标志位状态的含义如下表所示:

标 志 名 置 位(值为1) 复 位(值为0)

溢出Overflow(是/否) OV NV

方向Direction(减量/增量) DN UP

中断Interrupt(允许/屏蔽) EI DI

符号Sign(负/正) NG PL

零Zero(是/否) ZR NZ

辅助进位Auxiliary Carry(是/否) AC NA

奇偶Parity(偶/奇) PE PO

进位Carry(是/否) CY NC

第 4 页 共 32 页 修改标志位状态,命令格式为:-RF

例如:输入-RF,输出结果如下:

这时若不作修改可按ENTER键,否则在“-”号之后键入修改值,键入顺序任意。如:

(2)、汇编命令A,格式为:-A[地址]

该命令从指定地址开始允许输入汇编语句,把它们汇编成机器代码相继存放在从指定地址开始的存储器中。A命令中如果没有指定地址,则接着上一个A命令的最后一个单元开始;若还没有使用过A命令,则从当前CS : IP开始。

例如:输入代码,则代码存储在OAFO:0100至OAFO:010D单元中。

(3)、反汇编命令U,有两种格式:

1)-U[地址]

该命令从指定地址开始,反汇编32个字节,若地址省略,则从上一个U命令的最后一条指令的下一个单元开始显示32个字节。

2)-U范围

该命令对指定范围的内存单元进行反汇编,例如:

-U 0100 011E或-U 100 11E 或-U 0AF0:0100 011E或–U 0AF0:0100 L1F(L用来引导指令的条数,1F为指令的条数),这些命令是等效的。

第 5 页 共 32 页

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

-G [=地址1][地址2[地址3。。。]]

其中地址1规定了运行起始地址,后面的若干地址均为断点地址。若省略地址,则运行从IP所指的地址开始。例如:

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

1)逐条指令追踪:

-T

该命令从指定地址起执行一条指令后停下来,显示寄存器内容和状态值。例如:

2)多条指令追踪:(有问题)

-T[=地址][值]

第 6 页 共 32 页 命令从指定地址起执行n条命令后停下来,n由[值]确定。

(6)、显示内存单元内容的命令D,格式为:

-D[地址](从给出的地址开始连续显示128个字节的单元内容)或-D[范围],例如:

(7)、修改内存单元内容的命令E,它有两种格式:

1)用给定的内容代替指定范围的单元内容:

-E地址 内容表

例如:-E 2000:0100 F3 “XYZ” 8D

其中F3,“X”“Y”“Z”和8D各占一个字节,用这五个字节代替原内存单元2000:0100到0104的内容,“X”“Y”“Z”将分别按它们的ASCII码值代入。

2)逐个单元相继地修改:

-E地址

例如:-E 100:

0AF0:0100 F3.E7

此命令是将原100号单元的内容F3改为E7。E7是键入值。

(8)、命名命令N,格式为:

-N 文件名

第 7 页 共 32 页 此命令将文件名格式化在CS:5CH的文件控制块内,以便使用L或W命令把文件装入内存进行调试或者存盘。例如:

(9)、装入命令L,它有两种功能:

1)把磁盘上指定扇区的内容装入到内存指定地址起始的单元中,格式为:

-L 地址 驱动器 扇区号 扇区个数

2)装入指定文件,格式为:

-L [地址]

此命令装入已在CS:5CH中格式化的文件控制块所指定的文件。

在用L命令前,BX和CX中应包含所读文件的字节数。

3)装入已在文件控制块中的文件,格式为:

-L

此命令与-L [地址]相同功能。

(10)、写命令W,有两种格式:

1)把数据写入磁盘的指定扇区:

-W 地址 驱动器 扇区号 扇区数

2)把数据写入指定文件中:

-W [地址]

此命令把指定内存区域中的数据写入由CS:5CH处的FCB所规定的文件中。在用W命令前,BX和CX中应包含要写入文件的字节数。

(11)、十六进制运算命令H,格式为:

-H [数据1] [数据2]

其功能是将两个十六进制数进行相加、相减运算,结果显示在屏幕上。例如:

(12)、退出DEBUG命令Q,该命令格式为:

-Q

它退出DEBUG程序,返回DOS,但该命令本身并不把在内存中的文件存盘,如需存盘,应在执行Q命令前先执行写命令W。

三.实验要求:

用汇编语言编写一个计算“3+5”的加法程序,并将结果输出到屏幕上。

四.实验报告:

写出在DEBUG状态下编写、运行程序的过程以及调试所中遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。