一、数据传送指令
1、语句格式:MOV OPD.OPS
2、功能:将源操作数传入目的地址,源地址内容不变
3、注意
①MOV指令不改变源操作数的内容,不影响标志位。
②源操作数和目的操作数应该有相同的类型,即必须同字节型或者同字型
③代码段寄存器CS不能作目的操作数,即不允许给CS赋值
④立即数不能用作目的操作数,也不能直接传送给段寄存器
⑤源操作数和目的操作数不能同时为存储单元操作数(例如BUF)
⑥不允许在段寄存器之间(DS, ES 等直接传送数据)
二、进栈指令
1、语句格式
PUSH SRC
2、功能:将寄存器、段寄存器或存储器中的一个字数据压入堆栈,堆栈指针减2.
三、出栈指令
1、语句格式
POP OPD
2、功能 :将栈顶元素弹出送至某一寄存器、段寄存器(CS除外)或存储器,堆栈指针加2
四、数据交换指令
1、语句格式
XCHG OPR1, OPR2
2、功能:将源地址与目的地址中的内容呼唤
五、累加器专用传送指令:IN / OUT
1、语句格式
IN acc, PORT/DX
OUT PORT/DX, acc
2、功能:实现 I /O端口与CPU之间的数据传送
3、注意事项
①只能用累加器AL或者AX接受、发送指令
②使用短格式指令,必须将端口地址放入寄存器DX中
③不影响标志位
六、地址传送指令
1、有效地址传送指令 LEA
2、指针送寄存器和DS指令 LDS
3、指令送寄存器和附加数据段ES指令 LES
七、算术运算指令
1、加法指令
(1)加法指令 ADD
格式 : ADD DST, SRC
功能 :把源操作数的值加到目的操作数中。
根据相加的结果设置FLAGS的OF, SF, ZF, AF, PF 和 CF 标志位
(2)带进位加指令ADC
格式 : ADC DST, SRC
功能:把源操作数和进位标志位CF的值( 0/ 1)一起加到目的操作数中。
(3)加I指令 INC
格式: INC OPR
功能:把操作数的值加1, (不影响CF)
(4)交换加指令 XADD
格式:XADD oprd1, oprd2
功能:先交换两个操作数的值,再进行算术加运算
2、减法指令
(1)减法指令SDB
格式:SUB DST, SRC
功能:从目的操作数中减去源操作数
(2)带借位减 SBB
格式: SBB DSI, SRC
功能:把源操作数和标志位CF的值从目的操作数中减去
(3)减1指令DEC
格式:DEC OPR
功能:把操作数的值减去1(不影响CF)
(4)求补指令NEG
格式: NEG OPR
功能:操作数=0➖操作数
(5)比较指令CMP
格式:CMP OPD, OPS
功能:目的操作数减去源操作数,与SUB指令一样执行减法操作,但结果只影响标志位
3、乘法指令
(1)无符号数的乘法指令 MUL
格式:MUL SRC
SRC为源操作数(乘数),可以是寄存器或存储单元,但是不能使用立即数或段寄存器
功能:两个无符号数相乘
字节乘法:AL * SRC 得AX
字乘法: AX * SRC 得 AX(低字),DX(高字)
(2)有符号数的乘法指令 I MUL
格式: IMUL SRC
4、除法指令
(1)无符号数除指令 DIV
格式:DIV OPS
功能:字节除法 AX / OPS 得 AL(商)、AH(余数)
字除法 (DX、AX)/ (OPS) 得AX(商)、DX(余数)
(2)有符号除指令 IDIV
格式:IDIV OPS
功能:同DIV
8086、8088规定IDIV指令运算结果余数得符号与被除数相同
除法指令可能产生溢出