5.2 汇编语言源程序的格式 在第四章介绍指令系统时曾给出若干程序举例,但是,它们仅仅是一些程序片段,并不是完整规范的汇编语言源程序。下而给出一个比较简单,然而比较规范的汇编语言源程序。 例5 .1 要求将两个五字节16进制数相加,可以编写出以下汇编语言源程序。 DATA SEGMENT ;定义数据段 DATA1 DB 0F8H,60H,0ACH,74H,3BH ;被加数 DATA2 DB 0C1H,36H,9EH,0D5H,20H ;加数 DATA ENDS ;数据段结束 CODE SEGMMENT ;定义代码段 ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX ;初始化 DS MOV CX,5 ;循环次数送CX MOV SI,0 ;置 SI 初值为0 CLC ;清 CF 标志 LOOPER:MOV AL,DATA2[SI] ;取一个字节加数 ADC DATA1[SI],AL ;与被加数相加 INC SI ;SI 加1 DEC CX ;CX 减1 JNZ LOOPER ;若不等于0,转 LOOPER MOV AH,4CH INT 21H ;返回 DOS CODE END ;代码段结束 END START ;源程序结束 5 .2 .1 分段结构 由上面的例子可以看出,汇编语言源程序的结构是分段结构形式,一个汇编语言源程序由若干段(SEGMENT)组成,每个段以 SEGMENT 语句开始,以 ENDS 语句结束。整个源程序的结尾是 END 语句。 这里所说的汇编语言源程序中的段与前面讨论的 CPU 管理的存储器的段,既有联系,又在概念上有所区别。我们已经知道,微处理器对存储器的管理是分段的,因而,在汇编语言程序中也要求分段组织指令、数据和堆栈,以便将源程序汇编成为目标程序后,可以分别装入存储器的相应段中。但是,以8086/8088 CPU 为例,它有四个段寄存器(CS,ES,SS 和DS),因此 CPU 对存储器按照四个物理段进行管理,即数据段,附加段,堆栈段和代码段。 任何时侯 CPU 只能访问四个物理段。而在汇编语言源程序中,设置段的自由度比较大。例如一个源程序中可以有多个数据段或多个代码段等等。一般来说,汇编语言源程序中段的数目可以根据实际需要而设定。为了和 CPU 管理的存储器物理段相区别,我们将汇编语言程序中的段称为逻辑段。在不致发生混淆的地方,有时简称为段。 在上面的简单源程序中只有两个逻辑段,一个逻辑段的名字是 DATA,其中存放着与程序有关的数据,称为逻辑数据段;另一个逻辑段的名字是 CODE,其中包含着程序的指令,称为逻辑代码段。每个段内均有若干行语句(STATEMENT),因此, 可以说一个汇编源程序是由一行一行的语...