基本指令的汇编格式
2014-09-28 08:40
134 查看
指令符号说明
8086指令对状态标志的影响
状态符号说明
指令对状态标志的影响(未列出的指令不影响标志)
16/32位基本指令的汇编格式
call [eax] 虚函数 寄存器间接寻址
mov ax,[di+06] 用于结构体
基址变址寻址
栈为函数服务
符号 | 说明 |
r8 | 任意一个8位通用寄存器AH、AL、BH、BL、CH、CL、DH、DL |
r16 | 任意一个16位通用寄存器AX、BX、CX、DX、SI、DI、BP、SP |
reg | 代表r8、r16 |
seg | 段寄存器CS、DS、ES、SS |
m8 | 一个8位存储器操作数单元 |
m16 | 一个16位存储器操作数单元 |
mem | 代表m8、m16 |
i8 | 一个8位立即数 |
i16 | 一个16位立即数 |
imm | 代表i8、i16 |
dest | 目的操作数 |
src | 源操作数 |
label | 标号 |
状态符号说明
符号 | 说明 |
- | 标志位不受影响(没有改变) |
0 | 标志位复位(置0) |
1 | 标志位置位(置1) |
x | 标志位按定义功能改变 |
# | 标志位按指令的特定说明改变 |
u | 标志位不确定(可能为0,也可能为1) |
指令对状态标志的影响(未列出的指令不影响标志)
指令 | OF | SF | ZF | AF | PF | CF |
SAHF | - | # | # | # | # | # |
POPF/ IRET | # | # | # | # | # | # |
ADD/ADC/SUB/SBB/CMP/NEG/CMPS/SCAS | x | x | x | x | x | x |
INC/DEC | x | x | x | x | x | - |
MUL/IMUL | # | u | u | u | u | # |
DIV/IDIV | u | u | u | u | u | u |
DAA/DAS | u | x | x | x | x | x |
AAA/AAS | u | u | u | x | u | x |
AAM/AAD | u | x | x | u | x | u |
AND/OR/XOR/TEST | 0 | x | x | u | x | 0 |
SAL/SAR/SHL/SHR | # | x | x | u | x | # |
ROL/ROR/RCL/RCR | # | - | - | - | - | # |
CLC/STC/CMC | - | - | - | - | - | # |
指令类型 | 指令汇编格式 | 指令功能简介 |
| MOV reg/mem,imm | dest←src |
传送指令 | MOV reg/mem/seg,reg | |
| MOV reg/seg,mem | |
| MOV reg/mem,seg | |
交换指令 | XCHG reg,reg/mem | reg←→reg/mem |
| CHG reg/mem,reg | |
转换指令 | XLAT label | al←ds:[(e)bx+al] |
| XLAT | |
| PUSH reg/mem/seg | 寄存器/存储器入栈 |
| PUSH imm | 立即数入栈 |
| POP reg/seg/mem | 出栈 |
堆栈指令 | PUSHA | 保护所有r16 |
| POPA | 恢复所有r16 |
| PUSHAD | 保护所有r32 |
| POPAD | 恢复所有r32 |
| LAHF | AH←FLAG低字节 |
| SAHF | FLAG低字节←AH |
标志传送 | PUSHF | FLAGS入栈 |
| POPF | FLAGS出栈 |
| PUSHFD | EFLAGS入栈 |
| POPFD | EFLAGS出栈 |
| LEA r16/r32,mem | r16/r32←16/32位有效地址 |
| LDS r16/r32,mem | DS: r16/r32←32/48位远指针 |
地址传送 | LES r16/r32,mem | ES: r16/r32←32/48位远指针 |
| LFS r16/r32,mem | FS: r16/r32←32/48位远指针 |
| LGS r16/r32,mem | GS: r16/r32←32/48位远指针 |
| LSS r16/r32,mem | SS: r16/r32←32/48位远指针 |
输入输出 | IN AL/AX/EAX,i8/DX | AL/AX/EAX←I/O端口i8/[DX] |
| OUT i8/DX,AL/AX/EAX | I/O端口i8/[DX]←AL/AX/EAX |
| ADD reg,imm/reg/mem | dest←dest+src |
| ADD mem,imm/reg | |
加法运算 | ADC reg,imm/reg/mem | dest←dest+src+CF |
| ADC mem,imm/reg | |
| INC reg/mem | reg/mem←reg/mem+1 |
| SUB reg,imm/reg/mem | dest←dest-src |
| SUB mem,imm/reg | |
| SBB reg,imm/reg/mem | dest←dest-src-CF |
减法运算 | SBB mem,imm/reg | |
| DEC reg/mem | reg/mem←reg/mem-1 |
| NEG reg/mem | reg/mem←0-reg/mem |
| CMP reg,imm/reg/mem | dest-src |
| CMP mem,imm/reg | |
| MUL reg/mem | 无符号数值乘法 |
| IMUL reg/mem | 有符号数值乘法 |
乘法运算 | IMUL r16,r16/m16/i8/i16 | r16←r16×r16/m16/i8/i16 |
| IMUL r16,r/m16,i8/i16 | r16←r/m16×i8/i16 |
| IMUL r32,r32/m32/i8/i32 | r32←r32×r32/m32/i8/i32 |
| IMUL r32,r32/m32,i8/i32 | r32←r32/m32×i8/i32 |
除法运算 | DIV reg/mem | 无符号数值除法 |
| IDIV reg/mem | 有符号数值除法 |
| CBW | 把AL符号扩展为AX |
| CWD | 把AX符号扩展为DX.AX |
| CWDE | 把AX符号扩展为EAX |
符号扩展 | CDQ | 把EAX符号扩展为EDX.EAX |
| MOVSX r16,r8/m8 | 把r8/m8符号扩展并传送至r16 |
| MOVSX r32,r8/m8/r16/m16 | 把r8/m8/r16/m16符号扩展并传送至r32 |
| MOVZX r16,r8/m8 | 把r8/m8零位扩展并传送至r16 |
| MOVZX r32,r8/m8/r16/m16 | 把r8/m8/r16/m16零位扩展并传送至r32 |
| DAA | 将AL中的加和调整为压缩BCD码 |
| DAS | 将AL中的减差调整为压缩BCD码 |
十进制调整 | AAA | 将AL中的加和调整为非压缩BCD码 |
| AAS | 将AL中的减差调整为非压缩BCD码 |
| AAM | 将AX中的乘积调整为非压缩BCD码 |
| AAD | 将AX中的非压缩BCD码扩展成二进制数 |
| AND reg,imm/reg/mem | dest←dest AND src |
| AND mem,imm/reg | |
| OR reg,imm/reg/mem | dest←dest OR src |
逻辑运算 | OR mem,imm/reg | |
| XOR reg,imm/reg/mem | dest←dest XOR src |
| XOR mem,imm/reg | |
| TEST reg,imm/reg/mem | dest AND src |
| TEST mem,imm/reg | |
| NOT reg/mem | reg/mem←NOT reg/mem |
| SAL reg/mem,1/CL/i8 | 算术左移1/CL/i8指定的次数 |
移位 | SAR reg/mem,1/CL/i8 | 算术右移1/CL/i8指定的次数 |
| SHL reg/mem,1/CL/i8 | 与SAL相同 |
| SHR reg/mem,1/CL/i8 | 逻辑右移1/CL/i8指定的次数 |
| ROL reg/mem,1/CL/i8 | 循环左移1/CL/i8指定的次数 |
循环移位 | ROR reg/mem,1/CL/i8 | 循环右移1/CL/i8指定的次数 |
| RCL reg/mem,1/CL/i8 | 带进位循环左移1/CL/i8指定的次数 |
| RCR reg/mem,1/CL/i8 | 带进位循环右移1/CL/i8指定的次数 |
| MOVS[B/W/D] | 串传送 |
| LODS[B/W/D] | 串读取 |
| STOS[B/W/D] | 串存储 |
| CMPS[B/W/D] | 串比较 |
串操作 | SCAS[B/W/D] | 串扫描 |
| INS[B/W/D] | I/O串输入 |
| OUTS[B/W/D] | I/O串输出 |
| REP | 重复前缀 |
| REPZ / REPE | 相等重复前缀 |
| REPNZ / REPNE | 不等重复前缀 |
| JMP label | 无条件直接转移 |
| JMP r16/r32/m16 | 无条件间接转移 |
转移 | Jcc label | 条件转移 |
| JCXZ label | CX等于0转移 |
| JECXZ label | ECX等于0转移 |
| LOOP label | cx←cx-1;若cx≠0,循环 |
循环 | LOOPZ / LOOPE label | cx←cx-1;若cx≠0且ZF=1,循环 |
| LOOPNZ / LOOPNE label | cx←cx-1;若cx≠0且ZF=0,循环 |
| CALL label | 直接调用 |
子程序 | CALL r16/m16 | 间接调用 |
| RET | 无参数返回 |
| RET i16 | 有参数返回 |
| INT i8 | 中断调用 |
中断 | IRET | 中断返回 |
| INTO | 溢出中断调用 |
| ENTER i16,i8 | 建立堆栈帧 |
高级语言支持 | LEAVE | 释放堆栈帧 |
| BOUND r16/r32,mem | 边界检测 |
| CLC | CF←0 |
| STC | CF←1 |
| CMC | CF←~CF |
处理器控制 | CLD | DF←0 |
| STD | DF←1 |
| CLI | IF←0 |
| STI | IF←1 |
| NOP | 空操作指令 |
| WAIT | 等待指令 |
| HLT | 停机指令 |
| LOCK | 封锁前缀 |
| SEG: | 段超越前缀 |
| ESC i8,reg/mem | 交给浮点处理器的浮点指令 |
保护方式类指令 | 略 | 略 |
call [eax] 虚函数 寄存器间接寻址
mov ax,[di+06] 用于结构体
基址变址寻址
栈为函数服务
相关文章推荐
- 汇编中基本的指令格式
- 汇编语言基础之四 - 基本的指令
- 【翻译】intel指令格式与长度反汇编引擎ADE32分析
- 汇编基本指令的学习
- 01_汇编语言(基本格式_模板)
- ARM汇编编程基础(二) -- 基本寻址方式与基本指令
- 【翻译】intel指令格式与长度反汇编引擎ADE32分析——来自看雪软件安全网站
- Delphi 内嵌汇编的基本格式
- 汇编语言基本指令
- ARM裸机程序开发15(伪指令,汇编语句格式,汇编变量常量)
- 汇编基本指令复习,以及逆向中如何跟esp ,ebp参数
- ARM学习笔记(九)--指令基本格式
- ARM汇编编程基础之三 —— 基本寻址方式与基本指令
- 嵌入式汇编的基本格式
- 汇编语言基本指令
- 嵌入式汇编的基本格式
- HLA汇编基本指令
- 汇编基本指令
- [Intel汇编-NASM]基本指令
- 汇编(三)汇编语言的指令格式