ARM體系結(jié)構(gòu)與編程PPT課件_第1頁(yè)
ARM體系結(jié)構(gòu)與編程PPT課件_第2頁(yè)
ARM體系結(jié)構(gòu)與編程PPT課件_第3頁(yè)
ARM體系結(jié)構(gòu)與編程PPT課件_第4頁(yè)
ARM體系結(jié)構(gòu)與編程PPT課件_第5頁(yè)
已閱讀5頁(yè),還剩198頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、ARM體系結(jié)構(gòu)與編程,2020/7/8,內(nèi)容,ARM概述和分類,ARM指令集和匯編程序設(shè)計(jì),ARM體系結(jié)構(gòu)和存儲(chǔ)系統(tǒng),ARM中斷和異常處理,第一章 ARM概述和分類,2020/7/8,內(nèi)容,ARM簡(jiǎn)介,ARM的分類,ARM的命名規(guī)則,基于ARM的嵌入式系統(tǒng)概述,2020/7/8,ARM介紹,什么是ARM?,其實(shí),人人都用ARM!,什么是ARM,ARM是一個(gè)公司的名字 ARM代表一項(xiàng)技術(shù),即Advanced RISC Machine ARM是一個(gè)內(nèi)核,而不是我們看到的具體的芯片,ARM發(fā)展的歷程,第一片ARM處理器是1983年10月到1985年4月間 在位于英國(guó)劍橋的Acorn Computer

2、公司開發(fā) 1990年,為廣泛推廣ARM技術(shù)而成立了獨(dú)立的公司 Advance RISC Machine(ARM) 主要設(shè)計(jì)ARM系列RISC處理器內(nèi)核 授權(quán)ARM內(nèi)核給生產(chǎn)和銷售半導(dǎo)體的合作伙伴 ARM 公司不生產(chǎn)芯片 IP(Intelligence Property) 另外也提供基于ARM架構(gòu)的開發(fā)設(shè)計(jì)技術(shù) 軟件工具, 評(píng)估板, 調(diào)試工具,應(yīng)用軟件, 總線架構(gòu), 外圍設(shè)備單元,等等 20世紀(jì)90年代, ARM快速進(jìn)入世界市場(chǎng) 。,ARM Offices Worldwide,800+ 雇員 全球,England Cambridge, Maidenhead, Sheffield, Blackbu

3、rn Germany Munich France Paris, Sophia Antipolis Korea Seoul,US Seattle, Los Gatos, Walnut Creek, Austin, Boston, San Diego China Taiwan and Shanghai Japan Shin-Yokohama (Tokyo),ARM Partnership Model,2020/7/8,ARM的應(yīng)用,2020/7/8,ARM分類,基于指令集體系結(jié)構(gòu)(構(gòu)架ISA)的分類 ARM V1 體系是最初版本,只有26位的尋址空間,沒有乘法指令,最終沒有商業(yè)化 ARM V2 體

4、系與V1體系同為26位尋址空間,具有乘法和加法指令,支持協(xié)處理器 ARM V3 體系的尋址范圍擴(kuò)展到32位,具有乘法和加法指令,支持協(xié)處理器 ARM V4 體系增加了半字存儲(chǔ)操作,對(duì)調(diào)試的支持以及支持嵌入的ICE ARM V5 體系增加了DSP指令支持和對(duì)Java指令的支持 ARM V6 體系增加了媒體指令,ARMv6指令集合中加入了超過60條SIMD單指令多數(shù)據(jù)指令 ARM V7 體系定義了三種獨(dú)立的內(nèi)核型A(應(yīng)用領(lǐng)域), R(實(shí)時(shí)領(lǐng)域),M(控制領(lǐng)域),2020/7/8,ARM系列處理器,基于處理器內(nèi)核的分類 ARM7 系列 ARM9 系列 ARM9E 系列 ARM10E 系列 Secur

5、Core 系列 StrongARM/Xscale (Intel) ARM11,2020/7/8,ARM命名舉例,2020/7/8,ARM體系的變種,1)Thumb指令集(T變種) Thumb指令集是把32位的ARM指令集的一個(gè)子集重新編碼后而 形成的一個(gè)特殊的16位的指令集 2)長(zhǎng)乘指令(M變種) 長(zhǎng)乘指令是一種生成64位相乘結(jié)果的乘法指令(此指令為ARM指令), M變種增加了兩條長(zhǎng)乘指令 3)增強(qiáng)型DSP指令(E變種) E變種的ARM體系增加了一些增強(qiáng)處理器對(duì)典型的DSP算法 處理能力的附加指令。 4)Java加速器Jazelle(J變種) ARM的Jazelle技術(shù)是Java語言和先進(jìn)的3

6、2位RISC芯片完美結(jié)合的產(chǎn)物 。 5)ARM媒體功能擴(kuò)展(SIMD變種),2020/7/8,ARM的命名規(guī)則,ARM的命名分成兩類: 基于ARM Architecture的版本命名規(guī)則; 基于ARM Architecture版本的處理器系列命名規(guī)則。 舉個(gè)例子,s3c2410采用ARMv4T架構(gòu)版本,ARM920T處理器系列,其中處理器核為ARM9TDMI。,2020/7/8,基于ARM Architecture的版本命名,規(guī)則:| ARMv| n| variants| x(variants)| 分成四個(gè)組成部分: ARMv - 固定字符,即ARM Version n - 指令集版本號(hào)。迄今

7、為之,ARM架構(gòu)版本發(fā)布了7個(gè)系列,所以n=1:7。其中最新的版本是第7版 variants - 變種。 x(variants) - 排除x后指定的變種 常見的變種有: T - Thumb指令集 M - 長(zhǎng)乘法指令 E - 增強(qiáng)型DSP指令 J - Java加速器Jazelle SIMD - ARM媒體功能擴(kuò)展 例如,ARMv5TxM表示ARM指令集版本為5,支持T變種,不支持M變種,2020/7/8,基于ARM Architecture版本的處理器系列命名,采用上述的架構(gòu),形成一系列的處理器。有時(shí)候還要區(qū)分處理器核和處理器系列。不過,在這里其實(shí)不用區(qū)分太細(xì),畢竟這是功能的小部分的變化,核心是

8、相同的。 規(guī)則:ARMxyzTDMIEJF-S x - 處理器系列 y - 存儲(chǔ)管理/保護(hù)單元 z - cache T - 支持Thumb指令集 D - 支持片上調(diào)試 M - 支持快速乘法器 I - 支持Embedded ICE,支持嵌入式跟蹤調(diào)試 E - 支持增強(qiáng)型DSP指令 J - 支持Jazelle F - 具備向量浮點(diǎn)單元VFP -S - 可綜合版本,2020/7/8,基于ARM的嵌入式系統(tǒng)概述,(1) RISC設(shè)計(jì)思想 與CISC相比,有以下幾個(gè)方面不同: a:設(shè)計(jì)重點(diǎn)不同,RISC重點(diǎn)在于通過軟件的靈活降低硬件執(zhí)行指令的復(fù)雜度,即使得編譯器更高的復(fù)雜性 b:指令集,RISC減少了指

