2012-11-28 4 views
0

어셈블리 언어에서 문제가 발생했습니다. 나는 'and'와 'or'명령어만을 사용하여 '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

"OP"로 "AND"와 "OR"이외의 명령어를 사용하고자한다면 "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