ARM體系結構與程式設計 2

2021-06-22 10:33:43 字數 2763 閱讀 1485

arm組合語言程式設計:arm組合語言源程式中的語句由指令、偽操作和巨集指令組成。arm指令已經在上一節介紹過了。

arm偽操作和巨集指令分類:

<1>符號定義偽操作

gbla:宣告乙個全域性的算術變數,並將其初始化為0。語法:gbla variable

gbll:宣告乙個全域性的邏輯變數,並將其初始化為false語法:gbll variable

gbls:宣告乙個全域性的串變數,並將其初始化為空串「」語法:gbls variable

lcla:宣告乙個區域性的算術變數,並將其初始化為0語法:lcla variable

lcll:宣告乙個區域性的邏輯變數,並將其初始化為false語法:lcll variable

lcls:宣告乙個區域性的串變數,並將其初始化為空串「」語法:lcls variable

seta:給乙個算術變數賦值語法:seta variable expr

setl:給乙個邏輯變數賦值語法:setl variable expr

sets:給乙個串變數賦值 語法:sets variable expr

rlist:為乙個通用暫存器列表定義名稱語法:name rlist

cn:為乙個協處理器的暫存器定義名稱語法:name cn expr

cp:為乙個協處理器定義名稱語法:name cp expr

<2>資料定義偽操作

ltorg:用於宣告乙個資料緩衝池的開始語法:ltorg

map:用於定義乙個結構化的記憶體表的首位址語法:map expr

field:用於定義乙個結構化的記憶體表中的資料域,#是field的同義詞語法: field expr

space:用於分配一塊記憶體單元,並用0初始化,%是space的同義詞語法: space expr

dcb:用於分配一段位元組記憶體單元,並用expr初始化,=是dcb的同義詞語法: dcb expr

dcd:用於分配一段字記憶體單元,並用expr初始化,&是dcd的同義詞語法: dcd expr

<3>彙編控制偽操作

if,else及endif:[是if偽操作的同義詞,|是else偽操作的同義詞,]是endif偽操作的同義詞。

while及wend:

macro及mend:語法:

macro 

macroname ...}

;code

...;code

mend

mexit:用於從巨集中跳轉出去

<4>框架描述偽操作

code16:告訴彙編器後面的指令序列為16位的thumb指令語法:code16

code32:告訴彙編器後面的指令序列為32位的arm指令語法:code32

equ:為數字常量和程式中的標號定義乙個字元名稱,*是equ的同義詞。語法:name equ expr

area:用於定義乙個**段或者資料段。乙個大的程式可以包含多個**段和資料段。乙個匯程式設計序至少包含乙個段。 語法:area sectionname...

entry:指定程式的入口點。乙個程式中至少要有乙個entry,乙個原始檔中最多只能有乙個entry語法:entry

end:告訴彙編器已經到了源程式的結尾。每個匯程式設計序都包含end,以告知本源程式的結束。

align:通過新增補丁位元組,使得當前位置滿足一定的對齊方式。語法:align }

export:宣告乙個符號可以被其他檔案引用,相當於宣告了乙個全域性變數。語法:export symbol

import:告訴彙編器當前的符號不是在本原始檔中定義的,而是在其他原始檔中定義的,在本原始檔中可以引用該符號。不論本原始檔是否引用,該符號都將被加入到本原始檔的符號表中。語法:import symbol

extern:告訴彙編器當前的符號不是在本原始檔中定義的,而是在其他原始檔中定義的,在本原始檔中可以引用該符號。如果本原始檔實際上沒有引用該符號,它將不會被加入到本原始檔的符號表中。語法:extern symbol

get及include;將乙個原始檔包含到當前原始檔中,並將被包含的檔案在當前位置進行彙編處理。 語法:get filename

<5>資訊報告偽操作

assert:用於保證源程式被彙編時滿足相關條件,如果條件不滿足,assert偽操作報告錯誤型別並終止彙編。 語法:assert logical-expression

<6>雜項偽操作

arm組合語言偽指令:這些偽指令不是真正的arm或thumb指令,這些偽指令在彙編時被替換成對應的arm或thumb指令。

adr偽指令:小範圍的位址讀取指令,該指令將基於pc的位址或者基於暫存器的位址讀取到暫存器中。該指令在彙編時被替換成一條指令。

語法:adr register, expr

adrl偽指令:中等範圍的位址讀取指令,該指令將基於pc的位址或者基於暫存器的位址讀取到暫存器中。該指令在彙編時被替換成兩條指令。

語法:adrl register, expr

ldr偽指令:大範圍的位址讀取指令,該指令將乙個32位常數或位址值讀取到暫存器中。

語法:ldr register, =expr

nop:空操作指令

arm組合語言語句格式:如下:

symbol:符號

instrution:指令,在arm組合語言中,指令不能從一行的行頭開始,在一行語句中,指令的前面必須有空格或者符號

directive:偽操作

pseudo-instruction:偽指令

comment:語句注釋。在arm組合語言中,注釋以;開頭。

arm組合語言程式格式:arm組合語言以段(section)為單位組織原始檔,段又分為**段、資料段。乙個arm源程式至少需要乙個**段,大的程式可以包含多個**段和資料段。

ARM體系結構與程式設計

arm處理器的7中執行模式 usr fiq irq svc abt und sys。arm處理器共37個暫存器 31個通用暫存器 未備份暫存器r0 r7,在全部模式下指的都是同乙個物理暫存器 備份暫存器r8 r12,每乙個暫存器相應兩個不同的物理暫存器。對於r13 sp 和r14 lr 來說,每乙個...

ARM體系結構與程式設計學習筆記2

1 arm指令分類 1 arm指令集可以分為跳轉指令,資料處理指令,程式狀態暫存器 psr 傳輸指令,load store指令,協處理指令和異常中斷產生指令 2 arm指令集字長為固定的32位,一條典型的arm指令編碼格式如下 opcode 指令助記符 如add表示演算法加操作指令 cond 執行條...

ARM體系結構與程式設計 1

arm處理器的7中執行模式 usr fiq irq svc abt und sys。arm處理器共37個暫存器 31個通用暫存器 未備份暫存器r0 r7,在所有模式下指的都是同乙個物理暫存器 備份暫存器r8 r12,每個暫存器對應兩個不同的物理暫存器。對於r13 sp 和r14 lr 來說,每個暫存...