2012-11-28 122 views
0

所以我遇到了汇编语言的问题。我需要一种方法,通过仅使用'和'和'或'指令来从'not'指令获得相同的期望结果。所以,如果我有:执行汇编逻辑'not'指令

AL = 1011000 

not AL = 0100111 

但我只需要使用结果和/或说明。

我假设我必须使用屏蔽位等,但迄今为止还没有运气。即使在正确的方向稍微推动,将不胜感激!

+5

只有AND和OR是不可能的。 – Brendan

回答

0

你可以在一个循环中做(未经测试)。但它浪费了登记册。

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 
+2

如果您愿意使用“AND”和“OR”以外的指令作为OP指定,则可以使用“mov AH,0”,“sub AH,AL”,“DEC AH”。 –

+0

是的,这是正确的。这是一个使用2补码的非常简单的解决方案。非常聪明! –

2

这很简单:

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

这就是它!甚至没有使用过和运算符。
我不知道你在用什么汇编语言,但是这个和nasm一起工作。

+0

OP明确表示“只使用AND和OR”操作。 XOR不是其中之一。 –

+0

@IraBaxter我知道,但只有AND和OR是不可能的。 XOR至少类似于OR;) – qwertz