汇编程序的组成
本章节介绍:
• 语句
• 标示符
• 保留字
• 注释的应用
• 操作数
• 表达式
数值表达式
地址表达式
返回值操作符
属性操作符
数据的定义
标号与变量的属性
伪指令
a.存储模型说明伪指令.MODEL
b.段伪指令SEGMENT和结束伪指令ENDS
c.过程开始伪指令PROC和结束伪指令ENDP
d.段使用设定语句伪指令Assume
e.整个程序结束伪指令END
f.简化段伪指令
g.等值伪指令EQU
h.ORG伪指令
一个完整的源程序的组织
语句
汇编程序由语句组成
• 汇编语言语句的通用格式:
[标示符] 操作符[操作数][;注释]
表示符, 操作符, 操作数被至少一个空格或者制表符分开。
• 语句的两种类型:
1) 指令,被汇编器转换成机器代码;
[标号:] 操作符[操作数] [;注释]
2) 伪指令,只告诉汇编器要执行的具体行动,不产生机器代码
[名称/变量] 指令[表达式/参数] [;注释]
[标示符] 操作符[操作数] [;注释]
语句的两个例子:
[标号:] 操作符[操作数] [;注释]
L1: MOV AX, 0 ;把0 移到AX
[名称/变量] 指令[参数][;注释]
counter DB 1 ;定义字节的值1
标示符
标示符的两种类型:
1. 标号 指令,过程,段的地址
例如: 下面语句中的Main
Main: PROC FAR
2. 名称/变量 数据单元的地址
例如:下面语句中的Counter
Counter DB 0
• 标示符 可以使用一下字符:
字母: A~Z, a~z ; (不区分大小写)
数字: 0~9 (不能作为第一位) ;
特殊字符: ? _ $ . @
• 标示符的第一个字母必须是字母或者专用字符,但专用字符的“.”除外。
• 不能用保留字作为标示符。
• 标示符最大长度为31个字符。
保留字
汇编语言里的某些名字是为它们固有的用途而保留的,只再特殊情况下使用。
种类:
• 指令,如MOV和ADD,是计算机可执行的操作;
• 伪指令, 像END或SEGMENT,是为汇编程序提供信息。
• 操作符, 如FAR和SIZE,可以在表达式中使用。
• 预定义符号, 如@DATA 和@Model, 它们在汇编期间向程序返回信息。
•
程序注释
遍及整个程序的注释的使用可以改善程序的清晰度。
• 注释用一个分号(;)开始.
汇编程序假定在一行中所有在它右边的字符都是注释
注释可以包含任意可打印字符,包括空格在内。
例子:
ADD AX, BX ; 累计
注释不会产生机器码,因此它不会影响汇编程序的大小和运行。
操作数
• 操作数提供操作要用的信息。
• 有些指令无需操作数,有些却又一个或者两个操作数。
• 对于指令来说,操作数的地址包含在操作数项中。
• 操作数项由常量,寄存器,标号,名称/变量或者表达式(一个或多个)组成
表达式
表达式分为数值表达式和地址表达式。
数值表达式中的值是可以在汇编过程中被汇编器计算的。
数值表达式
1) 常量
2) 算术表达式
3) 关系表达式
4) 逻辑表达式
5) 值表达式中其他操作符
6) 操作的优先级(从高至低)
1)常量
十进制常量: 12D,12
十六进制常量: 0FAH
二进制常量: 00000001B
字符串常量:
是用单引号或者双引号括起来的一个或者多个字符,
它的值是字符的ASCII码值。
2) 算术表达式
算术表达式包括+,-, *, /, MOD (除后的余数).
例如:
ADD AX, 100H /3*2-1
地址表达式
地址表达式表示的内存中存放操作数的地址
标号, 名字/变量(立即地址), [BX], [SI] ,[DI]都是特殊的地址表达式。
地址 ±值=地址
例子:
SUN+1 =SUN下一位的地址
注意:并非SUN的内容加1;
3.值–返回操作符
有 TYPE, LENGTH, SIZE, OFFSET, SEG.
1)TYPE—返回 变量或者标号的属性类型的值。
格式: TYPE 变量 或者标号
字节变量 属性类型的值1
字变量 2
双字变量 4
近标号 -1
远标号 -2
TYPE 变量 或者 标号
; 返回变量或者标号属性类型的值
SEG 变量 或者 标号
;返回变量或者标号所在的段的段地址
OFFSET 变量 或者 标号
;返回变量或者标号的偏移地址
4. 属性操作符
1) PTR—指定或者更改变量或者标号的类型。
格式: 类型 PTR 地址表达式
注意: PTR不分配内存空间。
例子:
MOV [SI], 1 ;出错
MOV BYTE PTR [SI], 1 ;指定字节类型
MOV WORD PTR [SI], 1 ;指定字类型
数据定义
EXE程序中的数据段
是用来为定义常量,工作区,输入/输出区和未定义值的。
• 数据定义的格式:
[变量] Dn 表达式1[,表达式2,…] [; 注释]
数据项的名字是唯一的,也是具有描述性的。
•Flag DB ?
;这个表达式定义一个没初始化的值,但它必须符合定义的大小
•一个表达式可以 包含多个被逗号&
补充:软件开发 , 其他 ,