何时修改CPSR GE [3:0]位

时间:2015-04-21 07:02:33

标签: linux arm instruction-set

我在ARM文档中读到:

  

GE [3:0],位[19:16]   并行加法和减法指令中描述的指令   第A4-171页更新这些标志以指示单个字节或半字的结果   的操作。这些标志可以控制稍后的SEL指令。

显然GE [3:0]代表“eq / lt / gt”?

我遇到了几个奇怪的问题,我还没有线索,但它们都有CPSR值xxxf0030,所以GE位是0b1111?那是什么意思?这些GE位是否正常?

提前致谢!

1 个答案:

答案 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自由写入),因此在您专门使用设置它们的指令之前,它们几乎没有意义,可以忽略。