所以我遇到了汇编语言的问题。我需要一种方法,通过仅使用'和'和'或'指令来从'not'指令获得相同的期望结果。所以,如果我有:执行汇编逻辑'not'指令
AL = 1011000
not AL = 0100111
但我只需要使用结果和/或说明。
我假设我必须使用屏蔽位等,但迄今为止还没有运气。即使在正确的方向稍微推动,将不胜感激!
所以我遇到了汇编语言的问题。我需要一种方法,通过仅使用'和'和'或'指令来从'not'指令获得相同的期望结果。所以,如果我有:执行汇编逻辑'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
如果您愿意使用“AND”和“OR”以外的指令作为OP指定,则可以使用“mov AH,0”,“sub AH,AL”,“DEC AH”。 –
是的,这是正确的。这是一个使用2补码的非常简单的解决方案。非常聪明! –
这很简单:
mov ah, 11111111b ; this is your mask
mov al, 00010011b ; anything you want the 'not' from
xor al, ah
这就是它!甚至没有使用过和运算符。
我不知道你在用什么汇编语言,但是这个和nasm一起工作。
OP明确表示“只使用AND和OR”操作。 XOR不是其中之一。 –
@IraBaxter我知道,但只有AND和OR是不可能的。 XOR至少类似于OR;) – qwertz
只有AND和OR是不可能的。 – Brendan