9、令種類,操作也簡(jiǎn)單,基本是一個(gè)周期執(zhí)行一條指令,每一條指令長(zhǎng)度是固定,而CISC指令長(zhǎng)度不固定,執(zhí)行也需要多個(gè)周期 c:寄存器,RISC擁有更多寄存器,都可以存放數(shù)據(jù)或地址,而CISC都是用于特定目的的專用寄存器 d:load-store結(jié)構(gòu),即處理器只處理寄存器中的數(shù)據(jù),獨(dú)立的load-store指令完成數(shù)據(jù)在寄存器和外部存儲(chǔ)器之間的傳送,即數(shù)據(jù)處理與存儲(chǔ)器訪問分開,而CISC能夠直接處理存取器中的數(shù)據(jù) 注:ARM指令集屬于RISC指令集,但與單純的RISC有以下幾方面不同,2020/7/8,基于ARM的嵌入式系統(tǒng)概述,ARM指令集屬于RISC指令集,但與單純的RISC有以下幾方面不同: a

10、:大部分ARM指令是單周期完成的,但也有不是的,如多寄存器的load-store指令的執(zhí)行周期是不確定的,具體由被傳送的寄存器個(gè)數(shù)決定。 b:內(nèi)嵌桶型移位寄存器 c:Thumb 16位指令集 d:條件執(zhí)行 e:增強(qiáng)指令,如添加了強(qiáng)大的數(shù)字信號(hào)處理器(DSP)指令,以支持1616位乘法操作及飽和操作,2020/7/8,基于ARM的嵌入式系統(tǒng)概述,(2) 高速緩存(cache) 1、為什么采用高速緩存 微處理器的時(shí)鐘頻率比內(nèi)存速度提高快得多,高速緩存可以提高內(nèi)存的平均性能。 2、高速緩存的工作原理 高速緩存是一種小型、快速的存儲(chǔ)器,它保存部分主存內(nèi)容的拷貝。,CPU,高速緩存控制器,CACHE,主

11、存,數(shù)據(jù),數(shù)據(jù),地址,2020/7/8,基于ARM的嵌入式系統(tǒng)概述,(3)嵌入式處理器分類,微處理器(Micro Processor Unit, MPU) 微控制器(Micro Controller Unit, MCU) 嵌入式DSP (Digital Signal Processor, DSP) 片上系統(tǒng)(System On Chip),嵌入式微處理器,嵌入式微處理器的基礎(chǔ)是通用計(jì)算機(jī)中的CPU。在應(yīng)用中,將微處理器裝配在專門設(shè)計(jì)的電路板上,只保留和嵌入式應(yīng)用有關(guān)的母板功能,這樣可以大幅度減小系統(tǒng)體積和功耗。為滿嵌入式應(yīng)用 的特殊要求,嵌入式微處理器雖然在功能上和標(biāo)準(zhǔn)微處理器基本是一樣的,但

12、在工作溫度、抗電磁干擾、可靠性等方面都做了各種增強(qiáng)。,目前主要的嵌入式處理器類型有Am186/88、386EX、SC-400、PowerPC、68000、MIPS、ARM/StrongARM系列等,嵌入式微處理器,嵌入式微控制器,嵌入式微控制器又稱單片機(jī),顧名思義,就是將整個(gè)計(jì)算機(jī)系統(tǒng)集成到一塊芯片中。嵌入式微控制器一般以某一種微處理器內(nèi)核為核心,芯片內(nèi)部集成ROM/EPROM、RAM、總線、總線邏輯、定時(shí)/計(jì)數(shù)器、WatchDog、I/O、串行口、脈寬調(diào)制輸出、A/D、D/A、Flash RAM、EEPROM等各種必要功能和外設(shè)。為適應(yīng)不同的應(yīng)用需求,一般一個(gè)系列的單片機(jī)具有多種衍生產(chǎn)品,每

13、種衍生產(chǎn)品的處理器內(nèi)核都是一樣的,不同的是存儲(chǔ)器和外設(shè)的配置及封裝。這樣可以使單片機(jī)最大限度地和應(yīng)用需求相匹配,功能不多不少,從而減少功耗和成本。 和嵌入式微處理器相比,微控制器的最大特點(diǎn)是單片化,體積大大減小,從而使功耗和成本下降、可靠性提高。微控制器是目前嵌入式系統(tǒng)工業(yè)的主流。微控制器的片上外設(shè)資源一般比較豐富,適合于控制,因此稱微控制器。,嵌入式微控制器,嵌入式微控制器目前的品種和數(shù)量最多,比較有代表性的通用系列包括8051、P51XA、MCS-251、MCS-96/196/296、C166/167、MC68HC05/11/12/16、68300等。另外還有許多半通用系列如:支持USB接

14、口的MCU 8XC930/931、C540、C541;支持I2C、CAN-Bus、LCD及眾多專用MCU和兼容系列。目前MCU占嵌入式系統(tǒng)約70的市場(chǎng)份額。,嵌入式DSP處理器,DSP處理器對(duì)系統(tǒng)結(jié)構(gòu)和指令進(jìn)行了特殊設(shè)計(jì),使其適合于執(zhí)行DSP算法,編譯效率較高,指令執(zhí)行速度也較高。在數(shù)字濾波、FFT、譜分析等方面DSP算法正在大量進(jìn)入嵌入式領(lǐng)域,DSP應(yīng)用正從在通用單片機(jī)中以普通指令實(shí)現(xiàn)DSP功能,過渡到采用嵌入式DSP處理器。 嵌入式DSP處理器有兩個(gè)發(fā)展來源,一是DSP處理器經(jīng)過單片化、EMC改造、增加片上外設(shè)成為嵌入式DSP處理器,TI的TMS320C2000 /C5000等屬于此范疇;

15、二是在通用單片機(jī)或SOC中增加DSP協(xié)處理器,例如Intel的MCS-296和Infineon(Siemens)的TriCore。 推動(dòng)嵌入式DSP處理器發(fā)展的另一個(gè)因素是嵌入式系統(tǒng)的智能化,例如各種帶有智能邏輯的消費(fèi)類產(chǎn)品,生物信息識(shí)別終端,帶有加解密算法的鍵盤,ADSL 接入、實(shí)時(shí)語音壓解系統(tǒng),虛擬現(xiàn)實(shí)顯示等。這類智能化算法一般都是運(yùn)算量較大,特別是向量運(yùn)算、指針線性尋址等較多,而這些正是DSP 處理器的長(zhǎng)處所在。,嵌入式DSP處理器,有代表性的產(chǎn)品是Texas Instruments的 TMS320系列和Motorola的DSP56000系列。 TMS320系列處理器包括用于控制的C20

16、00系列,移動(dòng)通信的C5000系列,以及性能更高的C6000和C8000系列。 Motorola公司的DSP56000已經(jīng)發(fā)展成為DSP56000,DSP56100, DSP56200和DSP56300等幾個(gè)不同系列的處理器。 PHILIPS公司也推出了基于可重置嵌入式DSP結(jié)構(gòu)低成本、低功耗技術(shù)上制造的DSP處理器,特點(diǎn)是具備雙Harvard結(jié)構(gòu)和雙乘/累加器單元,應(yīng)用目標(biāo)是大批量消費(fèi)類電子產(chǎn)品。,隨著EDI的推廣和VLSI設(shè)計(jì)的普及化,及半導(dǎo)體工藝的迅速發(fā)展,在一個(gè)硅片上實(shí)現(xiàn)一個(gè)更為復(fù)雜的系統(tǒng)的時(shí)代已來臨,這就是System On Chip(SOC)。各種通用處理器內(nèi)核將作為SOC設(shè)計(jì)公司

