在16位的处理器上,做加法的指令是add,但它每次只能做8位或16位的加法。
除此之外,还有一个带进位加法指令adc(Add With Carry),它的指令格式和add一样,目的操作数可以是8位或16位的通用寄存器和内存单元,源操作数可以是与目的操作数宽度一致的通用寄存器、内存单元和立即数(但目的操作数和源操作数同为内存单元的除外)。
不过,adc指令在执行的时候,除了将目的操作数和源操作数相加,还要加上当前标志寄存器的CF位。也就是说,视CF位的状态,还要再加0或者加1。这样一来,用adc指令配合add指令,就可以计算16位以上的加法。
adc指令对OF、SF、ZF、AF、CF和PF的影响视计算结果而定。
1+2+…+1000的结果是500500, 二进制的话是一个19位的数字, 如果用普通add则会溢出, 高位被舍弃, 从而出错. 所以就用到了带进位的加法指令adc.
adc oprd1,oprd2
上面这句含义是:oprd1 = oprd1 + oprd2 + CF.
这样就可以把会溢出的部分(高16位)放到另一个寄存器中, 像这样:
add ax,cx
adc dx,0
这样ax + cx产生的进位就会加到dx中.
完整代