arm 彙編中的巨集

2021-05-10 12:22:23 字數 1153 閱讀 3702

巨集定義用乙個單個的有意義的名字來來代替乙個**塊,避免重複乙個**塊好多次

macro

$label  testandbranch  $dest, $reg, $cc

$label  cmp     $reg, #0

b$cc    $dest

mend

在macro偽指令之後是乙個巨集的原型語句,巨集的原型語句定義了你用來呼叫巨集的名字:testandbranch,它還定義了引數

label,dest,reg,cc,當呼叫這個巨集的時候必須給引數賦值

當呼叫test  testandbranch nonzero,r0,ne

nonzero

巨集替換之後

test  cmp r0,#0

bne nonzero

nonzero

macro

$handlerlabel handler $handlelabel

$handlerlabel

1: sub sp,sp,#4 ;decrement sp(to store jump address)     

2: stmfd sp!, ;push the work register to stack(lr does not push because it return to original address)       

3: ldr     r0,=$handlelabel;load the address of handle*** to r0  

4: ldr     r0,[r0]  ;load the contents(service routine start address) of handle***   

5: str     r0,[sp,#4]      ;store the contents(isr) of handle*** to stack  

6:ldmfd   sp!,     ;pop the work register and pc(jump to isr)  

mend

這個巨集是init.s中乙個載入中斷服務程式的一段巨集

=》sub sp,sp,#4   ;sp減4

stmfd sp!,  stmfd相當於s***b相當於在把資料壓棧前先講sp減4

0:sp   

3:服務程式的標號到r0

彙編中的巨集彙編

從網上找的,關於巨集的操作,記錄一下 1 定義巨集 巨集名 macro 形參1,形參2,巨集的定義體 endm macro和endm是二個必須成對出現的關鍵字,它們分別表示巨集定義的開始和結束 macro和endm之間的部分是巨集的定義體,它是由指令 偽指令或引用其它巨集所組成的程式片段,是巨集所包...

ARM彙編中的標號

arm彙編中的標號 標號 label 是為一組機器指令所起名字,表示程式中的指令或者資料位址的符號。標號可有可無,只有當需要用符號位址來訪問該語句時,才給此語句賦予標號。通過在目標位址的前面放上乙個標號,可以在指令中使用標號來代替直接使用位址。標號是程式目標標誌,總是和某位址相聯絡,供轉移或迴圈指令...

ARM彙編中的標號

1 標號 在arm 彙編中,標號代表乙個位址,段內標號的位址在彙編時確定,而段外標號的位址值在連線時確定。根據標號的生成方式,可以有以下3 鐘 基於pc 的標號 基於pc 的標號時位於目標指令前的標號或程式中的資料定義偽指令前的標號,這種標號在彙編時將被處理成pc 值加上或減去乙個數字常量。它常用於...