1. 程式人生 > >再次解釋ARM 流水線 比如add r0 pc g oalAddressTable - + 8 的問題

再次解釋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

這裡寫圖片描述