ARM如何确定合法的有效地址
发布时间
阅读量:
阅读量
【立即数的定义:
每一个立即数均来源于一个8位常数值,通过32位循环右移偶数位所生成,其中循环右移的位数由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)
还没有任何评论哟~
