我在ARM文档中读到:
GE [3:0],位[19:16] 并行加法和减法指令中描述的指令 第A4-171页更新这些标志以指示单个字节或半字的结果 的操作。这些标志可以控制稍后的SEL指令。
显然GE [3:0]代表“eq / lt / gt”?
我遇到了几个奇怪的问题,我还没有线索,但它们都有CPSR值xxxf0030,所以GE位是0b1111?那是什么意思?这些GE位是否正常?
提前致谢!
答案 0 :(得分:1)
在ARMv7 ARM(与该文本匹配)中,GE标志设置的详细信息仅在并行指令本身的操作伪代码中。可悲的是,他们似乎已经删除了ARMv6 ARM中的这篇很好的散文描述:
以半字操作的说明:
- 根据上半字计算的结果
一起设置或清除GE [3:2]- 根据下半字计算的结果,一起设置或清除GE [1:0]。
对字节进行操作的指令:
- 根据顶部字节计算的结果设置或清除GE [3]
- 根据第二字节计算的结果设置或清除GE [2]
- 根据第三个字节计算的结果设置或清除GE [1]
- 根据底部字节计算的结果设置或清除GE [0]。
如果结果为,则设置(否则清除)每个位 相应的计算如下:
- 用于无符号字节添加,如果结果大于或等于2 ^ 8
- 表示无符号半字加法,如果结果大于或等于2 ^ 16
- 表示无符号减法,如果结果大于或等于零
- 用于有符号算术,如果结果大于或等于零。
作为算术标志,它们可以具有任何旧值(在复位时未定义,并且可以通过APSR自由写入),因此在您专门使用设置它们的指令之前,它们几乎没有意义,可以忽略。