版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、必須(bx)知道的GNU ARM偽指令-講師(jingsh):程姚根一、.global 偽指令該偽指令的含義是讓 .global 修飾(xish)的符號(hào)對(duì)連接器可見(jiàn),也就是說(shuō),一個(gè)函數(shù)或變量通常情況下只在文本文件內(nèi)有效,當(dāng)需要在外部引用該文件里的某一個(gè)函數(shù)或變量時(shí),必須首先將該函數(shù)或變量使用.global偽指令進(jìn)行聲明。例如:.gloabl _start.global main_start : b main 這里的_start要被外部的鏈接腳本使用,所以聲明為全局。這里的main符號(hào)是外面文件實(shí)現(xiàn)的main函數(shù),main函數(shù)也是在外面實(shí)現(xiàn)的,所以聲明為全局。二、.equ 偽指令該偽指令其實(shí)很簡(jiǎn)
2、單,相當(dāng)于C中的宏定義。使用格式如下:.equ 名字,值例如:.equ MAX,100 其實(shí)就是等價(jià)(dngji)于C語(yǔ)言的#define MAX 100是一個(gè)意思。三、.align偽指令功能為使代碼(di m)對(duì)齊到某一邊界。在ARM體系結(jié)構(gòu)下,.align 后邊(hu bian)的數(shù)以?xún)绲男问匠霈F(xiàn)的,例如:.align 2 表示從此處開(kāi)始代碼要以4字節(jié)對(duì)齊,呵呵,有人經(jīng)常會(huì)問(wèn)什么意思呀。它還有一個(gè)變體:.balign 這里的b就是byte的縮寫(xiě)。如果寫(xiě)成.balign 4就是直接表示4字節(jié)對(duì)齊。先來(lái)看一個(gè)實(shí)例代碼:.align 4表示,以16字節(jié)對(duì)齊??梢钥吹狡淝懊嬷挥幸粭l指令,在ARM狀
3、態(tài)每條指令占用4字節(jié),則還需要填充三條指令,就以達(dá)到16字節(jié)對(duì)齊了。它反匯編的結(jié)果:看完反匯編結(jié)果后我們(w men)得出如下規(guī)律:從第一條ARM指令(zhlng)開(kāi)始,到.align 4這個(gè)位置,要求總指令的條數(shù)是8的倍數(shù),即.align 4所在的地址 + 4能整除8。如果不是則需要填充。從.align 4開(kāi)始,到最后一條指令,也要求總指令的條數(shù)是8的倍數(shù),如果不是則需要填充。那它什么(shn me)時(shí)候會(huì)用到呢?我們先來(lái)看一下一下代碼:編譯(biny)后的結(jié)果:錯(cuò)誤的意思是分支目標(biāo)出現(xiàn)了偏差,即沒(méi)有對(duì)齊了。ARM指令要求4字節(jié)對(duì)齊,由于.byte是占用一個(gè)字節(jié),此時(shí)(c sh)就沒(méi)有對(duì)齊啦
4、。怎么解決這個(gè)問(wèn)題呢?加一個(gè).align對(duì)齊一下就可以了。修改(xigi)后的代碼:編譯成功(chnggng)后,反匯編的結(jié)果如下:有些(yuxi)人常常寫(xiě)成這樣,如下圖所示:四、.macro 偽指令macro偽操作可以將一段代碼定義為一個(gè)整體,稱(chēng)為宏指令,然后就可以在程序中通過(guò)宏指令多次調(diào)用該段代碼。其中,$標(biāo)號(hào)在宏指令被展開(kāi)時(shí),標(biāo)號(hào)會(huì)被替換為用戶(hù)定義的符號(hào)。宏操作可以使用一個(gè)或多個(gè)參數(shù)(cnsh),當(dāng)宏操作被展開(kāi)時(shí),這些參數(shù)被相應(yīng)的值替換。宏操作的使用方式和功能與子程序有些相似,子程序可以提供模塊化的程序設(shè)計(jì)、節(jié)省存儲(chǔ)空間并提高運(yùn)行速度。但在使用子程序結(jié)構(gòu)時(shí)需要保護(hù)現(xiàn)場(chǎng),從而增加了系統(tǒng)的開(kāi)
5、銷(xiāo),因此,在代碼較短且需要傳遞的參數(shù)較多時(shí),可以使用宏操作代替子程序。語(yǔ)法(yf)格式: .macro 宏名 參數(shù)(cnsh)名列表 偽指令.macro定義(dngy)一個(gè)宏 宏體 .endm .endm表示宏結(jié)束 實(shí)例:通過(guò)宏來(lái)實(shí)現(xiàn)memcpy功能.global _start.text_start:b reset.macro memory_copy src_addr,dest_addr,num保存r0,r1,r2,r3參數(shù)在使用的時(shí)候,前面要加上stmfd sp!,r0,r1,r2,r3ldr r0,=src_addrldr r1,=dest_addrldr r2,=numloop:ldr
6、r3,r0,#4str r3,r1,#4sub r2,r2,#1cmp r2,#0恢復(fù)(huf)r0,r1,r2,r3ldmeqfd sp!,r0,r1,r2,r3bne loop .endmreset:memory_copy SRC_ADDR,DEST_ADDR,4stop:b stopSRC_ADDR:.word 0 x0a.word 0 x0b .word 0 x0c .word 0 x0d DEST_ADDR:.word 0 xff .word 0 xff .word 0 xff.word 0 xff反匯編的結(jié)果(ji gu)如下:asm.o: file format elf32-li
7、ttlearmDisassembly of section .text:00000000 : 0: eaffffff b 4 00000004 : 4: e92d000f push r0, r1, r2, r3 8: e59f0040 ldr r0, pc, #64 ; 50 c: e59f1040 ldr r1, pc, #64 ; 54 10: e3a02004 mov r2, #4 ; 0 x400000014 : 14: e4903004 ldr r3, r0, #4 18: e4813004 str r3, r1, #4 1c: e2422001 sub r2, r2, #1 ; 0
8、 x1 20: e3520000 cmp r2, #0 ; 0 x0 24: 08bd000f popeq r0, r1, r2, r3 28: 1afffff9 bne 14 0000002c : 2c: eafffffe b 2c 00000030 : 30: 0000000a .word 0 x0000000a 34: 0000000b .word 0 x0000000b 38: 0000000c .word 0 x0000000c 3c: 0000000d .word 0 x0000000d00000040 : 40: 000000ff .word 0 x000000ff 44: 00
9、0000ff .word 0 x000000ff 48: 000000ff .word 0 x000000ff 4c: 000000ff .word 0 x000000ff 50: 00000030 .word 0 x00000030 54: 00000040 .word 0 x00000040五、GNU 局部(jb)編號(hào)局部標(biāo)號(hào):局部標(biāo)號(hào) 主要在局部范圍內(nèi)使用而且局部標(biāo)號(hào)可以重復(fù)出現(xiàn)(chxin)。它由兩部組成開(kāi)頭是一個(gè)0-99直接的數(shù)字局部標(biāo)號(hào) 后面加“:” F:指示(zhsh)編譯器只向前搜索(front)B:指示編譯器只向后搜索(back)實(shí)例如下:編譯(biny)后,反匯編如下:內(nèi)容總結(jié)(1)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度房屋抵押貸款與社區(qū)文化活動(dòng)執(zhí)行與評(píng)估合同3篇
- 二零二五年度生態(tài)農(nóng)業(yè)項(xiàng)目合伙人托管服務(wù)合同3篇
- 二零二五年度房屋租賃合同環(huán)保責(zé)任補(bǔ)充協(xié)議3篇
- 2025年度房東與大房東之間房屋托管管理服務(wù)合同3篇
- 二零二五年度房屋贈(zèng)與及智慧社區(qū)建設(shè)合同3篇
- 2025年度農(nóng)業(yè)耕地租賃與農(nóng)業(yè)品牌建設(shè)合同3篇
- 2025年度手房交易附贈(zèng)地下車(chē)庫(kù)使用權(quán)協(xié)議3篇
- 二零二五年度摩托車(chē)零部件銷(xiāo)售合同模板電子版3篇
- 二零二五年度生態(tài)補(bǔ)償扶貧幫扶實(shí)施合同3篇
- 二零二五年度動(dòng)產(chǎn)抵押擔(dān)保合同模板2篇
- 2023-2024學(xué)年廣東省深圳市龍崗區(qū)八年級(jí)(上)期末英語(yǔ)試卷
- DB23-T 3768-2024北方種鵝節(jié)水生態(tài)旱養(yǎng)管理技術(shù)規(guī)程
- 勘察工作質(zhì)量及保證措施
- 事業(yè)單位招聘《綜合基礎(chǔ)知識(shí)》考試試題及答案
- 2024年電工(高級(jí)技師)考前必刷必練題庫(kù)500題(含真題、必會(huì)題)
- 墊江縣中醫(yī)院2018年11月份臨床技能中心教學(xué)設(shè)備招標(biāo)項(xiàng)目招標(biāo)文件
- 2024年《浙江省政治學(xué)考必背內(nèi)容》(修訂版)
- 2024-2025學(xué)年初中數(shù)學(xué)七年級(jí)下冊(cè)滬教版(五四學(xué)制)(2024)教學(xué)設(shè)計(jì)合集
- 房地產(chǎn)銷(xiāo)售主管崗位招聘筆試題及解答(某大型國(guó)企)2025年
- 廣東省惠州市(2024年-2025年小學(xué)四年級(jí)語(yǔ)文)統(tǒng)編版綜合練習(xí)(上學(xué)期)試卷及答案
- 廣東省廣州市天河區(qū)2024年六上數(shù)學(xué)期末聯(lián)考試題含解析
評(píng)論
0/150
提交評(píng)論