【问题标题】:Implementing assembly logical 'not' instruction实现汇编逻辑“非”指令
【发布时间】:2012-11-28 03:04:01
【问题描述】:

所以我遇到了汇编语言的问题。我需要一种方法,仅使用“and”和“or”指令从“not”指令中获得相同的预期结果。所以如果我有:

AL = 1011000

not AL = 0100111

但我需要仅使用和/或指令的结果。

我认为我必须使用屏蔽位等,但到目前为止还没有运气。即使是朝着正确的方向轻轻一点也将不胜感激!

【问题讨论】:

  • 只有 AND 和 OR 是不可能的。

标签: assembly x86 bitwise-operators logical-operators


【解决方案1】:

这很简单:

mov ah, 11111111b    ; this is your mask
mov al, 00010011b    ; anything you want the 'not' from
xor al, ah

就是这样!甚至没有使用 and 运算符。
我不知道您使用的是什么汇编程序,但这适用于 nasm。

【讨论】:

  • OP 明确表示,“只使用 AND 和 OR”操作。 XOR 不是其中之一。
  • @IraBaxter 我知道,但只有 AND 和 OR 是不可能的。 XOR 至少类似于 OR ;)
【解决方案2】:

您可以循环执行(未经测试)。但它浪费了寄存器。

NotAL:
    mov bl, 1
    mov bh, 0feh
L3:
    test al, bl
    jne L1
    or al, bl
    jmp L2
L1:
    and al, bh
L2:
    shl bl, 1
    rol bh, 1
    test bl, bl
    jne L3

    ret

【讨论】:

  • 如果您愿意使用“AND”和“OR”以外的指令作为 OP 指定,您可以只使用“mov AH,0”、“sub AH, AL”、“DEC AH” .
  • 是的,没错。这是使用 2 补码的非常简单的解决方案。非常聪明!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-21
  • 1970-01-01
  • 2013-02-25
  • 2020-07-18
相关资源
最近更新 更多