(1) 以0x104为例, 0x104 = 4+256 = 260 = 000100000100 又有000100000100可由000001000001循环左移2位,等价于循环右移30位。 又000001000001 = 0x41可以用4位2进制表示,则0x104是合法的立即数。
(2) 以 0xff 为例, 0xff = 11111111 又有11111111可由11111111循环左移32位,等价于循环右移0位。 又11111111 = 0xff 可以用4位2进制表示,则0xff 是合法的立即数。
(3) 以 0x3f0 为例, 0x3f0 = 001111110000
①又有 001111110000 可由 000011111100 循环左移2位,等价于循环右移30位。 又000011111100 = 0xfc, rotate = 0xf0,
②又有 001111110000 可由 000000111111 循环左移4位,等价于循环右移28位。 又000000111111 = 0x3f, rotate = 0xe0,
0xe0 < 0xf0,000000111111 = 0x3f 可以用4位2进制表示,则0xff 是合法的立即数。
(4) 以 0x101 为例, 0x101 = 000100000001 又有000100000001不满足由一个8位常数循环右移一定位数, 则0x101 不是合法的立即数。
(5) 以 0x102 为例, 0x102 = 000100000010 又有000100000010不满足由一个8位常数循环右移一定位数, 则0x102 不是合法的立即数。