




已閱讀5頁(yè),還剩199頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
ARM體系結(jié)構(gòu)與編程,2020/4/25,內(nèi)容,ARM概述和分類,ARM指令集和匯編程序設(shè)計(jì),ARM體系結(jié)構(gòu)和存儲(chǔ)系統(tǒng),ARM中斷和異常處理,第一章ARM概述和分類,2020/4/25,內(nèi)容,ARM簡(jiǎn)介,ARM的分類,ARM的命名規(guī)則,基于ARM的嵌入式系統(tǒng)概述,2020/4/25,ARM介紹,什么是ARM?,其實(shí),人人都用ARM!,什么是ARM,ARM是一個(gè)公司的名字ARM代表一項(xiàng)技術(shù),即AdvancedRISCMachineARM是一個(gè)內(nèi)核,而不是我們看到的具體的芯片,ARM發(fā)展的歷程,第一片ARM處理器是1983年10月到1985年4月間在位于英國(guó)劍橋的AcornComputer公司開發(fā)1990年,為廣泛推廣ARM技術(shù)而成立了獨(dú)立的公司AdvanceRISCMachine(ARM)主要設(shè)計(jì)ARM系列RISC處理器內(nèi)核授權(quán)ARM內(nèi)核給生產(chǎn)和銷售半導(dǎo)體的合作伙伴ARM公司不生產(chǎn)芯片IP(IntelligenceProperty)另外也提供基于ARM架構(gòu)的開發(fā)設(shè)計(jì)技術(shù)軟件工具,評(píng)估板,調(diào)試工具,應(yīng)用軟件,總線架構(gòu),外圍設(shè)備單元,等等20世紀(jì)90年代,ARM快速進(jìn)入世界市場(chǎng)。,ARMOfficesWorldwide,800+雇員全球,EnglandCambridge,Maidenhead,Sheffield,BlackburnGermanyMunichFranceParis,SophiaAntipolisKoreaSeoul,USSeattle,LosGatos,WalnutCreek,Austin,Boston,SanDiegoChinaTaiwanandShanghaiJapanShin-Yokohama(Tokyo),ARMPartnershipModel,2020/4/25,ARM的應(yīng)用,2020/4/25,ARM分類,基于指令集體系結(jié)構(gòu)(構(gòu)架ISA)的分類ARMV1體系是最初版本,只有26位的尋址空間,沒有乘法指令,最終沒有商業(yè)化ARMV2體系與V1體系同為26位尋址空間,具有乘法和加法指令,支持協(xié)處理器ARMV3體系的尋址范圍擴(kuò)展到32位,具有乘法和加法指令,支持協(xié)處理器ARMV4體系增加了半字存儲(chǔ)操作,對(duì)調(diào)試的支持以及支持嵌入的ICEARMV5體系增加了DSP指令支持和對(duì)Java指令的支持ARMV6體系增加了媒體指令,ARMv6指令集合中加入了超過(guò)60條SIMD單指令多數(shù)據(jù)指令A(yù)RMV7體系定義了三種獨(dú)立的內(nèi)核型A(應(yīng)用領(lǐng)域),R(實(shí)時(shí)領(lǐng)域),M(控制領(lǐng)域),2020/4/25,ARM系列處理器,基于處理器內(nèi)核的分類ARM7系列ARM9系列ARM9E系列ARM10E系列SecurCore系列StrongARM/Xscale(Intel)ARM11,2020/4/25,ARM命名舉例,2020/4/25,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語(yǔ)言和先進(jìn)的32位RISC芯片完美結(jié)合的產(chǎn)物。5)ARM媒體功能擴(kuò)展(SIMD變種),2020/4/25,ARM的命名規(guī)則,ARM的命名分成兩類:基于ARMArchitecture的版本命名規(guī)則;基于ARMArchitecture版本的處理器系列命名規(guī)則。舉個(gè)例子,s3c2410采用ARMv4T架構(gòu)版本,ARM920T處理器系列,其中處理器核為ARM9TDMI。,2020/4/25,基于ARMArchitecture的版本命名,規(guī)則:|ARMv|n|variants|x(variants)|分成四個(gè)組成部分:ARMv-固定字符,即ARMVersionn-指令集版本號(hào)。迄今為之,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加速器JazelleSIMD-ARM媒體功能擴(kuò)展例如,ARMv5TxM表示ARM指令集版本為5,支持T變種,不支持M變種,2020/4/25,基于ARMArchitecture版本的處理器系列命名,采用上述的架構(gòu),形成一系列的處理器。有時(shí)候還要區(qū)分處理器核和處理器系列。不過(guò),在這里其實(shí)不用區(qū)分太細(xì),畢竟這是功能的小部分的變化,核心是相同的。規(guī)則:ARMxyzTDMIEJF-Sx-處理器系列y-存儲(chǔ)管理/保護(hù)單元z-cacheT-支持Thumb指令集D-支持片上調(diào)試M-支持快速乘法器I-支持EmbeddedICE,支持嵌入式跟蹤調(diào)試E-支持增強(qiáng)型DSP指令J-支持JazelleF-具備向量浮點(diǎn)單元VFP-S-可綜合版本,2020/4/25,基于ARM的嵌入式系統(tǒng)概述,(1)RISC設(shè)計(jì)思想與CISC相比,有以下幾個(gè)方面不同:a:設(shè)計(jì)重點(diǎn)不同,RISC重點(diǎn)在于通過(guò)軟件的靈活降低硬件執(zhí)行指令的復(fù)雜度,即使得編譯器更高的復(fù)雜性b:指令集,RISC減少了指令種類,操作也簡(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/4/25,基于ARM的嵌入式系統(tǒng)概述,ARM指令集屬于RISC指令集,但與單純的RISC有以下幾方面不同:a:大部分ARM指令是單周期完成的,但也有不是的,如多寄存器的load-store指令的執(zhí)行周期是不確定的,具體由被傳送的寄存器個(gè)數(shù)決定。b:內(nèi)嵌桶型移位寄存器c:Thumb16位指令集d:條件執(zhí)行e:增強(qiáng)指令,如添加了強(qiáng)大的數(shù)字信號(hào)處理器(DSP)指令,以支持1616位乘法操作及飽和操作,2020/4/25,基于ARM的嵌入式系統(tǒng)概述,(2)高速緩存(cache)1、為什么采用高速緩存微處理器的時(shí)鐘頻率比內(nèi)存速度提高快得多,高速緩存可以提高內(nèi)存的平均性能。2、高速緩存的工作原理高速緩存是一種小型、快速的存儲(chǔ)器,它保存部分主存內(nèi)容的拷貝。,CPU,高速緩存控制器,CACHE,主存,數(shù)據(jù),數(shù)據(jù),地址,2020/4/25,基于ARM的嵌入式系統(tǒng)概述,(3)嵌入式處理器分類,微處理器(MicroProcessorUnit,MPU)微控制器(MicroControllerUnit,MCU)嵌入式DSP(DigitalSignalProcessor,DSP)片上系統(tǒng)(SystemOnChip),嵌入式微處理器,嵌入式微處理器的基礎(chǔ)是通用計(jì)算機(jī)中的CPU。在應(yīng)用中,將微處理器裝配在專門設(shè)計(jì)的電路板上,只保留和嵌入式應(yīng)用有關(guān)的母板功能,這樣可以大幅度減小系統(tǒng)體積和功耗。為滿嵌入式應(yīng)用的特殊要求,嵌入式微處理器雖然在功能上和標(biāo)準(zhǔn)微處理器基本是一樣的,但在工作溫度、抗電磁干擾、可靠性等方面都做了各種增強(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、FlashRAM、EEPROM等各種必要功能和外設(shè)。為適應(yīng)不同的應(yīng)用需求,一般一個(gè)系列的單片機(jī)具有多種衍生產(chǎn)品,每種衍生產(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接口的MCU8XC930/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功能,過(guò)渡到采用嵌入式DSP處理器。嵌入式DSP處理器有兩個(gè)發(fā)展來(lái)源,一是DSP處理器經(jīng)過(guò)單片化、EMC改造、增加片上外設(shè)成為嵌入式DSP處理器,TI的TMS320C2000/C5000等屬于此范疇;二是在通用單片機(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í)語(yǔ)音壓解系統(tǒng),虛擬現(xiàn)實(shí)顯示等。這類智能化算法一般都是運(yùn)算量較大,特別是向量運(yùn)算、指針線性尋址等較多,而這些正是DSP處理器的長(zhǎng)處所在。,嵌入式DSP處理器,有代表性的產(chǎn)品是TexasInstruments的TMS320系列和Motorola的DSP56000系列。TMS320系列處理器包括用于控制的C2000系列,移動(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í)代已來(lái)臨,這就是SystemOnChip(SOC)。各種通用處理器內(nèi)核將作為SOC設(shè)計(jì)公司的標(biāo)準(zhǔn)庫(kù),和許多其它嵌入式系統(tǒng)外設(shè)一樣,成為VLSI設(shè)計(jì)中一種標(biāo)準(zhǔn)的器件,用標(biāo)準(zhǔn)的VHDL等語(yǔ)言描述,存儲(chǔ)在器件庫(kù)中。用戶只需定義出其整個(gè)應(yīng)用系統(tǒng),仿真通過(guò)后就可以將設(shè)計(jì)圖交給半導(dǎo)體工廠制作樣品。這樣除個(gè)別無(wú)法集成的器件以外,整個(gè)嵌入式系統(tǒng)大部分均可集成到一塊或幾塊芯片中去,應(yīng)用系統(tǒng)電路板將變得很簡(jiǎn)潔,對(duì)于減小體積和功耗、提高可靠性非常有利。它結(jié)合了許多功能區(qū)塊,將功能做在一個(gè)芯片上,ARMRISC、MIPSRISC、DSP或是其他的微處理器核心,加上通信的接口單元,例如通用串行端口(USB)、TCP/IP通信單元、GPRS通信接口、GSM通信接口、IEEE1394、藍(lán)牙模塊接口等等,這些單元以往都是依照各單元的功能做成一個(gè)個(gè)獨(dú)立的處理芯片。,嵌入式片上系統(tǒng)(SoC),2020/4/25,基于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/4/25,基于ARM的嵌入式系統(tǒng)概述,(4)嵌入式系統(tǒng)硬件AMBA總線是一個(gè)多總線系統(tǒng)。規(guī)范定義了三種可以組合使用的不同類型的總線:AHB(AdvancedHigh-performanceBus)、ASB(AdvancedSystemBus)和APB(AdvancedPeripheralBus)。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/4/25,基于ARM的嵌入式系統(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)DRAM存儲(chǔ)密度比SRAM高得多4)DRAM需要周期性刷新SDRAM:同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器,是DRAM中的一種,因與處理器總線同步,故能突發(fā)式地輸出到總線ROM:只讀存儲(chǔ)器,閃速存儲(chǔ)器(FLASH),PROM:可編程ROMEPROM:可擦除、可編程ROMEEPROM:電可擦除、可編程ROMFLASH:閃存相對(duì)傳統(tǒng)的EPROM芯片,這種芯片可以用電氣的方法快速地擦寫由于快擦寫存儲(chǔ)器不需要存儲(chǔ)電容器,故其集成度更高,制造成本低于DRAM它使用方便,既具有SRAM讀寫的靈活性和較快的訪問速度,又具有ROM在斷電后可不丟失信息的特點(diǎn),所以快擦寫存儲(chǔ)器技術(shù)發(fā)展十分迅速FLASH的架構(gòu)大致上可分為具程序執(zhí)行能力的NOR架構(gòu)以及儲(chǔ)存數(shù)據(jù)的NAND架構(gòu),NOR技術(shù)和NAND技術(shù),NORFlash市場(chǎng)目前由Intel和AMD公司主導(dǎo),其主要功能是程序的儲(chǔ)存,如PC中的BIOSNOR的特點(diǎn)是芯片內(nèi)執(zhí)行(XIP,eXecuteInPlace),這樣應(yīng)用程序可以直接在flash閃存內(nèi)運(yùn)行,不必再把代碼讀到系統(tǒng)RAM中。NOR的傳輸效率很高,在14MB的小容量時(shí)具有很高的成本效益,但是很低的寫入和擦除速度大大影響了它的性能。NANDFlash相對(duì)上屬于封閉的市場(chǎng),專利權(quán)掌握在少數(shù)廠商手中,Toshiba和Samsung公司為主,其主要功能是數(shù)據(jù)的儲(chǔ)存,如小型存儲(chǔ)卡、隨身電子盤等都是NAND結(jié)構(gòu)能提供極高的單元密度,可以達(dá)到高存儲(chǔ)密度,并且寫入和擦除的速度也很快。應(yīng)用NAND的困難在于flash的管理需要特殊的系統(tǒng)接口。,2020/4/25,基于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/4/25,基于ARM的嵌入式系統(tǒng)概述,(6)初始化啟動(dòng)代碼診斷硬件是否能正常工作,不能工作的是否隔離,即識(shí)別和隔離故障。引導(dǎo)過(guò)程包括裝載一個(gè)映像文件并將控制權(quán)交給它,裝載可以包括拷貝整個(gè)程序(代碼和數(shù)據(jù)),也可以只拷貝易變(volatile)變量的數(shù)據(jù)到RAM中,啟動(dòng)后,通過(guò)更改PC指向映像文件的起始地址,從而交出控制權(quán),ARM的特點(diǎn),RISC指令集Load/Store體系結(jié)構(gòu)固定的32位指令大多數(shù)指令單周期完成Thumb/DSP/jazeller功能擴(kuò)展低功耗,2020/4/25,小結(jié),什么是ARMARM的特點(diǎn)ARM的分類ARM的命名規(guī)則嵌入式硬件體系結(jié)構(gòu)嵌入式存儲(chǔ)器存儲(chǔ)器映射,第二章ARM體系結(jié)構(gòu)和存儲(chǔ)系統(tǒng),2020/4/25,內(nèi)容,流水線(pipeline),存儲(chǔ),模式(model),寄存器,2020/4/25,存儲(chǔ),地址空間,ARM結(jié)構(gòu)使用單個(gè)平面的232個(gè)8位字節(jié)地址空間。字節(jié)地址按照無(wú)符號(hào)數(shù)排列,從0到2321。地址空間可以看作是包含230個(gè)32位字,或231個(gè)16位半字。32位地址線/數(shù)據(jù)線,支持如下數(shù)據(jù)類型:字節(jié)(byte)8bits半字(Halfword)16bits,半字必須對(duì)齊2字節(jié)邊界字(Word)32bits,字必須對(duì)齊4字節(jié)邊界,2020/4/25,存儲(chǔ),ARM處理器可以將存儲(chǔ)器中的字以下列格式存儲(chǔ):大端格式(Big-endian):字?jǐn)?shù)據(jù)的高字節(jié)存儲(chǔ)在低地址中,而低字節(jié)存儲(chǔ)在高地址中小端格式(Little-endian):與小端對(duì)齊相反,字?jǐn)?shù)據(jù)的高字節(jié)存儲(chǔ)在高地址中,低字節(jié)存儲(chǔ)在低地址中,2020/4/25,ARM結(jié)構(gòu)通常希望所有的存儲(chǔ)器訪問都合理的對(duì)齊。具體來(lái)說(shuō)就是字訪問的地址通常是字對(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í)行要快。PC指向正被取指的指令,而非正在執(zhí)行的指令,Fetch,Decode,Execute,從存儲(chǔ)器中讀取指令,解碼指令,寄存器讀(從寄存器Bank)移位及ALU操作寄存器寫(到寄存器Bank),PCPC,PC-4PC-2,PC-8PC-4,ARMThumb,2020/4/25,處理器狀態(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/4/25,處理器模式,簡(jiǎn)介,ARM體系結(jié)構(gòu)支持7種處理器模式,分別為:用戶模式、快中斷模式、中斷模式、管理模式、中止模式、未定義模式和系統(tǒng)模式,如下表所示。這樣的好處是可以更好的支持操作系統(tǒng)并提高工作效率。特權(quán)模式:除用戶模式外的6種模式異常模式:除系統(tǒng)模式外的特權(quán)模式,2020/4/25,處理器模式,2020/4/25,內(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/4/25,ARM狀態(tài)各模式下可以訪問的寄存器,2020/4/25,內(nèi)部寄存器,r0r12:通用寄存器。當(dāng)C和匯編互相調(diào)用時(shí),r0r3用來(lái)傳遞函數(shù)參數(shù),可記為a0a3r13:用于各種模式下的堆棧寄存器(sp)r14:用來(lái)保存程序返回地址的鏈接寄存器(lr)r15:程序計(jì)數(shù)器(pc)r8_FIQr12_FIQ:允許快速中斷處理r8_Userr12_User:除了FIQ模式外各模式公用除了User和System模式外,各種模式都有自己獨(dú)立的r13和r14,2020/4/25,內(nèi)部寄存器,R14寄存器與子程序調(diào)用,MOVPC,LR,R14(地址A),1.程序A執(zhí)行過(guò)程中調(diào)用程序B;,操作流程,2.程序跳轉(zhuǎn)至標(biāo)號(hào)Label,執(zhí)行程序B。同時(shí)硬件將“BLLabel”指令的下一條指令所在地址存入R14;,3.程序B執(zhí)行最后,將R14寄存器的內(nèi)容放入PC,返回程序A;,2020/4/25,內(nèi)部寄存器,正常操作時(shí),從R15讀取的值是處理器正在取指的地址,即當(dāng)前正在執(zhí)行指令的地址加上8個(gè)字節(jié)(兩條ARM指令的長(zhǎng)度)。由于ARM指令總是以字為單位,所以R15寄存器的最低兩位總是為0。,2020/4/25,程序狀態(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è)中斷禁止位,分別控制一種類型的中斷;5個(gè)對(duì)當(dāng)前處理器模式進(jìn)行編碼的位;1個(gè)用于指示當(dāng)前執(zhí)行指令(ARM還是Thumb)的位。,2020/4/25,程序狀態(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/4/25,程序狀態(tài)寄存器,簡(jiǎn)介,每個(gè)異常模式還帶有一個(gè)程序狀態(tài)保存寄存器(SPSR),它用于保存在異常事件發(fā)生之前的CPSR。CPSR和SPSR通過(guò)特殊指令進(jìn)行訪問。注意:如果通過(guò)程序修改CPSR寄存器中的模式位進(jìn)入異常模式,那么硬件將不會(huì)把CPSR保存至SPSR中。,2020/4/25,小結(jié),ARM處理器存儲(chǔ)格式指令流水線ARM處理器狀態(tài)ARM處理器模式SPLRPCCPSRSPSR,第三章ARM指令系統(tǒng),2020/4/25,內(nèi)容,ARM指令集,ARM匯編程序設(shè)計(jì),ARM處理器尋址,2020/4/25,ARM處理器尋址方式,尋址方式分類,尋址方式是根據(jù)指令中給出的地址碼字段來(lái)實(shí)現(xiàn)尋找真實(shí)操作數(shù)地址的方式。ARM處理器具有9種基本尋址方式。1.寄存器尋址;2.立即尋址;3.寄存器移位尋址;4.寄存器間接尋址;5.基址尋址;6.多寄存器尋址;7.堆棧尋址;8.塊拷貝尋址;9.相對(duì)尋址。,2020/4/25,操作數(shù)的值在寄存器中,指令中的地址碼字段指出的是寄存器編號(hào),指令執(zhí)行時(shí)直接取出寄存器值來(lái)操作。寄存器尋址指令舉例如下:MOVR1,R2;將R2的值存入R1SUBR0,R1,R2;將R1的值減去R2的值,結(jié)果保存到R0,ARM處理器尋址方式,尋址方式分類寄存器尋址,MOVR1,R2,0 xAA,2020/4/25,立即尋址指令中的操作碼字段后面的地址碼部分即是操作數(shù)本身,也就是說(shuō),數(shù)據(jù)就包含在指令當(dāng)中,取出指令也就取出了可以立即使用的操作數(shù)(這樣的數(shù)稱為立即數(shù))。立即尋址指令舉例如下:SUBSR0,R0,#1;R0減1,結(jié)果放入R0,并且影響標(biāo)志位MOVR0,#0 xFF000;將立即數(shù)0 xFF000裝入R0寄存器,ARM處理器尋址方式,尋址方式分類立即尋址,MOVR0,#0 xFF00,0 xFF00,從代碼中獲得數(shù)據(jù),2020/4/25,寄存器移位尋址是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=R28ANDSR1,R1,R2,LSLR3;R2的值左移R3位,然后和R1相;“與”操作,結(jié)果放入R1,ARM處理器尋址方式,尋址方式分類寄存器移位尋址,MOVR0,R2,LSL#3,0 x08,0 x08,邏輯左移3位,2020/4/25,指令集介紹,ARM指令集第2個(gè)操作數(shù),2020/4/25,寄存器間接尋址指令中的地址碼給出的是一個(gè)通用寄存器的編號(hào),所需的操作數(shù)保存在寄存器指定地址的存儲(chǔ)單元中,即寄存器為操作數(shù)的地址指針。寄存器間接尋址指令舉例如下:LDRR1,R2;將R2指向的存儲(chǔ)單元的數(shù)據(jù)讀出;保存在R1中SWPR1,R1,R2;將寄存器R1的值和R2指定的存儲(chǔ);單元的內(nèi)容交換,ARM處理器尋址方式,尋址方式分類寄存器間接尋址,LDRR0,R2,0 xAA,2020/4/25,基址尋址就是將基址寄存器的內(nèi)容與指令中給出的偏移量(R3,2020/4/25,ARM指令小節(jié)目錄,1.指令格式2.數(shù)據(jù)處理指令3.條件碼4.乘法指令5.ARM分支指令6.存儲(chǔ)器訪問指令7.雜項(xiàng)指令8.偽指令,2020/4/25,簡(jiǎn)單的ARM程序,;文件名:test.s;功能:實(shí)現(xiàn)兩個(gè)寄存器相加;說(shuō)明:使用ARMulate軟件仿真調(diào)試AREAExample1,CODE,READONLY;聲明代碼段Example1ENTRY;標(biāo)識(shí)程序入口CODE32;聲明32位ARM指令STARTMOVR0,#0;設(shè)置參數(shù)MOVR1,#10LOOPBLADD_SUB;調(diào)用子程序ADD_SUBBLOOP;跳轉(zhuǎn)到LOOPADD_SUBADDSR0,R0,R1;R0=R0+R1MOVPC,LR;子程序返回END;文件結(jié)束,2020/4/25,指令集介紹,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/4/25,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/4/25,ARM數(shù)據(jù)處理指令算術(shù)運(yùn)算,注:這些指令影響N,Z,C和V標(biāo)志位。,2020/4/25,ARM數(shù)據(jù)處理指令邏輯運(yùn)算指令,注:當(dāng)后綴S時(shí),這些指令根據(jù)結(jié)果更新標(biāo)志N和Z,在計(jì)算Operand2時(shí)更新標(biāo)志C,不影響標(biāo)志V。,2020/4/25,ARM數(shù)據(jù)處理指令比較指令,注:這些指令影響N,Z,C和V標(biāo)志位。如:CMNR0,1;測(cè)試R0的值是否為1的補(bǔ)碼,若是z置位,2020/4/25,ARM指令小節(jié)目錄,1.指令格式2.數(shù)據(jù)處理指令3.條件碼4.乘法指令5.ARM分支指令6.存儲(chǔ)器訪問指令7.雜項(xiàng)指令8.偽指令,2020/4/25,ARM指令的基本格式如下:,指令集介紹,ARM指令集條件碼,S,使用條件碼“cond”可以實(shí)現(xiàn)高效的邏輯操作(節(jié)省跳轉(zhuǎn)和條件語(yǔ)句),提高代碼效率。,2020/4/25,指令條件碼表,2020/4/25,指令集介紹,ARM指令集條件碼,C代碼:if(ab)a+;elseb+;,對(duì)應(yīng)的匯編代碼:CMPR0,R1;R0(a)與R1(b)比較ADDHIR0,R0,#1;若R0R1,則R0=R0+1ADDLSR1,R1,#1;若R0R1,則R1=R1+1,示例:,2020/4/25,ARM指令小節(jié)目錄,1.指令格式2.數(shù)據(jù)處理指令3.條件碼4.乘法指令5.ARM分支指令6.存儲(chǔ)器訪問指令7.雜項(xiàng)指令8.偽指令,2020/4/25,指令集介紹,ARM指令集乘法指令,ARM具有三種乘法指令,分別為:3232位乘法指令;3232位乘加指令;3232位結(jié)果為64位的乘/乘加指令。,2020/4/25,ARM指令乘法指令,2020/4/25,ARM指令小節(jié)目錄,1.指令格式2.數(shù)據(jù)處理指令3.條件碼4.乘法指令5.ARM分支指令6.存儲(chǔ)器訪問指令7.雜項(xiàng)指令8.偽指令,2020/4/25,指令集介紹,ARM指令集分支指令,在ARM中有兩種方式可以實(shí)現(xiàn)程序的跳轉(zhuǎn),一種是使用分支指令直接跳轉(zhuǎn),另一種則是直接向PC寄存器賦值實(shí)現(xiàn)跳轉(zhuǎn)。分支指令有以下三種:分支指令B;帶鏈接的分支指令BL;帶狀態(tài)切換的分支指令BX。,2020/4/25,ARM指令分支指令,2020/4/25,ARM指令小節(jié)目錄,1.指令格式2.數(shù)據(jù)處理指令3.條件碼4.乘法指令5.ARM分支指令6.存儲(chǔ)器訪問指令7.雜項(xiàng)指令8.偽指令,2020/4/25,指令集介紹,ARM指令集存儲(chǔ)器訪問指令,ARM處理器是典型的RISC處理器,對(duì)存儲(chǔ)器的訪問只能使用加載和存儲(chǔ)指令實(shí)現(xiàn)。存儲(chǔ)器訪問指令分為:單寄存器操作指令和多寄存器操作指令。,2020/4/25,ARM存儲(chǔ)器訪問指令單寄存器加載,2020/4/25,ARM存儲(chǔ)器訪問指令單寄存器存儲(chǔ),2020/4/25,LDR和STR字和無(wú)符號(hào)字節(jié)加載/存儲(chǔ)指令LDR指令用于從內(nèi)存中讀取單一字或字節(jié)數(shù)據(jù)存入寄存器中,STR指令用于將寄存器中的單一字或字節(jié)數(shù)據(jù)保存到內(nèi)存。指令格式如下:,ARM存儲(chǔ)器訪問指令單寄存器存儲(chǔ),LDRcondTRd,;將指定地址上的字?jǐn)?shù)據(jù)讀入RdSTRcondTRd,;將Rd中的字?jǐn)?shù)據(jù)存入指定地址LDRcondBTRd,;將指定地址上的字節(jié)數(shù)據(jù)讀入RdSTRcondBTRd,;將Rd中的字節(jié)數(shù)據(jù)存入指定地址,2020/4/25,ARM存儲(chǔ)器訪問指令單寄存器存儲(chǔ),ARM指令集提供了幾種存儲(chǔ)器尋址的不同方式,這些方式是以下幾種變址模式的組合:,注:”!”表示要把計(jì)算出的地址回寫到基址寄存器,2020/4/25,LDR和STR半字和有符號(hào)字節(jié)加載/存儲(chǔ)指令這類LDR/STR指令可加載有符號(hào)半字或字節(jié),可加載/存儲(chǔ)無(wú)符號(hào)半字。偏移量格式、尋址方式與加載/存儲(chǔ)字和無(wú)符號(hào)字節(jié)指令相同。,ARM存儲(chǔ)器訪問指令單寄存器存儲(chǔ),LDRcondSBRd,;將指定地址上的有符號(hào)字節(jié)讀入RdLDRcondSHRd,;將指定地址上的有符號(hào)半字讀入RdLDRcondHRd,;將指定地址上的半字?jǐn)?shù)據(jù)讀入RdSTRcondHRd,;將Rd中的半字?jǐn)?shù)據(jù)存入指定地址,注意:半字?jǐn)?shù)據(jù)加載,寄存器高兩個(gè)字節(jié)置零;字節(jié)數(shù)據(jù)加載,寄存器高三個(gè)字節(jié)置零,2020/4/25,LDR和STR指令應(yīng)用示例:1.加載/存儲(chǔ)字和無(wú)符號(hào)字節(jié)指令LDRR2,R5;將R5指向地址的字?jǐn)?shù)據(jù)存入R2STRR1,R0,#0 x04;將R1的數(shù)據(jù)存儲(chǔ)到R0+0 x04地址LDRBR3,R2,#-1;將R2指向地址的字節(jié)數(shù)據(jù)存入R3,R2R21STRBR0,R3,-R8,ASR2;R0-R3-R8/4,存儲(chǔ)R0的最低有效字節(jié)2.加載/存儲(chǔ)半字和有符號(hào)字節(jié)指令LDRSBR1,R0,R3;將R0+R3地址上的字節(jié)數(shù)據(jù)存入R1,;高24位用符號(hào)擴(kuò)展LDRHR6,R2,#2;將R2指向地址的半字?jǐn)?shù)據(jù)存入R6,高16位用0擴(kuò)展;讀出后,R2=R2+2STRHR1,R0,#2!;將R1的半字?jǐn)?shù)據(jù)保存到R0+2地址,;只修改低2字節(jié)數(shù)據(jù),然后R0=R0+2,ARM存儲(chǔ)器訪問指令單寄存器存儲(chǔ),2020/4/25,ARM存儲(chǔ)器訪問指令多寄存器存取,多寄存器加載/存儲(chǔ)指令可以實(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/4/25,ARM存儲(chǔ)器訪問指令多寄存器存取,多寄存器加載/存儲(chǔ)指令格式如下:LDMcondRn!,reglistSTMcondRn!,reglistcond:指令執(zhí)行的條件;模式:控制地址的增長(zhǎng)方式,一共有8種模式;!:表示在操作結(jié)束后,將最后的地址寫回Rn中;reglist:表示寄存器列表,可以包含多個(gè)寄存器,它們使用“,”隔開,如R1,R2,R6-R9,寄存器由小到大排列;:可選后綴。允許在用戶模式或系統(tǒng)模式下使用。它有以下兩個(gè)功能:1)若op是LDM且寄存器列表包含R15時(shí),那么除了正常的多寄存器傳送外,還將SPSR也復(fù)制到CPSR中。這用于異常處理返回,僅在異常模式下使用。2)數(shù)據(jù)傳入或傳出的是用戶模式下的寄存器,而不是當(dāng)前模式的寄存器。,2020/4/25,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)行讀取和存儲(chǔ)。進(jìn)行堆棧操作操作時(shí),要先設(shè)置堆棧指針(SP),然后使用堆棧尋址指令STMFD/LDMFD、STMED/LDMED、STMFA/LDMFA和STMEA/LDMEA實(shí)現(xiàn)堆棧操作。,2020/4/25,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ì)應(yīng)的問題。,2020/4/25,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)量操作。指令格式如下:SWPcondBRd,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/4/25,ARM指令小節(jié)目錄,1.指令格式2.數(shù)據(jù)處理指令3.條件碼4.乘法指令5.ARM分支指令6.存儲(chǔ)器訪問指令7.雜項(xiàng)指令8.偽指令,2020/4/25,指令集介紹,ARM指令集雜項(xiàng)指令,ARM指令集中有三條指令作為雜項(xiàng)指令,在實(shí)際應(yīng)用中這三條指令非常重要。它們?nèi)缦滤荆?2020/4/25,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/4/25,ARM雜項(xiàng)指令軟中斷指令,根據(jù)SWI指令傳遞的參數(shù)SWI異常處理程序可以作出相應(yīng)的處理。SWI指令傳遞參數(shù)有以下兩種方法,指令中的24位立即數(shù)指定了用戶請(qǐng)求的服務(wù)類型,參數(shù)通過(guò)通用寄存器傳遞。MOVR0,#34;設(shè)置子功能號(hào)為34SWI12;調(diào)用12號(hào)軟中斷指令中的24位立即數(shù)被忽略,用戶請(qǐng)求的服務(wù)類型由寄存器R0的值決定,參數(shù)通過(guò)其它的通用寄存器傳遞。MOVR0,#12;調(diào)用12號(hào)軟中斷MOVR1,#34;設(shè)置子功能號(hào)為34SWI0,2020/4/25,ARM雜項(xiàng)指令軟中斷指令,本示例只有一級(jí)軟中斷,含有二級(jí)中斷見異常處理,CMPR0,#MaxSWILDRLSPC,PC,R0,LSL#2BSWIOutOfRangeSwitableDCDdo_SWI_0;該服務(wù)對(duì)應(yīng)的SWI指令中立即數(shù)為0DCDdo_SWI_1;該服務(wù)對(duì)應(yīng)的SWI指令中立即數(shù)為1.do_SWI_0;服務(wù)程序do_SWI_0的代碼.LDMFDSP!,R0-R3,R12,PC;從do_SWI_0異常中斷返回do_SWI_1;服務(wù)程序do_SWI_0的代碼,2020/4/25,(1),(2),(3),(4),ARM雜項(xiàng)指令狀態(tài)寄存器寫指令,應(yīng)用示例1:;子程序:使能IRQ中斷ENABLE_IRQMRSR0,CPSRBICR0,R0,#0 x80MSRCPSR_c,R0MOVPC,LR,應(yīng)用示例2:;子程序:禁止IRQ中斷DISABLE_IRQMRSR0,CPSRORRR0,R0,#0 x80MSRCPSR_c,R0MOVPC,LR,1.將CPSR寄存器內(nèi)容讀出到R0;,2.修改對(duì)應(yīng)于CPSR中的I控制位;,3.將修改后的值寫回CPSR寄存器的對(duì)應(yīng)控制域;,4.返回上一層函數(shù);,2020/4/25,ARM指令小節(jié)目錄,1.指令格式2.數(shù)據(jù)處理指令3.條件碼4.乘法指令5.ARM分支指令6.存儲(chǔ)器訪問指令7.雜項(xiàng)指令8.偽指令,2020/4/25,指令集介紹,ARM偽指令,ARM偽指令不屬于ARM指令集中的指令,是為了編程方便而定義的。偽指令可以像其它ARM指令一樣使用,但在編譯時(shí)這些指令將被等效的一條或多條ARM指令所代替。ARM偽指令有四條,分別為ADR偽指令、ADRL偽指令、LDR偽指令、NOP偽指令。,2020/4/25,ARM偽指令小范圍的地址讀取,ADR偽指令將基于PC相對(duì)偏移的地址值或基于寄存器相對(duì)偏移的地址值讀取到寄存器中。在匯編編譯器編譯源程序時(shí),ADR偽指令被編譯器替換成一條合適的指令。通常,編譯器用一條ADD指令或SUB指令來(lái)實(shí)現(xiàn)該ADR偽指令的功能,若不能用一條指令實(shí)現(xiàn),則產(chǎn)生錯(cuò)誤,編譯失敗。,ADRcondregister,expr,ADR偽指令格式,指令執(zhí)行的條件碼,加載的目標(biāo)寄存器,地址表達(dá)式,地址表達(dá)式expr的取指范圍:當(dāng)?shù)刂分凳亲止?jié)對(duì)齊時(shí),其取指范圍為-255255;當(dāng)?shù)刂分凳亲謱?duì)齊時(shí),其取指范圍為-10201020;,2020/4/25,ARM偽指令小范圍的地址讀取,.ADRR0,Delay.DelayMOVR0,r14.,應(yīng)用示例(源程序):,.0 x20ADDr0,pc,#0 x3c.0 x64MOVr0,r14.,編譯后的反匯編代碼:,使用偽指令將程序標(biāo)號(hào)Delay的地址存入R0,ADR偽指令被匯編成一條指令,2020/4/25,ARM偽指令小范圍的地址讀取,2020/4/25,ARM偽指令中等范圍的地址讀取,ADRL偽指令將基于PC相對(duì)偏移的地址值或基于寄存器相對(duì)偏移的地址值讀取到寄存器中,比ADR偽指令可以讀取更大范圍的地址。在匯編編譯器編譯源程序時(shí),ADRL偽指令被編譯器替換成兩條合適的指令。若不能用兩條指令實(shí)現(xiàn),則產(chǎn)生錯(cuò)誤,編譯失敗。,ADRLcondregister,expr,ADRL偽指令格式,指令執(zhí)行的條件碼,加載的目標(biāo)寄存器,地址表達(dá)式,地址表達(dá)式expr的取指范圍:當(dāng)?shù)刂分凳亲止?jié)對(duì)齊時(shí),其取指范圍為-64K64K;當(dāng)?shù)刂分凳亲謱?duì)齊時(shí),其取指范圍為-256K256K;,2020/4/25,ARM偽指令中等范圍的地址讀取,.ADRLR0,Delay.DelayMOVR0,r14.,應(yīng)用示例(源程序):,.0X20ADDr0,pc,#0X400X24ADDr0,r0,#0XFF00.0XFF68MOVr0,r14.,編譯后的反匯編代碼:,使用偽指令將程序標(biāo)號(hào)Delay的地址存入R0,ADRL偽指令被匯編成兩條指令,2020/4/25,ARM偽指令大范圍的地址讀取,LDR偽指令用于加載32位的立即數(shù)或一個(gè)地址值到指定寄存器。在匯編編譯源程序時(shí),LDR偽指令被編譯器替換成一條合適的指令。若加載的常數(shù)未超出MOV或MVN的范圍,則使用MOV或MVN指令代替該LDR偽指令,否則匯編器將常量放入文字池,并使用一條程序相對(duì)偏移的LDR指令從文字池讀出常量。,LDRcondregister,=expr|label_expr,LDR偽指令格式,指令執(zhí)行的條件碼,加載的目標(biāo)寄存器,基于PC的地址表達(dá)式或外部表達(dá)式,注意:1.從指令位置到文字池的偏移量必須小于4KB;2.與ARM指令的LDR相比,偽指令的LDR的參數(shù)有“=”號(hào)。,2020/4/25,ARM偽指令大范圍的地址讀取,LDR偽指令用于加載32位的立即數(shù)或一個(gè)地址值到指定寄存器。在匯編編譯源程序時(shí),LDR偽指令被編譯器替換成一條合適的指令。若加載的常數(shù)未超出MOV或MVN的范圍,則使用MOV或MVN指令代替該LDR偽指令,否則匯編器將常量放入文字池,并使用一條程序相對(duì)偏移的LDR指令從文字池讀出常量。,應(yīng)用示例(加載常量):,LDRR2,=0 xFF0;MOVR2,#0 xFF0LDRR0,=0 xFF000000;MOVR0,#0 xFF000000LDRR1,=0 xFFFFFFFE;MVNR1,#0 x1,2020/4/25,ARM偽指令空操作偽指令,NOP偽指令在匯編時(shí)將會(huì)被代替成ARM中的空操作,比如可能是“MOVR0,R0”指令等。NOP可用于延時(shí)操作。,NOP,NOP偽指令格式,應(yīng)用示例(延時(shí)子程序):,movR1,#0 x1234DelayNOP;空操作NOPNOPSUBSR1,R1,#1;循環(huán)次數(shù)減一BNEDelay;如果循環(huán)沒有結(jié)束,跳轉(zhuǎn)Delay繼續(xù)MOVPC,LR;子程序返回,第四章ARM匯編語(yǔ)言程序設(shè)計(jì),2020/4/25,內(nèi)容,匯編語(yǔ)言程序格式,C、匯編混合編程,偽操作ARM程序與Thumb程序混合使用,2020/4/25,ARM匯編程序格式:ARM匯編語(yǔ)言以段(section)為單位組織源文件,段是相對(duì)獨(dú)立的、具有特定名稱的、不可分割的指令或數(shù)據(jù)序列,段又可以分為代碼段和數(shù)據(jù)段。代碼段:存放執(zhí)行代碼數(shù)據(jù)段:存放代碼運(yùn)行時(shí)需要用到的數(shù)據(jù)一個(gè)ARM源程序至少需要一個(gè)代碼段,大的程序可以包含多個(gè)代碼段和數(shù)據(jù)段使用偽操作AREA定義一個(gè)段,AREA偽操作表示了一個(gè)段的開始,同時(shí)定義了這個(gè)段的名稱及相關(guān)屬性。ENTRY偽操作標(biāo)識(shí)了程序執(zhí)行的第一條指令。一個(gè)ARM程序中可以有多個(gè)ENTRY,至少要有一個(gè)。END偽操作告訴匯編編譯器源文件結(jié)束。,ARM匯編語(yǔ)言程序格式,2020/4/25,ARM匯編程序中每一行的通用格式為:標(biāo)號(hào)指令|偽操作|偽指令;注解symbolinstruction|directive|pseudo-instruction;comment在ARM匯編語(yǔ)言源程序中,除了標(biāo)號(hào)和注釋外,指令、偽指令和偽操作都必須有前導(dǎo)空格,而不能頂格書寫。如果每一行的代碼太長(zhǎng),可以使用字符“”將其分行書寫,并允許有空行。指令、偽操作、偽指令助記符和寄存器名既可以用大寫字母,也可以用小寫字母,但不能混用。注釋從“;”開始,到該行結(jié)束為止。,ARM匯編語(yǔ)言程序格式,2020/4/25,ARM匯編程序設(shè)計(jì),2020/4/25,常量十進(jìn)制,如:123,1,0十六進(jìn)制,如:0 x123,0 xab,0 x7bn_XXX,n表示n進(jìn)制,從29:XXX是具體的數(shù)字符串:由一對(duì)雙引號(hào)及雙引
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司猜燈謎抽獎(jiǎng)活動(dòng)方案
- 公司粽子定做活動(dòng)方案
- 公司紅色培訓(xùn)活動(dòng)方案
- 2025年現(xiàn)代物流管理師職業(yè)資格考試試題及答案
- 2025年思想政治理論與教育考試試卷及答案
- 2025年商品經(jīng)濟(jì)學(xué)考試試卷及答案
- 高危人群自檢策略-洞察及研究
- 2025年科技創(chuàng)新創(chuàng)業(yè)導(dǎo)師職業(yè)資格考試卷及答案
- 2025年旅游管理專業(yè)考試試卷及答案
- 2025年會(huì)計(jì)職業(yè)資格考試試卷及答案
- 湖南省湘潭市湘潭縣2023-2024學(xué)年五年級(jí)下學(xué)期期末考試數(shù)學(xué)試題
- 2024年廣西中考地理+生物試題(含答案解析)
- 武繼祥-矯形器的臨床應(yīng)用
- 云南省昆明市盤龍區(qū)2024年八年級(jí)下學(xué)期期末數(shù)學(xué)試卷附答案
- 園區(qū)零碳園區(qū)建設(shè)方案
- +畢業(yè)試卷(試題)-2023-2024學(xué)年六年級(jí)下冊(cè)數(shù)學(xué)蘇教版
- 工程管理之施工資料管理培訓(xùn)
- 變壓器油箱焊接工藝
- 國(guó)學(xué)療愈行業(yè)分析
- (2023)義務(wù)教育新課程標(biāo)準(zhǔn)生物(2022年版)必考試題含答案
- 陣發(fā)性室上性心動(dòng)過(guò)速(PSVT)的診斷和治療
評(píng)論
0/150
提交評(píng)論