Removed_第三章 8088汇编语言程序设计 微机原理 第2版 课后答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第三章 8088汇编语言程序设计
本章的主要内容是汇编语言语句行的构成,源程序的结构,汇编语言程序设计方法。
3.1 重点与难点
本章的学习重点是结构化程序设计思想,顺序、分支、循环结构的程序设计,子程序结构的设计与调用,中断指令的应用。另外,汇编语言伪指令的使用、源程序的结构等也是必须掌握的。
3.1.1 汇编语言语句行的构成
1.标记
(1)标识符:由数字、字母和下划线组成,且不能以数字开头,最大长度不超过31
个字符。
(2)保留字:汇编语言中保留下来的具有特殊用途的字串,如指令、伪指令、寄存器名等都是保留字。保留字不可用作标识符。
(3)界符:程序或指令中两个部分的分隔符号。汇编语言源程序中可用的界符:′〈〉;,:? $ () + - = &[] * / ·(4)常量:数字常量,可以使用不同的进制D、B、H、Q;字符串常量,由引号引起
来的字符串,相当给出字符所对应的ASCII码串。
2.符号及其属性
(1)寄存器:8086/8088 CPU的寄存器可以作为指令的操作数。
(2)变量:即内存单元的符号地址。变量不能与保留字、段名重名。它有三个属性:段属性,指变量所在段的段地址;
偏移量,指变量所在段的起始地址到变量地址之间的字节数,即偏移(有效、逻辑)地址。
类型,指指变量具有的字节数,包括BYTE、WORD、DWORD、QWORD和TBYTE等。
(3)标号:即代码段中某条指令的符号地址,由编程者根据需要确定的。标号不能与保留字重名,可使用字母、数字及下划线,但不允许用数字开头,字符个数不超过31个。
标号作为符号地址也有三个属性:段、偏移量和类型(NEAR、FAR)。
3.表达式
表达式是作为语句的一个操作数,在汇编时一个表达式得到一个值。
(1)操作数
数据——常数、符号常量;存储单元地址——常用符号地址表示。
(2)运算符
算术运算符:+、-、*、/、MOD。对地址的运算仅有+(加)、-(减)运算符。
逻辑运算符:AND、OR、NOT和XOR。注意,不要将其和同样名称的指令操作码相混淆。
关系运算符:EQ、NE、LT、GT、LE和GE。参与关系运算的两个操作数必须都是数值,或同一段中的两个存储单元地址,运算结果为0FFFFH(真,True)或0(假,False)。
分析运算符:0FFSET——取一个标号或变量的偏移地址;
SEG——取一个标号或变量所在段的段地址;
TYPE——取变量和标号的类型(BYTE、WORD、DWORD或NEAR、FAR);
SIZE——计算一个存储区的字节总数;
LENGTH——计算存储区中数据单元的数目,只对数据定义中的DUP操作有效。
综合运算符:PTR——用于暂时改变变量或标号的原有属性,只在当前语句中有效;
THIS——和PTR类似,用于改变存储区的类型;
SHORT——指定一个标号为短标号。
4.语句
指令语句:主要由CPU指令组成,每条语句在汇编过程中都会产生对应的目标代码。
伪操作或伪指令语句:为汇编程序提供信息,让汇编程序在汇编过程中执行特定的功能。
两者本质区别在于,伪指令在汇编过程中不形成任何代码。
这里仅对伪指令进行总结。
(1)符号定义伪指令(赋值语句)
格式:符号常量 EQU 表达式或符号常量=表达式
功能:把表达式的值赋给符号名。
说明:在程序中,用EQU语句赋值的符号名不能被重新赋值,但用“=”号赋值的符
号名可以被重新赋值。若要重新赋值,必须使用解除伪指令PURGE。
(2)内存数据定义伪指令
格式:[变量名] 数据定义表达式或数据项表
功能:可为数据项分配存储单元,并根据需要设置其初值。还可用符号代表数据项。
说明:数据定义符有字节DB、单字DW、双字DD、8字节DQ、10字节DT;DUP()表
示数据重复,“$”表示地址计数器当前值,“?”用于预留存储空间;数据项允许为字符串。
(3)段定义伪指令
格式:段名SEGMENT [定位方式][连接方式][‘类别名’]
段体
段名 ENDS
功能:为程序汇编和链接说明了段名、分段的各种属性以及分段的开始和结束。段名
是自定义符,开始的段名与结束的段名必须相同。段的长度不超过64KB。属性参数定义:定位方式,指定段的起始地址边界。有四种方式:页边界PAGE、段边界PARA(系统隐
含)、字边界WORD、字边界BYTE。
连接方式,告诉连接程序本段与其他段的连接方式。系统隐含为不写,表示本段不与
任何段链接。STACK表示此段为堆栈段。
‘类别名’,是合法的自定义符,长度不超过40。凡是类别名相同的段在连接时均按
先后顺序连接在相邻存储区中。
说明:段名的命名规则和变量名以及标号一样;单模块程序中属性参数可省略不写。
(4)段址寄存器说明伪指令
格式:ASSUME 段寄存器:段定义名1[,段寄存器:段定义名2,…]
功能:告诉汇编程序在汇编时,段寄存器CS、DS、SS和ES应具有的符号段基址。段
寄存器实际值(CS除外)由传送指令在执行程序时赋值。
(5)过程(子程序)定义伪指令
格式:过程名 PROC [NEAR](或FAR)
∶
过程名 ENDP
说明:过程名是自定义符。调用格式为:CALL 过程名
过程中的RET指令,实现从过程返回调用处。选NEAR,过程是段内调用,过程中的RET是段内返回。选FAR,过程是段间调用,过程中的RET是段间返回。系统默认是近过程。
(6)模块开始伪指令
格式:NAME 模块名
功能:该伪指令指明程序模块的开始,并指出模块名。模块名是自定义符,不能与系
统保留字同名。每次汇编只能出现一次。若该伪指令不写,则取TITLE语句中的页标题前
6个字符;若没有TITLE语句,则取源程序文件名为模块名。
(7)建立标题伪指令
格式:TITLE 标题
功能:建立每页标题。
(8)模块结束伪指令
格式:END [启动标号或过程名]
功能:告诉汇编程序源文件结束,并给出执行程序的入口。仅用于主模块才有意义。
(9)定位伪指令
格式:ORG 表达式
功能:把该伪指令以下所定义的内存数据或程序,从表达式的值所指定的起点开始连
续存放,直至遇到新的ORG指令。表达式的值是一个无符号数。
(10)系统隐含进位制伪指令