與進位(SBC
,RSC
)解釋進位標誌(C)作爲ARM減法操作的指令:ARM中進位標誌的使用錯誤是否會減少指令?
- 0手段借
- 1意味着無借
爲什麼進位標誌C
被反轉做算術?
SBC R0, R1, R2 @ R0 = R1 - R2 - !C
與進位(SBC
,RSC
)解釋進位標誌(C)作爲ARM減法操作的指令:ARM中進位標誌的使用錯誤是否會減少指令?
爲什麼進位標誌C
被反轉做算術?
SBC R0, R1, R2 @ R0 = R1 - R2 - !C
我們從小學知道
a = b - c = b + (-c)
,並從基本編程類,否定三三兩兩的一些補充,我們顛倒了許多,並添加一個,這樣
a = b + (~c) + 1
這完美的工作,因爲當我們餵養加法器邏輯我們的價值觀,我們反轉第二個操作數,並反轉進位。(沒有減法邏輯你使用加法器做減法)
所以一些處理器實現選擇反轉進行。你已經在反轉東西做減法,原始執行正常減法(無需借用)的msbit是1,當存在借位時,進位是0,因此反轉執行把它稱爲「借」而不是進位(或者代替借位或借位或借位n)
哪種方法可以做到這一點,如果你有一個借位減去,那麼你需要反轉或不反轉根據您的設計選擇進行減法運算(正常無需借用)。
所以減法
a = b + (~c) + 1
當你級聯減法(SBC),那麼如果沒有借那麼
a = b + (~c) + 1
但是,如果有借那麼下一階段需要有一個1被移除,因此該sbc變成
a = b + (~c)
在這種情況下,進位是零。所以從加法器邏輯的角度來看,當你做一次借用減法操作時,你自然必須倒置第二個操作數,但如果你不得不借用並且攜帶1,那麼它將攜帶0。
在SBC臂文檔說
路=路 - RM - NOT(C標誌)
因此,如果我們需要一個離開由於之前借那麼C需要成爲0否則C是1進去。
的增減基本上都在說
C標誌= NOT BorrowFrom(操作)
因此,如果我們需要借用然後借用爲true,所以C標誌是不正確的或0。如果我們不需要借用,那麼借用是假的0,而不是借用是1。因此,所有匹配,如果我們需要借入然後進入SBC C需要爲0.
所以基本上ARM似乎沒有修改加法器的執行。所以它不需要在SBC上反轉進位。