国产精品久久久久影院,成人午夜福利视频,国产精品久久久久高潮,国产精品 欧美 亚洲 制服,国产精品白浆无码流出

歷史上的今天

今天是:2025年01月11日(星期六)

2020年01月11日 | ARM-匯編指令集(總結(jié))

發(fā)布者:星空行者 來(lái)源: eefocus關(guān)鍵字:ARM  匯編指令集 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

ARM匯編指令集

指令、偽指令

(匯編)指令:   是機(jī)器碼的助記符,經(jīng)過(guò)匯編器編譯后,由CPU執(zhí)行。 

(匯編)偽指令:用來(lái)指導(dǎo)指令執(zhí)行,是匯編器的產(chǎn)物,最終不會(huì)生成機(jī)器碼。


有兩種不同風(fēng)格的ARM指令

1).ARM官方的ARM匯編風(fēng)格:指令一般用大寫,Windows中的IDE開(kāi)發(fā)環(huán)境。

2).GNU風(fēng)格的ARM匯編:指令一般用小寫。


ARM匯編的特點(diǎn)

1. LDR/STR架構(gòu)

1).ARM采用RISC架構(gòu),CPU本身不能直接讀取內(nèi)存,而需要先將內(nèi)存中內(nèi)容加載入CPU中通用寄存器中才能被CPU處理。
2).ldr(load register)指令將內(nèi)存內(nèi)容加載入通用寄存器。
3).str(store register)指令將寄存器內(nèi)容存入內(nèi)存空間中。
4).ldr/str組合用來(lái)實(shí)現(xiàn) ARM CPU和內(nèi)存數(shù)據(jù)交換。

2. 至此8種尋址方式

1).寄存器尋址mov r1, r2。
2).立即(立即數(shù))尋址 mov r0, #0xFF00。
3).寄存器移位尋址 mov r0, r1, lsl #3。
4).寄存器間接尋址 ldr r1, [r2] 表示內(nèi)存,內(nèi)存地址存在r2這個(gè)寄存器中,把內(nèi)存地址里的值給r1。

5).基址變址尋址ldr r1, [r2, #4]內(nèi)存地址在r2+4里面。

6).多寄存器尋址 ldmia r1!, {r2-r7, r12}一次訪問(wèn)多個(gè)寄存器。
7).堆棧尋址 stmfd sp!, {r2-r7, lr}。
8).相對(duì)尋址      beq flag。

3. 指令后綴

同一指令經(jīng)常附帶不同后綴,變成不同的指令。經(jīng)常使用的后綴有:
B(byte)功能不變,操作長(zhǎng)度變?yōu)?位
H(half word)功能不變,長(zhǎng)度變?yōu)?6位
S(signed)功能不變,操作數(shù)變?yōu)橛蟹?hào)
如 ldr ldrb ldrh ldrsb ldrsh
S(S標(biāo)志)功能不變,影響CPSR標(biāo)志位
如 mov和movs movs r0, #0

4. 條件執(zhí)行后綴

條件后綴是否成立取決于當(dāng)前代碼的前面的代碼。

條件后綴只影響當(dāng)前代碼的執(zhí)行。

5. 多級(jí)指令流水線

為增加處理器指令流的速度,ARM使用多級(jí)流水線.,下圖為3級(jí)流水線工作原理示意圖。(S5PV210使用13級(jí)流水線,ARM11為8級(jí))
允許多個(gè)操作同時(shí)處理,而非順序執(zhí)行。

1).PC指向正被取指的指令,而非正在執(zhí)行的指令


數(shù)據(jù)傳輸與跳轉(zhuǎn)指令詳解

1. 數(shù)據(jù)處理指令

數(shù)據(jù)傳輸指令 mov mvn
算術(shù)指令 add sub rsb adc sbc rsc 
邏輯指令 and orr eor bic
比較指令 cmp cmn tst teq
乘法指令 mvl mla umull umlal smull smlal
前導(dǎo)零計(jì)數(shù) clz


2. cpsr訪問(wèn)指令

