SBB指令说明

逆向工程 部件
2021-06-12 22:03:05

我从一本书中得到了这个 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);
1个回答

SBB:

目的地 = 目的地 -(来源 + CF);

-9 - ( -9 + 1 ) = -9 - ( -8 ) = -9 + 8 = -1, not -17