我先抱怨一下。 ……看到書的這個說明時,我完全無語了。 這樣理解CMP命令對c進位的影響,很痛苦。
也就是說,在執行CMP A、b之後,如果A=B,則由於不產生借位,所以borrowfrom(r0-shifter_operand )=0,因此C Flag=1,即c進位位置被設定為1 如果有借位,則c進位為零。
但是,如果真的這樣寫的話,也不能說真的會變成這樣。 為了證明這個結論,特意寫了手續檢查:
如可以看到的,雖然是R1 R0,但是在執行CMP R1之後在R0之後發現了c進位位置1 (參見左側的cpsr寄存器)。 所以,書中應該說的話是沒錯的。
我想在這裏提到那個ARM指令的條件代碼。 (也是讓我無語的地方。 那個助記符號的名字比x86的匯編指令難記多了。 )
這裏,助記符CS/HS意識到無符號的數量為/以上,意味著C=1,在執行CMP A之後,如果b指令的結果為A=B,則滿足“無符號的數量以上”的條件,所以滿足CS/HS的條件同時A=B,所以C=1。 這樣,書上寫的應該就明白了。
根據以上情況,得出了以下結論。
執行CMP A、b; 如果A=B,則c站點1同時滿足所謂的CS/HS條件(無符號數為/以上) ) ) ) ) ) ) ) )。