Advertisement

ARM如何确定合法的有效地址

阅读量:

【立即数的定义:

每一个立即数均来源于一个8位常数值,通过32位循环右移偶数位所生成,其中循环右移的位数由4位二进制数值的两倍来表示。具体表达为:

=immed_8经过32位循环右移(2*rotate_4)位

由此可知,并非所有32位常数值都能构成合法的立即数,只有符合上述构造方式的数值才被视为合法的立即数。以下示例为合法的立即数:

0Xff,0X104

而以下数值则不属于合法的立即数范畴:

0X101,0X102

依据上述构造规则,一个合法的立即数可能具有多种编码形式。例如,0X3f0作为一个合法的立即数,可采用如下两种不同的编码方式实现:

immed_8=0X3f,rotate_4=0xe 或者 immed_8=0Xfc,rotate_4=0xf

然而由于该构造过程涉及循环右移操作,这将对CPSR寄存器中的C标志位产生影响。因此,同一合法立即数若采用不同编码方式,在某些指令执行时可能会导致结果不一致的情况出现。为了避免这一问题,ARM汇编编译器遵循如下编码原则生成对应的立即数值:

规则:当目标数值位于范围0~0xff内时,则设定immed_8等于该值,并将rotate_4设为零;对于其他情况,则选择使rotate_4取值最小的一种编码形式。

接下来提供两个判断标准用于识别某数值是否为有效立即数:

1、首先将该数字转换为二进制形式进行

全部评论 (0)

还没有任何评论哟~