汇编语言一般指令解释_汇编语言指令大全
一.数据传输指令
它们在存储器和寄存器、寄存器和输入输出端口之间传输数据。
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-FFH; AL是查找表的结果。 (([BX AL]-AL ) ) ) ) ) )。
2 .输入输出端口转发命令。
输入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中。
传送SHF标志寄存器,将AH内容加载到标志寄存器中.
PUSHF标志进入堆栈。
出现POPF标志。
PUSHD 32位标志进入堆栈。
出现POPD 32位标志。
二.算术运算命令
添加加法。
ADC频段进位加法。
在INC上加1。
AAA加法的ASCII码调整
DAA加法的十进制调整。
辅减法。
SBB有借位减法。
直流负1。
NEC要求反击(从0开始减去)。
CMP比较. (减去2**,只修改标志位,不返回结果)。
AAS减法的ASCII代码调整
DAS减法的十进制调整
无MUL符号乘法。
IMUL整数乘法。
以上两个结果返回AH和AL (字节运算)或DX和AX (字运算),
am乘法的ASCII码调整
无DIV符号除法。
IDIV整数除法。
以上两条,结果发回:
商返回AL,馀数返回AH,(字节运算);
或者商发回AX,馀数发回DX,(字运算)。
ad除法的ASCII代码调整
将CBW字节转换为字((将AL中字节的符号扩展为AH ) ) ) ) ) ) )。
将CWD字转换为双字((将AX中的字的符号扩展到DX中) ) ) ) ) ) )。
将CWDE字转换为双字((将AX的字符号扩展为EAX ) ) )。
CDQ双字扩展. (将EAX中的字符号扩展为EDX ) )。
三.逻辑运算命令
与和运算。
或运算。
XOR异或运算。
NOT取反。
TEST测试. (与2**操作数进行运算,只修改标志位,不返回结果)。
SHL逻辑向左移动。
SAL算术左移((=SHL ) ) ) ) )。
SHR逻辑右移。
SAR算术
右移.(=SHR)ROL 循环左移.
ROR 循环右移.
RCL 通过进位的循环左移.
RCR 通过进位的循环右移.
以上八种移位指令,其移位次数可达255次.
移位一次时, 可直接用**作码. 如 SHL AX,1.
移位>1次时, 则由寄存器CL给出移位次数.
如 MOV CL,04
SHL AX,CL
四、串指令
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>无条件转移指令 (长转移)
JMP 无条件转移指令
CALL 过程调用
RET/RETF过程返回.
2>条件转移指令 (短转移,-128到+127的距离内)
( 当且仅当(SF XOR OF)=1时,OP1
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为零时转移.
5>中断指令
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 程序结束