mrs & msr
mrs用來(lái)讀psr,msr用來(lái)寫psr
CPSR寄存器比較特殊,需要專門的指令訪問(wèn),這就是mrs和msr。

3. 跳轉(zhuǎn)(分支)指令

b & bl & bx
b 直接跳轉(zhuǎn)(就沒(méi)打開(kāi)算返回)
bl branch and link,跳轉(zhuǎn)前把返回地址放入lr中,以便返回,以便用于函數(shù)調(diào)用
bx跳轉(zhuǎn)同時(shí)切換到ARM模式,一般用于異常處理的跳轉(zhuǎn)。

4. 訪存指令

ldr/str & ldm/stm & swp
單個(gè)字/半字/字節(jié)訪問(wèn) ldr/str
多字批量訪問(wèn)  ldm/stm
swp r1, r2, [r0]
swp r1, r1, [r0]

5. 軟中斷指令

swi(software interrupt)
軟中斷指令用來(lái)實(shí)現(xiàn)OS中系統(tǒng)調(diào)用

ARM匯編中的立即數(shù)

合法立即數(shù)與非法立即數(shù)
ARM指令都是32位,除了指令標(biāo)記和操作標(biāo)記外,本身只能附帶很少位數(shù)的立即數(shù)。因此立即數(shù)有合法和非法之分。
合法立即數(shù):經(jīng)過(guò)任意位數(shù)的移位后非零部分可以用8位表示的即為合法立即數(shù)。


協(xié)處理器與協(xié)處理器指令集

6.協(xié)處理器cp15操作指令

mcr & mrc
mrc用于讀取CP15中的寄存器
mcr用于寫入CP15中的寄存器

7.arm尋址方式

1). 寄存器:    MOV R1,R2 ; R2->R1

2). 立即數(shù):    SUBS R0,R1,#1; R0=R1-1

3). 寄存器移位:MOV R0,R2,LSL #3 ;R2左移三位->R0 

4). 間接尋址:  LDR R1,[R2] ; 裝載R2指向的內(nèi)存數(shù)值至R1

5). 基址尋址:  LDR R2,[R3,#0x0F] ;R3+0x0F作為地址,將所

 

指向的置裝入R2.R3的值不改變

6). 多寄存器尋址: LDMIA R1!,{R2-R7,R12} ; 將R1所指向的內(nèi)

 

存塊依次裝入{}中的寄存器。

STMIA R0!,{R3-R6,R10} ;將{}列出的寄存器里的值依次填入R0所指向的內(nèi)存塊。

7). 相對(duì)尋址: BL XXX ;跳轉(zhuǎn) 

BEQ XXX ;條件跳轉(zhuǎn)

協(xié)處理器解析:

SoC內(nèi)部另一處理核心,協(xié)助主CPU實(shí)現(xiàn)某些功能,被主CPU調(diào)用執(zhí)行一定任務(wù)。
ARM設(shè)計(jì)上支持多達(dá)16個(gè)協(xié)處理器,但是一般SoC只實(shí)現(xiàn)其中的CP15.(cp:coprocessor)
協(xié)處理器和MMU、cache、TLB等處理有關(guān),功能上和操作系統(tǒng)的虛擬地址映射、cache管理等有關(guān)。


MRC & MCR的使用方法

mcr{}   p15, , , , , {}
opcode_1:對(duì)于cp15永遠(yuǎn)為0
Rd:ARM的普通寄存器
Crn:cp15的寄存器,合法值是c0~c15
Crm:cp15的寄存器,一般均設(shè)為c0
opcode_2:一般省略或?yàn)椤?p> 

ldm/stm與棧的處理

為什么需要多寄存器訪問(wèn)指令

ldr/str每周期只能訪問(wèn)4字節(jié)內(nèi)存,如果需要批量讀取、寫入內(nèi)存時(shí)太慢,解決方案是stm/ldm
ldm(load register mutiple)
stm(store register mutiple)

舉例(uboot start.S 537行)

