ARM指令-合法立即数

一、ARM指令格式:  

{} {s} , {,}


opcode:操作码(必选)

cond:    执行条件

s:是否影响cpsr

      Rd:目标寄存器(必选)

      Rn:第一个操作数的寄存器

      shift_opreand:第二个操作数

二、ARM指令编码格式:

 

31-28

27-25

24-21

20

19-16

15-12

11-0

Cond

001

Opcode

s

Rn

Rd

Shifter_operand


三、shifter_opreand解析立即数(从汇编指令中查看实际立即数)

当shifter_opreand取立即数数时,将其12bit位中的低8位数经过循环右移n位 ( 高4bit 表示的数 *2)即表示实际立即数


四、将立即数编码,转换成汇编指令
从解析汇编指令中的立即数步骤可知,并不是所有的立即数都可以被正确的编译成汇编指令(原因是很明显的:32位立即数不可能用12位的编码完全表示),那么如何判断一个立即数是否合法(能够转换成汇编指令)?逆推可知:
1.实际立即数中二进制1的个数不能超过8个.(立即数如果经过ARM指令中低8位经过循环右移是不会改变实际立 即数中的1的个数的)
2.实际立即数转化成2进制后循环左移,如果能够左移偶数位后为1的位能够存在于任意连续的8bit中,那么这个 立即数就是合法的。
此外,对于实际立即数0x0-0xFF,总存在ARM指令编码12位的shifter_operand中的高4位为0,低八位为实际立即数,因此,立即数0x0-0xFF总是合法的



你可能感兴趣的:(笔记)