您的位置:首页 > 其它

关于ARM里面的CMP指令的个人理解

2013-03-15 10:14 267 查看
首先先抱怨一句:...........看到书上这个描述(看附图)的时候我都彻底无语了,居然要这样理解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条件(无符号数大于/等于)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: