汇编笔记
数据类型(大小)原语(Size Directives)
BYTE PTR- 1 ByteWORD PTR- 2 BytesDWORD PTR- 4 Bytes
x86通用寄存器

表A-3 常见的x86指令
| 指令 | 描述 |
| 数据传输 | |
| ❶ mov dst,src | 将src赋给dst |
| xchg dst1,dst2 | 互换dst1和dst2 |
| ❷ push src | 将src压栈,并递减rsp |
| pop dst | 出栈赋给dst,并递增rsp |
| 算术 | |
| add dst, src | dst +=src |
| sub dst, src | dst –= src |
| inc dst | dst += 1 |
| imul dst | dst *= 1 |
| idiv dst | dst /= 1 |
| dec dst | dst –= 1 |
| neg dst | dst = –dst |
| ❸ cmp src1, src2 | 根据src1−src2设置状态标志位 |
| 逻辑/按位 | |
| and dst, src | dst &= src |
| or dst, src | dst |= src |
| xor dst, src | dst ˆ= src |
| not dst | dst = ~dst |
| ❹ test src1, src2 | 根据src1 & src2设置状态标志位 |
| 无条件分支 | |
| jmp addr | 跳转到地址 |
| call addr | 压入返回地址到栈上,然后调用函数地址 |
| ret | 从栈上弹出返回地址,然后跳转到该地址 |
| ❺ syscall | 进入内核执行系统调用 |
| 跳转分支(基于状态标志位)jcc addr仅在条件cc成立时才跳转到该地址,否则进入jncc相反条件,在条件cc不成立时跳转 | |
| ❻ je addr / jz addr | 如果设置ZF零标志位则跳转(如当上一个cmp中的操作数相同时) |
| ja addr | 上一次比较中,如果dst大于src则跳转(无符号) |
| jb addr | 上一次比较中,如果dst小于src则跳转(无符号) |
| jg addr | 上一次比较中,如果dst大于src则跳转(有符号) |
| jl addr | 上一次比较中,如果dst小于src则跳转(有符号) |
| jge addr | 上一次比较中,如果dst大于等于src则跳转(有符号) |
| jle addr | 上一次比较中,如果dst小于等于src则跳转(有符号) |
| js addr | 上一次比较中,如果结果为负则跳转,符号位置1 |
| 杂项 | |
| ❼ lea dst, src | 将内存地址加载到dst中,(dst=&src,其中src必须在内存) |
| nop | 空指令,不执行操作(用作代码填充) |

浙公网安备 33010602011771号