有關arm彙編中的align

2020-12-12 電子產品世界
經常會看到arm-linux彙編中有如下的指令:

.align n
它的含義就是使得下面的代碼按一定規則對齊,.align n 指令的對齊值有兩種方案,n 或 2^n ,
各種平臺最初的彙編器一般都不是gas,採取方案1或2的都很多,gas的目標是取代原來的彙編器,
必然要保持和原來彙編器的兼容,因此在gas中如何解釋 .align指令會顯得有些混亂,原因在於保持兼容。
arm-linu是按照2^n的方案對齊的,需要說明的是這個對齊和ld-script裡的對齊不同,不是一會事。
下面的英文就不同平臺的對齊進行了說明:
版本2.11.92.0.12的gas的info(Mandrake 8.2上的)這樣說:

本文引用地址:http://www.eepw.com.cn/article/201611/318973.htm

The way the required alignment is specified varies from system to system. For the a29k,
hppa, m68k, m88k, w65, sparc, and Hitachi SH, and i386 using ELF format, the first expression
is the alignment request in bytes. For example `.align 8 advances the location counter until
it is a multiple of 8. If the location counter is already a multiple of 8, no change is needed.

For other systems, including the i386 using a.out format, and the arm and strongarm,
it is the number of low-order zero bits the location counter must have after advancement.
For example `.align 3 advances the location counter until it a multiple of 8.
If the location counter is already a multiple of 8, no change is needed.

從這段文字來看,ARM的.align 5就是2的5次方對齊,也就是4位元組對齊,通過反彙編也可以看出對齊方式:
.align 5
stmfd sp!, {r0 - r3, lr}
mov r0, ip
ldmfd sp!, {r0 - r3, pc}^

.align 5
stmfd sp!, {r0 - r3, lr}
mov r0, ip
mov ip, r0
ldmfd sp!, {r0 - r3, pc}^

反彙編:
00000000 <.text>:
0: e92d400f stmdb sp!, {r0, r1, r2, r3, lr}
4: e1a0000c mov r0, ip
8: e8fd800f ldmia sp!, {r0, r1, r2, r3, pc}^
...
20: e92d400f stmdb sp!, {r0, r1, r2, r3, lr}
24: e1a0000c mov r0, ip
28: e1a0c000 mov ip, r0
2c: e8fd800f ldmia sp!, {r0, r1, r2, r3, pc}^
30: e1a00000 nop (mov r0,r0)
34: e1a00000 nop (mov r0,r0)
38: e1a00000 nop (mov r0,r0)
3c: e1a00000 nop (mov r0,r0)

一些忠告:
In the future, everytime when you build an elf file, you need meantime created your map file.
And then you will avoid mistakes like this align.

Also, please also pick up some linker script knowlege part. For embedded system,
we frequently play the linker script to tune an image, for example,
align some special section and so on for protection or/and cache purpose.
wish helpful