17、的標(biāo)準(zhǔn)庫(kù),和許多其它嵌入式系統(tǒng)外設(shè)一樣,成為 VLSI設(shè)計(jì)中一種標(biāo)準(zhǔn)的器件,用標(biāo)準(zhǔn)的 VHDL等語言描述,存儲(chǔ)在器件庫(kù)中。用戶只需定義出其整個(gè)應(yīng)用系統(tǒng),仿真通過后就可以將設(shè)計(jì)圖交給半導(dǎo)體工廠制作樣品。這樣除個(gè)別無法集成的器件以外,整個(gè)嵌入式系統(tǒng)大部分均可集成到一塊或幾塊芯片中去,應(yīng)用系統(tǒng)電路板將變得很簡(jiǎn)潔,對(duì)于減小體積和功耗、提高可靠性非常有利。 它結(jié)合了許多功能區(qū)塊,將功能做在一個(gè)芯片上,ARM RISC、MIPS RISC、DSP或是其他的微處理器核心,加上通信的接口單元,例如通用串行端口(USB)、TCP/IP通信單元、GPRS通信接口、GSM通信接口、IEEE1394、藍(lán)牙模塊接口等等

18、,這些單元以往都是依照各單元的功能做成一個(gè)個(gè)獨(dú)立的處理芯片。,嵌入式片上系統(tǒng)(SoC),2020/7/8,基于ARM的嵌入式系統(tǒng)概述,(4) 嵌入式系統(tǒng)硬件,總線,(4) 嵌入式系統(tǒng)硬件 微處理器(CPU)是嵌入式系統(tǒng)硬件平臺(tái)的核心構(gòu)件,但不是全部。按照馮諾依曼體系結(jié)構(gòu)思想,計(jì)算機(jī)的硬件是由CPU、存儲(chǔ)器和I/O設(shè)備三部分組成的??偩€是把CPU與存儲(chǔ)器、I/O設(shè)備相連接的信息通道,但總線并不僅僅指的是一束信號(hào)線,而應(yīng)包含相應(yīng)的通信協(xié)議。按照使用場(chǎng)合的不同,總線分成芯片級(jí)總線(CPU總線)、板卡級(jí)總線(內(nèi)總線)和系統(tǒng)級(jí)總線(外總線)。,總線和總線橋,2020/7/8,基于ARM的嵌入式系統(tǒng)概述,

19、(4) 嵌入式系統(tǒng)硬件 AMBA總線是一個(gè)多總線系統(tǒng)。規(guī)范定義了三種可以組合使用的不同類型的總線:AHB(Advanced High-performance Bus)、ASB(Advanced System Bus)和APB(Advanced Peripheral Bus)。 AHB:CPU核、存儲(chǔ)器控制器、中斷控制器、LCD控制器、DMA和USB主機(jī)模塊等(可以包括多個(gè)主模塊) APB:WATCHDOG、IIS、IIC、PWM、ADC、UART、GPIO、RTC等(只有一個(gè)主模塊) ASB:連接高性能系統(tǒng)模塊,在某些需高速且不必使用AHB總線的場(chǎng)合使用,2020/7/8,基于ARM的嵌入式系

20、統(tǒng)概述,(5) 嵌入式存儲(chǔ)器 大多數(shù)嵌入式產(chǎn)品的存儲(chǔ)器結(jié)構(gòu)是分層的,即多種類型的存儲(chǔ)器 在決定存儲(chǔ)器層次、寬度、類型等特性時(shí),需綜合考慮產(chǎn)品的價(jià)格、性能、功耗等因素,存儲(chǔ)器系統(tǒng),寄存器,高速緩存SRAM,主存儲(chǔ)器DRAM,本地存儲(chǔ)器 Flash、ROM、磁盤,網(wǎng)絡(luò)存儲(chǔ)器 Flash、ROM、磁盤,時(shí)鐘周期,0,110,50100,20000000,分層結(jié)構(gòu),存儲(chǔ)器種類,RAM:隨機(jī)存取存儲(chǔ)器 SRAM:靜態(tài)隨機(jī)存儲(chǔ)器(高速存儲(chǔ)器或cache)不需刷新電路即能保存內(nèi)部存儲(chǔ)數(shù)據(jù)。 DRAM:動(dòng)態(tài)隨機(jī)存儲(chǔ)器,一般使用電容存儲(chǔ),需經(jīng)常刷新 1)SRAM比DRAM快 2)SRAM比DRAM耗電多 3)D

21、RAM存儲(chǔ)密度比SRAM高得多 4)DRAM需要周期性刷新 SDRAM:同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器,是DRAM中的一種,因與處理器總線同步,故能突發(fā)式地輸出到總線 ROM:只讀存儲(chǔ)器,閃速存儲(chǔ)器(FLASH),PROM:可編程ROM EPROM:可擦除、可編程ROM EEPROM:電可擦除、可編程ROM FLASH:閃存 相對(duì)傳統(tǒng)的EPROM芯片,這種芯片可以用電氣的方法快速地擦寫 由于快擦寫存儲(chǔ)器不需要存儲(chǔ)電容器,故其集成度更高,制造成本低于DRAM 它使用方便,既具有SRAM讀寫的靈活性和較快的訪問速度,又具有ROM在斷電后可不丟失信息的特點(diǎn),所以快擦寫存儲(chǔ)器技術(shù)發(fā)展十分迅速 FLASH的架構(gòu)大致

22、上可分為具程序執(zhí)行能力的NOR架構(gòu)以及儲(chǔ)存數(shù)據(jù)的NAND架構(gòu),NOR技術(shù)和NAND技術(shù),NOR Flash市場(chǎng)目前由Intel和AMD公司主導(dǎo),其主要功能是程序的儲(chǔ)存,如PC中的BIOS NOR的特點(diǎn)是芯片內(nèi)執(zhí)行(XIP, eXecute In Place),這樣應(yīng)用程序可以直接在flash閃存內(nèi)運(yùn)行,不必再把代碼讀到系統(tǒng)RAM中。 NOR的傳輸效率很高,在14MB的小容量時(shí)具有很高的成本效益,但是很低的寫入和擦除速度大大影響了它的性能。 NAND Flash相對(duì)上屬于封閉的市場(chǎng),專利權(quán)掌握在少數(shù)廠商手中,Toshiba 和Samsung公司為主,其主要功能是數(shù)據(jù)的儲(chǔ)存,如小型存儲(chǔ)卡、隨身電子

23、盤等都是 NAND結(jié)構(gòu)能提供極高的單元密度,可以達(dá)到高存儲(chǔ)密度,并且寫入和擦除的速度也很快。應(yīng)用NAND的困難在于flash的管理需要特殊的系統(tǒng)接口。,2020/7/8,基于ARM的嵌入式系統(tǒng)概述,(6) 初始化啟動(dòng)代碼 (1)初始化硬件配置 (2)診斷 (3)引導(dǎo) 初始化硬件配置包括:設(shè)置堆棧指針、硬件工作時(shí)鐘、存儲(chǔ)器映射等等,I/O寄存器,快速SRAM,大塊DRAM,啟動(dòng)ROM,啟動(dòng)之前,I/O寄存器,快速SRAM,大塊DRAM,啟動(dòng)ROM,啟動(dòng)之后,2020/7/8,基于ARM的嵌入式系統(tǒng)概述,(6) 初始化啟動(dòng)代碼 診斷硬件是否能正常工作,不能工作的是否隔離,即識(shí)別和隔離故障。 引導(dǎo)過

