在定義一個結構體時,在用.align僞指令時,就有地址對齊的問題,爲何要對齊,請往下看:ide
這一切都來自CPU的引腳,相關引腳有AD(address data bus),它是分時複用的,總線週期T1狀態表示地址總線,剩下來的T2~T4狀態表示數據總線、BHE(bus high enable)高位數據總線容許引腳,用做高位數據選通訊號,在T1狀態,當BHE=0時,高位數據有效。爲何要介紹這兩引腳,由於BHE和A0引腳的配合控制着地址線信號對存儲器的讀寫操做。it
下面再介紹下存儲器的結構:通常和數據總線的高位相連的是奇地址,得用信號低電平做爲選擇信號,偶地址和數據總線的低位相連,得用地址線的第一根A0=0來做爲選擇信號。class
BHE和A0的不一樣組合數據總線的使用高低位不一樣,操做上開始的奇偶地址也不一樣,讀寫的位數也不一樣,有時是bytes有時是word,網上有組合參數表,這裏偷懶就不貼啦。語法
因此,對於規則字讀寫可在一個總線週期完成,由於BHE和A0同時有效,就從偶地址讀完低位就讀高位了;而非規則字,在第一個總線週期中,cpu讀寫數據時是在奇地址塊中,讀/寫的是高位數據,cpu完成一個存儲器週期後,下來,它將存儲器地址加1,改變A0電平爲低電平,選中偶地址塊。這就到了第二個總線週期了,讀寫低位數據塊,最後,再調換高低數據,因此非規則字須要二個總線週期。程序
這就是地址對齊的所在,這裏主要寫了起始地址,還有字長也很重要,通常數據總線寬度就是字長。cpu
.aling N僞指令對於intel彙編語法表示字節,對於at&t語法則是1<<N字節對齊,這個N有兩種含義當時不知道,簡真搞得偶看見它就看不下去下面的程序了,這個,偶卡了N長時間。通信