新闻中心

EEPW首页>嵌入式系统>设计应用> ARM处理器指令立即寻址的限制

ARM处理器指令立即寻址的限制

作者: 时间:2016-11-21 来源:网络 收藏
ARM处理器的汇编语言中,对指令语法格式中的常数表达式有这样的规定:“该常数必须对应8位位图,即常数是由一个8位的常数循环移位偶数位得到的。”

给定一个立即数,判断其是否合法可以分三步:首先将给定的立即数写成32位二进制的形式;然后看能不能用一个8位的二进制数包括所有含1的部分,如不能则非法;最后看这个8位二进制数能不能循环右移偶数位得到给定的立即数,不能数则非法。

本文引用地址://m.amcfsurvey.com/article/201611/319517.htm

0xff=00000000000000000000000011111111:相当于8位二进制11111111循环右移0位得到,合法;

0x104=00000000000000000000000100000100:相当于8位二进制01000001循环右移2位得到,合法;

0x101=00000000000000000000000100000001:包含所有1的部分是100000001,无法用一个8位二进制表示,非法;

0x102=00000000000000000000000100000010:包含所有1的部分是10000001,但10000001只能循环右移奇数位得到给定的数,非法;

0xfC000002=11111100000000000000000000000010:相当于8位二进制10111111循环右移6位得到,合法。

0x8000007E=10000000000000000000000001111110:包含所有1的部分是11111101,但10000001只能循环右移奇数位得到给定的数,非法。

总结:第一,判断一个数是否符合8位位图的原则,首先看这个数转换成二进制后1的个数是否不超过8个,如果不超过8个,再看这n个1(n<=8)是否能同时放到8个二进制位中,如果可以放进去,再看这八个二进制位是否可以循环右移偶数位得到起初被判断的那个数值,如果可以,则此数值即为符合8位位图原理,否则,不符合。第二,用12位的编码来表示一个任意的32位数是不可能的,只能通过循环右移八位二进制数偶数位来得到一部分32位数,其余的无法表示的32位数,只有通过其它途径获得了,比如0xffffff00,可以通过0x000000ff按位取反得到。



评论


技术专区

关闭