ARM Pc寄存器的一个问题
我在看书看到这样一段话:
对于arm指令集来说,PC指向当前指令的下两条指令的地址,由于ARM指令是字对齐的,PC值的第0位和第一位总为0,
这句话全不懂,谁能解释下呢
[解决办法]
由于ARM指令是字对齐的,PC值的第0位和第一位总为0,
所谓“字对齐”是说4字节对齐,指令永远保存在4字节的边界上,所以PC值只能是xxx0、xxx4、xxx8、xxxC这样的值。
[解决办法]
PC指向当前指令的下两条指令的地址
假定当前正在执行的指令的地址是xxxx0,那么pc的值就是xxxx8,也就是后面第二条指令的地址,当前指令的地址+8
至于为什么要设计成这样,我也不懂。我觉得这个只要记住就行了,不一定要弄明白为什么。
其他cpu也都类似,比如x86的EIP指向下一条指令的地址。
[解决办法]
pc这样是因为arm是三级流水线结构的。
arm对指令的操作分别是取指令-译码-执行。
这种结构下,当第一条指令执行时,对第二条指令译码,同时取第三条指令。
pc指向的总是取指令,也就是当前执行指令开始的第三条指令。