伪指令 .align 的含义
偽指令 .align 的作用是在編譯時(shí)指示編譯器填充位置計(jì)數(shù)器(類似指令計(jì)數(shù)器)到一個(gè)指定的內(nèi)存邊界處,目的是為 了提高 CPU 訪問內(nèi)存中代碼或數(shù)據(jù)的速度和效率。其完整格式為:
.align val_1 , val_2, val_3
其中第 1 個(gè)參數(shù)值 val_1 是所需要的對(duì)齊值;第 2 個(gè)是填充字節(jié)的值,填充值可以省略,若省略則編 譯器使用 0 值填充。第 3 個(gè)用來指明最大用于填充或跳過的字節(jié)數(shù)。如果進(jìn)行邊界對(duì)齊會(huì)超過 val_3 指定的最大字節(jié)數(shù),那么就根本不進(jìn)行對(duì)齊操作。如果需要省略第 2 個(gè)參數(shù) val_2 但還是需要使用第 3 個(gè)參數(shù) val_3 ,那么只需要放置兩個(gè)逗號(hào)即可。
對(duì)于現(xiàn)在使用 ELF 目標(biāo)格式的 Intel 80X86 CPU ,第 1 個(gè)參數(shù) val_1 是需要對(duì)齊的字節(jié)數(shù)。例如, .align 8 表示調(diào)整位置計(jì)數(shù)器,讓它在 8 的倍數(shù)邊界上。如果已經(jīng)在 8 的倍數(shù)邊界上,那么編譯器就不用改
變了。
但對(duì)于 Linux 0.11 中使用 a.out 目標(biāo)格式的系統(tǒng)來說,第 1 個(gè)參數(shù) val_1 是指定對(duì)齊到 2 的 val_1 次方。例如前面程序 .align 3 就表示位置計(jì)數(shù)器需要位于 8 的倍數(shù)邊界上。
gas(GNU as) 對(duì) ELF 和 a.out 這兩個(gè)目標(biāo)格式的處理方法不同是由于 gas 為了模仿各種體系結(jié)構(gòu)系統(tǒng)上自帶的匯編器的行為而形成的。
參考資料
《Linux內(nèi)核完全剖析》(趙炯,機(jī)械工業(yè)出版社,2006)
總結(jié)
以上是生活随笔為你收集整理的伪指令 .align 的含义的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: setup.s 解读——Linux-0.
- 下一篇: router vue 动态改变url_v