24、程包括裝載一個(gè)映像文件并將控制權(quán)交給它,裝載可以包括拷貝整個(gè)程序(代碼和數(shù)據(jù)),也可以只拷貝易變(volatile)變量的數(shù)據(jù)到RAM中,啟動(dòng)后,通過更改PC指向映像文件的起始地址,從而交出控制權(quán),ARM的特點(diǎn),RISC指令集 Load/Store體系結(jié)構(gòu) 固定的32位指令 大多數(shù)指令單周期完成 Thumb/DSP/jazeller功能擴(kuò)展 低功耗,2020/7/8,小結(jié),什么是ARM ARM的特點(diǎn) ARM的分類 ARM的命名規(guī)則 嵌入式硬件體系結(jié)構(gòu) 嵌入式存儲(chǔ)器 存儲(chǔ)器映射,第二章 ARM體系結(jié)構(gòu)和存儲(chǔ)系統(tǒng),2020/7/8,內(nèi)容,流水線(pipeline),存儲(chǔ),模式(model),寄存器

25、,2020/7/8,存儲(chǔ),地址空間,ARM結(jié)構(gòu)使用單個(gè)平面的232個(gè)8位字節(jié)地址空間。字節(jié)地址按照無符號(hào)數(shù)排列,從0到2321。地址空間可以看作是包含230個(gè)32位字 ,或231個(gè)16位半字。 32位地址線/數(shù)據(jù)線,支持如下數(shù)據(jù)類型: 字節(jié)(byte) 8bits 半字(Half word) 16bits,半字必須對(duì)齊2字節(jié)邊界 字(Word) 32bits,字必須對(duì)齊4字節(jié)邊界,2020/7/8,存儲(chǔ),ARM處理器可以將存儲(chǔ)器中的字以下列格式存儲(chǔ): 大端格式(Big-endian):字?jǐn)?shù)據(jù)的高字節(jié)存儲(chǔ)在低地址中,而低字節(jié)存儲(chǔ)在高地址中 小端格式(Little-endian):與小端對(duì)齊相反,

26、字?jǐn)?shù)據(jù)的高字節(jié)存儲(chǔ)在高地址中,低字節(jié)存儲(chǔ)在低地址中,2020/7/8,ARM結(jié)構(gòu)通常希望所有的存儲(chǔ)器訪問都合理的對(duì)齊。具體來說就是字訪問的地址通常是字對(duì)齊的,而半字訪問使用的地址是半字對(duì)齊的。不按這種方式對(duì)齊的存儲(chǔ)器訪問稱為非對(duì)齊的存儲(chǔ)器訪問。 非對(duì)齊的取指 不可預(yù)知結(jié)果 ARM狀態(tài)忽略低2位;Thumb狀態(tài)忽略最低位 (忽略由存儲(chǔ)器實(shí)現(xiàn)) 非對(duì)齊的數(shù)據(jù)訪問 執(zhí)行結(jié)果不可預(yù)測(cè) 忽略字單元地址的低2位;忽略半字單元地址的最低位(忽略可能由處理器或存儲(chǔ)器完成),存儲(chǔ),非對(duì)齊的存儲(chǔ)器訪問,指令流水線,為增加處理器指令流的速度,ARM7 系列使用3級(jí)流水線. 允許多個(gè)操作同時(shí)處理,比逐條指令執(zhí)行要快。

27、 PC指向正被取指的指令,而非正在執(zhí)行的指令,Fetch,Decode,Execute,從存儲(chǔ)器中讀取指令,解碼指令,寄存器讀(從寄存器Bank) 移位及ALU操作 寄存器寫(到寄存器Bank ),PCPC,PC-4PC-2,PC - 8PC - 4,ARMThumb,2020/7/8,處理器狀態(tài),處理器狀態(tài),ARM處理器包含32位ARM指令集和16位Thumb指令集。因此ARM處理器有兩種操作態(tài): ARM狀態(tài):32位,這種狀態(tài)下執(zhí)行的是字方式的ARM指令; Thumb狀態(tài):16位,這種狀態(tài)下執(zhí)行半字方式的Thumb指令。,注意:兩個(gè)狀態(tài)之間的切換并不影響處理器模式或寄存器內(nèi)容。,2020/7

28、/8,處理器模式,簡(jiǎn)介,ARM體系結(jié)構(gòu)支持7種處理器模式,分別為:用戶模式、快中斷模式、中斷模式、管理模式、中止模式、未定義模式和系統(tǒng)模式,如下表所示。這樣的好處是可以更好的支持操作系統(tǒng)并提高工作效率。 特權(quán)模式:除用戶模式外的6種模式 異常模式:除系統(tǒng)模式外的特權(quán)模式,2020/7/8,處理器模式,2020/7/8,內(nèi)部寄存器,簡(jiǎn)介,在ARM處理器內(nèi)部有37個(gè)用戶可見的寄存器: 30個(gè)通用寄存器 6個(gè)狀態(tài)寄存器 1個(gè)專用于記錄當(dāng)前狀態(tài) 5個(gè)專用于記錄模式切換前的狀態(tài) 1個(gè)程序計(jì)數(shù)器PC 在不同的工作模式和處理器狀態(tài)下,程序員可以訪問的寄存器也不盡相同。,2020/7/8,ARM狀態(tài)各模式下可

29、以訪問的寄存器,2020/7/8,內(nèi)部寄存器,r0 r12:通用寄存器。當(dāng)C和匯編互相調(diào)用時(shí),r0 r3用來傳遞函數(shù)參數(shù),可記為a0 a3 r13:用于各種模式下的堆棧寄存器(sp) r14:用來保存程序返回地址的鏈接寄存器(lr) r15:程序計(jì)數(shù)器(pc) r8_FIQ r12_FIQ:允許快速中斷處理 r8_User r12_User:除了FIQ模式外各模式公用 除了User和System模式外,各種模式都有自己獨(dú)立的r13和r14,2020/7/8,內(nèi)部寄存器,R14寄存器與子程序調(diào)用,MOV PC,LR,R14(地址A),1.程序A執(zhí)行過程中調(diào)用程序B;,操作流程,2.程序跳轉(zhuǎn)至標(biāo)號(hào)

30、Label,執(zhí)行程序B。同時(shí)硬件將“BL Label”指令的下一條指令所在地址存入R14;,3.程序B執(zhí)行最后,將R14寄存器的內(nèi)容放入PC,返回程序A;,2020/7/8,內(nèi)部寄存器,正常操作時(shí),從R15讀取的值是處理器正在取指的地址,即當(dāng)前正在執(zhí)行指令的地址加上8個(gè)字節(jié)(兩條ARM指令的長(zhǎng)度)。由于ARM指令總是以字為單位,所以R15寄存器的最低兩位總是為0。,2020/7/8,程序狀態(tài)寄存器,簡(jiǎn)介,ARM內(nèi)核包含1個(gè)CPSR和5個(gè)供異常處理程序使用的SPSR。CPSR反映了當(dāng)前處理器的狀態(tài),其包含: 4個(gè)條件代碼標(biāo)志(負(fù)(N)、零(Z)、進(jìn)位(C)和溢出(V) ); 2個(gè)中斷禁止位,分別

