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 