汇编-2 宏汇编语言
宏汇编语言
常量与数值表达式
常量
使用EQU
或者=
定义常量
确定的数值,主要用于在伪代码中给标量赋初值,或者用作立即寻址中的立即数,还有位移量,比例因子等等作用
数值表达式
数值表达式的最终结果实际上是与常量一样的,因为数值表达式在汇编的过程中就被计算完成了,被替换成了常量
- 算术操作
- 加减乘除
- 取余,取模
- 左移右移
- 逻辑操作
- 逻辑乘法
- 逻辑加法
- 按位加法
- 非运算
- 关系操作
- 关系操作后的结果是两个特殊的值
- True :
0FFFFH
- False :
0H
- True :
- 关系操作后的结果是两个特殊的值
变量,标号与地址表达式
变量
变量是编程时定义在程序中的数据存储单元的名字
变量与常量不同,常量相对而言只是立即数的一个替代品,或者本来就是立即数,常量是没有属性的,而变量有三个属性:
- 段属性
- 偏移地址属性
- 类型属性
变量是通过伪代码来定义的,在定义变量的时候还必须要指明变量的类型属性
1 | DB--BYTE,DW--WORD,DD--DOUBLE WORDS,DF--THREE WORDS,DQ--FOUR WORDS,DT--TEN BYTES |
而变量还可以被定义为多种类型
数值表达式
ASCII字符串–只有使用DB定义变量类型的时候字符串的长度才可以超过两个字节,因此定义字符串一般都是使用DB类型
地址表达式
?–表示所定义的变量还无法确定初值
重复的子句
1
使用了 n DUP(表达式) ;整个语句的作用就是把表达式的内容重复n遍
还可以是多种不同类型组成的序列
标号
标号是机器指令语句存放地址的符号表示,也可以是子程序名。
标号也有三种属性:
- 段属性–标号所在段的段地址–相对于所属段寄存器的偏移地址
- 偏移地址–标号所在段的段首址到该标号所代表的存储单元的字节距离
- 标号的类型–
NEAR
类型与FAR
类型NEAR
类型表示该标号只能在定义该标号的段内被使用FAR
无限制
定义方式
1 | Loop: mov al,[si] |
地址表达式
地址表达式其实是对地址进行运算,转移等,而不是类似于数值表达式直接变为一个常数
寻址方式均是地址表达式:
- 寄存器寻址
- 寄存器间接寻址
- 变址寻址
- 基址加变址寻址
- 立即寻址
- 直接寻址
如果地址表达式中出现了变量和标号,那么是取它们的偏移地址来进行运算而不是用内容进行运算!
1.属性定义算符
- 类型运算符
PTR
- 定义类型运算符
THIS
2.属性分离算符
- 取段址算符
SEG
- 取偏移地址算符
OFFSET
- 取类型算符
TYPE
,这个运算符返回的是一个值,即操作数的类型的字节数,如果是标号,那么就返回0FFFFH
3.其他算符
- 获取存储单元个数运算符
LENGTH
- 获取变量所含数据存储空间大小运算符
SIZE
=>(LENGTH 变量)*(TYPE 变量)
- 字符分离运算符
HIGH
LOW