在阅读Linux源代码时,你可能遇到很多汇编指令,有些是你熟悉的,有些可能不熟悉,在此简要列出一些常用的386汇编指令及其功能。
1. 位操作指令
指令 功能
BT 位测试
BTC 位测试并求反
BTR 位测试并复位
BTS 位测试并置位
2.控制转移类指令
指令 功能
CALL 调用过程
JMP 跳转
LOOP 用ECX计数器的循环
LOOPNZ/LOOPNE 用ECX计数器且不为0的循环/用ECX计数器且不等的循环
RET 返回
3. 数据传输指令
指令 功能
IN 从端口输入
LEA 装入有效地址
MOV 传送
OUT 从段口输出
POP 从堆栈中弹出
POPA/POPAD 从栈弹出至所有寄存器
PUSH 压栈
PUSH/PUSHAD 所有通用寄存器压栈
XCHG 交换
4.标志控制类指令
指令 功能
CLC 清0进位标志
CLD 清0方向标志
CLI 清0中断标志
LAHF 将标志寄存器装入AH寄存器
POPF/POPFD 从栈中弹出至标志位
PUSHF/PUSHFD 将标志压栈
SAHF 将AH寄存器存入标志寄存器
STC 置进位标志
STD 置方向标志
STI 置中断标志
5.逻辑类指令
指令 功能
NOT 与
AND 非
OR 或
SAL/SHL 算术作移/逻辑左移
SAR 算术右移
SHLD 逻辑右移
TEST 逻辑比较
XOR 异或
6.串操作指令
指令 功能
CMPS/CMPSB/CMPSW/CMPSD 比较串操作数
INS/INSB/INSW/INSD 输入串操作数
LODS/LODSB/LODSW/LODSD 装入串操作数
MOVS/MOVSB/MOVSW/MOVSD 传送串操作数
REP 重复
REPE/REPZ 相等时重复/为0时重复
SCAS/SCASB/SCASW/SCASD 扫描串操作数
STOS/STOSB/STOSW/STOSD 存储串操作数
7.多段类操作指令
指令 功能
CALL 过程调用
INT 中断过程的调用
INTO 溢出中断过程的调用
IRET 中断返回
JMP 跳转
LDS 将指针转入DS
LES 将指针转入ES
LFS 将指针转入FS
LGS 将指针转入GS
LSS 将指针转入SS
MOV 段寄存器的传送
POP 从栈弹出至段寄存器
PUSH 压栈
RET 返回
8.操作系统类指令
指令 功能
APPL 调整请求特权级
ALTS 清任务切换标志
HLT 暂停
LAR 加载访问权
LGDT 加载全局描述符表
LIDT 加载中断描述符表
LLDT 加载局部描述符表
LMSW 加载机器状态字
LSL 加载段界限
LTR 加载任务寄存器
MOV 特殊寄存器的数据传送
SGDT 存储全局描述符表
SIDT 存储中断描述符表
SMSW 存储机器状态字
STR 存储任务寄存器