关于ARM里面的CMP指令的个人理解
来源:互联网 发布:centos 7.2怎么样 编辑:程序博客网 时间:2024/05/29 03:13
首先先抱怨一句:...........看到书上这个描述(看附图)的时候我都彻底无语了,居然要这样理解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条件(无符号数大于/等于)
- 关于ARM里面的CMP指令的个人理解
- ARM指令CMP详解
- 关于ARM 汇编 指令 操作范围的一点理解
- ARM DCD指令的理解
- 关于汇编语言中cmp指令的小笔记
- ARM条件码与CPSR标志位的关系——cmp MOVLS与MOVHI 指令
- GCD里面函数的个人理解
- cmp bne 以及sub指令的详解
- 关于ARM汇编程序的理解
- 关于adr指令的理解
- 关于adr指令的理解
- 关于LDR指令的理解
- 关于adr指令的理解
- 关于adr指令的理解
- 关于adr指令的理解
- 关于adr指令的理解
- 关于adr指令的理解
- 关于adr指令的理解
- 5.5 挂钩(HOOK)
- 第三周C++上机报告(【类】的撞错)
- K线研究要重视的3个要素
- expect 脚本 命令记录
- 我的断点心得——帮初学者进阶
- 关于ARM里面的CMP指令的个人理解
- 第三周项目4
- 深入:ASP.NET MVC管道
- Hadoop ZooKeeper 学习
- svn update 状态含义
- ubuntu中tr命令使用教程
- UITableView循环重复显示混乱的问题
- setWindowPos
- 我的断点心得——帮初学者进阶