8086汇编基本指令

一、数据传送

1、MOV

  • 描述:赋值指令
  • 格式:MOV    DST,SRC
  • 功能: DST <= SRC
  • 注意:①不能DST,SRC都是存储器,这也是所有双操作数指令的通用要求。

                 ② 但其中一个是段寄存器时,另一个操作数必须是数据寄存器。

                 ③不允许往CS传递数据

                 ④将立即数送存储时,要指定操作数类型。BYTE PTR ,WORD PTR, DWORD PTR

                 ⑤不影响PSW

2、PUSH

  • 描述:入栈指令
  • 格式:PUSH SRC
  • 功能:将SRC入栈
  • 注意:①只能是对“字”操作。

3、POP

  • 描述:出栈指令
  • 格式:POP DST
  • 功能:将栈顶元素出栈赋值给DST

4、XCHG

  • 描述:数据交换指令
  • 格式:SCHG DST,SRC
  • 功能:将DST.SRC的值进行交换
  • 注意:①不能DST,SRC都是存储器,这也是所有双操作数指令的通用要求。

5、IN

  • 格式:IN DST,SRC
  • 功能:从SRC端口读取一个字节/字到DST中。

6、OUT

  • 格式:OUT  DST,SRC
  • 功能:将SRC中的数据送到DST短空中

7、XLAT

  • 描述:取表指令
  • 格式:XLAT
  • 功能:以DS:[BX+AL]为地址提取一个字节的数据送到AL中

8、LEA

  • 格式:LEA    REG,MEM
  • 功能:取MEM的偏移地址送到REG中。
9、LDS 
  • 格式:LDS reg,mem
  • 功能:是把mem指向的地址,高位存放在DS中,低位存放在reg中。
10、LES
  • 格式:LES reg,mem
  • 功能:是把mem指向的地址,高位存放在ES中,低位存放在reg中。

11、PUSHF    

  • 格式:PUSHF
  • 功能:将PSW进栈

12、POPF       

  • 格式:POPF
  • 功能:将栈顶元素送到PSW

13、LAHF         

  • 格式:LAHF
  • 功能:将PSW的低八位送到AH中

14、SAHF        

  • 格式:SAHF
  • 功能:将AH写入PSW的低八位

二、算术

1、ADD

  • 描述:加法指令
  • 格式:ADD    DST,SRC
  • 功能: DST <= DST+REC

2、ADC

  • 格式:ADC    DST,SRC
  • 功能:DST <= DST + REC + CF

3、INC

  • 格式: INC DST
  • 功能:DST <= DST + 1

4、SUB

  • 格式:SUB    DSTSRC
  • 功能: DST <= DST - SRC

5、SBB

  • 格式:SBB    DST,SRC
  • 功能:DST <= DST - SRC - CF

6、DEC

  • 格式: DEC DST
  • 功能:DST <= DST - 1

7、NEG    

  • 格式:NEG REG
  • 功能:求补,即REG中的各位取反,然后 + 1。

8、CMP

  • 格式:CMP    DST,SRC
  • 功能:DST - REG 结果不保存,但是状态保存在PSW中。

9、MUL

  • 描述:无符号数乘法
  • 格式:MUL  SRC
  • 功能:①字节操作:(AX) <=(AL) * (SRC)

                 ②字操作:   (DX,AX) <= (AX) *(SRC)

                 ③双字操作:(EDX,EAX) <= (EAX) *(SRC)

10、IMUL

  • 描述:有符号数乘法
  • 格式:IMUL   SRC
  • 功能:DST <= DST * SRC

11、DIV

  • 描述:无符号数除法
  • 格式:DIV    SRC
  • 功能:①字节操作:(AH) <= (AX)/(SRC)的余数;(AL) <= (AX)/(SRC)的商

                 ②字操作:(DX) <= (DX,AX)/(SRC)的余数;(AX) <= (DX,AX)/(SRC)的商

                 ③双字操作:(EDX) <= (EDX,EAX)/(SRC)的余数;(EAX) <= (EDX,EAX)/(SRC)的商

12、IDIV

  • 描述:有符号数除法
  • 格式:IDIV    SRC
  • 功能:①字节操作:(AH) <= (AX)/(SRC)的余数;(AL) <= (AX)/(SRC)的商

                 ②字操作:(DX) <= (DX,AX)/(SRC)的余数;(AX) <= (DX,AX)/(SRC)的商

                 ③双字操作:(EDX) <= (EDX,EAX)/(SRC)的余数;(EAX) <= (EDX,EAX)/(SRC)的商

13、CBW

  • 格式:CBW
  • 功能:将AL保持原值(有符号数)扩展到AX。
  • 注意:此时是将AL的值看为有符号数,根据AL的最高位(符号位)来决定AH是00H还是FFH

