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