mips 下使用訪存指令讀取或寫入資料單元時,目標位址必須是所訪問之資料單元位元組數的整數倍,這個叫做位址對齊。
比如在 mips 平台上,lh 讀取乙個半字時,儲存器的位址必須是 2 的整數倍; lw 讀取乙個字時,儲存器的位址必須是 4的整數倍; sd 寫入乙個雙字時,儲存器的位址必須是 8 的整數倍。倘若訪存時,目標位址不對齊,則會引起異常,典型的是系統提示「匯流排錯誤」後,直接殺死程序。
看乙個測試程式(龍芯2e平台):
#include
#include
unsigned short data = ;
inline void unaligned_access(unsigned short * const row)
int main()
程式執行後系統提示「非法指令」後退出。
cisc 下(如x86)訪存時,如果目標位址不對齊,cpu 不會陷入異常,因為其內部有處理非對齊訪問的微程式。
MIPS 下非對齊訪問的問題
發表日期 2007 07 23 17 43 1.問題 mips 下使用訪存指令讀取或寫入資料單元時,目標位址必須是所訪問之資料單元位元組數的整數倍,這個叫做位址對齊。比如在 mips 平台上,lh 讀取乙個半字時,儲存器的位址必須是 2 的整數倍 lw 讀取乙個字時,儲存器的位址必須是 4的整數倍 ...
mips下非對齊訪問問題分析
1.問題 risc 下使用訪存指令讀取或寫入資料單元時,目標位址必須是所訪問之資料單元位元組數的整數倍,這個叫做位址對齊。計算機主要的架構就分為兩類,複雜指令集計算機 cisc 和精簡指令集計算機 risc cisc最有代表性的架構就是x86,risc最有代表性的架構就是arm。不管是什麼架構,對要...
非對齊位址訪問問題
arm,dsp,powerpc等不支援非對齊位址訪問,x86支援非對齊位址訪問。為何要位元組對齊?從理論上講似乎對任何型別的變數的訪問可以從任何位址開始,但實際情況是在訪問特定型別變數的時候經常在特定的記憶體位址訪問,各個硬體平台對儲存空間的處理上有很大的不同。一些平台對某些特定型別的資料只能從某些...