14、CWD

  • 格式:CWD
  • 功能:将AX保持原值(有符号数)扩展到DX,AX。
  • 注意:此时是将AX的值看为有符号数,根据AX的最高位(符号位)来决定DX是0000H还是FFFFH

三、逻辑

1、AND

  • 描述:“与”逻辑运算
  • 格式:    AND    DST,SRC
  • 功能:   DST <= DST AND SRC  将DST和REG对应各位进行“与”运算后结果保留于DST

2、OR

  • 描述:“或”逻辑运算
  • 格式:    OR   DST,SRC
  • 功能:   DST <= DST OR SRC   将DST和REG对应各位进行“或”运算后结果保留于DST

3、NOT

  • 描述:“非”逻辑运算
  • 格式:  NOT    DST
  • 功能:   DST <= NOT DST    将DST各位"取反"结果保留于DST

4、XOR

  • 描述:“异或”逻辑运算
  • 格式:    XOR    DST,SRC
  • 功能:   DST <= DST XOR SRC    将DST和SRC对应各位进行“异或”运算后结果保留于DST

5、TEST

  • 描述:“与”逻辑运算,当只影响PSW,不保留运算结果。
  • 格式:    TEST    DST,SRC
  • 功能:   DST AND SRC   将DST和SRC对应各位进行“与”运算,结果状态影响PSW,但不该表DST,SRC的值。

6、SHL

  • 描述:逻辑左移
  • 格式:SHL   DST,1/CL
  • 功能:将DST顺序左移1位或CL寄存器中指定的位数。左移一位时,DST的最高位移入进位标志位CF,最低位补零。

7、SAL

  • 描述:算术左移
  • 格式:SAL   SRC,1/CL
  • 功能:将SRC顺序左移1位或CL寄存器中指定的位数。左移一位时,SRC的最高位移入进位标志位CF,最低位补零。

8、SHR

  • 描述:逻辑右移
  • 格式:SHR  SRC,1/CL
  • 功能:将SRC顺序右移1位或CL寄存器指定的位数。逻辑右移1位时,SRC的最低位移到进位标志位CF,最高位补零。

9、SAR

  • 描述:算术右移
  • 格式:SAR   SRC,1/CL
  • 功能:将SRC顺序右移1位或CL寄存器指定的位数。逻辑右移1位时,SRC的最低位移到进位标志位CF,最高位用原先最高位的值填充。

10、ROL

  • 描述:循环左移
  • 格式:ROL    SRC,1/CL
  • 功能:将SRC顺序左移1位或CL寄存器指定的位数。循环左移1位时,SRC的最高位移到最低位,并且最高位同时移入标志位CF。

11、ROR

  • 描述:循环右移
  • 格式:ROR    SRC,1/CL
  • 功能:将SRC顺序右移1位或CL寄存器指定的位数。循环左移1位时,SRC的最低位移到最高位,并且最低位同时移入标志位CF。

12、RCL

  • 描述:带进位循环左移
  • 格式:RCL    SRC,1/CL
  • 功能将SRC顺序左移1位或CL寄存器指定的位数。带进位循环左移1位时,原先状态位CF的值移入SRC的最低位,SRC的最高位移入状态位CF。

13、RCR

  • 描述:带进位循环右移
  • 格式:RCR    SRC,1/CL
  • 功能将SRC顺序右移1位或CL寄存器指定的位数。带进位循环右移1位时,原先状态位CF的值移入SRC的最高位,SRC的最低位移入状态位CF。

四、串指令

当方向标志位DF = 0时,DI,SI+;当DF = 1时,DI,SI-。

ES:DI    DS:SI

1、MOVS          

  • 格式:①MOVS    DST,SRC     ②MOVSB(字节)     ③MOVSW(字)     ④MOVSD(双字)
  • 功能:   ①字节操作: [ES:DI]<=[DS:SI]  ,SI<=SI +/- 1
                    ②字操作:     [ES:DI]<=[DS:SI]]  ,SI <= SI +/- 2

                    ③双字操作:  [ES:DI]<=[DS:SI] ,SI <= SI +/- 4

2、CMPS

  • 格式:①CMPSB(字节)    ②CMPSW(字)     ③CMPSD(双字)
  • 功能:  ①字节操作:  [DS:SI] - [ES:DI]  ,SI<=SI +/- 1

                    ②字操作:     [DS:SI] - [ES:DI]  ,SI <= SI +/- 2

                    ③双字操作:  [DS:SI] - [ES:DI] ,SI <= SI +/- 4

