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位还需要位移吗?不太清楚),跳转到该目标地址,再执行下一条指令。
大概就是这样了,纯手打,希望能追加悬赏。。。。。