相關焦點

  • 常用ARM彙編指令
    在嵌入式開發中,彙編程序常常用於非常關鍵的地方,比如系統啟動時初始化,進出中斷時的環境保護,恢復等對性能有要求的地方。operand2 第2個操作數arm的尋址方式如下:立即尋址寄存器尋址寄存器間接尋址基址加偏址尋址堆棧尋址塊拷貝尋址相對尋址這裡不作詳細描述,可以查閱相關文檔。
  • Align Technology 宣布在中國商業推出 Invisalign隱適美產品
    Invisalign G3具備新的特點和功能,使得採用Invisalign隱適美產品治療二類和三類患者變得更為簡單,並可應對亞洲人群中更為複雜的咬合不正問題。於此次推出之前,Align Technology已在中國成立全資子公司,並將中國總部設在上海,進行全國性管理、銷售、市場推廣,並提供臨床教育及支持等。
  • android平臺arm指令學習和調試
    */一、Ndk下內聯彙編跟vc下一樣,ndk編譯環境下也能使用內聯彙編,如下:本文引用地址:http://www.eepw.com.cn/article/201611/317575.htmincludeintmy_thumb(intdummy)
  • ARM 一些特殊符號
    為location counter,可在源文件中指示當前地址。該符號可以被引用或賦值。 arm彙編程序中的符號 在arm彙編語言中,符號(symbols)可以代表地址(addresse)、變量(variables)和數字常量(numeric constants)。當符號代表地址時,又稱為標號(lable)。
  • 跟大家Align一下Align對應的中文說法
    1.如果大家使用英文版本的word,會發現中文word的「對齊」就是英文中的「alignment」。這個時候,使用的就是牛津字典中的釋意:「~ (sth)(with sth)to arrange sth in the correctposition, or to be in the correct position, in relation to sth else, especiallyin a straight line 排整齊;校準;(尤指)使成一條直線」
  • 跟大家Align一下Align對應的中文說法
    1.如果大家使用英文版本的word,會發現中文word的「對齊」就是英文中的「alignment」。這個時候,使用的就是牛津字典中的釋意:「~ (sth)(with sth)to arrange sth in the correctposition, or to be in the correct position, in relation to sth else, especiallyin a straight line 排整齊;校準;(尤指)使成一條直線」
  • ARM彙編特殊符號 彙編符號引用
    如果$後是數字變量(與串變量區分),在彙編時編譯器將該數字變量的數值轉換成十六進位的串,然後用該十六進位的串取代$後的數字變量。如果$後是邏輯變量,在彙編時編譯器將該邏輯變量替換成它的取值(T或者F)。如果程序中需要$,則用$$來表示,編譯器將不進行變量替換。
  • ARM平臺NEON指令的編譯和優化
    arm-gcc -O3 -mcpu=cortex-a8 -mfloat-abi=soft -c -o myfile.o myfile.cNEON彙編和EABI程序調用規範GNU assembler (gas) and ARM Compiler toolchain assembler (armasm)都支持NEON指令的彙編。
  • 哪幾種情況中必須使用內聯彙編或嵌入型彙編?
    ARM系列文章,請點擊以下匯總連結:《從0學arm合集》一、gcc 內聯彙編內聯彙編即在C中直接使用彙編語句進行編程,使程序可以在C程序中實現C語言不能完成的一些工作,例如,在下面幾種情況中必須使用內聯彙編或嵌入型彙編。
  • 基於Android的ARM彙編語言系列之五:ARM指令集與Thumb指令集
    章節列表之一:ARM彙編語言開篇之二:C/C++程序生成ARM彙編程序的過程分析之三:ARM彙編語言程序結構之四:ARM處理器的尋址方式之五
  • 關於ARM彙編裡的特殊符號
    先前企圖全部靠自己寫一個bootloader,結果嘗試了下,花了4天時間查各種技術資料,寫了個startup.s文件出來,寫的過程中才發現,原來還有很多問題是我基本上不知道的,比如說如何進行ARM的位操作、如何將堆棧設置到RAM中、UART的波特率計算方法等問題。
  • 淺談ARM 彙編裡的 literal pools文字池
    1)ARM彙編中 literal pool (文字池)本質是什麼 中文說明: 本文引用地址:http://www.eepw.com.cn
  • 詞根系列|ARM 「weapon」
    詞根arm來源於拉丁名詞arma "weapons", 也可以來自拉丁動詞armare "to arm 武裝", From PIE root *ar- "to fit together停戰,休戰;休戰協議■拆: arm(to arm)+i+st(stand: 站立; 停止)+ice(n後綴) -> 休戰■GRE ■短語
  • 常用ARM指令集及彙編
    彙編指令APIMOV(MOVe) 傳送指令PUSH 入棧指令POP 出棧指令XCHG(eXCHanG) 交換指令XLAT(TRANSLATE) 換碼指令LEA (Load Effective Address) 有效地址送寄存器指令LDS(Load DS with pointer) 指針送寄存器和DS指令
  • 高級語言中的語句在彙編中是如何實現的
    我們都知道對於c語言來說,它是需要先轉換成彙編語言,然後再生成機器語言的。那麼在c語言中,各種條件語句,各種表達式的計算,在彙編中是何如實現的呢?今天我們就來講解一下。彙編語言彙編語言是由包含用助記符如 ADD、MOV、SUB 和 CALL 書寫的語句。彙編語言與機器語言是一對一(one-to-one)的關係:每一條彙編語言指令對應一條機器語言指令。
  • ARM指令中特殊符號意義
    如果$後是數字變量(與串變量區分),在彙編時編譯器將該數字變量的數值轉換成十六進位的串,然後用該十六進位的串取代$後的數字變量。如果$後是邏輯變量,在彙編時編譯器將該邏輯變量替換成它的取值(T或者F)。如果程序中需要$,則用$$來表示,編譯器將不進行變量替換。
  • Invisalign隱適美中國中心模式將成全球推廣典範
    Invisalign隱適美官方高級培訓課程在京啟動  Invisalign隱適美大中華區總經理Will Hay先生在發布會現場致辭,2016 Invisalign另悉,3月18-19日,第二期《深圳·隱適美中級培訓班》正在火熱報名中。
  • 「實用教程」- 使用PyMOL的Align進行蛋白結構疊合比對
    Alignalign首先執行序列比對,然後進行結構疊加,進行多次迭代以便進行微調,在蛋白序列相似性大於30%的時候可以達到良好的效果。用途Align常常在結構生物學以及虛擬篩選中使用,當對不同的蛋白結構並對其進行比較時,我們就可以使用align比較蛋白結構,查看兩者之間的差異,這個結構上的差異有一個量化的指標就是RMSD。它的概念和計算方式,都會在下面列出。目前,pymo是一個很流行的三維蛋白結構顯示工具。
  • 杜爾申克舉辦後橋調整站客戶日 推出x-align升級產品
    上海2015年1月27日電 /美通社/ -- 1月21日,杜爾集團旗下上海申克機械有限公司杜爾裝配事業部(DAP)舉辦後橋調整站客戶日,向採埃孚、上海匯眾、江鈴福特、上汽、北汽福田等車橋生產廠商和汽車製造企業高級工程師及管理人員展示其杜爾後橋調整站 x-align 升級產品,並分享了後橋調整站從研發起步到承載全球尖端技術的成長過程
  • 詞根系列|ARM 「weapon」
    詞根arm來源於拉丁名詞arma "weapons", 也可以來自拉丁動詞armare "to arm 武裝", From PIE root *ar- "to fit together停戰,休戰;休戰協議■拆: arm(to arm)+i+st(stand: 站立; 停止)+ice(n後綴) -> 休戰■GRE ■短語