【问题标题】:How to assign the value of a register to the CF?如何将寄存器的值分配给CF?
【发布时间】:2017-04-11 20:47:59
【问题描述】:

假设我需要保存和恢复 CF 中的值。

我知道一种技术是使用pushfpopf。但这对我来说太贵了,因为我需要 CF。

我正在尝试使用一个寄存器来执行此操作。为了节省,我使用了setc %r12b。但是,我不知道如何检索这个值,即如何做类似 mov %r12b CF?

非常感谢!

【问题讨论】:

  • shr %r12b 怎么样。
  • 谢谢!!这会影响其他寄存器吗?还是只有CF?
  • 是的,确实如此。请参阅指令集参考。
  • 为什么不选择 lahf 和 sahf? ypu 说的贵是什么意思?
  • lahf 不一定在 64 位模式下可用,除非您将其作为扩展名(请参阅cpuid)。

标签: assembly x86-64 cpu-registers carryflag


【解决方案1】:

正如@Jester 所说,您可以使用shr %r12b,因为

对于每个移位计数,目标的最低有效位 操作数移入 CF 标志位,最高有效位为 根据指令类型设置或清除。

http://felixcloutier.com/x86/SAL:SAR:SHL:SHR.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    • 1970-01-01
    • 1970-01-01
    • 2019-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多