数据传送指令
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位