汇编语言实验

2019-08-03 14:54

第一部分 汇编语言基础实验

一、说明

1.下面的实验例程都是汇编语言程序设计方面的基础实验,实验时只需PC微机一台。 2.所有的实验例程均可以在DVCC32JHP集成软件环境下运行和调试。

3.在实验前必须先仔细阅读随机配备的用户手册,以便对整个系统的硬件结构和设计思想有所了解,特别要仔细阅读软件安装使用部分,以便了解DVCC32JHP集成软件运行环境和操作方法,为后面顺利进行编程实验做好充分准备。

二、实验程序目录

1.显示程序实验 DVA1.ASM

2. 数据传送实验 DVA2.ASM

3. 数制转换实验 DVA3_1.ASM ASCII 码表示的十进制数转换为二进制数 4. 数制转换实验 DVA3_2.ASM 十进制数的ASCII 码转换为BCD码

5. 数制转换实验 DVA3_3.ASM 十六进制数的ASCII 码转换为十进制数 6. 数制转换实验 DVA3_4.ASM BCD码转换为二进制码 7. 运算实验 DVA4_1.ASM 二进制双精度加法运算 8. 运算实验 DVA4_2.ASM 十进制数的BCD 码减法运算 9. 运算实验 DVA4_3.ASM 乘法运算实验

10. 运算实验 DVA4_4.ASM 用减奇数开平方运算实验 11. 分支程序设计实验 DVA5.ASM 12. 循环程序设计实验 DVA6.ASM

13. 子程序实验 DVA7_1.ASM 数据移动实验

14. 子程序实验 DVA7_2.ASM 数码转换及显示实验 15. 综合程序设计实验 DVA8_1.ASM 排序实验

16. 综合程序设计实验 DVA8_2.ASM 用32 位寄存器、指令、扩展寻址方式实现数

码转换及显示

三、汇编语言程序的基本结构

3.1 伪指令

1.指令集选择伪指令

在缺省情况下,MASM 和TASM 只识别8086/8088 的指令,为了让编译器可以识别80386 及其以上微处理器的新增指令或功能增强的指令,必须在程序中使用提示处理器类型的伪指令。 在一个源程序中,可以根据需要安排多条说明处理器类型的伪指令。对TASM 来说,该类伪指令可安排在源程序中任何位置,但对MASM ,该类伪指令只能安排在段外。通常,表示处理器类型的伪指令有如下几条:

.8086 选择8086/8088 指令集,可省略

- 1 -

.386 选择80386 指令集

.386P 选择80386 指令集,包括特权指令 .486 选择80486 指令集

.486P 选择80486 指令集,包括特权指令

2 .段定义伪指令SEGMENT/ENDS

在实模式下,32 位处理器为了保持向上兼容,所以段的最大长度仍然为64K,这样的段称为16 位段,但在保护模式下,段长度可以达到4GB ,这样的段称为32 位段。为了兼容,保护模式下也可以使用16 位段。一般一个完整的段定义格式如下:

<段名> SEGMENT [定位类型][组合类型][类别][属性类型] … ;段内容 <段名> ENDS

表2-1 定位类型说明 定位类型 BYTE WORD DWORD PARA PAGE 含义 用下一个可用字节地址 用下一个可用字地址 用下一个可用双字地址 用下一个可用节地址(16 字节为节边界) 用下一个可用页地址(256 字节为页边界)

(1) 定位类型规定段的起始位置类型,有五种方式:BYTE ,WORD ,DWORD ,PARA ,PAGE ,如表2-1 所示。

(2) 组合类型规定本段与其他段的关系:PUBLIC ,COMMON,STACK,MEMORY ,AT , PRIVATE。组合类型的使用,为的是更有效的使用存储器。它通知连接器如何把不同模块内段名相同的段组合到一起。

(3) 类别用于表示段的分类。如’DATA’,’CODE’,连接器总是使类型相同的段相邻,由用户指定。

(4) 属性类型规定16 位段或32 位段。USE16 表示16 位段,USE32 表示 32 位段。

3 .数据定义伪指令

数据定义伪指令功能是为操作数分配存储单元,并用变量与存储单元相联系。其一般格式为:[变量]助记符操作数 其中助记符可以是:

DB :一个操作数占用一个字节单元,定义的变量为字节变量; DW :一个操作数占用一个字单元,定义的变量为字变量; DD :一个操作数占用一个双字单元,定义的变量为双字变量;

DF :一个操作数占用一个三字单元,定义的变量为三字变量,该助记符仅用于386 以

- 2 -

上的CPU,定义的变量作为指针使用,其低4 字节存放偏移地址,高2 字节存放段地址; DQ :一个操作数占用一个四字单元,定义的变量为四字变量;

DT :一个操作数占用十个字节单元,定义的变量为十字节变量,使用该助记符时,对于十进制操作数,必须给出后缀D ,没有后缀的默认为压缩BCD 码。

4 .段说明伪指令ASSUME

段说明伪指令的一般格式如下:

ASSUME <段寄存器名> :<段名> ,<段寄存器名> :<段名> ,... ASSUME <段寄存器名> :NOTHING可以用来取消段性质的规定。

5 .符号定义伪指令

(1) 等值伪指令EQU ,其一般格式为: <符号名> EQU <表达式>

