第三章 8088汇编语言程序设计 微机原理 第2版 课后答案

2019-06-05 15:16

第三章 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)系统隐含进位制伪指令 格式:RADIX 表达式

功能:定义在源程序中书写数据时隐含进位制方式。表达式的值是2~16之间的十进制数,要遇到新的RADIX伪指令以后才改变隐含进位制。

3.1.2 汇编语言源程序的结构

1.源程序结构

8088汇编语言源程序采用分段结构的形式,一个完整的汇编语言源程序通常由若干个逻辑段组成,包括数据段、附加数据段、堆栈段和代码段。

2.源程序基本框架

DSEG SEGMENT ? DSEG ENDS ESEG SEGMENT

;数据定义(DB/DW/DD)

?

ESEG ENDS

SSEG SEGMENT STACK DW 512 DUP(?) ;堆栈段大小为1024B SSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG,ES:ESEG;指定段寄存器与段之间的对应关系

START: MOV AX,DSEG

MOV DS,AX

MOV AX,ESDG MOV ES,AX ;DS、ES段寄存器初始化 ? ;程序部分 MOV AX,4C00H ;8088/8086为MOV AH,4CH INT 21H ;程序结束,返回DOS

CSEG ENDS

END START

说明:CS段寄存器的初值,由系统自动指定为END后的地址; ES段寄存器的初值,可以用类似DS的方法设置,或由系统指定为定义了STACK属性的段。若未定义堆栈段,则系统默认使用系统堆栈。

3.1.3 汇编语言程序设计的方法 1.顺序结构程序设计的方法

顺序结构是最基本的结构。其特点是CPU按指令排列的顺序逐条执行。 2.分支(选择)结构程序设计的方法

分支结构,根据不同的条件转到不同的程序段执行。 3.循环结构程序设计的方法

循环结构,完成需要重复执行的工作。通常由三部分组成:

初始化部分,完成对地址指针寄存器、计寄存器等循环中用到的寄存器及存储器置初值; 循环体,完成需重复执行的工作;

循环控制,用于判断循环是否结束,若结束则跳出循环,未结束则修改地址指针和计数器值,为下一轮循环做准备。

4.混合结构程序设计方法

混合结构程序设计是指上述三种设计方法的组合应用,也是程序设计中最常用的方法, 5.子程序的设计方法

子程序(或过程)是完成某项特殊功能的程序模块,可以在程序中的任何地方多次被调用。用CALL指令调用子程序,用RET指令返回主程序;用伪指令PROC和ENDP定义子程序。

RET 主、子程序关系 CALL 主程序 子程序 (1)参数传递方式

通过寄存器传递,适用于传递参数个数少的情况;

通过程序存储器中的参数表传递,在主程序中把要传送的参数直接放在调用指令的后面,而在子程序中到堆栈中取返回地址,以获得参数。

通过堆栈传递,适用于参数较多,且子程序有嵌套、递归调用的情况。主程序将要传递的参数压入堆栈,子程序中再将这些参数从堆栈中弹出。

(2)寄存器和存储单元的内容保护(保护现场)

在主程序中用到的寄存器或存储单元,要在子程序里被用到,而主程序并不希望这些单元的内容被修改,此时必须在子程序入口处将这些单元内容压入堆栈保护起来。

6.其它设计方法介绍

(1)DOS和BIOS中断功能调用

DOS和BIOS为用户提供了两组系统服务程序,用户可以采用软中断指令INT N来调用。 DOS调用与BIOS调用相比,不依赖于硬件,通用性较好,但执行效率较低。 DOS和BIOS中断功能调用的使用方法如图所示:

置功能号n →(AH) 置入口参数 执行INT 21H 分析出口参数 (2)宏指令条件汇编 条件伪操作的一般格式如下: IF ?

条件

(语句组1)

;可选的

[ELSE] ? ENDIF

(语句组2)

如果条件为真,则汇编语句组1,否则如有ELSE则汇编语句组2,如无ELSE则不生成条件块。ENDIF表示结束条件汇编。下表给出了汇编语言的条件伪操作及其意义。


第三章 8088汇编语言程序设计 微机原理 第2版 课后答案.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:张姓宝宝起名大全

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

马上注册会员

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