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