8086汇编语言基础学习(二)—— 汇编指令和伪指令

发布时间 2023-06-18 17:46:16作者: Wu_Ling

8086汇编语言基础学习(二)—— 汇编指令和伪指令

数据传输指令:

1. MOV 指令

  • 描述:赋值指令
  • 格式:MOV  DST,SRT
  • 功能:双操作数,将SRT 赋值给DST
  • 注意:
    • DST,SRT不能同时为mem,对于所有的双操作数皆是如此
    • 不允许对CS赋值
    • 其中一个是段寄存器时,另一个就必须是数据寄存器
    • 将立即数送入mem时,要指定操作数的类型,例 BYTE PRT,WORD PRT,DWORD PRT
    • 不影响PSW

2. PUSH 指令

  • 描述:进栈指令
  • 格式:PUSH  SRC
  • 功能:单操作数,将SRC压入堆栈
  • 注意:
    • 只能对“字”进行操作

3. POP 指令

  • 描述:出栈指令
  • 格式:POP  DST
  • 功能:单操作数,将栈顶元素弹出给DST

4. XCHG 指令

  • 描述:数据交换指令
  • 格式:XCHG  DST,SRT
  • 功能:双操作数,交换DST,SRT的值
  • 注意:
    • DST,SRT  不能均为mem

5. IN 指令

  • 描述:端口输入指令
  • 格式:IN  DST,SRT
  • 功能:双操作数,从端口SRT中读出一个字或字节到DST中

6. OUT 指令

  • 描述:端口输出指令
  • 格式:OUT  DST,SRT
  • 功能:双操作数,向端口DST输出DST中的数据

7. XLAT 指令

  • 描述:查表转换指令
  • 格式:XLAT
  • 功能:零操作数!将DS : [ BX+AL ] 为地址的一个字节的内容传给AL

8. LEA 指令

  • 描述:传输偏移地址指令
  • 格式:LEA  REG,MEM
  • 功能:双操作数,将MEM的偏移地址传给REG,这里的操作数类型是固定不变的!

9. LDS 指令

  • 描述:传送偏移地址及首地址指令
  • 格式:LDS  REG,MEM
  • 功能:双操作数,将MEM的偏移地址(低位)传给REG,并将MEM的段首地址(高位)传给DS

10. LES 指令

  • 描述:和LDS指令功能相似
  • 格式:LES  REG,MEM
  • 功能:双操作数,将MEM的偏移地址(低位)传给REG,并将MEM的段首地址(高位)传给ES

11. PUSHF 指令

  • 描述:标志寄存器进栈
  • 格式:PUSHF
  • 功能:零操作数,将PSW程序状态字压入堆栈

12. POPF 指令

  • 描述:标志寄存器出栈
  • 格式:POPF
  • 功能:零操作数,将栈顶元素弹出给FR

13. LAHF 指令

  • 描述:标志送AH,Load AH,FR
  • 格式:LAHF
  • 功能:零操作数,将FR的低八位赋值给AH

14. SAH 指令

  • 猫叔:AH送标志,SET  FR,AH
  • 格式:SAH
  • 功能:零操作数,将AH赋值给FR的低八位

算术运算指令:

1. INC 指令

  • 描述:自加1
  • 格式:INC  DST
  • 功能:单操作数,DST = DST + 1
  • 注意:影响ZF,PF,SF,OF,AF

2. ADD 指令

  • 描述:不带进位的加法
  • 格式:ADD  DST,SRC
  • 功能:双操作数,DST = DST + SRC
  • 注意:影响ZF,PF,SF,CF,OF,AF

3. ADC 指令

  • 描述:带进位的加法
  • 格式:ADC  DST,SRC
  • 功能:双操作数,DST = DST + SRC + CF
  • 注意:影响ZF,PF,SF,CF,OF,AF

4. DEC 指令

  • 描述:自减1
  • 格式:DEC  DST
  • 功能:单操作数,DST = DST - 1
  • 注意:影响ZF,PF,SF,OF,AF

5. SUB 指令

  • 描述 :不带借位的减法
  • 格式:SUB  DST,SRC
  • 功能:双操作数,DST = DST - SRC
  • 注意:影响ZF,PF,SF,CF,OF,AF

6. SBB 指令

  • 描述:带借位的减法
  • 格式:SBB  DST,SRC
  • 功能:双操作数,DST = DST - SRC - CF
  • 注意:影响ZF,PF,SF,CF,OF,AF

7. NEG 指令

  • 描述:求某个数的补码
  • 格式:NEG  DST
  • 功能:单操作数,将DST求补,各位数取反然后加一,也可以理解为零减去DST(不带借位)
  • 注意:影响ZF,PF,SF,CF,OF,AF

8. CMP 指令

  • 描述:比较两个数的大小
  • 格式:CMP  DST,SRC
  • 功能:双操作数,比较DST,SRC的大小,结果通过FR展示,实际上进行的是DST - SRC的操作,但是不保存结果
  • 注意:影响ZF,PF,SF,CF,OF,AF

9. MUL 指令

  • 描述:无符号数乘法
  • 格式:MUL  SRC
  • 功能:单操作数
    • 对字节操作:AX = ( AL ) * SRC
    • 对字操作:( DX,AX ) = AX * SRC
    • 对双字操作:( EDX,EAX ) = ( EDX ) * SRC
  • 注意:
    • 隐含了AX为一个默认的操作数
    • 若乘积的高半部分不为零时,则将CF,OF置为 ‘1’,否则置为 ‘0’ 。无符号数的乘法AF,PF,SF,ZF没有定义,因为没有符号

10. IMUL 指令

  • 描述:有符号数乘法
  • 格式:IMUL SRC
  • 功能:单操作数
    • 对字节操作:AX = ( AL ) * SRC
    • 对字操作:( DX,AX ) = AX * SRC
    • 对双字操作:( EDX,EAX ) = ( EDX ) * SRC
  • 注意:
    • 隐含了AX为一个默认的操作数
    • 若乘积的高半部分不为零时,则将CF,OF置为 ‘1’,否则置为 ‘0’ 。无符号数的乘法AF,PF,SF,ZF没有定义,因为没有符号

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作为操作数
    • 因为扩展的默认位有符号数,这里是将符号位向高半部扩展

14. CWD 指令

  • 描述:字扩展位双字,有符号扩展
  • 格式:CDW
  • 功能:零操作数,将AX的保持原值(有符号数)扩展到 ( DX,AX )
  • 注意:
    • 这里隐含的是将AX作为操作数
    • 因为扩展默认位有符号数,这里是将符号位向高半部扩展

逻辑运算指令