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

首先先抱怨一句:...........看到书上这个描述(看附图)的时候我都彻底无语了,居然要这样理解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条件(无符号数大于/等于)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值