arm八卦分析

ARM指令集没有学过什么专业的,协处理器的操作不太清楚,凭半桶水的水平简单解答问主的疑问。

这表和我印象中的ARM有点差别,可能是我知识还不够多吧;

上面3种指令,

分别是R指令,操作数在寄存器中;

I指令,操作数在指令中以立即数形式存在;

J指令,跳转指令;

(ARM也可以分为(数据处理,数据传送,分支指令)DP,DT,BR三类指令,其实都一样)

这个应该就是ARM V7指令集了,寄存器号操作码4位,表示16个GPR;

每条指令有4位cond条件码字段,作用:根据cpsr寄存器和4位的cond码决定该指令是否执行?;

3位指令一般类型,作用:该指令是DP,DT,BR三种指令中的哪一种?操作数是否以立即数的形式存在于指令之中?

RN和RM分别为存放源操作数的寄存器,RD是存放结果的寄存器

位移量是指偏移量,间址寻址中的offset;

位移多少位是把操作数位移多少位的计算操作;

1位的更新条件标志操作码字段,作用:是否根据该指令的执行结果修改cpsr寄存器;

第三和第四条指令的区别,

有必要先说明一下,arm指令集是用12位表示32位立即数的,所以不能完全覆盖,剩下不能覆盖的只能用12位作为偏移量到memory中load了。编译时会判断12位立即数是否能转换为32位立即数,不能的话编译器会在该指令前插入一条load指令。

很明显,第一条指令是通过转换得到一个立即数,公式:实际的32位操作数=(后8位)循环左移((前4位)*2)位。如1000 00000010就是(00000010)循环左移(1000*2)位,表示0000000000000010000000000000000,十进制就是131072;

BR指令,该指令的cond和cprs寄存器决定该指令是否执行,就是分支是否跳转,该指令的PC寄存器值作为基址,24位作为偏移量(具体这个24位还需要位移吗?不太清楚),跳转到该目标地址,再执行下一条指令。

大概就是这样了,纯手打,希望能追加悬赏。。。。。