一、立即数指令码的组成
ARM公司将32bit指令码分为如下两部分:
32bit立即数通过Imm8值循环右移ROR值*2bit得到。即:shifter_operand = immed_8 Rotate_Right (rotate_imm * 2)。
二、如何判断一个数是否是合法立即数?
首先将这个数转换为32bit16进制形式,例如218=0xDA=0x000000DA
除零外,仅有一位数为合法立即数。
除零外,仅有二位数,并且相邻(包括首尾相邻,如0x1000000A)的为合法立即数。
除零外,仅有三位数,并且相邻(包括中间有0相间,例如0x10800000,包括首尾相邻,如:0x14000003),这三位数中,最高位取值仅能为1、2、3,最低位取值仅能为4、8、C,中间位0x0~0xF。这种组合的为合法立即数。
除了以上三种,其他基本是非法立即数。
三、非法立即数如何输入?
利用LDR伪指令可将任意32bit的立即数赋给寄存器。
格式:LDR RD,=#Imm32
编译时,编译器会优先使用MOV或者MVN指令来加载立即数,以便提高代码运行效率,如不行,则一般编译成如下形式:
LDR RD,[PC,#offset]
....
PC+OFFSET:.word Imm32
文章来源于:电子工程世界 原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。