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