额,小弟一直对cortex-m3/m4内核部分不甚理解,特意看了下权威指南.以下是书中原话:
R15为程序计数器PC,是可读可写的,读操作返回当前指令地址+4(由于三级流水线特性及同ARM7TDMI处理器兼容的需要).
额,小弟思考了下三级流水线,以下是小弟的理解,暂且不知道是否正确...
1>取指------译码------执行
2>cortex-m3每次取指都是32位的,也就是4个字节
3>所以如果以当前执行的指令为基准,取指指令应该是当前PC+8字节才对啊,为什么是PC+4???
上面3个步骤是我哪里理解出错了???还是因为其它什么原因???
恳请大神不惜赐教...谢谢...
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
第一代只管按自己当时最自然的做法来实现,完全不管以后这种做法可能成为瓶颈。
反正如果第一代就考虑以后无缝升级兼容,那么第一代就会变的很复杂,就有可能活不到第二代发布的时候了!
如果第一代活下来了,卖的很好了,有钱有资源做下一代了,因为技术的进步,下一代也就可以有比上一代多得多的晶体管可用,因此你完全付得起这个代价来继续维持跟前一代的兼容。
我这里只是针对cortex-m3/m4处理器...其它处理器我没了解过
因为不管是I-CODE还是D-CODE都是32位的宽度,所以它一次取指的长度都是32的(如果是16位指令后面的16位取指的值被忽略,这个是我猜测的...).
所以每次取指操作导致的地址offset应该是4个字节,而不管是具体是16位的指令还是32位的指令.
不知道这样理解是不是有问题...还请指教...
--------------------------------------------------------------------------------
其实你自己说的就是对的。
就是隔2个指令,不是隔1个指令。
只是你忘了Thumb状态下的一个指令是16位,也就是2字节
ARM7在Thumb状态下读PC返回当前地址+4,而ARM状态下返回当前地址+8
M3和M4只有Thumb状态。
--------------------------------------------------------------------------------
根据大神的说法,小弟我总结下,看有没有错误...针对cortex-m3/m4...
1>如果只考虑16位宽的thumb,+4是可以理解的.
2>如果只考虑32位的thumb-2,+4应该是为了"兼容"的需要,处理器/编译器进行某种神秘的操作.至于神秘的操作是如何做的,我不知道,只是结果会导致+4.
是这个意思吧...神...
一周热门 更多>