我先抱怨一下。 ……看到书的这个说明时,我完全无语了。 这样理解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条件(无符号数为/以上) ) ) ) ) ) ) ) )。