Assembly 实现汇编逻辑';不是';指示
所以我在汇编语言中遇到了一个问题。我需要一种方法,通过只使用“and”和“or”指令,从“not”指令中获得相同的期望结果。因此,如果我有: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
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至少类似于或;)