Intel 64/x86_64/IA-32/x86处理器 - 通用指令(2) - 二进制算术指令/十进制算术指令

Binary Arithmetic Instructions

二进制算术指令执行基本的二进制整型计算,操作数可以是字节,单字和双字整型数,位于存储器中,和/或通用寄存器中。

指令

描述

ADCX

带进位的无符号整数加法

ADOX

带溢出位的无符号整数加法

Intel C/C++ Compiler Intrinsic Equivalent
unsigned char _addcarryx_u32 (unsigned char c_in, unsigned int src1, unsigned int src2, unsigned int *sum_out);
 

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都是在算术操作之后调整计算结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值