不同ARM的實現在存儲器指令取指時會相當大的區別,因此強烈建議存儲器映射的I/O位置只用于數據的裝載和保存,不用與指令取指,任何依賴于從存儲器映射I/O位置取指的系統設計都可能難以移植到將來的ARM實現。
2. 對存儲器映射I/O數據訪問:
一個指令序列在執行時,會在不同的點訪問數據存儲器,產生裝載和保存訪問的時序,如果這些裝載和保存訪問是正常的存儲器位置,那么在它們訪問相同的存儲器位置時,只是執行交互操作,結果,對不同存儲器位置保存和裝載可以按照不同于指令的順序執行,但不會改變最終的結果,這種改變存儲器訪問順序的自由被存儲器系統用來提高性能。
此外,對同一存儲器位置的訪問擁有其他可用提升性能的特性,其中包括:
1) 從相同的位置連續加載產生相同的結果。
2) 從一個位置執行加載操作,將返回最后保存到該位置的值。
3) 對某個數據規格的多次訪問有時可合并成單個的更大規模的訪問,例如,分別存儲一個字所包含兩個半字可合并成單個字的存儲。
但如果存儲器字、半字或字節訪問的對象是存儲器映射的I/O位置。一次訪問會產生副作用,使后續訪問改變成一個不同的地址。如果是這樣,那么不同時間順序的訪問將會使代碼序列產生不同的最終結果,因此訪問存儲器映射I/O位置時不能進行優化,它們的時間順序絕對不能改變。http://www.lirenedu.org/index.php?ack=xinwen&id=1081