我不明白,SBC和RSC ARM指令我無法理解在ARM一些指令:SBC,RSC
我知道,無論處理進位標誌(C)
我認爲它使感增加與所述進位(ADC)的結果,如:
ADC R1,R2,R3 @ R1 = R2 + R3 +進位
但減去/反向進位減去... 我不能瞭解發生了什麼:(
你們可以給我一個使用SBC和RSC的例子嗎?
我不明白,SBC和RSC ARM指令我無法理解在ARM一些指令:SBC,RSC
我知道,無論處理進位標誌(C)
我認爲它使感增加與所述進位(ADC)的結果,如:
ADC R1,R2,R3 @ R1 = R2 + R3 +進位
但減去/反向進位減去... 我不能瞭解發生了什麼:(
你們可以給我一個使用SBC和RSC的例子嗎?
鑑於補,減可以直接轉化爲另外:
z = y - x
= y + (-x)
= y + ~x + 1
這使得它更容易地考慮進位標誌是如何設置在這種情況下,即通過subs
:
z = 0 - 0
= 0 + ffffffff + 1
C:z = 1:00000000 // no borrow, C = 1
z = 0 - 1
= 0 + fffffffe + 1
C:z = 0:ffffffff // borrow, C = 0
因此爲什麼C標誌的值是nB(「不是借用」),所以sbc
作爲「帶進位減」表示「不帶借位減」,換句話說:
z = y + ~x + C // i.e. adc with the second operand inverted
= y - (x - 1) - (~C + 1)
= y - x - ~C
非常感謝解釋,man :) – Spacey
呵呵,我不知道ARM的進位標誌與x86的減號相反。 x86爲'0 - 1'設置CF,[SBB'設置爲'=(SRC + CF)'](http://felixcloutier.com/x86/SBB.html)。所以我想你必須小心,如果移植某些使用'sbb'來設置進位標誌從其他東西后進行基於CF的行爲。 –
'SBC'與'ADC'邏輯相同,只是傳播進位。除了交換操作數外,'RSC'和'SBC'相同。 – Jester
感謝您的回覆......但我仍然沒有得到... – Spacey
進位將是0或1 ...那麼它會從寄存器中減去? – Spacey