何时使用 ADOX 而不是 ADCX?
Posted
技术标签:
【中文标题】何时使用 ADOX 而不是 ADCX?【英文标题】:When to use ADOX instead of ADCX? 【发布时间】:2017-07-11 11:33:30 【问题描述】:Intel instruction set reference 中提到的唯一区别是使用溢出标志而不是进位标志。什么时候使用ADOX
而不是ADCX
来执行带进位的无符号加法?
【问题讨论】:
通常你应该使用adc
,因为它更小(指令字节更少),并且写入所有标志(避免对所有 CPU 上的后续指令进行任何部分标志合并惩罚)。如果您特别想要他们的行为,请仅使用 adcx
或 adox
。
【参考方案1】:
当您不想覆盖进位标志时,可以使用 ADOX,就像您已经存储了旋转输出之类的东西。
但是它们的主要用途是加速 big-int 算术,因为现在您可以结合 mulx
并行进位进行两次加法
来自英特尔的论文New Instructions Support Large Integer Arithmetic
ADCX/ADOX 指令
adcx
和adox
指令是adc
指令的扩展,旨在支持两个独立的进位链。它们被定义为:adcx dest/src1, src2 adox dest/src1, src2
两条指令都计算
src1
和src2
的总和加上一个进位,并生成一个输出总和 dest 和一个进位。这两条指令的区别在于adcx
使用 CF 标志进行进位和执行(保持 OF 标志不变),而adox
指令使用 OF 标志进行进位和执行(保留CF 标志不变)。
相关:
What is the difference between the ADC and ADCX instructions on ia32/ia64?
【讨论】:
以上是关于何时使用 ADOX 而不是 ADCX?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 C# ADOX 访问 Access 数据库表的属性?
C# 使用 DAO 或 ADOX 压缩和修复 .accdb 文件