31、控制一種類型的中斷; 5個(gè)對(duì)當(dāng)前處理器模式進(jìn)行編碼的位; 1個(gè)用于指示當(dāng)前執(zhí)行指令(ARM還是Thumb)的位。,2020/7/8,程序狀態(tài)寄存器,簡(jiǎn)介,條件代碼標(biāo)志,保留,控制位,溢出標(biāo)志,進(jìn)位或借位擴(kuò)展,零,負(fù)或小于,IRQ禁止,FIQ禁止,狀態(tài)位,模式位,N,Z,C,V,I,T,F,CPSR寄存器的格式,CPSR模式位設(shè)置表,2020/7/8,程序狀態(tài)寄存器,簡(jiǎn)介,每個(gè)異常模式還帶有一個(gè)程序狀態(tài)保存寄存器 (SPSR),它用于保存在異常事件發(fā)生之前的CPSR。CPSR和SPSR通過特殊指令進(jìn)行訪問。 注意:如果通過程序修改CPSR寄存器中的模式位進(jìn)入異常模式,那么硬件將不會(huì)把CPSR保存

32、至SPSR中。,2020/7/8,小結(jié),ARM處理器存儲(chǔ)格式 指令流水線 ARM處理器狀態(tài) ARM處理器模式 SP LR PC CPSR SPSR,第三章 ARM指令系統(tǒng),2020/7/8,內(nèi)容,ARM指令集,ARM匯編程序設(shè)計(jì),ARM處理器尋址,2020/7/8,ARM處理器尋址方式,尋址方式分類,尋址方式是根據(jù)指令中給出的地址碼字段來實(shí)現(xiàn)尋找真實(shí)操作數(shù)地址的方式。ARM處理器具有9種基本尋址方式。 1.寄存器尋址;2.立即尋址; 3.寄存器移位尋址;4.寄存器間接尋址; 5.基址尋址;6.多寄存器尋址; 7.堆棧尋址;8.塊拷貝尋址; 9.相對(duì)尋址。,2020/7/8,操作數(shù)的值在寄存器中

33、,指令中的地址碼字段指出的是寄存器編號(hào),指令執(zhí)行時(shí)直接取出寄存器值來操作。寄存器尋址指令舉例如下: MOV R1,R2 ;將R2的值存入R1 SUB R0,R1,R2 ;將R1的值減去R2的值,結(jié)果保存到R0,ARM處理器尋址方式,尋址方式分類寄存器尋址,MOV R1,R2,0 xAA,2020/7/8,立即尋址指令中的操作碼字段后面的地址碼部分即是操作數(shù)本身,也就是說,數(shù)據(jù)就包含在指令當(dāng)中,取出指令也就取出了可以立即使用的操作數(shù)(這樣的數(shù)稱為立即數(shù))。立即尋址指令舉例如下: SUBSR0,R0,#1 ;R0減1,結(jié)果放入R0,并且影響標(biāo)志位 MOV R0, #0 xFF000 ;將立即數(shù)0

34、xFF000裝入R0寄存器,ARM處理器尋址方式,尋址方式分類立即尋址,MOV R0,#0 xFF00,0 xFF00,從代碼中獲得數(shù)據(jù),2020/7/8,寄存器移位尋址是ARM指令集特有的尋址方式。當(dāng)?shù)?個(gè)操作數(shù)是寄存器移位方式時(shí),第2個(gè)寄存器操作數(shù)在與第1個(gè)操作數(shù)結(jié)合之前,選擇進(jìn)行移位操作。寄存器移位尋址指令舉例如下: MOVR0,R2,LSL #3 ;R2的值左移3位,結(jié)果放入R0, ;即是R0=R28 ANDSR1,R1,R2,LSL R3 ;R2的值左移R3位,然后和R1相 ;“與”操作,結(jié)果放入R1,ARM處理器尋址方式,尋址方式分類寄存器移位尋址,MOV R0,R2,LSL #3

35、,0 x08,0 x08,邏輯左移3位,2020/7/8,指令集介紹,ARM指令集第2個(gè)操作數(shù),2020/7/8,寄存器間接尋址指令中的地址碼給出的是一個(gè)通用寄存器的編號(hào),所需的操作數(shù)保存在寄存器指定地址的存儲(chǔ)單元中,即寄存器為操作數(shù)的地址指針。寄存器間接尋址指令舉例如下: LDRR1,R2;將R2指向的存儲(chǔ)單元的數(shù)據(jù)讀出 ;保存在R1中 SWPR1,R1,R2;將寄存器R1的值和R2指定的存儲(chǔ) ;單元的內(nèi)容交換,ARM處理器尋址方式,尋址方式分類寄存器間接尋址,LDR R0,R2,0 xAA,2020/7/8,基址尋址就是將基址寄存器的內(nèi)容與指令中給出的偏移量(4K)相加/減,形成操作數(shù)的有

36、效地址?;穼ぶ酚糜谠L問基址附近的存儲(chǔ)單元,常用于查表、數(shù)組操作、功能部件寄存器訪問等。寄存器間接尋址是偏移量為0的基址加偏移尋址。 基址尋址指令舉例如下(前索引尋址): LDRR2,R3,#0 x0C ;讀取R3+0 x0C地址上的存儲(chǔ)單元的內(nèi)容,放入R2 STRR1,R0,#-4! ;先R0=R0-4,然后把R0的值寄存 ;到保存到R1指定的存儲(chǔ)單元,ARM處理器尋址方式,尋址方式分類基址尋址,LDR R2,R3,#0 x0C,0 xAA,將R3+0 x0C作為地址裝載數(shù)據(jù),基址尋址指令舉例如下: LDRR0,R1 ,#4 ;R0=R1,R1R14 ;后索引基址尋址 ;ARM這種自動(dòng)索引機(jī)

37、制不消耗額外的時(shí)間 LDR R0,R1,R2 ;R0=R1+R2,ARM處理器尋址方式,尋址方式分類基址尋址,2020/7/8,多寄存器尋址一次可傳送幾個(gè)寄存器值,允許一條指令傳送16個(gè)寄存器的任何子集或所有寄存器。多寄存器尋址指令舉例如下: LDMIAR1!,R2-R7,R12 ;將R1指向的單元中的數(shù)據(jù)讀出到 ;R2R7、R12中(R1自動(dòng)加4) STMIAR0!,R2-R7,R12 ;將寄存器R2R7、R12的值保 ;存到R0指向的存儲(chǔ), 單元中(R0自動(dòng)加4),ARM處理器尋址方式,尋址方式分類多寄存器尋址,LDMIA R1!,R2-R4,R6,0 x40000010,堆棧是一個(gè)按特定

38、順序進(jìn)行存取的存儲(chǔ)區(qū),操作順序?yàn)椤昂筮M(jìn)先出” 。堆棧尋址是隱含的,它使用一個(gè)專門的寄存器(堆棧指針)指向一塊存儲(chǔ)區(qū)域(堆棧),指針?biāo)赶虻拇鎯?chǔ)單元即是堆棧的棧頂。存儲(chǔ)器堆??煞譃閮煞N: 向上生長(zhǎng):向高地址方向生長(zhǎng),稱為遞增堆棧 向下生長(zhǎng):向低地址方向生長(zhǎng),稱為遞減堆棧,ARM處理器尋址方式,尋址方式分類堆棧尋址,2020/7/8,ARM處理器尋址方式,尋址方式分類堆棧尋址,0 x12345678,0 x12345678,2020/7/8,堆棧指針指向最后壓入的堆棧的有效數(shù)據(jù)項(xiàng),稱為滿堆棧(壓棧時(shí)先修改sp,后數(shù)據(jù)壓棧;出棧時(shí)先數(shù)據(jù)出棧,后修改sp) 堆棧指針指向下一個(gè)待壓入數(shù)據(jù)的空位置,稱為空

