8086指令系统之算数运算指令
- 算数运算类指令
- 加法运算指令
- 普通加法指令ADD
- 格式
- 操作
- 带进位位的加法指令ADC
- 格式
- 操作
- 加1指令INC
- 格式
- 操作
- 减法运算指令
- 不考虑借位的减法指令SUB
- 格式
- 操作
- 考虑借位的减法指令SBB
- 格式
- 操作
- 减1指令DEC
- 格式
- 操作
- 求补指令NEG
- 格式
- 操作
- 比较指令CMP
- 格式
- 操作
- 乘法指令
- 无符号的乘法指令MUL
- 格式
- 操作
- 带符号的乘法指令IMUL
- 除法指令
- 无符号除法指令
- 格式:
- 有符号除法指令
- 格式
算数运算类指令
算术运算指令的执行大多对状态标志位会产生影响
加法运算指令
- 加法指令对操作数的要求与MOV指令相同
- 段寄存器不能作为加法指令的操作数
普通加法指令ADD
格式
ADD OPRD1,OPRD2
操作
OPRD1+OPRD2并把结果赋给OPRD1
ADD指令的执行对全部6个状态标志位都产生影响
带进位位的加法指令ADC
格式
ADC OPRD1,OPRD2
操作
OPRD1+OPRD2+CF并把结果赋给OPRD1
ADC指令多用于多字节数相加,使用前要先将CF清零。
加1指令INC
格式
INC OPRD
操作
OPRD+1并把结果赋给OPRD
INC指令不影响CF标志位,只影响AF、OF、PF、SF、ZF标志位
常用于在程序中修改地址指针及循环次数等
减法运算指令
减法指令对操作数的要求与对应的加法指令相同
不考虑借位的减法指令SUB
格式
SUB OPRD1,OPRD2
操作
OPRD1- OPRD2并把结果赋给OPRD1
对标志位的影响与ADD指令相同
考虑借位的减法指令SBB
指令格式、对操作数的要求、对标志位的影响与SUB指令完全一样
格式
SUBB OPRD1,OPRD2
操作
OPRD1- OPRD2- CF并把结果赋给OPRD1
SBB指令多用于多字节减法运算,使用前要先将CF清零。
减1指令DEC
格式
DEC OPRD
操作
OPRD - 1并把结果赋给OPRD
指令对操作数的要求与INC相同
指令常用于在程序中修改循环次数
求补指令NEG
利用该指令可以得到负数的绝对值。即求此操作数的相反数的补码。
之所以把NEG指令称为求补指令,是因为对一个负数求补码就相当于用0减去此数。
格式
NEG OPRD
操作
0 - OPRD并把值赋给OPRD
执行NEG指令后,一般情况下都会使CF为1。因为用0减去某个操作数,自然会产生借位,而减法的CF值正是反映无符号数运算中的借位情况。除非给定的操作数为0才会使CF为0。指令对操作数的要求及对标志位的影响与SUB指令相同。
当指定的操作数的值为80H(-128)或为8000H(-32768),则执行NEG指令后结果不变,即仍为80H或8000H,但OF置1,其他情况下OF均置0。
比较指令CMP
该指令用于比较两个数的大小,可作为条件转移指令转移的条件
指令对操作数的要求及对标志位的影响与SUB指令相同
格式
CMP OPRD1,OPRD2
操作
OPRD1- OPRD2
指令执行的结果不影响目标操作数,仅影响6个标志位
乘法指令
乘法指令采用隐含寻址,隐含的是存放被乘数的累加器AL或AX及存放结果的AX,DX
需要注意的是:
- 源操作数由指令给出。
- 两操作数字长相等,且不能为立即数。
无符号的乘法指令MUL
对无符号数乘法,如果乘积的高半部分(字节相乘时为AH,字相乘时为DX)不为0,则CF=OF=1,代表AH或DX中包含乘积的有效数字;否则CF=OF=0
格式
MUL OPRD
操作
- OPRD为字节数——AL×OPRD并把结果赋给AX
- OPRD为16位数——AX×OPRD并把结果赋给DXAX
带符号的乘法指令IMUL
对有符号数乘法,若乘积的高半部分是低半部分的符号位的扩展,则CF=OF=0;否则CF=OF=1。对其他标志位均无定义。
除法指令
指令要求被除数是除数的双倍字长
无符号除法指令
格式:
DIV OPRD
有符号除法指令
格式
IDIV OPRD