3、LODS

  • 格式:①LODSW(字)     ③LODSD(双字)
  • 功能: ①字节操作:AL <= [DS:SI]  ,SI<=SI +/- 1

                  ②字操作:    AX  <= [DS:SI]  ,SI <= SI +/- 2

                  ③双字操作:   EAX  <= [DS:SI]  ,SI <= SI +/- 4

4、STOS

  • 格式:①STOSB(字节)     ②STOSW(字)     ③STOSD(双字)
  • 功能: ①字节操作:[DS:SI] <= AL   ,SI<=SI +/- 1

                  ②字操作:    [DS:SI] <= AX  ,SI <= SI +/- 2

                  ③双字操作:  [DS:SI] <= EAX   ,SI <= SI +/- 4

5、SCAS

  • 格式:①SCASB(字节)     ②SCASW(字)     ③SCASD(双字)
  • 功能: ①字节操作: AL - [DS:SI]    ,SI<=SI +/- 1

                  ②字操作:     AX - [DS:SI]    ,SI <= SI +/- 2

                  ③双字操作:   EAX - [DS:SI]     ,SI <= SI +/- 4

6、REP

  • 格式:REP   string primitive(MOVS,LODS,STOS,INS和OUTS)
  • 功能①如果CX = 0退出,否则继续运行以下操作

                 ②CX <= CX - 1

                 ③执行以后串操作

                 ④重复 ①~③

7、REPE/REPZ

  • 格式:REPE/REPZ   string primitive(CMPS或SCAS)
  • 功能:①如果CX = 0 或 ZF = 0 退出,否则继续运行以下操作

                 ②CX <= CX - 1

                 ③执行以后串操作

                 ④重复 ①~③

8、REPNE/REPNZ

  • 格式:REPNE/REPNZ   string primitive(CMPS或SCAS)
  • 功能:①如果CX = 0 或 ZF = 1 退出,否则继续运行以下操作

                 ②CX <= CX - 1

                 ③执行以后串操作

                 ④重复 ①~③


五、无条件转移

1、JMP

  • 格式:JMP ADDRESS
  • 功能 无条件跳转到 ADDRESS

六、条件转移

1、根据PSW

1、JZ

  • 格式:JZ    EX
  • 功能:当ZF = 1时,跳转到EX

2、JNZ

  • 格式:JNZ    EX
  • 功能:当ZF = 0时,跳转到EX

3、JC

  • 格式:JC    EX
  • 功能:当CF = 1时,跳转到EX

4、JNC

  • 格式:JNC    EX
  • 功能:当CF = 0时,跳转到EX

5、JO

  • 格式:JO    EX
  • 功能:当OF = 1时,跳转到EX

6、JNO

  • 格式:JNO    EX
  • 功能:当OF = 0时,跳转到EX

7、JS

  • 格式:JS    EX
  • 功能:当SF = 1时,跳转到EX

8、JNS

  • 格式:JNS    EX
  • 功能:当SF = 0时,跳转到EX

2、比较两个无符号数后

#    N :不等于    A:大于    B : 小于    E :等于

3、比较两个有符号数后

#    N :不等于    G:大于    L : 小于    E :等于

4、JCXZ  

  • 格式: JCXZ EX
  • 功能:若 CX = 0,则跳转到EX

七、循环

  • LOOP
  • LOOPE/LOOPZ
  • LOOPNE/LOOPNZ

八、子程序

1、CALL

  • 格式:①CALL EX/NEAR    PTR    EX

                 ②CALL   FAR    PTR    EX 

  • 功能:①将IP进栈;将子程序的入口地址的位移量 =>IP
                 ②将CS入栈;将IP入栈;将子程序入口地址偏移量 =>IP;将子程序的段地址 =>CS

2、RET

  • 格式:RET (num)
  • 功能:①将栈顶元素出栈 => IP
                 ②将SP向高地址移动num位。

3、RETF

  • 格式:RETF (num)
  • 功能:①将栈顶元素出栈 => IP

                 ②将栈顶元素出栈 =>CS

                 ③将SP向高地址移动num位。

九、中断

  • INT XX
  • IRET

十、空操作

  • NOP

十一、标志

1、CLC

  • 格式:CLC
  • 功能:令CF=0

2、STC    

  • 格式:STC 
  • 功能:令CF=1

3、CMC 

  • 格式:CMC 
  • 功能:令CF取反。

4、CLD  

  • 格式:CLD 
  • 功能:令DF = 0

5、STD  

  • 格式:STD 
  • 功能:令DF = 1

6、CLI    

  • 格式:CLI
  • 功能:禁止发生中断

7、STI 

  • 格式:STI 
  • 功能: 允许发生中断





猜你喜欢

转载自blog.csdn.net/weixin_39793360/article/details/80697066