ARM---判断合法立即数
2017-10-28 10:03
183 查看
能通过8位常数循环右移偶数位得到的数称之为合法立即数。
循环右移:高字节的数到低字节。低字节的数到高字节。
例如:
01001001
01是高字节(高位)
01是低字节(低位)
循环右移1位后:10100100
循环右移2位后:01010010
除了循环右移,还有算术右移,逻辑右移。都是不一样的概念。
算术右移:把目的操作数的由高位向低位移。如果最高位是0,则空出的高位都补0. 如果最高位是1,则则空出的高位都补1.
逻辑右移:把目的操作数的由高位向低位移。移位后空出的位都补0.
判断合法立即数的例子:
例如: 0xF0000000
ob(二进制): 1111000000000000....
可以通过11110000循环右移8位得到原数,所以是合法立即数
例如: 0x101
ob(二进制): 000100000001
100000001是9位常数,所以不可能通过8位常数循环右移得到,它不是个合法立即数
例如: 0x102
ob(二进制): 000100000010
10000001是8位常数,可以通过8位常数循环右移得到,但是它是循环右移1位得到,不是循环右移偶数位得到,所以它也不是个合法立即数
循环右移:高字节的数到低字节。低字节的数到高字节。
例如:
01001001
01是高字节(高位)
01是低字节(低位)
循环右移1位后:10100100
循环右移2位后:01010010
除了循环右移,还有算术右移,逻辑右移。都是不一样的概念。
算术右移:把目的操作数的由高位向低位移。如果最高位是0,则空出的高位都补0. 如果最高位是1,则则空出的高位都补1.
逻辑右移:把目的操作数的由高位向低位移。移位后空出的位都补0.
判断合法立即数的例子:
例如: 0xF0000000
ob(二进制): 1111000000000000....
可以通过11110000循环右移8位得到原数,所以是合法立即数
例如: 0x101
ob(二进制): 000100000001
100000001是9位常数,所以不可能通过8位常数循环右移得到,它不是个合法立即数
例如: 0x102
ob(二进制): 000100000010
10000001是8位常数,可以通过8位常数循环右移得到,但是它是循环右移1位得到,不是循环右移偶数位得到,所以它也不是个合法立即数
相关文章推荐
- 判断arm立即数是否合法的小程序
- 判断arm立即数是否合法的小程序
- 教你快速判断ARM指令中合法立即数
- ARM指令中怎么判断合法立即数的方法(转载)
- ARM汇编之合法立即数的快速判断方法
- ARM指令中如何判断一个立即数是有效立即数
- ARM指令中如何判断一个立即数是有效立即数
- ARM指令中如何判断一个立即数是有效立即数
- ARM指令-合法立即数
- 判断ARM立即数合法性
- ARM指令中如何判断一个立即数是有效立即数
- ARM指令中如何判断一个立即数是 有效立即数
- ARM指令中如何判断一个立即数是有效立即数
- 用C语言判断一个数能不能当作ARM的立即数
- ARM指令中如何判断一个立即数是有效立即数
- ARM指令中如何判断一个立即数是有效立即数
- 如何判断合法的立即数
- ARM中判断立即数是否有效
- 给定入栈顺序,判断出栈顺序是否合法
- 如何判断一个Edit Box里,输入的IP地址是否合法?