(2) 等号伪指令“=” 的格式与功能和EQU 类似。不同的是,在同一个程序中,“=”可以对一个符号重复定义,EQU 却不能对同一个符号重复定义。

(3) 解除定义伪指令PURGE的功能是解除指定符号的定义,解除符号定义后,可用EQU 重新定义,其一般格式为:

PURGE<符号1,符号2 ,…,符号n>

6 .过程定义伪指令PROC/ENDP

过程定义伪指令PROC/ENDP 格式如下: <过程名> PROC 属性 ? RET <过程名> ENDP

过程名也是一种标号,其属性由属性字段表明。过程属性可以是NEAR(默认类型,可省 略)或FAR ,调用过程指令和被调用过程在同一逻辑段,过程则可定义为NEAR ,否则定义为FAR。根据过程的属性,RET 指令自动汇编成近过程返回指令或远过程返回指令。

另外,若调用过程指令和被调用过程不在同一程序模块中(即调用程序和被调用过程分属两个文件),则在调用程序中用EXTRN 伪指令将被调用过程说明成外部的,而在过程程序中用 PUBLIC 伪指令说明成公用的。

7 .标号定义伪指令LABEL

标号定义伪指令LABEL 是定义标号为指定的属性,其一般格式为: 标号 LABEL 属性

3.2 语句格式 1.标号

标号用来代表一条指令,代表一条指令所在单元的地址,在代码段中使用。标号与其所

- 3 -

代表的指令之间用冒号分开。如果一条指令作为转移的目标或作为程序中的第 1 条指令语句,前面应该加标号,否则没有必要加标号。其格式为:“标号:指令语句”。标号有三个属性:段属性、偏移属性和类型属性。

段属性:标号所代表指令单元的段地址,即代码段的段地址。 偏移属性:标号所代表指令单元的段内偏移地址。

类型属性:用来指明标号是段内引用(类型为NEAR ,转移源和转移目标在同一个代码段中),还是段间引用(类型为FAR ,转移源和转移目标在不同的代码段中)。

2 .变量

变量用来代表数据所在单元的地址,在数据段、附加段、堆栈段中使用。变量与其所代表的数据之间用空格分开。变量也有三个属性:段属性、偏移属性和类型属性。 段属性:变量所代表数据单元的段地址(DS 值、ES 值或SS 值)。 偏移属性:变量所代表数据单元的段内偏移地址。

类型属性:用来指明变量所代表数据单元的字节数,DB、DW、DD、DF、DQ、DT所定义变量的类型值分别为1、2、4、6、8、10。

在同一个程序中,一个标号或变量只能定义一次,不能重复定义。

3 .操作码

操作码用来指明操作的性质或功能。指令中的助记符都是操作码。操作码与操作数之间用空格分开。

4 .操作数

指令中的操作数用来指定参与操作的数据。对于一般指令,可以有一或两个操作数,也可以没有操作数;对于伪指令和宏指令,可以有多个操作数。操作数多于一个时,操作数之间用逗号分开。操作数可以是常数或表达式。

5 .注释项

注释是语句的说明部分,用来说明一条指令或一段程序的功能,由分号“;”开始。汇编源程序时,注释部分不产生机器代码。

6 .续行符

一条语句可以写在多行上,续行符为&。

7 .重复操作符DUP

重复定义多个相同单元的数据时采用。如

A DB 3 DUP (?)相当于A DB ?,?,?

8 .保留符号?

根据数据定义伪指令的类型,保留相应单位的内存空间,不赋初值。

- 4 -

9 .当前地址指针$

在汇编程序对汇编语言源程序进行汇编的过程中,当前正在汇编的指令的地址用当前地址指针$指示。对分配内存空间的数据定义伪指令,当前数据分配的位置用$指针指示。即当前地址指针总是指向待分配的内存单元的地址。用户可以直接引用当前地址指针的值。如: A DB “HELLO” ? LEN EQU $-A

3.3 DOS 系统功能调用

DOS 系统功能调用是汇编程序通过INT 21H 软件中断来调用DOS 内部的子程序而进行某种操作的一个方法,DOS 系统功能调用在实模式下的编程中应用很广泛,大致有上百种功能,这些功能的具体含义和参数设置可查阅手册,而功能调用的基本格式如下: MOV AH ,功能号 ;准备入口参数 INT 21H

下面列出汇编语言程序设计中经常使用的两种功能调用及其说明。

1.09H 号功能调用

将数据段(DS)中以$字符结尾的一个字符串输出到屏幕上。 入口参数:DX 寄存器存放该字符串的首地址(有效地址部分) 出口参数:无

注意: 9 号系统功能调用破坏AL 寄存器内容,应注意保存。 格式: LEA DX ,字符串变量名 MOV AH ,9 INT 21H

2 .程序正常返回DOS 系统的方法 (1) 调用 4CH 号系统功能 功能:返回系统

入口参数: AL=终止代码或无 格式: MOV AH ,4CH INT 21H

或: MOV AX ,4C00H INT 21H

(2) 使用语句 INT 20H 功能:返回系统

入口参数:CS 指向程序段前缀

- 5 -


汇编语言实验.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:某发电厂二氧化碳捕集及利用建设项目可行性研究报告

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: