Home > Back-end >  Logical AND implementation in x86_64 Linux assembly
Logical AND implementation in x86_64 Linux assembly

Time:07-13

I'm trying to implement logical NOT and logical AND in assembly, I did logical NOT already using x < 1 but I can't think of how to implement AND, I can use binary and but that's broken for negative numbers (it assumes -1 is true) and it doesn't make any sense when NOT obviously works because -1 < 1 would return 1

So I'm confused, how could I do it, any known implementation which I could use? I can't find it, been looking for a while

CodePudding user response:

The standard solution is to implement a && b as

if (a)
    return (b);
else
    return (0);

i.e. use a conditional jump. On sufficiently new x86, you can also use a cmov instruction like this:

; assumes input in eax and ebx
mov ecx, eax    ; ecx = A
test ebx, ebx   ; B?
cmovnz ecx, ebx ; ecx = A ? B : A

CodePudding user response:

This is an answer without jumps: Assume you want to compute logical AND of RCX and RDX and store it in RAX and you may use RBX (note that called functions usually must preserve RBX!).

xorl            
  • Related