实现程序集逻辑'not'指令

时间:2012-11-28 03:04:01

标签: assembly x86 bitwise-operators logical-operators

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

AL = 1011000

not AL = 0100111

但我只需要和/或说明就需要这个结果。

我认为我必须使用屏蔽位等,但迄今为止没有运气。即使在正确的方向上稍微推动也会受到赞赏!

2 个答案:

答案 0 :(得分:2)

这很简单:

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

就是这样!甚至没有使用和操作员。
我不知道你正在使用什么汇编程序,但这与nasm一起工作。

答案 1 :(得分: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