第45部分-Linux x86 64位汇编 BCD
二进制编码的十进制(BCD, Binary Coded Decimal), 用于简化对使用十进制数字的设备。
每个BCD值都是一个无符号8位整数,值的范围是0到9.
在BCD中,大于9的8位值被认为是非法的。8位有些浪费,出现了打包的BCD,使用4位表示一个值。
二进制编码的十进制(BCD,Binary Coded Decimal)格式是用于处理人可读的数字常见方法,处理器中可以快速处理这种格式。
很多高级的BCD处理操作位于FPU中,但是处理器会包含一些简化的指令。我们来看下基本的BCD运算指令。
不打包BCD运算
不打包的BCD值:是一个字节中包含单个十进制位(0到9).
应用程序要对不打包的BCD值执行数学操作时,应用程序假设结果也应该按照不打包BCD格式存储。
X86处理器提供了专门的指令用于从一般数学操作生成不打包BCD值。
把二进制运算结果转换为不打包BCD格式的指令有4条:
AAA:调整加法操作的结果
AAS:调整减法操作的结果
AAM:调整乘法操作的结果
AAD:准备除法操作的被除数
这些指令必须和一般无符号整数指令ADD,ADC,SUB,MUL和DIV组合一起使用。
AAA,AAS,AAM指令在各自的操作之后,把二进制结果转换为不打包BCD格式,AAD指令有些不同,在DIV指令之前使用它,用于准备被除数以便生成不打包BCD结果。
这个指令都使用一个隐含的操作数——AL寄存器。AAA,AAS,AAM指令假设前一个操作的结果存放在AL寄存器,并且把这个值转换为不打包BCD格式。
不过,坏消息是由于这些指令不是经常使用,所以在64位处理器中已经不支持了。
`aaa' is not supported in 64-bit mode
打包BCD运算
打包BCD是一个字节中包含两个十进制数字。
在64位处理器中叶已经不支持了。