汇编
# 汇编
Owner: -QVQ-
short jmp 近处的跳转
near jmp
far jmp 段外的跳转
near call
far call
汇编语言语句的类型:
- **指令语句:**包含在指令集中,每一个语句汇编后产生一组二进制数目标代码,可被CPU执行。
- **伪指令语句:**汇编后不产生目标代码,用于定义段、子程序、常量、变量,以及给变量分配存储单元。
- **宏指令语句:**用户定义的一个指令序列集合, 汇编后在引用的地方展开成相应的指令序列。用于提高编程效率
# 汇编语言语句格式
[名字项:]指令助记符[操作数1,操作数2][;注释]
指令各项要用分隔符分开
名字项:用来标识段名、子程序名、宏指令名、标号、变量名和常量名等。
可用符号:数字、字母和特殊符号“?”、“$”、“@”、“_”
名字长度不能超过31个字符,不区分大小写
**指令助记符:**也称指令操作码,用来指定操作的性质或功能,
**操作数:**用来指定参与操作的数据,可以是直接参与操作的数据,也可以是数据所在的地址。
**注释:**是程序的解释说明
数据项:
可以是常量、变量和标号。
标号是用户按照一定规则定义的标识符,用来表示指令在主存中的位置
汇编后,变量变为数据区单元地址,标号变为指令所在单元地址,常量变成立即数
表达式:
则是通过操作符、运算符及括号把常量、变量和标号连接起来的有意义的式子
凡是以**常量(立即数)或符号地址(变量,标号)**为操作数的地方,均可以使用表达式,表达式最终代表一个值
运算符分为:
算术运算符:加(+)、减(-)、乘(*)、除(/)、模(MOD, 取余数)、左移(SHL)、右移(SHR)
除了加、减运算符可以用与变量和标号外,其他的算术运算符只适用于常量的数值运算。
逻辑运算符:与(AND)、或(OR)、非(NOT)、异或(XOR)
只能用于数值表达式
关系运算符:EQ(=)、NE(≠)、LT(<)、GT(>)、LE(<=)、GE(>=)
取值运算符:
**SEG运算符:**获取变量或地址标号所在的段地址。
加在变量名和标号前,返回的数值是位于其后的变量或标号的段地址。
MOV AX,SEG X
将变量X的段地址传送到AX
**OFFSET运算符:**获取变量或地址标号所在段的段内偏移地址。
MOV BX, OFFSET BUFF
获取变量BUFF的段内偏移地址给BX
功能上等同于LEA BX, BUFF
只是获取地址的时刻不同
**TYPE运算符:**获取变量的类型属性或地址标号的类型属性
如果是变量,则返回数值为字节数:DB为1,DW为2,DD为4,DQ为8,DT为10;
如果是标号,则返回数值为代表该标号类型的数值:NEAR为-1,FAR为-2
MOV AX,TYPE X ;
如X是字节变量,返回1
**LENGTH运算符:**返回变量中定义的元素的个数。