stmia sp, {r0 - r12}
將r0存入sp指向的內(nèi)存處(假設(shè)為0x30001000);然后地址+4(即指向0x30001004),將r1存入該地址;然后地址再+4(指向0x30001008),將r2存入該地址······直到r12內(nèi)容放入(0x3001030),指令完成。
一個(gè)訪存周期同時(shí)完成13個(gè)寄存器的讀寫


后綴的種類:

ia(increase after)先傳輸,再地址+4
ib(increase before)先地址+4,再傳輸
da(decrease after)先傳輸,再地址-4
db(decrease before)先地址-4,再傳輸
fd(full decrease)滿遞減堆棧
ed(empty decrease)空遞減堆棧
fa(·······) 滿遞增堆棧
ea(·······)空遞增堆棧


四種棧解析:

空棧:棧指針指向空位,每次存入時(shí)可以直接存入然后棧指針移動(dòng)一格;而取出時(shí)需要先移動(dòng)一格才能取出。
滿棧:棧指針指向棧中最后一格數(shù)據(jù),每次存入時(shí)需要先移動(dòng)棧指針一格再存入;取出時(shí)可以直接取出,然后再移動(dòng)棧指針。
增棧:棧指針移動(dòng)時(shí)向地址增加的方向移動(dòng)的棧。
減棧:棧指針移動(dòng)時(shí)向地址減小的方向移動(dòng)的棧。


!的作用:

ldmia r0, {r2 - r3}
ldmia r0!, {r2 - r3}

感嘆號(hào)的作用就是r0的值在ldm過(guò)程中發(fā)生的增加或者減少最后寫回到r0去,也就是說(shuō)ldm時(shí)會(huì)改變r(jià)0的值。


^的作用:

ldmfd sp!, {r0 - r6, pc}
ldmfd sp!, {r0 - r6, pc}^


^的作用:在目標(biāo)寄存器中有pc時(shí),會(huì)同時(shí)將spsr寫入到cpsr,一般用于從異常模式返回。


總結(jié):批量讀取或?qū)懭雰?nèi)存時(shí)要用ldm/stm指令。
各種后綴以理解為主,不需記憶,最常見(jiàn)的是stmia和stmfd。
謹(jǐn)記:操作棧時(shí)使用相同的后綴就不會(huì)出錯(cuò),不管是滿棧還是空棧、增棧還是減棧。

 

常用gun偽指令:

global _start @ 給_start外部鏈接屬性
.section .text @ 指定當(dāng)前段為代碼段
.ascii .byte .short .long .word 
.quad .float .string @ 定義數(shù)據(jù)
.align 4 @ 以4字節(jié)對(duì)齊
.balignl 16 0xabcdefgh @ 16字節(jié)對(duì)齊填充
.equ @ 類似于C中宏定義


偶爾會(huì)用到的gun偽指令

.end @標(biāo)識(shí)文件結(jié)束
.include @ 頭文件包含
.arm / .code32 @聲明以下為arm指令
.thumb / .code16 @聲明以下為thubm指令

重要的幾個(gè)偽指令

ldr 大范圍的地址加載指令
adr 小范圍的地址加載指令
adrl 中等范圍的地址加載指令
nop 空操作
ARM中有一個(gè)ldr指令,還有一個(gè)ldr偽指令
一般都使用ldr偽指令而不用ldr指令

adr與ldr

adr編譯時(shí)會(huì)被1條sub或add指令替代,而ldr編譯時(shí)會(huì)被一條mov指令替代或者文字池方式處理;
adr總是以PC為基準(zhǔn)來(lái)表示地址,因此指令本身和運(yùn)行地址有關(guān),可以用來(lái)檢測(cè)程序當(dāng)前的運(yùn)行地址在哪里
ldr加載的地址和鏈接時(shí)給定的地址有關(guān),由鏈接腳本決定。

 

@筆記記得有點(diǎn)不清晰,希望在學(xué)習(xí)ARM在座的各位指出哪有錯(cuò),大家一起進(jìn)步,共同學(xué)習(xí)。

