【问题标题】:Complementing bits in a register in Assembly Language用汇编语言对寄存器中的位进行补码
【发布时间】:2012-04-25 05:03:40
【问题描述】:

如何补充寄存器中的单个或多个位?

【问题讨论】:

  • 哪种汇编语言?你试过什么?
  • x86。我曾尝试使用 NEG,但似乎无法正常工作。
  • 想想你将如何在 C 中做这件事。然后在汇编中做同样的事情。您将需要创建一个面具。
  • XOR 将是一个很好的使用说明。
  • 我对这一切都很陌生,所以请原谅我在这一切中磕磕绊绊。例如,如果我想对 RAX 寄存器中的第 0 位和第 1 位进行补码,会不会是 RAX, 0xffffffc?

标签: assembly x86-64 bit cpu-registers complement


【解决方案1】:

XOR 将是一个很好的用于翻转单个位的指令。

【讨论】:

    【解决方案2】:

    例如,您可以分别使用 XOR 和 NOT 指令。

    你的号码是1111,像0110这样需要0位和3位的补码,所以:

    mov al, 1111
    xor al, 0110
    not al
    int 3
    

    这应该将 1111 的所有寄存器更改为 0110

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-16
      • 1970-01-01
      • 1970-01-01
      • 2020-06-07
      • 2014-12-15
      • 2012-01-19
      相关资源
      最近更新 更多