再次解释ARM 流水线 比如add r0, pc, #g_oalAddressTable - (. + 8)的问题

       // topic:再次解释ARM 流水线 比如add    r0, pc,  #g_oalAddressTable - (. + 8)的问题

       // 作者:gooogleman

       // 邮箱:gooogleman@foxmail.com

       //网址:http://blog.csdn.net/gooogleman/article/details/7651548 

          关于add    r0, pc,  #g_oalAddressTable - (. + 8)这条指令,很多人曾经在CSDN论坛问过,我以前也回答过很多,现在居然在我的开发板技术支持群,还有人问起,并且貌似怎么说他也不明白。

         其实他是陷入死胡同,非要用自己的思维去想。

         其实这是ARM 约定的东西,ARM 用这种流水线的方式去做是非常科学的,就像我们现实中的工厂流水线方式,能够提高效率。

好了,这里不管是ARM7/ARM9/ARM11 也好,甚至是S5pv210 都是符合标题的写法的。原因如下:

R15(PC)总是指向“正在取指”的指令,而不是指向“正在执行”的指令或正在“译码”的指令。一般来说,人们习惯性约定将“正在执行的指令作为参考点”,称之为当前第一条指令,因此PC总是指向第三条指令。当ARM状态时,每条指令为4字节长,所以PC始终指向该指令地址加8字节的地址,即:PC值=当前程序执行位置+8;

 

在S3C6410 OK6410 real6410 eboot中有

 

add          r11, pc, #g_oalAddressTable -(. + 8)

在在我做的Sate210 的winceeboot中也有:

add r11, pc, #g_oalAddressTable -(. + 8)

还不明白吗

那就去看看ARM的官文吧

完整的介绍请参考文档:http://www.arm.com/pdfs/comparison-arm7-arm9-v1.pdf

 

实在不行就再看看这段话的含义!

R15(PC)总是指向“正在取指”的指令,而不是指向“正在执行”的指令或正在“译码”的指令。一般来说,人们习惯性约定将“正在执行的指令作为参考点”,称之为当前第一条指令,因此PC总是指向第三条指令。当ARM状态时,每条指令为4字节长,所以PC始终指向该指令地址加8字节的地址,即:PC值=当前程序执行位置+8;


                 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值