微机原理及应用CH5 8086/8088汇编语言程序设计.ppt
文本预览下载声明
? 编制汇编语言源程序时,首先要使用段定义伪指令和段寻址伪指令来构造一个由若干指令和数据组成的程序。构造一个源程序的框架结构有如下两种格式:;第一种格式:
……
MOV AH,4CH ;返回DOS
INT 21H
CODE ENDS
END BEGIN
;第二种格式:
……
RET ;取程序段前缀首地址
MAIN ENDP
CODE ENDS
END BEGIN;区别:两种格式的本质区别在于返回DOS的方法不同:
对于第一种格式,采用了调用DOS系统的4CH功能,返回DOS。具体方法是:在要返回DOS处,安排如下两条指令:
MOV AH,4CH
INT 21H
对于第二格式,DOS返回方法是调用20H类型的中断服务程序。;段名 SEGMENT [定位类型][组合类型][类别]
.
.
.
段名 ENDS;定位类型,定位类型参数是对该段起始地址的定位。定位类型参数主要有下面4种:
①PARA:指定定位段的起始地址必须在节的整数边界,即段的首地址必须是16的整数倍。当定位类型缺省时,就当成PARA。
②BYTE:指定定位段的起始地址定位在存储单元的任何字节地址。
③WORD:指定定位段的起始地址定位在字的边界,即段的首地址必须是偶数。
④PAGE:指定定位段的起始地址定位在页的边界,即段的首地址必须是256的整数倍。;组合类型:组合类型参数主要提供了各个逻辑段之间的组合方式
①NONE:该段与其他同名段不进行连接,各段独立于存储器中,NONE可作为缺省参数。
②PUBLIC:该段与其他模块中的同名段连接时,由低地址到高地址连接起来,组成一个逻辑段,连接次序由连接命令指定。
③COMMON:该段在连接时与其他模块中的同名段有相同的起始地址,采用覆盖的方式在存储器中存放,连接长度为各分段中最大长度。 ;④AT表达式:定位该段的起始地址在表达式所指定的节(16的整数倍)边界上。当用户要求某个逻辑段在指定节的边界上时,就要用AT参数来实现。
⑤STACK:指定该段为堆栈段,此参数在堆栈段中不可省略。
⑥MEMORY:定位该段与其他模块中的同名段有相同的首地址,采用覆盖的方法在存储器中组合连接。其功能与COMMON相似,区别是第一个带MEMORY参数的逻辑段覆盖??其他同名段的最上层,其他带此参数的同名段按照COMMON方式处理。 ;“分类名”(CLASS NAME)
其主要作用是汇编程序连接时将所有的分类名相同的逻辑段组成一个段组。;在连接之前已定义两个目标模块如下:
模块1 SSEG SEGMENT PARA STACK
DSEG1 SEGMENT PARA PUBLIC Data
DSEG2 SEGMENT PARA
CSEG SEGMENT PARA Code
模块2 DSEG1 SEGMENT PARA PUBLIC Data
DSEG2 SEGMENT PARA
CSEG SEGMENT PARA Code ;以上两个模块分别汇编后产生 .OBJ 文件,经连接程序连接后产生的 .EXE模块如下:
模块1 CSEG SEGMENT PARA Code
模块2 CSEG SEGMENT PARA Code
模块1+2 DSEG1 SEGMENT PARA PUBLIC Data
模块1 DSEG2 SEGMENT PARA
模块2 DSEG2 SEGMENT PARA
模块1 SSEG SEGMENT PARA STACK
; 顺序程序结构是指完全按照顺序逐条执行的指令序列。
图5.1 顺序程序的结构形式 ;例5.1:试分别用汇编语言源程序的两种框架结构编制程序,求出表达式:(X×4-Y)/2的值,并保存到RESULT存储单元中,其中X,Y均为字节变量。;参考程序1:
DATA SEGMENT ;数据段
X DB 2
Y DB 4
Z DB ? ;定义变量
DATA ENDS
STACK SEGMENT PARA STACK
DW 20H DUP(0)
STACK ENDS
CODE SEGMENT ;代码段
ASSUME CS:CODE,DS:DATA,SS:STACK;BEGIN:MOV AX,DATA
显示全部