39、堆棧。 (壓棧時(shí)先數(shù)據(jù)壓棧,后修改sp;出棧時(shí)先修改sp,后數(shù)據(jù)出棧),ARM處理器尋址方式,尋址方式分類堆棧尋址,0 x12345678,2020/7/8,所以可以組合出四種類型的堆棧方式: 滿遞增:堆棧向上增長(zhǎng),堆棧指針指向內(nèi)含有效數(shù)據(jù)項(xiàng)的最高地址。指令如LDMFA、STMFA等; 空遞增:堆棧向上增長(zhǎng),堆棧指針指向堆棧上的第一個(gè)空位置。指令如LDMEA、STMEA等; 滿遞減:堆棧向下增長(zhǎng),堆棧指針指向內(nèi)含有效數(shù)據(jù)項(xiàng)的最低地址。指令如LDMFD、STMFD等; 空遞減:堆棧向下增長(zhǎng),堆棧指針向堆棧下的第一個(gè)空位置。指令如LDMED、STMED等。,ARM處理器尋址方式,尋址方式分類堆棧尋

40、址,2020/7/8,多寄存器傳送指令用于將一塊數(shù)據(jù)從存儲(chǔ)器的某一位置拷貝到另一位置。 如: STMIAR0!,R1-R7;將R1R7的數(shù)據(jù)保存到存儲(chǔ)器中。 ;存儲(chǔ)指針R0在保存第一個(gè)值之后增加, ;增長(zhǎng)方向?yàn)橄蛏显鲩L(zhǎng)。 STMIBR0!,R1-R7;將R1R7的數(shù)據(jù)保存到存儲(chǔ)器中。 ;存儲(chǔ)指針R0在保存第一個(gè)值之前增加, ;增長(zhǎng)方向?yàn)橄蛏显鲩L(zhǎng)。,ARM處理器尋址方式,尋址方式分類塊拷貝尋址,2020/7/8,相對(duì)尋址是基址尋址的一種變通。由程序計(jì)數(shù)器PC提供基準(zhǔn)地址,指令中的地址碼字段作為偏移量,兩者相加后得到的地址即為操作數(shù)的有效地址。相對(duì)尋址指令舉例如下: BLSUBR1;調(diào)用到SUBR

41、1子程序 BEQLOOP;條件跳轉(zhuǎn)到LOOP標(biāo)號(hào)處 . LOOPMOVR6,#1 . SUBR1.,ARM處理器尋址方式,尋址方式分類相對(duì)尋址,2020/7/8,ARM指令小節(jié)目錄,1.指令格式 2.數(shù)據(jù)處理指令 3.條件碼 4.乘法指令 5.ARM分支指令 6.存儲(chǔ)器訪問指令 7.雜項(xiàng)指令 8.偽指令,2020/7/8,指令集介紹,ARM指令集指令格式,2020/7/8,ARM是三地址指令格式,指令的基本格式如下:,指令集介紹,ARM指令集基本指令格式, S ,其中號(hào)內(nèi)的項(xiàng)是必須的,號(hào)內(nèi)的項(xiàng)是可選的。 各項(xiàng)的說明如下:,opcode:指令助記符;cond:執(zhí)行條件; S:是否影響CPSR寄存

42、器的值; Rd:目標(biāo)寄存器; Rn:第1個(gè)操作數(shù)的寄存器; operand2:第2個(gè)操作數(shù);,例:,2020/7/8,ARM指令的基本格式如下:,指令集介紹,ARM指令集第2個(gè)操作數(shù), S ,靈活的使用第2個(gè)操作數(shù)“operand2”能夠提高代碼效率。它有如下的形式: #immed_8r常數(shù)表達(dá)式; Rm寄存器方式; Rm,shift寄存器移位方式;,2020/7/8,指令集介紹,ARM指令集第2個(gè)操作數(shù),#immed_8r常數(shù)表達(dá)式 該常數(shù)必須對(duì)應(yīng)8位位圖,即一個(gè)8位的常數(shù)通過循環(huán)右移偶數(shù)位得到。,循環(huán)右移10位,8位常數(shù),例如: ADDR1,R2,#0 x0F (0 x103)、(0 x1

43、04)(0 x102),2020/7/8,指令集介紹,ARM指令集第2個(gè)操作數(shù),Rm寄存器方式 在寄存器方式下,操作數(shù)即為寄存器的數(shù)值。 例如: SUBR1,R1,R2,2020/7/8,指令集介紹,ARM指令集第2個(gè)操作數(shù),Rm,shift寄存器移位方式 將寄存器的移位結(jié)果作為操作數(shù)(移位操作不消耗額外的時(shí)間),但Rm值保持不變,2020/7/8,指令集介紹,ARM指令集第2個(gè)操作數(shù),Rm,shift寄存器移位方式 例如: ADDR1,R1,R1,LSL #3;R1=R1+R1R3,2020/7/8,ARM指令小節(jié)目錄,1.指令格式 2.數(shù)據(jù)處理指令 3.條件碼 4.乘法指令 5.ARM分支

44、指令 6.存儲(chǔ)器訪問指令 7.雜項(xiàng)指令 8.偽指令,2020/7/8,簡(jiǎn)單的ARM程序,;文件名:test.s ;功能:實(shí)現(xiàn)兩個(gè)寄存器相加 ;說明:使用ARMulate軟件仿真調(diào)試 AREAExample1,CODE,READONLY ;聲明代碼段Example1 ENTRY ;標(biāo)識(shí)程序入口 CODE32 ;聲明32位ARM指令 START MOVR0,#0 ;設(shè)置參數(shù) MOVR1,#10 LOOPBLADD_SUB ;調(diào)用子程序ADD_SUB BLOOP ;跳轉(zhuǎn)到LOOP ADD_SUB ADDSR0,R0,R1 ;R0 = R0 + R1 MOVPC,LR ;子程序返回 END ;文件結(jié)束

45、,2020/7/8,指令集介紹,ARM指令集ARM數(shù)據(jù)處理指令,數(shù)據(jù)處理指令大致可分為3類: 數(shù)據(jù)傳送指令; 算術(shù)邏輯運(yùn)算指令; 比較指令。 數(shù)據(jù)處理指令只能對(duì)寄存器的內(nèi)容進(jìn)行操作,而不能對(duì)內(nèi)存中的數(shù)據(jù)進(jìn)行操作。所有ARM數(shù)據(jù)傳送或算術(shù)邏輯運(yùn)算指令均可選擇使用S后綴,以使指令影響CPSR中的標(biāo)志。,2020/7/8,ARM數(shù)據(jù)處理指令數(shù)據(jù)傳送,注:當(dāng)后綴S時(shí),這些指令根據(jù)結(jié)果更新標(biāo)志N和Z,在計(jì)算Operand2時(shí)更新標(biāo)志C,不影響標(biāo)志V。,2020/7/8,ARM數(shù)據(jù)處理指令算術(shù)運(yùn)算,注:這些指令影響N,Z,C和V標(biāo)志位。,2020/7/8,ARM數(shù)據(jù)處理指令邏輯運(yùn)算指令,注:當(dāng)后綴S時(shí),這

