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