汇编运算符和表达式

运算符:

汇编语言由表达式和运算符组成,运算符分为数值运算符和属性运算符。属性运算符面向变量或标号。

数值运算符:

算术运算符:

运算符类型
✓ +( 正号 ) 、 -( 负号 )
✓ +( 加 ) 、 -( 减 ) 、 *( 乘 ) 、 /( 除 ) 、 MOD( 取模 )
➢ 算术运算符与 立即数 、 常量 、 括号 等构成数值表达式。
✓ 变量 不能参与算术运算构成 数值表达式 。

关系运算符:

运算符类型
✓ EQ( 等于 ) 、 NE( 不等 ) 、 LT( 小于 ) 、 GT( 大于 ) 、 LE( 小于等
于 ) 、 GE( 大于等于 )
✓ 可与 立即数 、 常量 、 变量 、 括号 等构成数值表达式。
➢ 关系运算只能有 0 (假) 和 0FFH (真) 两个返回值。
✓ 返回值以二进制补码形式表示,位数由目的操作数决定;

逻辑运算符:

➢ 运算符类型
✓ AND( 与 ) 、 OR( 或 ) 、 NOT( 非 ) 、 XOR( 异或 )
✓ SHL( 左移 ) 、 SHR( 右移 )
➢ 逻辑运算符可与 立即数 、 常量 、 括号 等构成数值表达式。
✓ 变量 不能参与逻辑运算。

属性运算符:

段属性操作符SEG

格式: SEG <标识符>
➢ 功能
✓ 返回标识符所在段的段地址;
➢ 例如:
MOV AX , SEG NEXT
MOV BX , SEG DATA

➢ 若存储器如上所示,则以上指令执行后
(AX) = 1000H , (BX) = 2000H

偏移量属性操作符OFFSET

➢ 格式:
OFFSET < 标识符 >
➢ 功能
✓ 返回该标识符的段内偏移地址;
➢ 例如:数据段定义如下:
X1 DW 12H , 100H
X2 DD 0
X3 DB ? , 'A'
➢ 若执行指令: MOV AX , OFFSET X1
MOV BX , OFFSET X3
(AX) = 0000H , (BX) = 0008H

类型操作符TYPE:

➢ 格式
✓ TYPE < 标识符 >
➢ 功能
✓ 返回变量和标号的类型值;
➢ 类型值
✓ 变量:每个变量所占的字节数;
✓ 标号:标号的 NEAR 、 FAR 类型;

长度属性操作符LENGTHOF:

➢ 格式
✓ LENGTHOF < 变量名 >
◼ 只能应用于变量;
➢ 功能
✓ 返回 变量 所定义的数据个数;
➢ 例如
✓ 变量定义为: ARRAY1 DW 2 DUP(0,1) , 1
✓ 则指令 MOV AL , LENGTHOF ARRAY1 后, (AL)=5 ;

容量属性操作符SIZEOF:

➢ 格式:
✓ SIZEOF < 变量名 >
◼ 只能应用于变量;
➢ 功能:
✓ 返回 变量 的所占存储单元的数目;(一个字节为一个存储单元);

运算符的优先顺序:

表达式:

数值表达式:

由立即数、常量、字符或字符串与数值运算符构成;

由变量、标号与属性操作符构成;

由两个符号地址相减构成两者间的距离表达式。

地址表达式:

由变量、标号、运算符、地址计数器$构成;

地址计数器引用符号$:

格式:¥+-Imm

其值表示当前偏移量计数器的值+-Imm的立即数;

相关推荐
水饺编程1 天前
第2章:Linux 基础,在 root 中创建用户账号
linux·c语言·汇编·1024程序员节
一个风轻云淡1 天前
从 int $0x80 到 iret:用 gdb 把 getpid 走一遍
linux·c语言·开发语言·汇编
水饺编程2 天前
第2章:Linux 基础,切换到超级用户
linux·c语言·汇编
水饺编程4 天前
第2章:Linux 基础,重启命令
linux·c语言·汇编
en.en..5 天前
volatile 完整深度教程(C 代码 + 带注释 ARM 汇编 + 硬件中断原理 + 分步运行时序)
c语言·汇编·arm开发
水饺编程6 天前
第2章:Linux 基础,rm 命令
linux·c语言·汇编
水饺编程6 天前
第2章:Linux 基础,关机命令
linux·c语言·汇编
en.en..7 天前
汇编与 C 语言 互调用
汇编
wuminyu8 天前
Continuation::freeze与thaw的x86_64汇编Stack Chunk拆解源码分析
java·linux·c语言·汇编·jvm·c++
en.en..8 天前
ARM 汇编 B / BL 核心区别
汇编·arm开发