將 Carry 標誌移動到暫存器中
背景
如果 Carry(C
)標誌包含你想要放入暫存器的值,那麼天真的方法是執行以下操作:
mov al, 1
jc NotZero
mov al, 0
NotZero:
用’sbb'
避免跳躍的更直接的方法是使用借用減法:
sbb al,al ; Move Carry to al
如果 C
為零,那麼 al
將為零。否則它將是 0xFF
(-1
)。如果你需要它是 0x01
,請新增:
and al, 0x01 ; Mask down to 1 or 0
優點
- 大約相同的大小
- 兩個或少一個指令
- 沒有昂貴的跳躍
缺點
- 對於不熟悉該技術的讀者來說,這是不透明的
- 它改變了其他標誌