请教一个cortex M3 PC值的问题

2019-07-21 06:35发布

R15 寄存器起到PC的作用。因为是三级流水线的关系(取址  译码  执行)。第一次取址的指令,在第二次译码,到了第三次执行。(不考虑跳转带来的清洗流水线的问题)看了书,又百度一下。。基本都是两种说法。   


(1) 程序计数器R15(PC)总是指向“正在取指”的指令,而不是指向“正在执行”的指令或者正在“译码”的指令。
(2) 在Cortex-M3中指令是3级流水线,出于对Thumb代码的兼容的考虑,读取pc时,会返回当前指令地址+4的值。


20170122112404673.gif


对于(1)的理解也就是PC寄存器里面的值指向了正在取址的地址?比如PC=0x04是取址,但实际程序在执行0x00地址的指令?
对于(2)读取pc时,会返回当前指令地址+4的值这一现象得到了验证,也符合三级流水的逻辑。(因为差了两级流水,同时为了兼容thumb16位2字节   
所以有 2级*2字节=4


那么不懂的地方来了,图里执行完读PC的指令后,PC的值还是指向下一指令,并没有加四 。(这也正常因为程序既然不跳转就得顺序执行啊)   
(但是又该如何理解------  程序计数器R15(PC)总是指向“正在取指”的指令,而不是指向“正在执行”的指令或者正在“译码”的指令。


所以PC到底指向哪里?貌似一和二有点矛盾了,还是我理解错了。。。???




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。