关于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条件(无符号数大于/等于)
也就是说,如果执行 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条件(无符号数大于/等于)
相关文章推荐
- 关于RNN(Seq2Seq)的一点个人理解与感悟
- 关于线程方法的一些个人理解
- 关于数组的一些个人理解和源码
- 关于Ubuntu 12.04 修改默认运行级别,启动字符界面的个人理解
- 关于计算机中补码的个人理解
- 个人理解下推荐给菜鸟学习的关于java的基础技术
- ARM中关于绝对寻址相对寻址LDR,ADR的理解
- 关于作用域的范围的个人理解
- 关于java反射的个人理解
- 关于高斯消元求期望的个人理解
- 关于maven依赖范围的个人理解
- 关于SpringMVC视图/页面的个人粗浅理解
- 关于SOC系统的个人理解
- 关于verilog里阻塞与非阻塞赋值的个人理解
- 个人关于程序和系统方面知识的疑问--------:exe 、dll 、库、api 该咋理解???
- 关于程序动态库链接和运行时搜索路径设置的个人理解
- 关于ActiveMQ的初学者个人理解
- 关于java中方法或者函数,形参,实参的个人理解
- 关于Online Redo Log(ORL)和Standby Redo Log(SRL)的个人理解
- [转]关于内存地址的个人理解和操作原理