46、些指令根據(jù)結(jié)果更新標(biāo)志N和Z,在計(jì)算Operand2時(shí)更新標(biāo)志C,不影響標(biāo)志V。,2020/7/8,ARM數(shù)據(jù)處理指令比較指令,注:這些指令影響N,Z,C和V標(biāo)志位。 如: CMN R0,1 ;測(cè)試R0的值是否為1的補(bǔ)碼,若是z置位,2020/7/8,ARM指令小節(jié)目錄,1.指令格式 2.數(shù)據(jù)處理指令 3.條件碼 4.乘法指令 5.ARM分支指令 6.存儲(chǔ)器訪問指令 7.雜項(xiàng)指令 8.偽指令,2020/7/8,ARM指令的基本格式如下:,指令集介紹,ARM指令集條件碼, S ,使用條件碼“cond”可以實(shí)現(xiàn)高效的邏輯操作(節(jié)省跳轉(zhuǎn)和條件語句),提高代碼效率。,2020/7/8,指令條件碼表,2

47、020/7/8,指令集介紹,ARM指令集條件碼,C代碼: if(a b) a+; else b+;,對(duì)應(yīng)的匯編代碼: CMPR0,R1 ;R0(a)與R1(b)比較 ADDHIR0,R0,#1 ;若R0R1,則R0=R0+1 ADDLSR1,R1,#1 ;若R0R1,則R1=R1+1,示例:,2020/7/8,ARM指令小節(jié)目錄,1.指令格式 2.數(shù)據(jù)處理指令 3.條件碼 4.乘法指令 5.ARM分支指令 6.存儲(chǔ)器訪問指令 7.雜項(xiàng)指令 8.偽指令,2020/7/8,指令集介紹,ARM指令集乘法指令,ARM具有三種乘法指令,分別為: 3232位乘法指令; 32 32位乘加指令; 32 32位

48、結(jié)果為64位的乘/乘加指令。,2020/7/8,ARM指令乘法指令,2020/7/8,ARM指令小節(jié)目錄,1.指令格式 2.數(shù)據(jù)處理指令 3.條件碼 4.乘法指令 5.ARM分支指令 6.存儲(chǔ)器訪問指令 7.雜項(xiàng)指令 8.偽指令,2020/7/8,指令集介紹,ARM指令集分支指令,在ARM中有兩種方式可以實(shí)現(xiàn)程序的跳轉(zhuǎn),一種是使用分支指令直接跳轉(zhuǎn),另一種則是直接向PC寄存器賦值實(shí)現(xiàn)跳轉(zhuǎn)。 分支指令有以下三種: 分支指令B; 帶鏈接的分支指令BL; 帶狀態(tài)切換的分支指令BX。,2020/7/8,ARM指令分支指令,2020/7/8,ARM指令小節(jié)目錄,1.指令格式 2.數(shù)據(jù)處理指令 3.條件碼

49、4.乘法指令 5.ARM分支指令 6.存儲(chǔ)器訪問指令 7.雜項(xiàng)指令 8.偽指令,2020/7/8,指令集介紹,ARM指令集存儲(chǔ)器訪問指令,ARM處理器是典型的RISC處理器,對(duì)存儲(chǔ)器的訪問只能使用加載和存儲(chǔ)指令實(shí)現(xiàn)。 存儲(chǔ)器訪問指令分為: 單寄存器操作指令和多寄存器操作指令。,2020/7/8,ARM存儲(chǔ)器訪問指令單寄存器加載,2020/7/8,ARM存儲(chǔ)器訪問指令單寄存器存儲(chǔ),2020/7/8,LDR和STR字和無符號(hào)字節(jié)加載/存儲(chǔ)指令 LDR指令用于從內(nèi)存中讀取單一字或字節(jié)數(shù)據(jù)存入寄存器中,STR指令用于將寄存器中的單一字或字節(jié)數(shù)據(jù)保存到內(nèi)存。指令格式如下:,ARM存儲(chǔ)器訪問指令單寄存器存

50、儲(chǔ),LDRcondTRd, ;將指定地址上的字?jǐn)?shù)據(jù)讀入Rd STRcondTRd, ;將Rd中的字?jǐn)?shù)據(jù)存入指定地址 LDRcondBTRd, ;將指定地址上的字節(jié)數(shù)據(jù)讀入Rd STRcondBTRd, ;將Rd中的字節(jié)數(shù)據(jù)存入指定地址,2020/7/8,ARM存儲(chǔ)器訪問指令單寄存器存儲(chǔ),ARM指令集提供了幾種存儲(chǔ)器尋址的不同方式,這些方式是以下幾種變址模式的組合:,注:”!”表示要把計(jì)算出的地址回寫到基址寄存器,2020/7/8,LDR和STR半字和有符號(hào)字節(jié)加載/存儲(chǔ)指令 這類LDR/STR指令可加載有符號(hào)半字或字節(jié),可加載/存儲(chǔ)無符號(hào)半字。偏移量格式、尋址方式與加載/存儲(chǔ)字和無符號(hào)字節(jié)指令

51、相同。,ARM存儲(chǔ)器訪問指令單寄存器存儲(chǔ),LDRcondSB Rd, ;將指定地址上的有符號(hào)字節(jié)讀入Rd LDRcondSH Rd, ;將指定地址上的有符號(hào)半字讀入Rd LDRcondH Rd, ;將指定地址上的半字?jǐn)?shù)據(jù)讀入Rd STRcondH Rd, ;將Rd中的半字?jǐn)?shù)據(jù)存入指定地址,注意: 半字?jǐn)?shù)據(jù)加載,寄存器高兩個(gè)字節(jié)置零 ; 字節(jié)數(shù)據(jù)加載,寄存器高三個(gè)字節(jié)置零,2020/7/8,LDR和STR指令應(yīng)用示例: 1.加載/存儲(chǔ)字和無符號(hào)字節(jié)指令 LDRR2,R5;將R5指向地址的字?jǐn)?shù)據(jù)存入R2 STRR1,R0,#0 x04;將R1的數(shù)據(jù)存儲(chǔ)到R0+0 x04地址 LDRBR3,R2,#

52、-1 ;將R2指向地址的字節(jié)數(shù)據(jù)存入R3,R2R21 STRBR0,R3,-R8, ASR 2 ;R0-R3-R8/4,存儲(chǔ)R0的最低有效字節(jié) 2.加載/存儲(chǔ)半字和有符號(hào)字節(jié)指令 LDRSB R1,R0,R3;將R0+R3地址上的字節(jié)數(shù)據(jù)存入R1, ;高24位用符號(hào)擴(kuò)展 LDRH R6,R2,#2;將R2指向地址的半字?jǐn)?shù)據(jù)存入R6,高16位用0擴(kuò)展 ;讀出后,R2=R2+2 STRH R1,R0,#2!;將R1的半字?jǐn)?shù)據(jù)保存到R0+2地址, ;只修改低2字節(jié)數(shù)據(jù),然后R0=R0+2,ARM存儲(chǔ)器訪問指令單寄存器存儲(chǔ),2020/7/8,ARM存儲(chǔ)器訪問指令多寄存器存取,多寄存器加載/存儲(chǔ)指令可以

