必須知道的GNU偽指令(共11頁)_第1頁
必須知道的GNU偽指令(共11頁)_第2頁
必須知道的GNU偽指令(共11頁)_第3頁
必須知道的GNU偽指令(共11頁)_第4頁
必須知道的GNU偽指令(共11頁)_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、必須(bx)知道的GNU ARM偽指令-講師(jingsh):程姚根一、.global 偽指令該偽指令的含義是讓 .global 修飾(xish)的符號(hào)對連接器可見,也就是說,一個(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í)很簡

2、單,相當(dāng)于C中的宏定義。使用格式如下:.equ 名字,值例如:.equ MAX,100 其實(shí)就是等價(jià)(dngji)于C語言的#define MAX 100是一個(gè)意思。三、.align偽指令功能為使代碼(di m)對齊到某一邊界。在ARM體系結(jié)構(gòu)下,.align 后邊(hu bian)的數(shù)以冪的形式出現(xiàn)的,例如:.align 2 表示從此處開始代碼要以4字節(jié)對齊,呵呵,有人經(jīng)常會(huì)問什么意思呀。它還有一個(gè)變體:.balign 這里的b就是byte的縮寫。如果寫成.balign 4就是直接表示4字節(jié)對齊。先來看一個(gè)實(shí)例代碼:.align 4表示,以16字節(jié)對齊??梢钥吹狡淝懊嬷挥幸粭l指令,在ARM狀

3、態(tài)每條指令占用4字節(jié),則還需要填充三條指令,就以達(dá)到16字節(jié)對齊了。它反匯編的結(jié)果:看完反匯編結(jié)果后我們(w men)得出如下規(guī)律:從第一條ARM指令(zhlng)開始,到.align 4這個(gè)位置,要求總指令的條數(shù)是8的倍數(shù),即.align 4所在的地址 + 4能整除8。如果不是則需要填充。從.align 4開始,到最后一條指令,也要求總指令的條數(shù)是8的倍數(shù),如果不是則需要填充。那它什么(shn me)時(shí)候會(huì)用到呢?我們先來看一下一下代碼:編譯(biny)后的結(jié)果:錯(cuò)誤的意思是分支目標(biāo)出現(xiàn)了偏差,即沒有對齊了。ARM指令要求4字節(jié)對齊,由于.byte是占用一個(gè)字節(jié),此時(shí)(c sh)就沒有對齊啦

4、。怎么解決這個(gè)問題呢?加一個(gè).align對齊一下就可以了。修改(xigi)后的代碼:編譯成功(chnggng)后,反匯編的結(jié)果如下:有些(yuxi)人常常寫成這樣,如下圖所示:四、.macro 偽指令macro偽操作可以將一段代碼定義為一個(gè)整體,稱為宏指令,然后就可以在程序中通過宏指令多次調(diào)用該段代碼。其中,$標(biāo)號(hào)在宏指令被展開時(shí),標(biāo)號(hào)會(huì)被替換為用戶定義的符號(hào)。宏操作可以使用一個(gè)或多個(gè)參數(shù)(cnsh),當(dāng)宏操作被展開時(shí),這些參數(shù)被相應(yīng)的值替換。宏操作的使用方式和功能與子程序有些相似,子程序可以提供模塊化的程序設(shè)計(jì)、節(jié)省存儲(chǔ)空間并提高運(yùn)行速度。但在使用子程序結(jié)構(gòu)時(shí)需要保護(hù)現(xiàn)場,從而增加了系統(tǒng)的開

5、銷,因此,在代碼較短且需要傳遞的參數(shù)較多時(shí),可以使用宏操作代替子程序。語法(yf)格式: .macro 宏名 參數(shù)(cnsh)名列表 偽指令.macro定義(dngy)一個(gè)宏 宏體 .endm .endm表示宏結(jié)束 實(shí)例:通過宏來實(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)。它由兩部組成開頭是一個(gè)0-99直接的數(shù)字局部標(biāo)號(hào) 后面加“:” F:指示(zhsh)編譯器只向前搜索(front)B:指示編譯器只向后搜索(back)實(shí)例如下:編譯(biny)后,反匯編如下:內(nèi)容總結(jié)(1)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論