關(guān)鍵字:ARM  匯編指令集 引用地址:ARM-匯編指令集(總結(jié))

上一篇:BootLoader(2440)核心初始化代碼
下一篇:ARM處理器解析

推薦閱讀

電子網(wǎng)消息,聯(lián)手打造首款支持藍(lán)牙Mesh的SmartMesh方案  建立以天貓精靈為中心的智能家居生態(tài)。2018年1月10日,北京 — 今天,聯(lián)發(fā)科技與阿里巴巴人工智能實(shí)驗(yàn)室(AI labs)在2018國(guó)際消費(fèi)電子展(CES)上簽署戰(zhàn)略合作協(xié)議,針對(duì)智能家居控制協(xié)議、物聯(lián)網(wǎng)芯片定制、AI智能硬件等領(lǐng)域展開(kāi)長(zhǎng)期密切合作,助力加速智能物聯(lián)網(wǎng)(IoT)發(fā)展。在為天貓精靈定...
近日舉辦的CES展會(huì)上,約肯機(jī)器人參與展出了智能水下無(wú)人機(jī)BWSpace,并推出BWSwimate水下智能助力推動(dòng)器新品。約肯機(jī)器人是全球頂尖的水下機(jī)器人產(chǎn)品和水下視頻影像內(nèi)容交流社交平臺(tái)的綜合性公司。此次亮相的BWSpace是全球首款具有智能拍攝功能的水下無(wú)人機(jī),可在水底拍攝照片或視頻;在保證穩(wěn)定性的前提下,它能以每秒30幀的速度拍攝4K影像,并且無(wú)延遲拍...
按圖分析:ARM處理器有七種工作模式,為的是形成不同的使用級(jí)別,以防造成對(duì)系統(tǒng)的破壞。不同模式可以訪問(wèn)的寄存器不同,可以運(yùn)行的指令不同。(1)user(10000):普通應(yīng)用程序運(yùn)行的模式(應(yīng)用程序),普通程序時(shí)運(yùn)行在此模式下。(2)FIQ(10001):快速中斷模式,以處理快速情況,高速數(shù)據(jù)傳輸(3)IRQ(10010):外部中斷模式,普通中斷處理(4)svc...
去年 12 月 23 日,華為正式發(fā)布了 nova 8 系列,包括 nova 8 和 nova 8 Pro 兩款,其中 nova 8 Pro 除了提供有普羅旺斯、綺境森林和亮黑色三款配色可供選擇外,此前有消息稱該機(jī)還將推出一款全新的《王者榮耀》定制版機(jī)型并曬出了該機(jī)的外觀渲染圖?,F(xiàn)在有最新消息,近日華為官微正式確認(rèn)了該機(jī)將于 1 月 11 日正式亮相...

史海拾趣

問(wèn)答坊 | AI 解惑

詳解電子紙的工作原理

電子紙的載體是一張?zhí)厥獾谋∧z片,通過(guò)在膠片上\"涂\"上的一層帶電的物質(zhì)(電子墨),根據(jù)內(nèi)容的不同進(jìn)行后臺(tái)控制,通過(guò)相應(yīng)的顯示組合以達(dá)到內(nèi)容顯示的目的。電子紙的內(nèi)核就是一個(gè)廣義上的IC,整個(gè)閱讀器則可看作是一個(gè)薄薄的內(nèi)嵌式遙控顯示板。電 ...…

查看全部問(wèn)答∨

想找一個(gè)嵌入式的培訓(xùn)

我是一名大四的學(xué)生,想向嵌入式方向發(fā)展,由于學(xué)校學(xué)的都是理論 所以我想再找一家培訓(xùn)單位來(lái)繼續(xù)學(xué)習(xí),linux+ARM的 但是網(wǎng)上很多,不知道怎么合理的選擇,希望大家?guī)鸵幌挛以趺捶治瞿敲炊嗟呐嘤?xùn)班…

查看全部問(wèn)答∨

