再次解释ARM 流水线 比如add r0 pc g oalAddressTable - + 8 的问题

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

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

       // 作者:gooogleman

       // 邮箱:[email protected]

       //网址: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;


                 

           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

这里写图片描述

猜你喜欢

转载自blog.csdn.net/hfdghjh/article/details/84062244