每天一小步,人生一大步——8086/8088基本指令

时间:2022-01-30 01:57:15

一、8086、8088寄存器组的分类:

通用寄存器:  (1)数据寄存器:AX    BX   CX   DX

(2)指针寄存器:SP   BP

(3)変址寄存器:SI   DI

控制寄存器:   IP   FLAG

段寄存器:       CS   DS   SS   ES



二、FLAG寄存器:

每天一小步,人生一大步——8086/8088基本指令

(1)运算结果标志

①进位标志CF     反映无符号数的运算结果是否产生进位或者错位

如果运算结果的最高位产生一个进位或者错位,则CF置1

移位指令把操作数的最高位或者最低位移入CF

②零标志ZF        反映运算结果是否为0

如果为0,则ZF置1

③符号标志SF   反映运算结果的符号位

与运算结果的最高位相同

④溢出标志OF  反映有符号数加减运算是否引起溢出

⑤奇偶标志PF   反映运算结果中1的个数,如果1的个数位偶数则置1

⑥辅助进位标志AF    在字节操作时如果发生低半字节向高半字节进位/错位,在字操作时如果发生低字节向高字节进位/错位,则AF置1

(2)状态控制标志

①方向标志DF   决定串操作指令执行时有关指针寄存器调整方向

DF=1,串操作指令按减方式改变有关的存储器指针值

DF=0,串操作指令按增方式改变有关的存储器指针值

②中断标志IF    决定CPU是否影响外部可屏蔽中断请求

IF=1,影响

IF=2,不影响

③陷进标志TF   当TF被置1后,CPU进入单步方式


三、8086.、8088指令


1、数据传送指令

MOV    DST,SRC                          把一个字或者字节从SRC传至DST

XCHG  OPRD1,OPRD2              把OPRD1内容与OPRD2内容交换

LEA    REG,OPRD                        把OPRD的有效地址传送到OPRD

LDS    REG,OPRD                       把OPRD所含的一个32位地址指针的段值部分送到DS,把偏移部分送到REG

LES    REG,OPRD                       把OPRD所含的一个32位地址指针的段值部分送到ES,把偏移部分送到REG


2、堆栈指令

PUSH    SRC                                   把SRC压入堆栈

POP    DST                                       从栈顶弹出一个数到DST


3、FLAG操作指令

LAHF                           把FALG的低8位传送到AH的相应位

SAHF                           把AH的相应位传送到FLAG的低8位

PUSHF                        把FLAG的内容压入堆栈

POPF                          把栈顶的一个字送到FLAG

CLC                            CF位清0

STC                             CF位置1

CMC                            CF位取反

CLD                             DF位清0

STD                              DF位置1

CLI                               IF位清0

STI                               IF位置1


4、加减运算指令

ADD    OPRD1,OPRD2                   OPRD1<--OPRD1+OPRD2

ADC    OPRD1,OPRD2                   OPRD1<--OPRD1+OPRD2+CF

INC    OPRD                                         OPRD<--OPRD+1

SUB    OPRD1,OPRD2                   OPRD1<--OPRD1-OPRD2

SBB    OPRD1,OPRD2                   OPRD1<--OPRD1-OPRD2-CF

DEC    OPRD                                       OPRD<--OPRD-1

NEG    OPRD                                       OPRD=0-OPRD


5、比较指令

CMP    OPRD1,OPRD2                  OPRD1-OPRD2


6、乘除法指令

MUI    OPRD                        若OPRD为8位  AX<--AL*OPRD         若OPRd为16位  DX:AX<--AX*OPRD

IMUI    OPRD

DIV    OPRD                         若OPRD为8位  AX÷OPRD-->AL商  AH余               若OPRd为16位  DX:AX÷OPRD-->AX商  DX余

IDIV    OPRD


7、符号扩展指令

CBW                                   把AL中得符号扩展AH,即若AL最高有效位为0时,AH=00H,若AL最高有效位为1时,AH=FFH

CWD                                  把AX中得符号扩展至DX


8、逻辑运算与移位

NOT    OPRD                                            OPRD<--- ~OPRD

AND    OPRD1,OPRD2                        OPRD1<--- OPRD1&&OPRD2

OR    OPRD1,OPRD2                          OPRD1<---OPRD1 ||  OPRD2

XOR    OPRD1,OPRD2                           OPRD1<--- OPRD1  异或  OPRD2

TEST    OPRD1,OPRD2                      OPRD1  &&  OPRD2


SAL    OPRD,m                           算术左移

SHL    OPRD,m                          逻辑左移

SAR    OPRD,m                          算术右移

SHR    OPRD,m                         逻辑右移


ROL    OPRD,m                          左循环移位  

ROR    OPRD,m                         右循环移位

RCL    OPRD,m                          带进位做循环移位

RCR    OPRD,m                         带进位右循环移位