53、實(shí)現(xiàn)在一組寄存器和一塊連續(xù)的內(nèi)存單元之間傳輸數(shù)據(jù)。LDM為加載多個(gè)寄存器;STM為存儲(chǔ)多個(gè)寄存器。允許一條指令傳送16個(gè)寄存器的任何子集或所有寄存器。它們主要用于現(xiàn)場(chǎng)保護(hù)、數(shù)據(jù)復(fù)制、常數(shù)傳遞等。,2020/7/8,ARM存儲(chǔ)器訪問指令多寄存器存取,多寄存器加載/存儲(chǔ)指令格式如下: LDMcond Rn!,reglist STMcond Rn!,reglist cond:指令執(zhí)行的條件; 模式:控制地址的增長(zhǎng)方式,一共有8種模式; !:表示在操作結(jié)束后,將最后的地址寫回Rn中; reglist :表示寄存器列表,可以包含多個(gè)寄存器,它們使用“,”隔開,如R1,R2,R6-R9,寄存器由小到大排列

54、; :可選后綴。允許在用戶模式或系統(tǒng)模式下使用。它有以下兩個(gè)功能: 1)若op是LDM且寄存器列表包含R15時(shí),那么除了正常的多寄存器傳送外,還將SPSR也復(fù)制到CPSR中。這用于異常處理返回,僅在異常模式下使用。 2)數(shù)據(jù)傳入或傳出的是用戶模式下的寄存器,而不是當(dāng)前模式的寄存器。,2020/7/8,ARM存儲(chǔ)器訪問指令多寄存器存取,多寄存器加載/存儲(chǔ)指令的8種模式如下表所示,右邊四種為堆棧操作、左邊四種為數(shù)據(jù)傳送操作。,進(jìn)行數(shù)據(jù)復(fù)制時(shí),先設(shè)置好源數(shù)據(jù)指針和目標(biāo)指針,然后使用塊拷貝尋址指令LDMIA/STMIA、LDMIB/STMIB、LDMDA/STMDA、LDMDB/STMDB進(jìn)行讀取和存

55、儲(chǔ) 。 進(jìn)行堆棧操作操作時(shí),要先設(shè)置堆棧指針(SP),然后使用堆棧尋址指令STMFD/LDMFD 、STMED/LDMED、STMFA/LDMFA和STMEA/LDMEA實(shí)現(xiàn)堆棧操作。,2020/7/8,ARM存儲(chǔ)器訪問指令多寄存器存取,;使用數(shù)據(jù)塊傳送指令進(jìn)行堆棧操作 STMDAR0!,R5-R6 . . . LDMIBR0!,R5-R6,;使用堆棧指令進(jìn)行堆棧操作 STMEDR13!,R5-R6 . . . LDMEDR13!,R5-R6,兩段代碼的執(zhí)行結(jié)果是一樣的,但是使用堆棧指令的壓棧和出棧操作編程很簡(jiǎn)單(只要前后一致即可),而使用數(shù)據(jù)塊指令進(jìn)行壓棧和出棧操作則需要考慮空與滿、加與減對(duì)

56、應(yīng)的問題。,2020/7/8,ARM存儲(chǔ)器訪問指令寄存器和存儲(chǔ)器交換指令,SWP指令用于將一個(gè)內(nèi)存單元(該單元地址放在寄存器Rn中)的內(nèi)容讀取到一個(gè)寄存器Rd中,同時(shí)將另一個(gè)寄存器Rm的內(nèi)容寫入到該內(nèi)存單元中。使用SWP可實(shí)現(xiàn)信號(hào)量操作。指令格式如下: SWPcondB Rd,Rm,Rn 其中,B為可選后綴,若有B,則交換字節(jié),否則交換32位字;Rd用于保存從存儲(chǔ)器中讀入的數(shù)據(jù);Rm的數(shù)據(jù)用于存儲(chǔ)到存儲(chǔ)器中,若Rm與Rd相同,則為寄存器與存儲(chǔ)器內(nèi)容進(jìn)行互換;Rn為要進(jìn)行數(shù)據(jù)交換的存儲(chǔ)器地址。 注:Rn不能與Rd和Rm相同。,2020/7/8,ARM指令小節(jié)目錄,1.指令格式 2.數(shù)據(jù)處理指令

57、3.條件碼 4.乘法指令 5.ARM分支指令 6.存儲(chǔ)器訪問指令 7.雜項(xiàng)指令 8.偽指令,2020/7/8,指令集介紹,ARM指令集雜項(xiàng)指令,ARM指令集中有三條指令作為雜項(xiàng)指令,在實(shí)際應(yīng)用中這三條指令非常重要。它們?nèi)缦滤荆?2020/7/8,ARM雜項(xiàng)指令軟中斷指令,SWI指令用于產(chǎn)生SWI異常,使得CPU模式變換到管理模式,并且將CPSR保存到管理模式的SPSR中,然后程序跳轉(zhuǎn)到SWI異常入口。不影響條件碼標(biāo)志。 該指令主要用于用戶程序調(diào)用操作系統(tǒng)的系統(tǒng)服務(wù),操作系統(tǒng)在SWI異常處理程序中進(jìn)行相應(yīng)的系統(tǒng)服務(wù)。,SWIcondimmed_24,SWI指令格式,2020/7/8,ARM雜項(xiàng)

58、指令軟中斷指令,根據(jù)SWI指令傳遞的參數(shù)SWI異常處理程序可以作出相應(yīng)的處理。SWI指令傳遞參數(shù)有以下兩種方法, 指令中的24位立即數(shù)指定了用戶請(qǐng)求的服務(wù)類型,參數(shù)通過通用寄存器傳遞。 MOV R0,#34;設(shè)置子功能號(hào)為34 SWI 12;調(diào)用12號(hào)軟中斷 指令中的24位立即數(shù)被忽略,用戶請(qǐng)求的服務(wù)類型由寄存器R0的值決定,參數(shù)通過其它的通用寄存器傳遞。 MOV R0,#12;調(diào)用12號(hào)軟中斷 MOV R1,#34;設(shè)置子功能號(hào)為34 SWI 0,2020/7/8,ARM雜項(xiàng)指令軟中斷指令,本示例只有一級(jí)軟中斷,含有二級(jí)中斷見異常處理,CMPR0,#MaxSWI LDRLSPC,PC, R0

59、, LSL #2 BSWIOutOfRange Switable DCDdo_SWI_0 ; 該服務(wù)對(duì)應(yīng)的SWI指令中立即數(shù)為0 DCDdo_SWI_1 ; 該服務(wù)對(duì)應(yīng)的SWI指令中立即數(shù)為1 . do_SWI_0 ; 服務(wù)程序do_SWI_0的代碼 . LDMFD SP!, R0-R3, R12, PC; 從do_SWI_0異常中斷返回 do_SWI_1 ; 服務(wù)程序do_SWI_0的代碼,2020/7/8,(1),(2),(3),(4),ARM雜項(xiàng)指令狀態(tài)寄存器寫指令,應(yīng)用示例1: ;子程序:使能IRQ中斷 ENABLE_IRQ MRS R0, CPSR BIC R0, R0,#0 x80 MS

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論