汇编语言中的汇编指令众多,以下列举 x86 架构下一些常见的汇编指令:
指令类别 | 指令 | 英文全称 | 功能简述 |
---|---|---|---|
数据传送 | MOV | Move | 将源操作数复制到目标操作数 |
LEA | Load Effective Address | 加载有效地址到指定寄存器 | |
PUSH | Push onto the stack | 将操作数压入堆栈 | |
POP | Pop from the stack | 从堆栈弹出操作数到指定位置 | |
算术运算 | ADD | Addition | 加法运算 |
SUB | Subtraction | 减法运算 | |
MUL | Multiply | 无符号乘法运算 | |
IMUL | Integer Multiply | 有符号乘法运算 | |
DIV | Divide | 无符号除法运算 | |
IDIV | Integer Divide | 有符号除法运算 | |
逻辑运算 | AND | Logical AND | 逻辑与运算 |
OR | Logical OR | 逻辑或运算 | |
XOR | Exclusive OR | 逻辑异或运算 | |
NOT | Logical NOT | 逻辑非运算 | |
控制转移 | JMP | Jump | 无条件跳转 |
JZ | Jump if Zero | 结果为零则跳转 | |
JNZ | Jump if Not Zero | 结果不为零则跳转 | |
CALL | Call a subroutine | 调用子程序 | |
RET | Return from a subroutine | 从子程序返回 | |
串操作 | MOVS | Move String | 移动字节串 / 字串 |
CMPS | Compare String | 比较字节串 / 字串 | |
SCAS | Scan String | 扫描字节串 / 字串中的特定值 | |
处理器控制 | CLC | Clear Carry Flag | 清除进位标志位 |
STC | Set Carry Flag | 设置进位标志位 | |
CLI | Clear Interrupt - Enable Flag | 清除中断允许标志位 | |
STI | Set Interrupt - Enable Flag | 设置中断允许标志位 |
这只是汇编指令的一部分,实际上还有如循环控制指令(LOOP 等)、位操作指令(如 SHL - Shift Left 等)等许多其他指令,并且不同的汇编器和 CPU 架构也会有一些特殊指令。
以下是一些更多的汇编语言指令
指令类别 | 指令 | 英文全称 | 功能描述 |
---|---|---|---|
数据传送 | MOVSX | Move with Sign - extension | 将源操作数传送到目标操作数,同时进行符号扩展 |
MOVZX | Move with Zero - extension | 将源操作数传送到目标操作数,同时进行零扩展 | |
算术运算 | INC | Increment | 将操作数的值加 1 |
DEC | Decrement | 将操作数的值减 1 | |
NEG | Negate | 求操作数的相反数 | |
逻辑运算 | TEST | Test | 对两个操作数进行逻辑与操作,但不保存结果,只设置标志位 |
SHL | Shift Left | 将操作数左移指定的位数 | |
SHR | Shift Right | 将操作数右移指定的位数,无符号数逻辑右移 | |
SAR | Shift Arithmetic Right | 将操作数算术右移指定的位数,用于有符号数 | |
ROL | Rol | 循环左移操作数 | |
ROR | Rot Right | 循环右移操作数 | |
控制转移 | JA | Jump if Above | 当无符号数比较结果为大于时跳转 |
JAE | Jump if Above or Equal | 当无符号数比较结果为大于等于时跳转 | |
JB | Jump if Below | 当无符号数比较结果为小于时跳转 | |
JBE | Jump if Below or Equal | 当无符号数比较结果为小于等于时跳转 | |
JG | Jump if Greater | 当有符号数比较结果为大于时跳转 | |
JGE | Jump if Greater or Equal | 当有符号数比较结果为大于等于时跳转 | |
JL | Jump if Less | 当有符号数比较结果为小于时跳转 | |
JLE | Jump if Less or Equal | 当有符号数比较结果为小于等于时跳转 | |
LOOP | Loop | 循环指令,循环次数由 CX 寄存器决定 | |
LOOPE/LOOPZ | Loop while Equal/Loop while Zero | 当标志位 ZF = 1 且 CX > 0 时循环 | |
LOOPNE/LOOPNZ | Loop while Not Equal/Loop while Not Zero | 当标志位 ZF = 0 且 CX > 0 时循环 | |
串操作 | STOS | Store String | 将 AL/AX/EAX 中的值存储到指定的内存单元串中 |
LODS | Load String | 将指定内存单元串中的值加载到 AL/AX/EAX 中 | |
处理器控制 | HLT | Halt | 使处理器进入暂停状态 |
WAIT | Wait | 使处理器进入等待状态,直到收到信号 | |
ESC | Escape | 处理器交权给外部设备,用于协处理器操作 | |
LOCK | Lock | 在多处理器环境下,锁定总线,保证指令执行的原子性 |