2016-12-20 77 views
0

我不明白,SBC和RSC ARM指令我無法理解在ARM一些指令:SBC,RSC

我知道,無論處理進位標誌(C)

我認爲它使感增加與所述進位(ADC)的結果,如:

ADC R1,R2,R3 @ R1 = R2 + R3 +進位

但減去/反向進位減去... 我不能瞭解發生了什麼:(

你們可以給我一個使用SBC和RSC的例子嗎?

+0

'SBC'與'ADC'邏輯相同,只是傳播進位。除了交換操作數外,'RSC'和'SBC'相同。 – Jester

+0

感謝您的回覆......但我仍然沒有得到... – Spacey

+0

進位將是0或1 ...那麼它會從寄存器中減去? – Spacey

回答

3

鑑於補,減可以直接轉化爲另外:

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 
+0

非常感謝解釋,man :) – Spacey

+0

呵呵,我不知道ARM的進位標誌與x86的減號相反。 x86爲'0 - 1'設置CF,[SBB'設置爲'=(SRC + CF)'](http://felixcloutier.com/x86/SBB.html)。所以我想你必須小心,如果移植某些使用'sbb'來設置進位標誌從其他東西后進行基於CF的行爲。 –