I have this Asm from a book that suppose to do a Boolean cast:
rax := rax ? 1 : 0
1. neg rax 2. sbb rax,rax 3. neg rax
But as i understand this code and the instructions (below), this would work only if the register will have 0 in it.
because lets assume that (register have some positive number in it):
rax = 9 ;initial register rax = -9 ;after line 1 rax = -17 ;after line 2 rax = 17 ;after line 3
register have 0 in it:
rax = 0 ;initial register rax = 0 ;after line 1 rax = 0 ;after line 2 rax = 0 ;after line 3
I think that the author meant to do
add in line 2 instead of
sbb am i correct?
Instruction explanations: neg instruction:
neg Destination ;Destination = -Destination if(Destination == 0) CF = 0; else CF = 1;
sbb Destination, Source ;Destination = Destination - (Source + CF);