<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 常用ARM匯編指令

常用ARM匯編指令

作者: 時(shí)間:2016-11-28 來(lái)源:網(wǎng)絡(luò ) 收藏
嵌入式開(kāi)發(fā)中,匯編程序常常用于非常關(guān)鍵的地方,比如系統啟動(dòng)時(shí)初始化,進(jìn)出中斷時(shí)的環(huán)境保護,恢復等對性能有要求的地方。

本文引用地址:http://dyxdggzs.com/article/201611/322957.htm

ARM指令集可以分為六大類(lèi),分別為數據處理指令、Load/Store指令、跳轉指令、程序狀態(tài)寄存器處理指令、協(xié)處理器指令和異常產(chǎn)生指令。
ARM指令使用的基本格式如下:
〈opcode〉{〈cond〉}{S}〈Rd〉,〈Rn〉{,〈operand2〉}
opcode 操作碼;指令助記符,如LDR、STR等。
cond 可選的條件碼;執行條件,如EQ、NE等。
S 可選后綴;若指定“S”,則根據指令執行結果更新CPSR中的條件碼。
Rd 目標寄存器。
Rn 存放第1操作數的寄存器。
operand2 第2個(gè)操作數

arm的尋址方式如下:
立即尋址
寄存器尋址
寄存器間接尋址
基址加偏址尋址
堆棧尋址
塊拷貝尋址
相對尋址
這里不作詳細描述,可以查閱相關(guān)文檔。

數據處理指令
Load/Store指令
程序狀態(tài)寄存器與通用寄存器之間的傳送指令
轉移指令
異常中斷指令
協(xié)處理器指令


在S3C2410、S3C2440的數據手冊中對各種匯編指令有詳細的描述;這里只對較常見(jiàn)的作寫(xiě)介紹。
1、相對跳轉指令:b、bl
這兩條指令的不同之處在于bl指令除了跳轉之外,還將返回地址(bl的下一條指令的地址)保存在lr寄存器中。
這兩條指令的可跳轉范圍是當前指令前后32M。

b funa
....
funa:
b funb
....
funb:
....

2、數據傳送指令mov,地址讀取偽指令ldr
mov指令可以把一個(gè)寄存器的值賦給另外一個(gè)寄存器,或者把一個(gè)常數賦給寄存器。
mov r1, r2

mov r1,#1024

mov傳送的常數必須能用立即數來(lái)表示。當不能用立即數表示時(shí),可以用ldr命令來(lái)賦值。
ldr是偽命令,不是真實(shí)存在的指令,編譯器會(huì )把它擴展成真正的指令;如果該常數能用“立即數”來(lái)表示,則使用mov指令,否則編譯時(shí)將該常數保存在某個(gè)位置,使用內存讀取指令把它讀出來(lái)。
ldr r1, = 1024


3、內存訪(fǎng)問(wèn)指令 ldr、str、ldm、stm
ldr既可以指低至讀取偽指令,也可以是內存訪(fǎng)問(wèn)指令。當他的第二個(gè)參數前面有=時(shí)標偽指令,否則表內存訪(fǎng)問(wèn)指令。
ldr指令從內存中讀取數據到寄存器,str指令把寄存器的指存儲到內存中,他們的操作數都是32位的。

ldr r1, [r2, #4]
ldr r1,[r2]
ldr r1,[r2], #4
str r1 ,[r2, #4]
str r1, [r2]
str r1, [r2],#4
寄存器傳送指令可以用一條指令將16個(gè)可見(jiàn)寄存器(R0~R15)的任意子集合(或全部)存儲到存儲器或從存儲器中讀取數據到該寄存器集合中。與單寄存器存取指令相比,多寄存器數據存取可用的尋址模式更加有限。多寄存器存取指令的匯編格式如下:

LDM/STM{}Rn{!},


4、加減指令 add、sub

add r1, r2, #1
sub r1, r2, #1

5、程序狀態(tài)寄存器的訪(fǎng)問(wèn)指令msr,mrs

ARM指令中有兩條指令,用于在狀態(tài)寄存器和通用寄存器之間傳送數據。修改狀態(tài)寄存器一般是通過(guò)“讀?。薷模瓕?xiě)回”三個(gè)步驟的操作來(lái)實(shí)現的。 這兩條指令分別是:
狀態(tài)寄存器到通用寄存器的傳送指令(MRS)
通用寄存器到狀態(tài)寄存器的傳送指令(MSR)

其匯編格式如下:
MRS{} Rd,CPSR|SPSR
其匯編格式如下:
MSR{} CPSR_f | SPSR_f,#<32-bit immediate>
MSR{} CPSR_ | SPSR_,Rm

msr cpsr, r0
mrs r0, cpsr

6、異常中斷指令
異常中斷指令可以分為一下兩種:
軟件中斷指令(SWI)
斷點(diǎn)指令(BKPT—僅用于v5T體系)
軟件中斷指令SWI用于產(chǎn)生SWI異常中斷,用來(lái)實(shí)現在用戶(hù)模式下對操作系統中特權模式的程序的調用;斷點(diǎn)中斷指令BKPT主要用于產(chǎn)生軟件斷點(diǎn),供調試程序用。

7、其他偽指令

.extern main
.text
.global _start
_start:

.extern 定義一個(gè)外部符號(可以是變量也可以是函數),上面的代碼表示表文本文件中引用的main是一個(gè)外部函數。

.text表示下面的語(yǔ)句都屬于代碼段

.global將本文件中的某個(gè)程序標號定義為全局的,如‘_start’就是個(gè)全局函數



關(guān)鍵詞: ARM匯編指

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>