第45部分-Linux x86 64位汇编 BCD

第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位处理器中叶已经不支持了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值