8086汇编基本指令

软件开发大郭
0 评论
/
24 阅读
/
12679 字
29 2022-09

一、数据传送

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 

功能: 允许发生中断



    暂无数据