ARM汇编中当即数的构成规矩:有必要是一个8位的二进制数,前面补上24位二进制0,扩展为32位;然后将这个32位的扩展数首尾相连循环偶数位得到。
给定一个当即数,判别其是否合法能够分三步:首要将给定的当即数写成32位二进制的方式;然后看能不能用一个8位的二进制数包括一切含1的部分,如不能则不合法;最终看这个8位二进制数能不能循环右移偶数位得到给定的当即数,不能数则不合法。举例如下:
0xff=00000000 00000000 00000000 11111111:相当于8位二进制11111111循环右移0位得到,合法;
0x104=00000000 00000000 00000001 00000100:相当于8位二进制01000001循环右移2位得到,合法;
0x101=00000000 00000000 00000001 00000001:包括一切1的部分是100000001,无法用一个8位二进制表明,不合法;
0x102=00000000 00000000 00000001 00000010:包括一切1的部分是10000001,但10000001只能循环右移奇数位得到给定的数,不合法;
0xfC000002 =11111100 00000000 00000000 00000010:相当于8位二进制10111111循环右移6位得到,合法。
0x8000007E=10000000 00000000 00000000 01111110:包括一切1的部分是11111101,但10000001只能循环右移奇数位得到给定的数,不合法。