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