Assembly 实现汇编逻辑';不是';指示

Assembly 实现汇编逻辑';不是';指示,assembly,x86,bitwise-operators,logical-operators,Assembly,X86,Bitwise Operators,Logical Operators,所以我在汇编语言中遇到了一个问题。我需要一种方法,通过只使用“and”和“or”指令,从“not”指令中获得相同的期望结果。因此,如果我有: AL = 1011000 not AL = 0100111 但我只需要使用和/或指令就可以得到结果 我想我必须使用掩蔽位之类的东西,但到目前为止还没有运气。即使在正确的方向上轻轻推一下也会很感激 您可以在循环中完成(未经测试)。但这是对登记册的浪费 NotAL: mov bl, 1 mov bh, 0feh L3: test a

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

AL = 1011000

not AL = 0100111
但我只需要使用和/或指令就可以得到结果

我想我必须使用掩蔽位之类的东西,但到目前为止还没有运气。即使在正确的方向上轻轻推一下也会很感激

您可以在循环中完成(未经测试)。但这是对登记册的浪费

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
这很简单:

mov ah, 11111111b    ; this is your mask
mov al, 00010011b    ; anything you want the 'not' from
xor al, ah
就这样!甚至没有使用and运算符。

我不知道您使用的是什么汇编程序,但这与nasm一起工作。

仅使用AND和OR是不可能的。如果您愿意使用OP指定的“AND”和“OR”以外的指令,您可以使用“mov AH,0”、“sub AH,AL”、“DEC AH”。是的,这是正确的。这是一个使用2补码的非常简单的解决方案。非常聪明!OP明确表示,“仅使用AND和OR”操作。XOR不是其中之一。@IraBaxter我知道,但只使用AND和OR是不可能的。XOR至少类似于或;)