汇编指令

数据传送指令 

1、传送指令 MOV(Move Instruction)  

MOV Reg/Mem, Reg/Mem/Imm

对MOV指令有以下几条具体规定:
(1)两个操作数的数据类型要相同,要同为8位、16位或32位;如:MOV  BL, AX等是不正确的; 
(2)两个操作数不能同时为段寄存器,如:MOV  ES, DS等; 
(3)代码段寄存器CS不能为目的操作数,但可作为源操作数,如:指令MOV  CS, AX等不正确,但指令MOV  AX, CS等是正确的;
(4)立即数不能直接传给段寄存器,如:MOV  DS, 100H等; 
(5)立即数不能作为目的操作数,如:MOV  100H, AX等; 
(6)指令指针IP,不能作为MOV指令的操作数; 
(7)两个操作数不能同时为存储单元,如:MOV  VARA, VARB等,其中VARA和VARB是同数据类型的内存变量。 

2、传送—填充指令(Move-and-Fill Instruction)  

MOVSX/MOVZX Reg/Mem, Reg/Mem/Imm

(1)符号填充指令 MOVSX(Move with Sign-Extend)

MOVSX的填充方式是:用源操作数的符号位来填充目的操作数的高位数据位。

(2)零填充指令 MOVZX(Move with Zero-Extend)

MOVZX的填充方式是:恒用0来填充目的操作数的高位数据位。

3、交换指令XCHG(Exchange Instruction)  

XCHG  Reg/Mem, Reg/Mem

交换指令XCHG是两个寄存器,寄存器和内存变量之间内容的交换指令

4、取有效地址指令LEA(Load Effective Address)  

LEA Reg, Mem

该指令通常用来对指针或变址寄存器BX、DI或SI等置初值之用。

5、取段寄存器指令(Load Segment Instruction)  

LDS/LES/LFS/LGS/LSS Reg, Mem

该组指令的功能是把内存单元的一个“低字”传送给指令中指定的16位寄存器,把随后的一个“高字”传给相应的段寄存器(DS、ES、FS、GS和SS)。
若Reg是16位寄存器,那么,Men必须是32位指针;若Reg是32位寄存器,那么,Men必须是48位指针,其低32位给指令中指定的寄存器,高16位给指令中的段寄存器。

6、堆栈操作指令(Stack Operation Instruction)

(1)进栈操作

PUSH (Push Word or Doubleword onto Stack)
PUSHA (Push All General Registers)
PUSHAD (Push All 32-bit General Registers)

(2)出栈操作

POP (Pop Word or Doubleword off Stack)
POPA (Pop All General Registers)
POPAD (Pop All 32-bit General Registers)

7、转换指令XLAT(Translate Instruction) 

转换指令有两个隐含操作数BX和AL。指令格式如下:
XLAT/XLATB
其功能是把BX的值作为内存字节数组首地址、下标为AL的数组元素的值传送给AL。其功能描述的表达式是:AL←BX[AL]

标志位操作指令 

1、进位CF操作指令

(1)清进位指令CLC(Clear Carry Flag):CF←0
(2)置进位指令STC(Set Carry Flag):CF←1
(3)进位取反指令CMC(Complement Carry Flag):CF←not CF

2、方向位DF操作指令

(1)清方向位指令CLD(Clear Direction Flag):DF←0
(2)置方向位指令STD(Set Direction Flag):DF←1

3、中断允许位IF操作指令

(1)清中断允许位指令CLI(Clear Interrupt Flag):IF←0
其功能是不允许可屏蔽的外部中断来中断其后程序段的执行。
(2)置中断允许位指令STI(Set Interrupt Flag):IF←1
其功能是恢复可屏蔽的外部中断的中断响应功能,通常是与CLI成对使用的。

4、取标志位操作指令

(1)LAHF(Load AH from Flags):AH←Flags的低8位
(2)SAHF(Store AH in Flags):Flags的低8位←AH

5、标志位堆栈操作指令

(1)PUSHF/PUSHFD(Push Flags onto Stack):把16位/32位标志寄存器进栈;
(2)POPF/POPFD(Pop Flags off Stack):把16位/32位标志寄存器出栈;

算术运算指令 

1、加法指令

(1)加法指令ADD(ADD Binary Numbers Instruction)

指令的格式:ADD  Reg/Mem, Reg/Mem/Imm
受影响的标志位:AF、CF、OF、PF、SF和ZF
指令的功能是把源操作数的值加到目的操作数中。

(2)带进位加指令ADC(ADD With Carry Instruction)

指令的格式:ADC  Reg/Mem, Reg/Mem/Imm
受影响的标志位:AF、CF、OF、PF、SF和ZF
指令的功能是把源操作数和进位标志位CF的值(0/1)一起加到目的操作数中。

(3)加1指令INC(Increment by 1 Instruction)

指令的格式:INC  Reg/Mem
受影响的标志位:AF、OF、PF、SF和ZF,不影响CF
指令的功能是把操作数的值加1。

(4)交换加指令XADD(Exchange and Add)

指令的格式:XADD  Reg/Mem, Reg      ;80486+
受影响的标志位:AF、CF、OF、PF、SF和ZF
指令的功能是先交换两个操作数的值,再进行算术“加”法操作。

2、减法指令

(1)减法指令SUB(Subtract Binary Values Instruction)

指令的格式:SUB  Reg/Mem, Reg/Mem/Imm
受影响的标志位:AF、CF、OF、PF、SF和ZF
指令的功能是从目的操作数中减去源操作数。

(2)带借位减SBB(Subtract with Borrow Instruction)

指令的格式:SBB  Reg/Mem, Reg/Mem/Imm
受影响的标志位:AF、CF、OF、PF、SF和ZF
指令的功能是把源操作数和标志位CF的值从目的操作数中一起减去。

(3)减1指令DEC(Decrement by 1 Instruction)

指令的格式:DEC  Reg/Mem
受影响的标志位:AF、OF、PF、SF和ZF,不影响CF
指令的功能是把操作数的值减去1。

(4)求补指令NEG(Negate Instruction)

指令的格式:NEG  Reg/Mem
受影响的标志位:AF、CF、OF、PF、SF和ZF
指令的功能:操作数=0-操作数,即改变操作数的正负号。

3、乘法指令

计算机的乘法指令分为无符号乘法指令和有符号乘法指令,它们的唯一区别就在于:数据的最高位是作为“数值”参与运算,还是作为“符号位”参与运算。
乘法指令的被乘数都是隐含操作数,乘数在指令中显式地写出来。CPU会根据乘数是8位、16位

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值