8086、8088指令系统记忆表
- 格式:doc
- 大小:39.00 KB
- 文档页数:9
8086 8088 汇编指令手册一、常用指令二、算术运算指令三、逻辑运算指令四、串指令五、程序跳转指令------------------------------------------计算机寄存器分类简介:32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和EDX)2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP)6个段寄存器(ES、CS、SS、DS、FS和GS)1个指令指针寄存器(EIP) 1个标志寄存器(EFlags)1、数据寄存器数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。
32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。
对低16位数据的存取,不会影响高16位的数据。
这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。
4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄存器都有自己的名称,可独立存取。
程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字节的信息。
寄存器EAX通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。
可用于乘、除、输入/输出等操作,使用频率很高;寄存器EBX称为基地址寄存器(Base Register)。
它可作为存储器指针来使用;寄存器ECX称为计数寄存器(Count Register)。
在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数;寄存器EDX称为数据寄存器(Data Register)。
在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址。
在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址,在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据保存算术逻辑运算结果,而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。
附录:8086/8088 指令码格式我们用汇编语言写的汇编程序输入计算机后,由机器提供的汇编程序将其翻译成由机器指令(指令码)组成的机器语言程序,才能由计算机识别并执行,因此汇编语言程序需由汇编程序翻译成可执行的机器语言程序,一般来说,这一过程不需要人为干预。
我们在这里只介绍一下基本原理,以便在必要时也可以用手工的方式完成类似的工作。
8086/8088 指令系统的指令程序类型很多,功能很强,各种指令由于功能不同,需要指令码提供的信息也不同。
为了满足不同用户的功能的要求又要减少指令所占的空间,8086/8088 指令系统采用了一种灵活的,由1~6 个字节组成的变字长的指令格式,包括操作码、寻址方式以及操作数3 部分,如图2所示。
通常指令的第一字节为操作码,规定指令的操作类型。
第二字节规定操作数的寻址方式接着以后的3~6 字节依据指令的不同取舍。
可变字长的指令主要体现在这里,一般由其指出存储器操作数地址位移量或立即数。
操作码(第一字节)及寻址方式字节(MOD字段)格式如下。
图1 8086/8088操作码及寻址方式字段格式第一字节中,W 指出操作数类型:W=0 为字节,W=1 为字。
D 指出操作数的传送方向:D=0 寄存器操作数为源操作数,D=1 寄存器操作数为目标操作数。
第二字节指出所用的两个操作数存放的位置,以及存储器中操作数有效地址EA 的计算方法。
图2 8086/8088 不同字长的指令码格式REG 字段规定一个寄存器操作数,它作为源操作数还是目标操作数已由第一个字节中的D 位规定。
由REG 字段选择寄存器的具体规定见表1。
表1 REG 字段编码表MOD 字段用来区分另一个操作数在寄存器中(寄存器寻址)还是在存储器中(存储器寻址)。
在存储器寻址的情况下,还用来指出该字节后面有多少偏移量字节(即指出存储器操作数地址偏移量的字节数)。
MOD 字段编码表见表2。
表2 MOD 字段编码表R/M 字段受MOD 字段将指出第二操作数所在寄存器编号。
8086/8088 指令速查表约定:RR 表示通用寄存器和专用寄存器(AX,BX,CX,DX,BP,SP,SI,DI ),SER 表示段寄存器(CS,DS,ES,SS),MEM 表示内存单元的有效地址,[MEM]表示该单元的内容, AC 表示AX 和AL ,NN 表示立即数,NN 表示立即数, *表示对标志位有影响,F 表示标志寄存器:XXXXODITSZXAXPXCMOV X,Y X ←Y RR,SER,AC ←→[MEM],RR’; RR ,[MEM] ← NNPUSH Z Z=RR,[MEM],SERPOP ZPUSHFPOPFXCHG X,Y X ←→Y RR ←→ [MEM],RR’XLAT (OPR) AL ←[BX+AL]LEA RR,[MEM] RR ←MEMLDS RR,[MEM] RR ←[MEM],DS ←[MEM+2]LES RR,[MEM] RR ←[MEM],ES ←[MEM+2]LAHF AH ←F 低字节SAHF F 低字←AHADD X,Y X ←X+Y *ADC X,Y X ←X+Y+CF *SUB X,Y X ←X-Y *SBB X,Y X ←X-Y-CF *CMP X,Y X-Y *INC Z Z ←Z+1 Z=RR ,[MEM] * 不影响CFDEC Z Z ←Z-1 * 不影响CFNEG Z Z ←0-Z 求补 *MUL Z AX ←AL*Z (8位),DXAX ←AX*Z (16位),Z 同上,无符号数乘法,影响CF 和OFIMUL Z AX ←AL*Z ;DXAX ←AX*Z ;Z 同上;带符号数乘法,影响CF 和OFDIV Z AX/Z ,AH ←余数,AL ←商(16位/8位)DXAX/Z ,DX ←余数,AX ←商(32位/16位)IDIV Z 带符号数除法,操作同上DAA 加法后对AL 进行组合BCD 码调整 *DAS 减法后对AL 进行组合BCD 码调整 *AAA 加法后对AL 进行非组合BCD 码调整,AH ←AH+调整后的进位,CF=调整后的进位 * AAS 减法后对AL 进行非组合BCD 码调整,AH ←AH-调整后的借位 *AAM 将AL 中的积调整为非组合BCD 码, AH ←商(AL/0AH ),AL ←余数(AL/0AH ) *AAD 除法前的调整,A ←AL+AH*0AH ,AH ←0 *AND X,Y X ←X ∧Y *OR X,Y X ←X ∨Y *NOT Z Z ←/ZXOR X,Y X ←X Y *TEST X,Y X ∧Y *SHL Z,1(CL) 逻辑左移 *SAL Z,1(CL) 算术左移 *SHR Z,1(CL) 逻辑右移 *SAR Z,1(CL) 算术右移 *无符号数除法ROL Z,1(CL) 循环左移 影响CF 和OFROR Z,1(CL) 循环右移 影响CF 和OFRCL Z,1(CL) 带进位循环左移 影响CF 和OFRCR Z,1(CL) 带进位循环右移 影响CF 和OFMOVSB/MOVSW [ES:DI] ←[DS:SI],DF=0,DI 和SI 递增,否则递减,可加REP,CX ←CX-1,CX=0退出 STOSB/STOSW [ES:DI] ←AC, DF=0,DI 递增, 否则递减,可加REPLODSB/LODSW AC ←[DS:SI], DF=0,SI 递增, 否则递减,不加前缀CMPSB/CMPSW [DS:SI]-[ES:DI]比较, DF=0,DI 和SI 递增,否则递减,可加REPE/REPZ,REPNE/REPNZSCASB/SCASW AC-[ES :DI]比较,DF=0,DI 递增, 否则递减,可加REPE/REPZ,REPNE/REPNZ JMP W IP ←W ,W=NN ,RR ,[MEM]JMP NN1,NN2 CS ←NN1,IP ←NN2对无符号数JA/JNBE NN 高于/不低于也不等于 则转移 JAE/JNB NN 高于或等于/不低于 则转移 JB/JNAE NN 低于/不高于也不等于 则转移 JBE/JNA NN 低于或等于/不高于 则转移 对带符号数JG/JNLE NN 大于/不小于也不等于 则转移 JGE/JNL NN 大于或等于/不小于 则转移 JL/JNGE NN 小于/不大于也不等于 则转移 JLE/JNG NN 小于或等于/不大于 则转移 单标志JC NN CF=1 则转移 JNC NN CF=0 则转移 JZ/JE NN ZF=1, 则转移 JNZ/JNE NN ZF=0, 则转移 位条件转移JS NN SF=1, 则转移 JNS NN SF=0, 则转移 JO NN OF=1, 则转移 JNO NN OF=0, 则转移 JP/JO NN PF=1, 则转移 JNP/JNO NN PF=0, 则转移 循环控制LOOP NN CX ←CX-1,CX ≠0, 则转LOOPE/LOOPZ NN CX ←CX-1,ZF=1且CX ≠0 则转LOOPNE/LOOPNZ NN CX ←CX-1,ZF=0且CX ≠0 则转JCXZ NN CX=0,则转CALL W RET IRETINT TYPE CS 压栈,IP 压栈,CS ←[TYPE*4+2],IP ←[TYPE*4+4] INT0 OF=1,则CS 压栈,IP 压栈,CS ←[12H],IP ←[10H]CBW AL 符号扩展到AH CWD AX 符号扩展到DXCLC CF ←0 STC CF ←1CLD DF ←0 STD DF ←1CLI IF ←0 STI IF ←1CMC CF ←/CF NOP 空操作HLT 停机 WAIT 等待ESC 换码 LOCK 封锁IN AC, DX OUT DX,ACIN AC, PORT OUT PORT,AC。
我现将指令系统中各种助记符的英文全名写出来,各种助记符的记忆就会变得很简单o(∩_∩)o...
一、数据传送指令
1.通用数据传送指令
MOV(Move)传送
PUSH(Push onto the stack)进栈
POP(Pop from the stack)出栈
XCHG(Exchange)交换
2.累加器专用传送指令
IN(Input) 输入
OUT(Output) 输出
XLAT(Translate) 换码
3.有效地址送寄存器指令
LEA(Load effective address) 有效地址送寄存器
LDS(Load DS with Pointer) 指针送寄存器和DS
LES(Load ES with Pointer) 指针送寄存器和ES
4.标志寄存器传送指令
LAHF(Load AH with flags) 标志送AH
SAHF(store AH into flags) AH送标志寄存器 PUSHF(push the flags) 标志进栈
POPF(pop the flags) 标志出栈
二、算术指令
1.加法指令
ADD(add) 加法
ADC(add with carry) 带进位加法
INC(increment) 加1
2.减法指令
SUB(subtract) 减法
SBB(subtract with borrow) 带借位减法
DEC(Decrement) 减1
NEG(Negate) 求补
CMP(Compare) 比较
3.乘法指令
MUL(Unsigned Multiple) 无符号数乘法
IMUL(Signed Multiple) 带符号数乘法
4.除法指令
DIV(Unsigned divide) 无符号数除法
IDIV(Signed divide) 带符号数除法
CBW(Convert byte to word) 字节转换为字
CWD(Contert word to double word) 字转换为双字
三、逻辑指令
1.逻辑运算指令
AND(and) 逻辑与
OR(or) 逻辑或
NOT(not) 逻辑非
XOR(exclusive or) 异或
TEST(test) 测试
2.移位指令
SHL(shift logical left) 逻辑左移
SAL(shift arithmetic left) 算术左移
SHR(shift logical right) 逻辑右移
SAR(shift arithmetic right) 算术右移
ROL(Rotate left) 循环左移
ROR(Rotate right) 循环右移
RCL(Rotate left through carry) 带进位循环左移
RCR(Rotate right through carry) 带进位循环右移
四、串处理指令
1.重复前端指令
REP(Repeat) 重复串操作直到(CX)=0为上
REPE(Repeat when empty) 若(CX)=0,则退出,否则CX=CX+1; REPZ(Repeat when flag ) 若ZF=0,则退出,否则CX=CX+1; REPC(Repeat when carry flag)
REPNE(Repeat when not empty)
REPNZ(Repeat when not zero flag)
REPNC(Repeat when not carry flag)
2.串操作指令
MOVSB (Move string of byte) 串传送指令
MOVSW(Move string of word) 串传送指令
CMPSB(Compare string of byte) 串比较指令
CMPSW(Compare string of word) 串比较指令
SCASB(Scan string of byte) 串搜索指令
SCASW(Scan string of word) 串搜索指令
STOSB(Store string of byte) 存串指令
STOSW(Store string of word) 存串指令
LODSB(Load string of byte) 取串指令
LODSW(Load string of word) 取串指令
CLD(Clear direction flag)该指令使DF=0,在执行串操作指令时可使地址自动增量;
STD(Set direction flag) 该指令使DF=1,在执行串操作指令时可使地址自动减量.
DAA(Decimal adjust after addition) 组合BCD码的加法调整指令
DAS(Decimal adjust after substract) 组合BCD码的减法调整指令
AAA(ASCII adjust after addition) 非压缩BCD码加法调成指令
AAS(ASCII adjust after substract) 非压缩BCD码减法调成指令
AAM(ASCII adjust after multiple) 非压缩BCD码乘法调成指令AAD(ASCII adjust after divid) 非压缩BCD码除法调成指令
五、控制转移指令
1.无条件转移指令
JMP(jmp) 跳转指令
2.条件转移指令
(1)根据单个条件标志的设置情况转移
JZ(或JE)(Jump if zero,or equal) 结果为零(或相等)则转移
JS(Jump if sign) 结果为负则转移
JNS(Jump if not sign) 结果为正则转移
JO(Jump if overflow) 溢出则转移
JNO(Jump if not overflow) 不溢出则转移
JNP(或JPO)(Jump if not parity,or parity odd) 奇偶位为0则转移
JP(或JPE)(Jump if parity,or parity even) 奇偶位为1则转移
JB(或JNAE,JC)(Jump if below,or not above or equal,or carry)低于,或者不高于或等于,或进位位为1则转移
JNB(或
JAE,JNC)(Jump if not below,or above or equal,or not carry)不低于,或者高于或者等于,或进位位为0则转移
(2)比较两个无符号数,并根据比较的结果转移
JB(或JNAE,JC)
JNB(或JAE,JNC)
JBE(或JNA)(Jump if below or equal,or not above)低于或等于,或不高于则转移
JNBE(或JA)(Jump if not below or equal,or above)不低于或等于,或者高于则转移
(3)比较两个带符号数,并根据比较的结果转移
JL(或LNGE)(Jump if less,or not greater or equal)小于,或者不大于或者等于则转移
JNL(或JGE)(Jump if not less,or greater or equal)不小于,或者大于或者等于则转移
JLE(或JNG)(Jump if less or equal,or not greater)小于或等于,或者不大于则转移
JNLE(或JG)(Jump if not less or equal,or greater)不小于或等于,或者大于则转移
(4)测试CX的值为0则转移指令
JCXZ(Jump if CX register is zero) CX寄存器
3.循环指令
LOOP(loop) 循环指令
4.子程序
CALL(call) 调用指令
RET(return) 返回指令
5.中断
INT(interrupt)指令
IRET(interrupt return) 从中断返回指令
INTO(interrupt if overflow) 若溢出则中断
六、处理机控制指令
1.标志处理指令
CLC(Clear carry) 进位位置0指令CF<-0
CMC(Complement carry) 进位位求反指令CF<-CF
STC(Set carry) 进位位置1指令CF<-1
CLD(Clear direction) 方向标志置0指令DF<-0 STD(Set direction) 方向标志置1指令DF<-1 CLI(Clear interrupt) 中断标志置0指令IF<-0 STI(Set interrupt) 中断标志置1指令IF<-0
2.其他处理机控制指令
NOP(No Opreation) 无操作
HLT(Halt) 停机
WAIT(Wait) 等待
ESC(Escape) 换码
LOCK(Lock) 封锁。