所以我遇到了汇编语言的问题。我需要一种方法,仅使用“and”和“or”指令从“not”指令中获得相同的预期结果。所以如果我有:
AL = 1011000
not AL = 0100111
但我只需要使用和/或指令的结果。
我想我必须使用屏蔽位等,但到目前为止还没有运气。即使是在正确的方向上轻轻一点也将不胜感激!
所以我遇到了汇编语言的问题。我需要一种方法,仅使用“and”和“or”指令从“not”指令中获得相同的预期结果。所以如果我有:
AL = 1011000
not AL = 0100111
但我只需要使用和/或指令的结果。
我想我必须使用屏蔽位等,但到目前为止还没有运气。即使是在正确的方向上轻轻一点也将不胜感激!
这很容易:
mov ah, 11111111b ; this is your mask
mov al, 00010011b ; anything you want the 'not' from
xor al, ah
而已!甚至没有使用 and 运算符。
我不知道您使用的是什么汇编程序,但这适用于 nasm。
您可以循环执行(未经测试)。但它浪费寄存器。
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