指令后缀
| 后缀 | 大小(字节) | C语言对应 |
|---|---|---|
| b | 1 | char |
| w | 2 | short |
| l | 4 | (unsigned) int / long / char* |
| s | 4 | float |
寻址指令
| 名称 | 汇编样例 | 含义 |
|---|---|---|
| 立即数寻址 | $ 1 | 1 |
| 寄存器寻址 | %eax | eax |
| 绝对寻址 | 0x104 | *0x104 |
| 间接寻址 | (%eax) | *eax |
| (基址+偏移量)寻址 | 4(%eax) | *(4+eax) |
| 变址寻址1 | (%eax, %ebx) | *(eax+ebx) |
| 变址寻址2 | 9(%eax, %ebx) | *(9+eax+ebx) |
| 伸缩化变址寻址1 | (, %eax, 4) | *(eax*4) |
| 伸缩化变址寻址2 | 0xfc(, %eax, 4) | *(0xfc+eax*4) |
| 伸缩化变址寻址3 | (%eax, %ebx, 4) | *(eax+ebx*4) |
| 伸缩化变址寻址4 | 8(%eax, %ebx, 4) | *(8+eax+ebx*4) |
数据传送指令
| 指令 | 效果 | 描述 |
|---|---|---|
| movl S, D | S–>D | 传双字 |
| movw S, D | S–>D | 传字 |
| movb S, D | S–>D | 传字节 |
| movsbl S, D | 符号扩展S–>D | 符号位填充(字节->双字) |
| push S | %esp-4–>%esp; S–>*(%esp) | 压栈 |
| pop D | *(%esp)–>D; %esp+4–>%esp | 弹栈 |
算术和逻辑操作指令
| 指令 | 效果 | 描述 |
|---|---|---|
| lea S, D | &S–>D | 与mov S,D的区别是lea是取S的地址,D仅能是寄存器 |
| inc D | D++ | 加1 |
| dec D | D– | 减1 |
| neg D | -D–>D | 取负 |
| not D | ~D–>D | 取反 |
| add S,D | S+D–>D | 加 |
| sub S,D | S-D–>D | 减 |
| mul S,D | S*D–>D | 乘 |
| xor S,D | S^D–>D | 异或 |
| or S,D | S|D–>D | 或 |
| and S,D | S&D–>D | 与 |
| shl k,D | D << k–>D | 左移 |
| shr k,D | D >> k–>D | 右移 |
比较指令
| 指令 | 效果 | 描述 |
|---|---|---|
| cmp S1, S2 | S1-S2 | 比较,差关系 |
| test S1, S2 | S1&S2 | 比较,与关系 |
跳转指令
| 指令 | 效果 | 描述 |
|---|---|---|
| jmp Label | 跳转到 Label 处 | 无条件跳转 |
| je Label | 比较操作结果为0时跳转到Label处 | 结果为0时条件跳转 |
| jne Label | 比较操作结果不为0时跳转到Label处 | 结果不为0时条件跳转 |
| js Label | 比较操作结果为负数时跳转到Label处 | 结果为负数时跳转 |
| jns Label | 比较操作结果为非负数时跳转到Label处 | 结果为非负数时跳转 |
| jg Label | 比较操作结果为S2 > S1时跳转到Label处 | 结果为大于时跳转(有符号) |
| jge Label | 比较操作结果为S2 ≥ S1时跳转到Label处 | 结果为大于等于时跳转(有符号) |
| jl Label | 比较操作结果为S2 < S1时跳转到Label处 | 结果为小于时跳转(有符号) |
| jle Label | 比较结果为S2 ≤ S1时跳转到Label处 | 结果为小于等于时跳转(有符号) |
| ja Label | 比较操作结果为S2 > S1时跳转到Label处 | 结果为大于时跳转(无符号) |
| jae Label | 比较操作结果为S2 ≥ S1时跳转到Label处 | 结果为大于等于时跳转(无符号) |
| jb Label | 比较操作结果为S2 < S1时跳转到Label处 | 结果为小于时跳转(无符号) |
| jbe Label | 比较结果为S2 ≤ S1时跳转到Label处 | 结果为小于等于时跳转(无符号) |
本文详细介绍了汇编语言中的各种指令,包括指令后缀、寻址、数据传送、算术逻辑操作、比较和跳转指令,是理解汇编语言基础的重要参考资料。
1218

被折叠的 条评论
为什么被折叠?



