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