天天看點

對uboot的start.S中的.balignl的了解

 .balignl   16,0xdeadbeef

這個代碼很有意思,作者挺搞笑。剛開始的時候看不懂這個代碼是什麼意思,balignl很顯然是對齊的意思,我當時一看就知道這是16位元組對齊,可是,0xdeadbeef是什麼東東?呵呵,後來我找了半天資料才知道沒什麼意思,我們可以把它用其他的代替,比如0xgoodbeef,0xgoodgirl,明白了吧。

下面我對此進行講解:

syntax:

.balign  {alignment}  {,fill}   {,max}

Description: Word align the following code to alignment byte boundary (default=4). Fill skipped words with fill (default=0 or NOP). If the number of bytes skipped is greater than max, then don't align (default=alignment ).

alignment可以是4,8,16,32,的預設值是4

fill 就是要填充的内容

max 是一個數值,如果從目前位置開始移動到符合要求的位置所移動的位址大于max時,不采用對齊。

.balignl和.balignw是.balign的變形,前者是采用4位元組填充,後者是2位元組填充。

例如:

目前位址是0x0000 0001

.balignl 16,0xgoodgirl

16位元組對齊,符合要求的第一個位址是0x0000 0010,可是指針移動了15位置,也就是15個位元組,oxgoodgirl占4個位元組,是以不填充空白區域,空白區域内容是未知的。

假如目前位址是0x0000 000e

指針移動到0x0000 0010,移動了2次,也就是2個位元組,不足4個位元組,空間不夠,是以也不填充,這2個位元組的内容是未知的。

假如目前位址是0x0000 000c

指針移動到0x0000 0010,移到4次,也就是4個位元組,正好将0xgoodgirl填充進去。