汇编基础
汇编基础
汇编语言
条件码
条件码 | 解释 | 描述 |
---|---|---|
CF | 进位标志 | 最高位产生了进位(可检查无符号的溢出) |
ZF | 零标志 | 结果为0 |
SF | 符号标志 | 结果为负数 |
OF | 溢出标志 | 补码溢出 |
- 比较指令
cmp
- 根据两个操作数之差(
sub
)来设置条件码,不改变目的寄存器的值
- 根据两个操作数之差(
- 测试指令
test
- 将两个操作数按位与(
and
)来设置条件码,不改变目的寄存器的值 test eax, eax
:一般用来判断eax
的值是否为0
,如果是的话,将ZF
标志位置为1
- 将两个操作数按位与(
跳转指令
指令 | 解释 | 标志位 |
---|---|---|
jmp | 无条件跳转 | 无 |
je/jz | 相等/零 | ZF=1 |
jne/jnz | 不相等/非零 | ZF=0 |
js | 负数 | SF=1 |
jns | 非负数 | SF=0 |
jc | 进位跳转 | CF=1 |
jnc | 无进位跳转 | CF=0 |
jo | 溢出跳转 | OF=1 |
jno | 无溢出跳转 | OF=0 |
指令 | 解释(有符号) |
---|---|
jg | 大于 |
jge | 大于等于 |
jl | 小于 |
jle | 小于等于 |
指令 | 解释(无符号) |
---|---|
ja | 大于 |
jae | 大于等于 |
jb | 小于 |
jbe | 小于等于 |
字节数
字符 | 解释 |
---|---|
BYTE | 1字节 |
WORD | 2字节 |
DWORD | 4字节 |
QWORD | 8字节 |
存储方式
- 大端存储
- 数据的高位字节存储在低地址内存中,低位字节存储在高地址内存中
- 小端存储
- 数据的高位字节存储在高地址内存中,低位字节存储在低地址内存中
- x86架构的处理器(如Intel和AMD)以及ARM架构的处理器通常采用小端存储
函数调用标准
约定类型 | _cdecl(C规范) | pascal | stdcall | Fastcall |
---|---|---|---|---|
参数传递顺序 | 从右到左 | 从左到右 | 从右到左 | 使用寄存器和栈 |
平衡栈者 | 调用者 | 子程序 | 子程序 | 子程序 |
允许使用VARARG | 是 | 否 | 是 |
运算优化
整数的加减乘除
- 使用
lea
指令进行优化
This post is licensed under CC BY 4.0 by the author.