匯編set語句:
實現無分支比較, 不斷流水線
39383E46 |. 83F9 09 cmp ecx,0x9 39383E49 |. 0F97C0 seta al
cmp 比較兩個操作數,結果保存在FLAG寄存器中(同sub運算,不同在於不影響操作數, 只影響flag寄存器)
seta 的 a 表示無符號數的 above 大於,即 (和條件跳轉語句同理)
如果 ecx > 9 ,則把al寄存器的值置1
否則置0
cmp $eax,%edx setb $cl
cmp 比較兩個操作數,結果保存在FLAG寄存器中
setb 的 b 表示無符號數的 below 小於,即 (和條件跳轉語句同理)
如果 %eax < %edx ,則把cl寄存器的值置1
否則置0
Ps:是值置1,而不是寄存器的某一位
當然 %eax < %edx 是從我們人的角度來看的
對計算機而言,要看 FLAG 寄存器的標志位
無符號,小於,則看CF足矣
如果CF=1 且 ZF=0 則不夠減,則小於,則寄存器 cl 置1
如果CF=0 且 ZF=0 則夠減,則不是小於,則寄存器 cl 置0