汇编命令手册
一、数据传输指令
它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.
1. 通用数据传输指令
指令 |
描述 |
MOV |
传送字或字节. |
MOVSX |
先符号扩展,再传送. |
MOVZX |
先零扩展,再传送. |
PUSH |
把字压入堆栈. |
POP |
把字弹出堆栈. |
PUSHA |
把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈. |
POPA |
把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈. |
PUSHAD |
把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈. |
POPAD |
把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈. |
BSWAP |
交换32位寄存器里字节的顺序 |
XCHG |
交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数) |
CMPXCHG |
比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX ) |
XADD |
先交换再累加.( 结果在第一个操作数里 ) |
XLAT |
字节查表转换. ── BX 指向一张 256 字节的表的起点, AL 为表的索引值 (0-255,即 0-FFH); 返回 AL 为查表结果. ( [BX+AL]->AL ) |
2. 输入输出端口传送指令.
指令 |
描述 |
IN |
I/O端口输入. ( 语法: IN 累加器, {端口号│DX} ) |
OUT |
I/O端口输出. ( 语法: OUT {端口号│DX},累加器 ) 输入输出端口由立即方式指定时, 其范围是 0-255; 由寄存器 DX 指定时, 其范围是 0-65535. |
3. 目的地址传送指令.
指令 |
描述 |
LEA |
装入有效地址. 例: LEA DX,string ;把偏移地址存到DX. |
LDS |
传送目标指针,把指针内容装入DS. 例: LDS SI,string ;把段地址:偏移地址存到DS:SI. |
LES |
传送目标指针,把指针内容装入ES. 例: LES DI,string ;把段地址:偏移地址存到ES:DI. |
LFS |
传送目标指针,把指针内容装入FS. 例: LFS DI,string ;把段地址:偏移地址存到FS:DI. |
LGS |
传送目标指针,把指针内容装入GS. 例: LGS DI,string ;把段地址:偏移地址存到GS:DI. |
LSS |
传送目标指针,把指针内容装入SS. 例: LSS DI,string ;把段地址:偏移地址存到SS:DI. |
4. 标志传送指令.
指令 |
描述 |
LAHF |
标志寄存器传送,把标志装入AH. |
SAHF |
标志寄存器传送,把AH内容装入标志寄存器. |
PUSHF |
标志入栈. |
POPF |
标志出栈 |
PUSHD |
32位标志入栈 |
POPD |
32位标志出栈 |
二、算术运算指令
指令 |
描述 |
ADD |
加法 |
ADC |
带进位加法 |
INC |
加 1. |
AAA |
加法的十进制调整 |
SUB |
减法. |
SBB |
带借位减法 |
DEC |
减 1. |
NEC |
求反(以 0 减之). |
CMP |
比较.(两操作数作减法,仅修改标志位,不回送结果). |
AAS |
减法的ASCII码调整. |
DAS |
减法的十进制调整. |
MUL |
无符号乘法. |
IMUL |
整数乘法. 以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算), |
AAM |
乘法的ASCII码调整. |
DIV |
无符号除法. |
IDIV |
整数除法. 以上两条,结果回送: 商回送AL,余数回送AH, (字节运算); 或 商回送AX,余数回送DX, (字运算). |
AAD |
除法的ASCII码调整. |
CBW |
字节转换为字. (把AL中字节的符号扩展到AH中去) |
CWD |
字转换为双字. (把AX中的字的符号扩展到DX中去) |
CWDE |
字转换为双字. (把AX中的字符号扩展到EAX中去) |
CDQ |
双字扩展.(把EAX中的字的符号扩展到EDX中去) |
三、逻辑运算指令
指令 |
描述 |
DS:SI |
源串段寄存器 :源串变址. |
ES:DI |
目标串段寄存器:目标串变址. |
CX |
重复次数计数器. |
AL/AX |
扫描值. |
D标志 |
0表示重复操作中SI和DI应自动增量; 1表示应自动减量. |
Z标志 |
用来控制扫描或比较操作的结束. |
MOVS |
串传送. ( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. ) |
CMPS |
串比较. ( CMPSB 比较字符. CMPSW 比较字. ) |
SCAS |
串扫描. 把AL或AX的内容与目标串作比较,比较结果反映在标志位. |
LODS |
装入串. 把源串中的元素(字或字节)逐一装入AL或AX中. ( LODSB 传送字符. LODSW 传送字. LODSD 传送双字. ) |
STOS |
保存串. 是LODS的逆过程. |
REP |
当CX/ECX<>0时重复. |
REPE/REPZ |
当ZF=1或比较结果相等,且CX/ECX<>0时重复. |
REPNE/REPNZ |
当ZF=0或比较结果不相等,且CX/ECX<>0时重复. |
REPC |
当CF=1且CX/ECX<>0时重复. |
REPNC |
当CF=0且CX/ECX<>0时重复. |
四、串指令
1>无条件转移指令 (长转移)
指令 |
描述 |
MP |
无条件转移指令 |
CALL |
过程调用 |
RET/RETF |
过程返回. |
五、程序转移指令
2>条件转移指令 (短转移,-128到+127的距离内)( 当且仅当(SF XOR OF)=1时,OP1<OP2 )
指令 |
描述 |
JA/JNBE |
不小于或不等于时转移. |
JAE/JNB |
大于或等于转移. |
JB/JNAE |
小于转移. |
JBE/JNA |
小于或等于转移. |
============== |
以上四条,测试无符号整数运算的结果(标志C和Z). |
JG/JNLE |
大于转移. |
JGE/JNL |
大于或等于转移. |
JL/JNGE |
小于转移. |
JLE/JNG |
小于或等于转移. |
============== |
以上四条,测试带符号整数运算的结果(标志S,O和Z). |
JE/JZ |
等于转移. |
JNE/JNZ |
不等于时转移. |
JC |
有进位时转移. |
JNC |
无进位时转移. |
JNO |
不溢出时转移. |
JNP/JPO |
奇偶性为奇数时转移. |
JNS |
符号位为 “0” 时转移. |
JO |
溢出转移. |
JP/JPE |
奇偶性为偶数时转移. |
JS |
符号位为 “1” 时转移. |
3>循环控制指令(短转移)
指令 |
描述 |
LOOP |
CX不为零时循环. |
LOOPE/LOOPZ |
CX不为零且标志Z=1时循环. |
LOOPNE/LOOPNZ |
CX不为零且标志Z=0时循环. |
JCXZ |
CX为零时转移. |
JECXZ |
ECX为零时转移. |
4>中断指令
指令 |
描述 |
INT |
中断指令 |
INTO |
溢出中断 |
IRET |
中断返回 |
5>处理器控制指令
指令 |
描述 |
HLT |
处理器暂停, 直到出现中断或复位信号才继续. |
WAIT |
当芯片引线TEST为高电平时使CPU进入等待状态. |
ESC |
转换到外处理器. |
LOCK |
*总线. |
NOP |
空操作. |
STC |
置进位标志位. |
CLC |
清进位标志位. |
CMC |
进位标志取反. |
STD |
置方向标志位. |
CLD |
清方向标志位. |
STI |
置中断允许位. |
CLI |
清中断允许位. |
六、伪指令
指令 |
描述 |
DW |
定义字(2字节). |
PROC |
定义过程. |
ENDP |
过程结束. |
SEGMENT |
定义段. |
ASSUME |
建立段寄存器寻址. |
ENDS |
段结束. |
END |
程序结束. |