文档介绍:第4章宏汇编语言程序设计
汇编语言程序格式
MASM中的表达式
伪指令语句
DOS系统功能调用和BIOS中断调用
汇编语言程序格式 程序结构
程序由数条语句构成,每条语句占一行。语句分两类:
指令性语句(指令语句):能译成机器代码,完成一定的操作功能的语句。
指示性语句(伪指令语句):为汇编程序在翻译汇编语言源程序时提供有关控制信息,没有相应的机器代码。
指令性(指令)语句与指示性(伪指令)语句区别:
程序经汇编、连接和装入内存后,在执行程序之前
◢指示性语句的功能已经完成,故又称伪操作。
◢而指令性语句的功能尚未完成,需控制CPU去执行才能完成。
完成两个字节数据相加。
DATA SEGMENT ; 伪指令语句
BUF1 DB 34H
BUF2 DB 2AH
SUM DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX, DATA ; 指令语句
MOV DS, AX
MOV AL, BUF1
ADD AL, BUF2
MOV SUM, AL
MOV AH, 4CH
INT 21H ;返回DOS
CODE ENDS
END START
例 4-1 给出一个完整的汇编语言源程序
分段结构
程序按段编写, 与8086内存分段编址相对应。
每段由伪操作SEGMENT开始、由ENDS结束。
程序可由多个段构成,至少有一个代码段。
程序最后为END结束语句,后跟一启动地址。
启动地址指示程序开始执行的第一条语句。
程序中设有返回DOS的功能。
使程序执行完后返回DOS系统的命令接受状态。
程序中用到内存操作数时,
应按操作数的寻址方式,给相应的段寄存器赋值
语句格式
* 指令助记符(操作码)不可以省略
指令性语句
标号: 指令助记符操作数,操作数;注释
格式:
伪指令语句
格式:
名字伪指令指示符操作数,操作数;注释
根据语句功能的不同, 名字项可用来表示段名、变量名、标号、过程名等。
名字项用一个符号表示。
对符号的规定:
①由字符A~Z ,a~z ,0~9及符号@、$、下划线_ 等组成,最长31个字符,超出部分忽略。
②不能用数字打头,以免与十六进制数相混。
③不使用汇编程序中的保留字。(如指令的助记符等)
④对定义的符号不区分大小写。但为便于记忆,名字的定义应该做到见名知意。
1、名字项(提供符号地址)
名字的两种主要形式:标号和变量
标号:
在代码段中定义,后面跟着冒号“:”,标号作为目标操作数经常在转移指令或调用指令中出现,用以表示转向地址。
标号的三种属性:
段属性(SEGMENT):标号所在段的段基值。
偏移地址属性(OFFSET):标号所在地址与其所在段首址之间的偏移地址字节数。
类型属性(TYPE):反应转移过程中标号可转移的距离,类型NEAR为近标号,只能实现段内转移;类型FAR为远标号,可实现段间转移。
变量:
变量在数据段、附加段或堆栈段中定义,后面不跟冒号。变量通常指存放在存储单元中的值,在程序运行中是可以修改的。
变量的三种属性:
段属性(SEGMENT):变量所在段的段基值。
偏移地址属性(OFFSET):变量所在地址与其所在段首址之间的偏移地址字节数。
类型属性(TYPE):指变量中每个元素所包含的字节数,类型有:字节变量(BYTE)、字变量(WORD)及双字变量(DWORD)等。
* 在同一个程序中,同样的标号或变量的定义只允许出现一次,否则汇编程序会指示出错。
操作码可以是指令、伪指令中的助记符,用以指明操作的性质或功能。
对于指令,汇编程序将其翻译成机器语言指令。
MOV AX, 100 → B8 00 01
对于伪指令,汇编程序据其要求的功能进行处理。
data SEGMENT → data与一段基值对应
string DB ‘Tsinghua’→ string与一内存地址对应
2、操作码项(不可省略)
操作数给出参与操作的数或数所在的地方。
操作数多于一个时,用逗号分开。
操作数可以是常数、寄存器、存储器操作数、变量、标号、过程名或表达式(下一节介绍)等。
3、操作数项