我从一本书中得到了这个 Asm,它假设做一个布尔型转换: rax := rax ? 1 : 0
1. neg rax
2. sbb rax,rax
3. neg rax
但据我了解这段代码和说明(如下),只有当寄存器中有 0 时,这才有效。
因为让我们假设(寄存器中有一些正数):
rax = 9 ;initial register
rax = -9 ;after line 1
rax = -17 ;after line 2
rax = 17 ;after line 3
寄存器中有 0:
rax = 0 ;initial register
rax = 0 ;after line 1
rax = 0 ;after line 2
rax = 0 ;after line 3
我认为作者的意思是add
在第 2 行而不是sbb
我正确吗?
指令说明:neg 指令:
neg Destination ;Destination = -Destination if(Destination == 0) CF = 0; else CF = 1;
sbb指令:
sbb Destination, Source ;Destination = Destination - (Source + CF);