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