剛剛接觸無(wú)線多媒體傳感器網(wǎng)絡(luò),不知道如何從何著手,請(qǐng)教經(jīng)驗(yàn)

各位師兄師姐好,我是大三的學(xué)生,專業(yè)學(xué)的測(cè)量控制,準(zhǔn)備讀研究生,搞無(wú)線多媒體傳感器網(wǎng)絡(luò)。 我看老師的研究領(lǐng)域以前是水下傳感器網(wǎng)絡(luò),我的研究的主要內(nèi)容可能是編協(xié)議,滿足異類多媒體可靠性定義、高網(wǎng)絡(luò)服務(wù)質(zhì)量預(yù)期值、高帶寬需求等問(wèn)題(按 ...…

查看全部問(wèn)答∨

低功耗問(wèn)題

我的萬(wàn)用表不能測(cè)量微安級(jí)的電流,哪還有什么辦法知道我的程序就進(jìn)入低功耗了呢?…

查看全部問(wèn)答∨

告訴你一個(gè)快速學(xué)習(xí)PIC單片機(jī)的好方法

最近在優(yōu)酷上看到了一個(gè)叫《我的PIC日記》的視頻教程,覺(jué)得挺好,上手挺快的,我把視頻資料整理了一下,供大家參考:     高顯生原創(chuàng)PIC單片機(jī)的基礎(chǔ)教程,是繼《我和單片機(jī)的21天之旅》之后又一部大型單片機(jī)視頻教程。教程以更加 ...…

查看全部問(wèn)答∨

易電源學(xué)習(xí)體會(huì)

電源總動(dòng)員活動(dòng)中成績(jī)還不錯(cuò),得了滿分。 對(duì)于TI的電源產(chǎn)品線,覺(jué)得這個(gè)易電源的參考設(shè)計(jì)手冊(cè)還是很有自己的特色,處處體現(xiàn)容易使用的思路。比如 1.“設(shè)計(jì)考慮/性能”---將電源設(shè)計(jì)的電容電阻選型以及放置位置都進(jìn)行詳細(xì)的說(shuō)明; 2. “PCB設(shè)計(jì)” ...…

查看全部問(wèn)答∨

UART串口收發(fā)控制器設(shè)計(jì)詳解

UART調(diào)試記錄:UART協(xié)議看起來(lái)很簡(jiǎn)單,但是里面涉及好幾個(gè)小細(xì)節(jié),處理起來(lái)也不是那么輕松順暢的,代碼寫完,調(diào)試過(guò)了再想起來(lái)來(lái)也確實(shí)就那么回事。重要的是掌握解決問(wèn)題的方法,代碼貼在這里,備忘備參考備修改。 異步通信協(xié)議  &n ...…

查看全部問(wèn)答∨

為什么我的Marvel8686 wifi在Android打開(kāi)wifi開(kāi)關(guān)的時(shí)候回會(huì)不停的去加載wifi驅(qū)動(dòng)?

本帖最后由 Wince.Android 于 2015-4-30 17:42 編輯 間隔一秒加載如下東西: libertas_sdio: Libertas SDIO driver++ libertas_sdio: Copyright Pierre Ossman libertas_sdio mmc2:0001:1: (unregistered net_device): 70:f3:95:ec:3e:3f, fw ...…

查看全部問(wèn)答∨

28335spi收發(fā)數(shù)據(jù)的問(wèn)題

在調(diào)試28335spi部分遇到了一些問(wèn)題 在設(shè)置了內(nèi)部循環(huán)之后,無(wú)法實(shí)現(xiàn)自發(fā)自收。 無(wú)論發(fā)送出去的數(shù)據(jù)是什么,接收到的數(shù)據(jù)永遠(yuǎn)是0x5357 初始化函數(shù)如下: SpiaRegs.SPICCR.all =0x000F;/*首先讓軟件復(fù)位位為0用來(lái)準(zhǔn)備配置寄存器,清除各種標(biāo)志位* ...…

查看全部問(wèn)答∨
小廣播
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開(kāi)發(fā)圈

 
機(jī)器人開(kāi)發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved