Binary Arithmetic Instructions
二进制算术指令执行基本的二进制整型计算,操作数可以是字节,单字和双字整型数,位于存储器中,和/或通用寄存器中。
指令 | 描述 |
ADCX | 带进位的无符号整数加法 |
ADOX | 带溢出位的无符号整数加法 Intel C/C++ Compiler Intrinsic Equivalent unsigned char _addcarryx_u64 (unsigned char c_in, unsigned __int64 src1, unsigned __int64 src2, unsigned __int64 *sum_out); |
ADD | 整数加法 |
ADC | 带进位的整数加法 |
SUB | 减法 |
SBB | 带借位的整数减法 |
IMUL | 有符号整数乘法 |
MUL | 无符号整数乘法 |
IDIV | 有符号整数除法 |
DIV | 无符号整数除法 |
INC | 加1操作 |
DEC | 减1操作 |
NEG | 取反操作 |
CMP | 比较操作 |
Decimal Arithmetic Instructions
十进制算术指令执行十进制整型数算术计算,操作数是BCD码。
简单的说,BCD码有两种类型:组合的BCD码,与未组合的BCD码。
组合的BCD码是指将两个十进制数字(即0~9)存放在一个字节中,每个数字占4个比特位。例如两位十进制数12D的组合BCD码表示为0001 0010(参看下图左侧)。
未组合的BCD码是指将单个十进制数字(即0~9)存放在单个字节中,即每个数字占一个字节,该字节的高4比特位是0000,低4比特位是十进制数字0~9。例如上述的两位十进制数12D的未组合BCD码表示为0000.0001-0000.0010(忽略点号.,这里仅用于分隔二进制比特位,方便阅读) ,低字节表示低位数字,高字节表示高位数字。
由于处理器是按照二进制执行算术运算,所以这两种BCD码在执行计算后,需要运行调整指令,将计算结果调整为十进制BCD码表示。
指令 | 描述 |
DAA | 组合的BCD码,加法计算后,调整结果到组合的BCD码 |
DAS | 组合的BCD码,减法计算后,调整结果到组合的BCD码 |
AAA | 未组合的BCD码,做加法计算后,调整结果到未组合的BCD码 |
AAS | 未组合的BCD码,做减法计算后,调整结果到未组合的BCD码 |
AAM | 未组合的BCD码,做乘法计算后,调整结果到一对未组合的BCD码 |
AAD | 调整两个未组合的BCD数字(最低有效数字在AL寄存器中,最高有效数字在AH寄存器中),在调整后的结果上做除法,可以得到正确的未组合的BCD值。 |
注:AAD指令在执行除法操作前执行调整操作数。其他指令DAA/DAS/AAA/AAS/AAM都是在算术操作之后调整计算结果。