2012-11-28 157 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