




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
ARM體系結構與編程內容ARM概述和分類ARM指令集和匯編程序設計ARM體系結構和存儲系統ARM中斷和異常處理2023/4/52第一章ARM概述和分類內容ARM簡介ARM的分類ARM的命名規則基于ARM的嵌入式系統概述2023/4/54ARM介紹什么是ARM?其實,人人都用ARM!2023/4/55什么是ARMARM是一個公司的名字ARM代表一項技術,即AdvancedRISCMachineARM是一個內核,而不是我們看到的具體的芯片ARM發展的歷程第一片ARM處理器是1983年10月到1985年4月間在位于英國劍橋的AcornComputer公司開發1990年,為廣泛推廣ARM技術而成立了獨立的公司AdvanceRISCMachine(ARM)主要設計ARM系列RISC處理器內核授權ARM內核給生產和銷售半導體的合作伙伴ARM公司不生產芯片IP(IntelligenceProperty)另外也提供基于ARM架構的開發設計技術軟件工具,評估板,調試工具,應用軟件,總線架構,外圍設備單元,等等20世紀90年代,ARM快速進入世界市場。ARMOfficesWorldwide800+雇員全球EnglandCambridge,Maidenhead,Sheffield,BlackburnGermanyMunich FranceParis,SophiaAntipolisKoreaSeoulUSSeattle,LosGatos,WalnutCreek,Austin,Boston,SanDiegoChinaTaiwanandShanghaiJapanShin-Yokohama(Tokyo)ARMPartnershipModelARM的應用2023/4/510ARM分類基于指令集體系結構(構架ISA)的分類ARMV1體系是最初版本,只有26位的尋址空間,沒有乘法指令,最終沒有商業化ARMV2體系與V1體系同為26位尋址空間,具有乘法和加法指令,支持協處理器ARMV3體系的尋址范圍擴展到32位,具有乘法和加法指令,支持協處理器ARMV4體系增加了半字存儲操作,對調試的支持以及支持嵌入的ICEARMV5體系增加了DSP指令支持和對Java指令的支持ARMV6體系增加了媒體指令,ARMv6指令集合中加入了超過60條SIMD單指令多數據指令ARMV7體系定義了三種獨立的內核型--A(應用領域),R(實時領域),M(控制領域)2023/4/511ARM系列處理器基于處理器內核的分類ARM7系列ARM9系列ARM9E系列ARM10E系列SecurCore系列StrongARM/Xscale(Intel)ARM112023/4/512ARM命名舉例核體系結構ARM1V1ARM2V2ARM2aS,ARM3V2aARM6,ARM600,ARM610V3ARM7,ARM700,ARM710V3ARM7TDMI,ARM710T,ARM720TARM740TV4TStrongARM,ARM8,ARM810V4ARM9TDMI,ARM920T,ARM940TV4TARM9E-SV5TEARM10TDMI,ARM1020EV5TEARM11,ARM1156T2-S,ARM1156T2F-S,ARM1176JZ-S,ARM11JZF-SV62023/4/513ARM體系的變種1)Thumb指令集(T變種)
Thumb指令集是把32位的ARM指令集的一個子集重新編碼后而形成的一個特殊的16位的指令集
2)長乘指令(M變種)長乘指令是一種生成64位相乘結果的乘法指令(此指令為ARM指令),M變種增加了兩條長乘指令3)增強型DSP指令(E變種)
E變種的ARM體系增加了一些增強處理器對典型的DSP算法處理能力的附加指令。4)Java加速器Jazelle(J變種)ARM的Jazelle技術是Java語言和先進的32位RISC芯片完美結合的產物。5)ARM媒體功能擴展(SIMD變種)
2023/4/514ARM的命名規則ARM的命名分成兩類:基于ARMArchitecture的版本命名規則;基于ARMArchitecture版本的處理器系列命名規則。 舉個例子,s3c2410采用ARMv4T架構版本,ARM920T處理器系列,其中處理器核為ARM9TDMI。2023/4/515基于ARMArchitecture的版本命名
規則:
|ARMv
|n
|variants
|x(variants)
|
分成四個組成部分:
·ARMv--固定字符,即ARMVersion·n--指令集版本號。迄今為之,ARM架構版本發布了7個系列,所以n=[1:7]。其中最新的版本是第7版
·variants--變種。
·x(variants)--排除x后指定的變種常見的變種有:·T--Thumb指令集·M--長乘法指令·E--增強型DSP指令·J--Java加速器Jazelle·SIMD--ARM媒體功能擴展 例如,ARMv5TxM表示ARM指令集版本為5,支持T變種,不支持M變種2023/4/516基于ARMArchitecture版本的處理器系列命名采用上述的架構,形成一系列的處理器。有時候還要區分處理器核和處理器系列。不過,在這里其實不用區分太細,畢竟這是功能的小部分的變化,核心是相同的。規則:ARM{x}{y}{z}{T}{D}{M}{I}{E}{J}{F}{-S}·x--處理器系列·y--存儲管理/保護單元·z--cache·T--支持Thumb指令集·D--支持片上調試·M--支持快速乘法器·I--支持EmbeddedICE,支持嵌入式跟蹤調試·E--支持增強型DSP指令·J--支持Jazelle·F--具備向量浮點單元VFP·-S--可綜合版本2023/4/517基于ARM的嵌入式系統概述
(1)RISC設計思想與CISC相比,有以下幾個方面不同:
a:設計重點不同,RISC重點在于通過軟件的靈活降低硬件執行指令的復雜度,即使得編譯器更高的復雜性
b:指令集,RISC減少了指令種類,操作也簡單,基本是一個周期執行一條指令,每一條指令長度是固定,而CISC指令長度不固定,執行也需要多個周期
c:寄存器,RISC擁有更多寄存器,都可以存放數據或地址,而CISC都是用于特定目的的專用寄存器
d:load-store結構,即處理器只處理寄存器中的數據,獨立的load-store指令完成數據在寄存器和外部存儲器之間的傳送,即數據處理與存儲器訪問分開,而CISC能夠直接處理存取器中的數據注:ARM指令集屬于RISC指令集,但與單純的RISC有以下幾方面不同2023/4/518基于ARM的嵌入式系統概述ARM指令集屬于RISC指令集,但與單純的RISC有以下幾方面不同:a:大部分ARM指令是單周期完成的,但也有不是的,如多寄存器的load-store指令的執行周期是不確定的,具體由被傳送的寄存器個數決定。b:內嵌桶型移位寄存器c:Thumb16位指令集d:條件執行e:增強指令,如添加了強大的數字信號處理器(DSP)指令,以支持16×16位乘法操作及飽和操作2023/4/519基于ARM的嵌入式系統概述(2)高速緩存(cache)1、為什么采用高速緩存微處理器的時鐘頻率比內存速度提高快得多,高速緩存可以提高內存的平均性能。2、高速緩存的工作原理高速緩存是一種小型、快速的存儲器,它保存部分主存內容的拷貝。CPU高速緩存控制器CACHE主存數據數據地址2023/4/520基于ARM的嵌入式系統概述(3)嵌入式處理器分類微處理器(MicroProcessorUnit,MPU)微控制器(MicroControllerUnit,MCU)嵌入式DSP(DigitalSignalProcessor,DSP)片上系統(SystemOnChip)2023/4/521嵌入式微處理器嵌入式微處理器的基礎是通用計算機中的CPU。在應用中,將微處理器裝配在專門設計的電路板上,只保留和嵌入式應用有關的母板功能,這樣可以大幅度減小系統體積和功耗。為滿嵌入式應用的特殊要求,嵌入式微處理器雖然在功能上和標準微處理器基本是一樣的,但在工作溫度、抗電磁干擾、可靠性等方面都做了各種增強。目前主要的嵌入式處理器類型有Am186/88、386EX、SC-400、PowerPC、68000、MIPS、ARM/StrongARM系列等嵌入式微處理器嵌入式微控制器嵌入式微控制器又稱單片機,顧名思義,就是將整個計算機系統集成到一塊芯片中。嵌入式微控制器一般以某一種微處理器內核為核心,芯片內部集成ROM/EPROM、RAM、總線、總線邏輯、定時/計數器、WatchDog、I/O、串行口、脈寬調制輸出、A/D、D/A、FlashRAM、EEPROM等各種必要功能和外設。為適應不同的應用需求,一般一個系列的單片機具有多種衍生產品,每種衍生產品的處理器內核都是一樣的,不同的是存儲器和外設的配置及封裝。這樣可以使單片機最大限度地和應用需求相匹配,功能不多不少,從而減少功耗和成本。和嵌入式微處理器相比,微控制器的最大特點是單片化,體積大大減小,從而使功耗和成本下降、可靠性提高。微控制器是目前嵌入式系統工業的主流。微控制器的片上外設資源一般比較豐富,適合于控制,因此稱微控制器。嵌入式微控制器嵌入式微控制器目前的品種和數量最多,比較有代表性的通用系列包括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占嵌入式系統約70%的市場份額。
嵌入式DSP處理器DSP處理器對系統結構和指令進行了特殊設計,使其適合于執行DSP算法,編譯效率較高,指令執行速度也較高。在數字濾波、FFT、譜分析等方面DSP算法正在大量進入嵌入式領域,DSP應用正從在通用單片機中以普通指令實現DSP功能,過渡到采用嵌入式DSP處理器。嵌入式DSP處理器有兩個發展來源,一是DSP處理器經過單片化、EMC改造、增加片上外設成為嵌入式DSP處理器,TI的TMS320C2000/C5000等屬于此范疇;二是在通用單片機或SOC中增加DSP協處理器,例如Intel的MCS-296和Infineon(Siemens)的TriCore。推動嵌入式DSP處理器發展的另一個因素是嵌入式系統的智能化,例如各種帶有智能邏輯的消費類產品,生物信息識別終端,帶有加解密算法的鍵盤,ADSL接入、實時語音壓解系統,虛擬現實顯示等。這類智能化算法一般都是運算量較大,特別是向量運算、指針線性尋址等較多,而這些正是DSP處理器的長處所在。
嵌入式DSP處理器有代表性的產品是TexasInstruments的TMS320系列和Motorola的DSP56000系列。TMS320系列處理器包括用于控制的C2000系列,移動通信的C5000系列,以及性能更高的C6000和C8000系列。Motorola公司的DSP56000已經發展成為DSP56000,DSP56100,DSP56200和DSP56300等幾個不同系列的處理器。PHILIPS公司也推出了基于可重置嵌入式DSP結構低成本、低功耗技術上制造的DSP處理器,特點是具備雙Harvard結構和雙乘/累加器單元,應用目標是大批量消費類電子產品。隨著EDI的推廣和VLSI設計的普及化,及半導體工藝的迅速發展,在一個硅片上實現一個更為復雜的系統的時代已來臨,這就是SystemOnChip(SOC)。各種通用處理器內核將作為SOC設計公司的標準庫,和許多其它嵌入式系統外設一樣,成為VLSI設計中一種標準的器件,用標準的VHDL等語言描述,存儲在器件庫中。用戶只需定義出其整個應用系統,仿真通過后就可以將設計圖交給半導體工廠制作樣品。這樣除個別無法集成的器件以外,整個嵌入式系統大部分均可集成到一塊或幾塊芯片中去,應用系統電路板將變得很簡潔,對于減小體積和功耗、提高可靠性非常有利。它結合了許多功能區塊,將功能做在一個芯片上,ARMRISC、MIPSRISC、DSP或是其他的微處理器核心,加上通信的接口單元,例如通用串行端口(USB)、TCP/IP通信單元、GPRS通信接口、GSM通信接口、IEEE1394、藍牙模塊接口等等,這些單元以往都是依照各單元的功能做成一個個獨立的處理芯片。嵌入式片上系統(SoC)基于ARM的嵌入式系統概述(4)嵌入式系統硬件2023/4/529總線
(4)嵌入式系統硬件微處理器(CPU)是嵌入式系統硬件平臺的核心構件,但不是全部。按照馮·諾依曼體系結構思想,計算機的硬件是由CPU、存儲器和I/O設備三部分組成的??偩€是把CPU與存儲器、I/O設備相連接的信息通道,但總線并不僅僅指的是一束信號線,而應包含相應的通信協議。按照使用場合的不同,總線分成芯片級總線(CPU總線)、板卡級總線(內總線)和系統級總線(外總線)??偩€和總線橋CPU低速設備橋數據高速總線存儲器高速設備鍵盤低速總線基于ARM的嵌入式系統概述(4)嵌入式系統硬件AMBA總線是一個多總線系統。規范定義了三種可以組合使用的不同類型的總線:AHB(AdvancedHigh-performanceBus)、ASB(AdvancedSystemBus)和APB(AdvancedPeripheralBus)。AHB:CPU核、存儲器控制器、中斷控制器、LCD控制器、DMA和USB主機模塊等(可以包括多個主模塊)APB:WATCHDOG、IIS、IIC、PWM、ADC、UART、GPIO、RTC等(只有一個主模塊)ASB:連接高性能系統模塊,在某些需高速且不必使用AHB總線的場合使用2023/4/532基于ARM的嵌入式系統概述(5)嵌入式存儲器大多數嵌入式產品的存儲器結構是分層的,即多種類型的存儲器在決定存儲器層次、寬度、類型等特性時,需綜合考慮產品的價格、性能、功耗等因素2023/4/533存儲器系統寄存器高速緩存SRAM主存儲器DRAM本地存儲器Flash、ROM、磁盤網絡存儲器Flash、ROM、磁盤時鐘周期01—1050—10020000000分層結構存儲器種類RAM:隨機存取存儲器SRAM:靜態隨機存儲器(高速存儲器或cache)不需刷新電路即能保存內部存儲數據。DRAM:動態隨機存儲器,一般使用電容存儲,需經常刷新
1)SRAM比DRAM快
2)SRAM比DRAM耗電多
3)DRAM存儲密度比SRAM高得多
4)DRAM需要周期性刷新SDRAM:同步動態隨機存儲器,是DRAM中的一種,因與處理器總線同步,故能突發式地輸出到總線ROM:只讀存儲器閃速存儲器(FLASH)PROM:可編程ROMEPROM:可擦除、可編程ROMEEPROM:電可擦除、可編程ROMFLASH:閃存相對傳統的EPROM芯片,這種芯片可以用電氣的方法快速地擦寫由于快擦寫存儲器不需要存儲電容器,故其集成度更高,制造成本低于DRAM它使用方便,既具有SRAM讀寫的靈活性和較快的訪問速度,又具有ROM在斷電后可不丟失信息的特點,所以快擦寫存儲器技術發展十分迅速FLASH的架構大致上可分為具程序執行能力的NOR架構以及儲存數據的NAND架構NOR技術和NAND技術NORFlash市場目前由Intel和AMD公司主導,其主要功能是程序的儲存,如PC中的BIOSNOR的特點是芯片內執行(XIP,eXecuteInPlace),這樣應用程序可以直接在flash閃存內運行,不必再把代碼讀到系統RAM中。NOR的傳輸效率很高,在1~4MB的小容量時具有很高的成本效益,但是很低的寫入和擦除速度大大影響了它的性能。NANDFlash相對上屬于封閉的市場,專利權掌握在少數廠商手中,Toshiba和Samsung公司為主,其主要功能是數據的儲存,如小型存儲卡、隨身電子盤等都是NAND結構能提供極高的單元密度,可以達到高存儲密度,并且寫入和擦除的速度也很快。應用NAND的困難在于flash的管理需要特殊的系統接口?;贏RM的嵌入式系統概述
(6)初始化啟動代碼(1)初始化硬件配置(2)診斷(3)引導初始化硬件配置包括:設置堆棧指針、硬件工作時鐘、存儲器映射等等
I/O寄存器快速SRAM大塊DRAM啟動ROM啟動之前
I/O寄存器快速SRAM大塊DRAM啟動ROM啟動之后2023/4/538基于ARM的嵌入式系統概述(6)初始化啟動代碼診斷硬件是否能正常工作,不能工作的是否隔離,即識別和隔離故障。引導過程包括裝載一個映像文件并將控制權交給它,裝載可以包括拷貝整個程序(代碼和數據),也可以只拷貝易變(volatile)變量的數據到RAM中,啟動后,通過更改PC指向映像文件的起始地址,從而交出控制權2023/4/539ARM的特點RISC指令集Load/Store體系結構固定的32位指令大多數指令單周期完成Thumb/DSP/jazeller功能擴展低功耗小結什么是ARMARM的特點ARM的分類ARM的命名規則嵌入式硬件體系結構嵌入式存儲器存儲器映射2023/4/541第二章ARM體系結構和存儲系統內容流水線(pipeline)存儲模式(model)寄存器2023/4/543存儲地址空間ARM結構使用單個平面的232個8位字節地址空間。字節地址按照無符號數排列,從0到232-1。地址空間可以看作是包含230個32位字,或231個16位半字。32位地址線/數據線,支持如下數據類型:-字節(byte)8bits-半字(Halfword)16bits,半字必須對齊2字節邊界-字(Word)32bits,字必須對齊4字節邊界2023/4/544存儲ARM處理器可以將存儲器中的字以下列格式存儲:大端格式(Big-endian):字數據的高字節存儲在低地址中,而低字節存儲在高地址中小端格式(Little-endian):與小端對齊相反,字數據的高字節存儲在高地址中,低字節存儲在低地址中2023/4/545ARM結構通常希望所有的存儲器訪問都合理的對齊。具體來說就是字訪問的地址通常是字對齊的,而半字訪問使用的地址是半字對齊的。不按這種方式對齊的存儲器訪問稱為非對齊的存儲器訪問。非對齊的取指 -不可預知結果 -ARM狀態忽略低2位;Thumb狀態忽略最低位(忽略由存儲器實現)非對齊的數據訪問 -執行結果不可預測 -忽略字單元地址的低2位;忽略半字單元地址的最低位(忽略可能由處理器或存儲器完成)存儲非對齊的存儲器訪問2023/4/546指令流水線為增加處理器指令流的速度,ARM7系列使用3級流水線.允許多個操作同時處理,比逐條指令執行要快。
PC指向正被取指的指令,而非正在執行的指令FetchDecodeExecute從存儲器中讀取指令解碼指令寄存器讀(從寄存器Bank)移位及ALU操作寄存器寫(到寄存器Bank)PC PCPC-4 PC-2PC-8 PC-4ARM Thumb處理器狀態處理器狀態ARM處理器包含32位ARM指令集和16位Thumb指令集。因此ARM處理器有兩種操作態:ARM狀態:32位,這種狀態下執行的是字方式的ARM指令;Thumb狀態:16位,這種狀態下執行半字方式的Thumb指令。注意:兩個狀態之間的切換并不影響處理器模式或寄存器內容。2023/4/548處理器模式簡介ARM體系結構支持7種處理器模式,分別為:用戶模式、快中斷模式、中斷模式、管理模式、中止模式、未定義模式和系統模式,如下表所示。這樣的好處是可以更好的支持操作系統并提高工作效率。特權模式:除用戶模式外的6種模式異常模式:除系統模式外的特權模式2023/4/549處理器模式說明備注用戶
(usr)正常程序工作模式不能直接切換到其它模式系統
(sys)用于支持操作系統的特權任務等與用戶模式類似,但具有可以直接切換到其它模式等特權快中斷
(fiq)支持高速數據傳輸及通道處理FIQ異常響應時進入此模式中斷(irq)用于通用中斷處理IRQ異常響應時進入此模式管理(svc)操作系統保護代碼系統復位和軟件中斷響應時進入此模式中止(abt)用于支持虛擬內存和/或存儲器保護在ARM7TDMI沒有大用處未定義
(und)支持硬件協處理器的軟件仿真未定義指令異常響應時進入此模式處理器模式2023/4/550內部寄存器簡介在ARM處理器內部有37個用戶可見的寄存器:
30個通用寄存器
6個狀態寄存器
1個專用于記錄當前狀態
5個專用于記錄模式切換前的狀態
1個程序計數器PC在不同的工作模式和處理器狀態下,程序員可以訪問的寄存器也不盡相同。2023/4/551寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統管理中止未定義中斷快中斷通用寄存器和程序計數器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15CPSRCPSRSPSR無SPSR_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiq無CPSRR15R14R13R12R11R10R9R8R7R6R5R4R3R2R1R0用戶無CPSRR15R14R13R12R11R10R9R8R7R6R5R4R3R2R1R0系統SPSR_svcCPSRR15R14_svcR13_svcR12R11R10R9R8R7R6R5R4R3R2R1R0管理SPSR_abtCPSRR15R14_abtR13_abtR12R11R10R9R8R7R6R5R4R3R2R1R0中止SPSR_undCPSRR15R14_undR13_undR12R11R10R9R8R7R6R5R4R3R2R1R0未定義SPSR_irqCPSRR15R14_irqR13_irqR12R11R10R9R8R7R6R5R4R3R2R1R0中斷SPSR_fiqCPSRR15R14_fiqR13_fiqR12_fiqR11_fiqR10_fiqR9_fiqR8_fiqR7R6R5R4R3R2R1R0快中斷ARM狀態各模式下可以訪問的寄存器2023/4/552內部寄存器
r0—r12:通用寄存器。當C和匯編互相調用時,r0—r3用來傳遞函數參數,可記為a0—a3r13:用于各種模式下的堆棧寄存器(sp)
r14:用來保存程序返回地址的鏈接寄存器(lr)
r15:程序計數器(pc)
r8_FIQ—r12_FIQ:允許快速中斷處理
r8_User—r12_User:除了FIQ模式外各模式公用除了User和System模式外,各種模式都有自己獨立的r13和r142023/4/553Label程序A程序BR14內部寄存器R14寄存器與子程序調用BLLabel地址A???MOVPC,LRR14(地址A)Label???1.程序A執行過程中調用程序B;操作流程2.程序跳轉至標號Label,執行程序B。同時硬件將“BLLabel”指令的下一條指令所在地址存入R14;3.程序B執行最后,將R14寄存器的內容放入PC,返回程序A;2023/4/554內部寄存器正常操作時,從R15讀取的值是處理器正在取指的地址,即當前正在執行指令的地址加上8個字節(兩條ARM指令的長度)。由于ARM指令總是以字為單位,所以R15寄存器的最低兩位總是為0。LDRR0,PC??????PCPC-4PC-8正在執行正在譯碼正在取指流水線狀態地址程序代碼2023/4/555程序狀態寄存器簡介ARM內核包含1個CPSR和5個供異常處理程序使用的SPSR。CPSR反映了當前處理器的狀態,其包含:
4個條件代碼標志(負(N)、零(Z)、進位(C)和溢出(V));
2個中斷禁止位,分別控制一種類型的中斷;
5個對當前處理器模式進行編碼的位;
1個用于指示當前執行指令(ARM還是Thumb)的位。2023/4/556NZCV——IM0M1M2M3M4TF—...313029282726876543210程序狀態寄存器簡介條件代碼標志保留控制位溢出標志進位或借位擴展零負或小于IRQ禁止FIQ禁止狀態位模式位NZCVIM0M1M2M3M4TFCPSR寄存器的格式2023/4/557M[4:0]模式可見的Thumb狀態寄存器可見的ARM狀態寄存器10000用戶R0~R7,SP,LR,PC,CPSRR0~R14,PC,CPSR10001快中斷R0~R7,SP_fiq,LR_fiq,PC,CPSR,SPSR_fiqR0~R7,R8_fiq~R14_fiq,PC,CPSR,SPSR_fiq10010中斷R0~R7,SP_irq,LR_irq,PC,CPSR,SPSR_fiqR0~R12,R13_irq,R14_irq,PC,CPSR,SPSR_irq10011管理R0~R7,SP_svc,LR_svc,PC,CPSR,SPSR_svcR0~R12,R13_svc,R14_svc,PC,CPSR,SPSR_svc10111中止R0~R7,SP_abt,LR_abt,PC,CPSR,SPSR_abtR0~R12,R13_abt,R14_abt,PC,CPSR,SPSR_abt11011未定義R0~R7,SP_und,LR_und,PC,CPSR,SPSR_undR0~R12,R13_und,R14_und,PC,CPSR,SPSR_und11111系統R0~R7,SP,LR,PC,CPSRR0~R14,PC,CPSRCPSR模式位設置表程序狀態寄存器簡介每個異常模式還帶有一個程序狀態保存寄存器(SPSR),它用于保存在異常事件發生之前的CPSR。CPSR和SPSR通過特殊指令進行訪問。注意:如果通過程序修改CPSR寄存器中的模式位進入異常模式,那么硬件將不會把CPSR保存至SPSR中。2023/4/559小結ARM處理器存儲格式指令流水線ARM處理器狀態ARM處理器模式SPLRPCCPSRSPSR2023/4/560第三章ARM指令系統內容ARM指令集ARM匯編程序設計ARM處理器尋址2023/4/562ARM處理器尋址方式尋址方式分類尋址方式是根據指令中給出的地址碼字段來實現尋找真實操作數地址的方式。ARM處理器具有9種基本尋址方式。1.寄存器尋址; 2.立即尋址;3.寄存器移位尋址; 4.寄存器間接尋址;5.基址尋址; 6.多寄存器尋址;7.堆棧尋址; 8.塊拷貝尋址;9.相對尋址。2023/4/563操作數的值在寄存器中,指令中的地址碼字段指出的是寄存器編號,指令執行時直接取出寄存器值來操作。寄存器尋址指令舉例如下:MOVR1,R2 ;將R2的值存入R1SUBR0,R1,R2;將R1的值減去R2的值,結果保存到R0
0xAA0x55R2R1ARM處理器尋址方式尋址方式分類——寄存器尋址MOVR1,R20xAA2023/4/564立即尋址指令中的操作碼字段后面的地址碼部分即是操作數本身,也就是說,數據就包含在指令當中,取出指令也就取出了可以立即使用的操作數(這樣的數稱為立即數)。立即尋址指令舉例如下:SUBS R0,R0,#1;R0減1,結果放入R0,并且影響標志位MOV R0,#0xFF000;將立即數0xFF000裝入R0寄存器
0x55R0MOVR0,#0xFF00程序存儲ARM處理器尋址方式尋址方式分類——立即尋址MOVR0,#0xFF000xFF00從代碼中獲得數據2023/4/565寄存器移位尋址是ARM指令集特有的尋址方式。當第2個操作數是寄存器移位方式時,第2個寄存器操作數在與第1個操作數結合之前,選擇進行移位操作。寄存器移位尋址指令舉例如下:MOV R0,R2,LSL#3 ;R2的值左移3位,結果放入R0, ;即是R0=R2×8ANDS R1,R1,R2,LSLR3;R2的值左移R3位,然后和R1相 ;“與”操作,結果放入R10x55R0R20x01ARM處理器尋址方式尋址方式分類——寄存器移位尋址MOVR0,R2,LSL#30x080x08邏輯左移3位2023/4/566指令集介紹ARM指令集——第2個操作數LSL移位操作:0LSR移位操作:0ASR移位操作:ROR移位操作:RRX移位操作:C2023/4/567寄存器間接尋址指令中的地址碼給出的是一個通用寄存器的編號,所需的操作數保存在寄存器指定地址的存儲單元中,即寄存器為操作數的地址指針。寄存器間接尋址指令舉例如下:LDR R1,[R2] ;將R2指向的存儲單元的數據讀出
;保存在R1中SWP R1,R1,[R2] ;將寄存器R1的值和R2指定的存儲
;單元的內容交換0x55R0R20x400000000xAA0x40000000ARM處理器尋址方式尋址方式分類——寄存器間接尋址LDRR0,[R2]0xAA2023/4/568基址尋址就是將基址寄存器的內容與指令中給出的偏移量(<4K)相加/減,形成操作數的有效地址。基址尋址用于訪問基址附近的存儲單元,常用于查表、數組操作、功能部件寄存器訪問等。寄存器間接尋址是偏移量為0的基址加偏移尋址?;穼ぶ分噶钆e例如下(前索引尋址):LDR R2,[R3,#0x0C] ;讀取R3+0x0C地址上的存儲單元的內容,放入R2STR R1,[R0,#-4]! ;先R0=R0-4,然后把R0的值寄存
;到保存到R1指定的存儲單元ARM處理器尋址方式尋址方式分類——基址尋址0x55R2R30x400000000xAA0x4000000CLDRR2,[R3,#0x0C]0xAA將R3+0x0C作為地址裝載數據2023/4/569基址尋址指令舉例如下:LDR R0,[R1],#4;R0=[R1],R1=R1+4 ;后索引基址尋址
;ARM這種自動索引機制不消耗額外的時間LDRR0,[R1,R2];R0=[R1+R2]ARM處理器尋址方式尋址方式分類——基址尋址多寄存器尋址一次可傳送幾個寄存器值,允許一條指令傳送16個寄存器的任何子集或所有寄存器。多寄存器尋址指令舉例如下:LDMIA R1!,{R2-R7,R12};將R1指向的單元中的數據讀出到
;R2~R7、R12中(R1自動加4)STMIA R0!,{R2-R7,R12};將寄存器R2~R7、R12的值保
;存到R0指向的存儲,單元中(R0自動加4)0x40000000R1R20x??0x010x400000000x??R3R40x??R60x??0x020x030x040x400000040x400000080x4000000C存儲器ARM處理器尋址方式尋址方式分類——多寄存器尋址LDMIAR1!,{R2-R4,R6}0x010x020x030x040x400000102023/4/571堆棧是一個按特定順序進行存取的存儲區,操作順序為“后進先出”。堆棧尋址是隱含的,它使用一個專門的寄存器(堆棧指針)指向一塊存儲區域(堆棧),指針所指向的存儲單元即是堆棧的棧頂。存儲器堆??煞譃閮煞N:向上生長:向高地址方向生長,稱為遞增堆棧向下生長:向低地址方向生長,稱為遞減堆棧ARM處理器尋址方式尋址方式分類——堆棧尋址ARM處理器尋址方式尋址方式分類——堆棧尋址棧底棧頂棧區SP堆棧存儲區棧頂棧底棧區SP向下增長向上增長0x123456780x12345678堆棧壓棧堆棧壓棧2023/4/573棧頂SP棧頂SP棧底空堆棧棧底滿堆棧堆棧指針指向最后壓入的堆棧的有效數據項,稱為滿堆棧(壓棧時先修改sp,后數據壓棧;出棧時先數據出棧,后修改sp)堆棧指針指向下一個待壓入數據的空位置,稱為空堆棧。(壓棧時先數據壓棧,后修改sp;出棧時先修改sp,后數據出棧)
ARM處理器尋址方式尋址方式分類——堆棧尋址0x123456780x12345678棧頂SP0x12345678棧頂SP壓棧壓棧2023/4/574所以可以組合出四種類型的堆棧方式:滿遞增:堆棧向上增長,堆棧指針指向內含有效數據項的最高地址。指令如LDMFA、STMFA等;空遞增:堆棧向上增長,堆棧指針指向堆棧上的第一個空位置。指令如LDMEA、STMEA等;滿遞減:堆棧向下增長,堆棧指針指向內含有效數據項的最低地址。指令如LDMFD、STMFD等;空遞減:堆棧向下增長,堆棧指針向堆棧下的第一個空位置。指令如LDMED、STMED等。ARM處理器尋址方式尋址方式分類——堆棧尋址2023/4/575多寄存器傳送指令用于將一塊數據從存儲器的某一位置拷貝到另一位置。如:STMIA R0!,{R1-R7} ;將R1~R7的數據保存到存儲器中。
;存儲指針R0在保存第一個值之后增加,
;增長方向為向上增長。STMIB R0!,{R1-R7} ;將R1~R7的數據保存到存儲器中。
;存儲指針R0在保存第一個值之前增加,
;增長方向為向上增長。ARM處理器尋址方式尋址方式分類——塊拷貝尋址2023/4/576相對尋址是基址尋址的一種變通。由程序計數器PC提供基準地址,指令中的地址碼字段作為偏移量,兩者相加后得到的地址即為操作數的有效地址。相對尋址指令舉例如下:
BL SUBR1 ;調用到SUBR1子程序
BEQ LOOP ;條件跳轉到LOOP標號處
...LOOP MOV R6,#1 ...SUBR1 ...ARM處理器尋址方式尋址方式分類——相對尋址2023/4/577ARM指令小節目錄1.指令格式2.數據處理指令3.條件碼4.乘法指令5.ARM分支指令6.存儲器訪問指令7.雜項指令8.偽指令2023/4/578指令集介紹
ARM指令集——指令格式2023/4/579
ARM是三地址指令格式,指令的基本格式如下:指令集介紹ARM指令集——基本指令格式<opcode>{<cond>}{S}<Rd>,<Rn>{,<operand2>}其中<>號內的項是必須的,{}號內的項是可選的。各項的說明如下:opcode:指令助記符; cond:執行條件;S:是否影響CPSR寄存器的值;Rd:目標寄存器; Rn:第1個操作數的寄存器;operand2:第2個操作數;指令語法目標寄存器(Rd)源寄存器1(Rn)源寄存器2(Rm)ADDr3,r1,r2r3r1r2例:2023/4/580ARM指令的基本格式如下:指令集介紹ARM指令集——第2個操作數<opcode>{<cond>}{S}<Rd>,<Rn>{,<operand2>}靈活的使用第2個操作數“operand2”能夠提高代碼效率。它有如下的形式:#immed_8r——常數表達式;Rm——寄存器方式;Rm,shift——寄存器移位方式;2023/4/581指令集介紹ARM指令集——第2個操作數#immed_8r——常數表達式該常數必須對應8位位圖,即一個8位的常數通過循環右移偶數位得到。循環右移10位0x12000100100x00000000000x00000000000x00000000000x00000000000x00000000000x80100000000x04000001008位常數例如:ADD R1,R2,#0x0F(0x103)、(0x104)(0x102)2023/4/582指令集介紹ARM指令集——第2個操作數Rm——寄存器方式在寄存器方式下,操作數即為寄存器的數值。例如:SUB R1,R1,R22023/4/583指令集介紹ARM指令集——第2個操作數Rm,shift——寄存器移位方式將寄存器的移位結果作為操作數(移位操作不消耗額外的時間),但Rm值保持不變2023/4/584指令集介紹ARM指令集——第2個操作數Rm,shift——寄存器移位方式例如:ADD R1,R1,R1,LSL#3 ;R1=R1+R1<<3SUB R1,R1,R2,LSRR3 ;R1=R1-R2>>R32023/4/585ARM指令小節目錄1.指令格式2.數據處理指令3.條件碼4.乘法指令5.ARM分支指令6.存儲器訪問指令7.雜項指令8.偽指令2023/4/586簡單的ARM程序;文件名:test.s;功能:實現兩個寄存器相加;說明:使用ARMulate軟件仿真調試
AREA Example1,CODE,READONLY ;聲明代碼段Example1 ENTRY ;標識程序入口
CODE32 ;聲明32位ARM指令START MOV R0,#0 ;設置參數
MOV R1,#10LOOP BL ADD_SUB ;調用子程序ADD_SUB B LOOP ;跳轉到LOOPADD_SUB ADDS R0,R0,R1 ;R0=R0+R1 MOV PC,LR ;子程序返回
END ;文件結束2023/4/587指令集介紹ARM指令集——ARM數據處理指令數據處理指令大致可分為3類:數據傳送指令;算術邏輯運算指令;比較指令。數據處理指令只能對寄存器的內容進行操作,而不能對內存中的數據進行操作。所有ARM數據傳送或算術邏輯運算指令均可選擇使用S后綴,以使指令影響CPSR中的標志。
2023/4/588助記符說明操作條件碼位置MOVRd,operand2數據傳送Rd←operand2MOV{cond}{S}MVNRd,operand2數據非傳送Rd←(~operand2)MVN{cond}{S}ARM數據處理指令——數據傳送注:當后綴S時,這些指令根據結果更新標志N和Z,在計算Operand2時更新標志C,不影響標志V。2023/4/590助記符說明操作條件碼位置ADDRd,Rn,operand2加法運算指令Rd←Rn+operand2ADD{cond}{S}SUBRd,Rn,operand2減法運算指令Rd←Rn-operand2SUB{cond}{S}RSBRd,Rn,operand2逆向減法指令Rd←operand2-RnRSB{cond}{S}ADCRd,Rn,operand2帶進位加法Rd←Rn+operand2+CarryADC{cond}{S}SBCRd,Rn,operand2帶借位減法指令Rd←Rn-operand2-(NOT)CarrySBC{cond}{S}RSCRd,Rn,operand2帶借位逆向減法指令Rd←operand2-Rn-(NOT)CarryRSC{cond}{S}ARM數據處理指令——算術運算注:這些指令影響N,Z,C和V標志位。2023/4/591助記符說明操作條件碼位置ANDRd,Rn,operand2邏輯與操作指令Rd←Rn&operand2AND{cond}{S}ORRRd,Rn,operand2邏輯或操作指令Rd←Rn|operand2ORR{cond}{S}EORRd,Rn,operand2邏輯異或操作指令Rd←Rn^operand2EOR{cond}{S}BICRd,Rn,operand2位清除指令Rd←Rn&(~operand2)BIC{cond}{S}ARM數據處理指令——邏輯運算指令注:當后綴S時,這些指令根據結果更新標志N和Z,在計算Operand2時更新標志C,不影響標志V。2023/4/592助記符說明操作條件碼位置CMPRn,operand2比較指令標志N、Z、C、V←Rn-operand2CMP{cond}CMNRn,operand2負數比較指令標志n、z、c、V←Rn+operand2CMN{cond}TSTRn,operand2位測試指令標志N、Z、C、V←Rn&operand2TST{cond}TEQRn,operand2相等測試指令標志N、Z、C、V←Rn^operand2TEQ{cond}ARM數據處理指令——比較指令注:這些指令影響N,Z,C和V標志位。如:CMNR0, #1;測試R0的值是否為1的補碼,若是z置位2023/4/593ARM指令小節目錄1.指令格式2.數據處理指令3.條件碼4.乘法指令5.ARM分支指令6.存儲器訪問指令7.雜項指令8.偽指令2023/4/594
ARM指令的基本格式如下:指令集介紹ARM指令集——條件碼<opcode>{<cond>}{S}<Rd>,<Rn>{,<operand2>}使用條件碼“cond”可以實現高效的邏輯操作(節省跳轉和條件語句),提高代碼效率。2023/4/595操作碼條件助記符標志含義0000EQZ=1相等0001NEZ=0不相等0010CS/HSC=1無符號數大于或等于0011CC/LOC=0無符號數小于0100MIN=1負數0101PLN=0正數或零0110VSV=1溢出0111VCV=0沒有溢出1000HIC=1,Z=0無符號數大于1001LSC=0,Z=1無符號數小于或等于1010GEN=V有符號數大于或等于
1011LTN!=V有符號數小于
1100GTZ=0,N=V有符號數大于
1101LEZ=1,N!=V有符號數小于或等于
1110AL任何無條件執行
(指令默認條件)1111NV任何從不執行(不要使用)指令條件碼表2023/4/596指令集介紹ARM指令集——條件碼C代碼:if(a>b) a++;else b++;對應的匯編代碼:CMP R0,R1 ;R0(a)與R1(b)比較ADDHI R0,R0,#1;若R0>R1,則R0=R0+1ADDLS R1,R1,#1;若R0≤R1,則R1=R1+1示例:2023/4/597ARM指令小節目錄1.指令格式2.數據處理指令3.條件碼4.乘法指令5.ARM分支指令6.存儲器訪問指令7.雜項指令8.偽指令2023/4/598指令集介紹ARM指令集——乘法指令ARM具有三種乘法指令,分別為:32×32位乘法指令;32×32位乘加指令;32×32位結果為64位的乘/乘加指令。2023/4/599助記符說明操作條件碼位置MULRd,Rm,Rs32位乘法指令Rd←Rm*Rs(Rd≠Rm)MUL{cond}{S}MLARd,Rm,Rs,Rn32位乘加指令Rd←Rm*Rs+Rn(Rd≠Rm)MLA{cond}{S}UMULLRdLo,RdHi,Rm,Rs64位無符號乘法指令(RdLo,RdHi)←Rm*RsUMULL{cond}{S}UMLALRdLo,RdHi,Rm,Rs64位無符號乘加指令(RdLo,RdHi)←Rm*Rs+(RdLo,RdHi)UMLAL{cond}{S}SMULLRdLo,RdHi,Rm,Rs64位有符號乘法指令(RdLo,RdHi)←Rm*RsSMULL{cond}{S}SMLALRdLo,RdHi,Rm,Rs64位有符號乘加指令(RdLo,RdHi)←Rm*Rs+(RdLo,RdHi)SMLAL{cond}{S}ARM指令——乘法指令2023/4/5101ARM指令小節目錄1.指令格式2.數據處理指令3.條件碼4.乘法指令5.ARM分支指令6.存儲器訪問指令7.雜項指令8.偽指令2023/4/5102指令集介紹ARM指令集——分支指令在ARM中有兩種方式可以實現程序的跳轉,一種是使用分支指令直接跳轉,另一種則是直接向PC寄存器賦值實現跳轉。分支指令有以下三種:分支指令B;帶鏈接的分支指令BL;帶狀態切換的分支指令BX。2023/4/5103助記符說明操作條件碼位置Blabel分支指令PC←labelB{cond}BLlabel帶鏈接的分支指令LR←PC-4,PC←labelBL{cond}BXRm帶狀態切換的分支指令PC←Rm,切換處理器狀態BX{cond}ARM指令——分支指令2023/4/5104ARM指令小節目錄1.指令格式2.數據處理指令3.條件碼4.乘法指令5.ARM分支指令6.存儲器訪問指令7.雜項指令8.偽指令2023/4/5105指令集介紹ARM指令集——存儲器訪問指令ARM處理器是典型的RISC處理器,對存儲器的訪問只能使用加載和存儲指令實現。存儲器訪問指令分為:單寄存器操作指令和多寄存器操作指令。2023/4/5106助記符說明操作條件碼位置LDRRd,addressing加載字數據Rd←[addressing],addressing索引LDR{cond}LDRBRd,addressing加載無符號字節數據Rd←[addressing],addressing索引LDR{cond}BLDRTRd,addressing以用戶模式加載字數據Rd←[addressing],addressing索引LDR{cond}TLDRBTRd,addressing以用戶模式加載無符號字節數據Rd←[addressing],addressing索引LDR{cond}BTLDRHRd,addressing加載無符號半字數據Rd←[addressing],addressing索引LDR{cond}HLDRSBRd,addressing加載有符號字節數據Rd←[addressing],addressing索引LDR{cond}SBLDRSHRd,addressing加載有符號半字數據
Rd←[addressing],addressing索引
LDR{cond}SHARM存儲器訪問指令——單寄存器加載2023/4/5107助記符說明操作條件碼位置STRRd,addressing存儲字數據[addressing]←Rd,addressing索引STR{cond}STRBRd,addressing存儲字節數據[addressing]←Rd,addressing索引STR{cond}BSTRTRd,addressing以用戶模式存儲字數據[addressing]←Rd,
addressing索引STR{cond}TSTRBTRd,addressing以用戶模式存儲字節數據[addressing]←Rd,addressing索引STR{cond}BTSTRHRd,addressing存儲半字數據[addressing]←Rd,addressing索引STR{cond}HARM存儲器訪問指令——單寄存器存儲2023/4/5108LDR和STR——字和無符號字節加載/存儲指令LDR指令用于從內存中讀取單一字或字節數據存入寄存器中,STR指令用于將寄存器中的單一字或字節數據保存到內存。指令格式如下:ARM存儲器訪問指令——單寄存器存儲
LDR{cond}{T} Rd,<地址>;將指定地址上的字數據讀入RdSTR{cond}{T} Rd,<地址>;將Rd中的字數據存入指定地址
LDR{cond}B{T} Rd,<地址>;將指定地址上的字節數據讀入RdSTR{cond}B{T} Rd,<地址>;將Rd中的字節數據存入指定地址2023/4/5109ARM存儲器訪問指令——單寄存器存儲變址模式數據基址寄存器示例回寫前變址mem[base+offset]基址寄存器加上偏移LDRr0,[r1,#4]!前變址mem[base+offset]不變LDRr0,[r1,#4]后變址mem[base]基址寄存器加上偏移LDRr0,[r1],#4ARM指令集提供了幾種存儲器尋址的不同方式,這些方式是以下幾種變址模式的組合:注:”!”表示要把計算出的地址回寫到基址寄存器2023/4/5111LDR和STR——半字和有符號字節加載/存儲指令這類LDR/STR指令可加載有符號半字或字節,可加載/存儲無符號半字。偏移量格式、尋址方式與加載/存儲字和無符號字節指令相同。ARM存儲器訪問指令——單寄存器存儲
LDR{cond}SBRd,<地址>;將指定地址上的有符號字節讀入RdLDR{cond}SHRd,<地址>;將指定地址上的有符號半字讀入RdLDR{cond}HRd,<地址>;將指定地址上的半字數據讀入RdSTR{cond}HRd,<地址>;將Rd中的半字數據存入指定地址注意:半字數據加載,寄存器高兩個字節置零
;字節數據加載,寄存器高三個字節置零
2023/4/5112LDR和STR指令應用示例:1.加載/存儲字和無符號字節指令LDR R2,[R5] ;將R5指向地址的字數據存入R2STR R1,[R0,#0x04] ;將R1的數據存儲到R0+0x04地址LDRB R3,[R2],#-1 ;將R2指向地址的字節數據存入R3,R2=R2-1STRB R0,[R3,-R8,ASR#2];R0->[R3-R8/4],存儲R0的最低有效字節2.加載/存儲半字和有符號字節指令LDRSBR1,[R0,R3] ;將R0+R3地址上的字節數據存入R1,
;高24位用符號擴展LDRHR6,[R2],#2 ;將R2指向地址的半字數據存入R6,高16位用0擴展
;讀出后,R2=R2+2STRHR1,[R0,#2]! ;將R1的半字數據保存到R0+2地址,
;只修改低2字節數據,然后R0=R0+2ARM存儲器訪問指令——單寄存器存儲2023/4/5114助記符說明操作條件碼位置LDM{mode}
Rn{!},reglist多寄存器加載reglist←[Rn...],Rn回寫等LDM{cond}{mode}STM{mode}
Rn{!},reglist多寄存器存儲[Rn...]←reglist,Rn回寫等STM{cond}{mode}ARM存儲器訪問指令——多寄存器存取多寄存器加載/存儲指令可以實現在一組寄存器和一塊連續的內存單元之間傳輸數據。LDM為加載多個寄存器;STM為存儲多個寄存器。允許一條指令傳送16個寄存器的任何子集或所有寄存器。它們主要用于現場保護、數據復制、常數傳遞等。2023/4/5115ARM存儲器訪問指令——多寄存器存取多寄存器加載/存儲指令格式如下:LDM{cond}<模式>Rn{!},reglist{^}STM{cond}<模式>Rn{!},reglist{^}cond:指令執行的條件;模式:控制地址的增長方式,一共有8種模式;!:表示在操作結束后,將最后的地址寫回Rn中;reglist
:表示寄存器列表,可以包含多個寄存器,它們使用“,”隔開,如{R1,R2,R6-R9},寄存器由小到大排列;^:可選后綴。允許在用戶模式或系統模式下使用。它有以下兩個功能:1)若op是LDM且寄存器列表包含R15時,那么除了正常的多寄存器傳送外,還將SPSR也復制到CPSR中。這用于異常處理返回,僅在異常模式下使用。2)數據傳入或傳出的是用戶模式下的寄存器,而不是當前模式的寄存器。2023/4/5116ARM存儲器訪問指令——多寄存器存取多寄存器加載/存儲指令的8種模式如下表所示,右邊四種為堆棧操作、左邊四種為數據傳送操作。模式說明模式說明IA每次傳送后地址加4FD滿遞減堆棧IB每次傳送前地址加4ED空遞減堆棧DA每次傳送后地址減4FA滿遞增堆棧DB每次傳送前地址減4EA空遞增堆棧數據塊傳送操作堆棧操作進行數據復制時,先設置好源數據指針和目標指針,然后使用塊拷貝尋址指令LDMIA/STMIA、LDMIB/STMIB、LDMDA/STMDA、LDMDB/STMDB進行讀取和存儲。進行堆棧操作操作時,要先設置堆棧指針(SP),然后使用堆棧尋址指令STMFD/LDMFD、STMED/LDMED、STMFA/LDMFA和STMEA/LDMEA實現堆棧操作。2023/4/5118ARM存儲器訪問指令——多寄存器存取數據塊傳送存儲堆棧操作壓棧說明數據塊傳送加載堆棧操作出棧說明STMDASTMED空遞減LDMDALDMFA滿遞增STMIASTMEA空遞增LDMIALDMFD滿遞減STMDBSTMFD滿遞減LDMDBLDMEA空遞增STMIBSTMFA滿遞增LDMIBLDMED空遞減;使用數據塊傳送指令進行堆棧操作STMDA R0!,{R5-R6}...LDMIB R0!,{R5-R6};使用堆棧指令進行堆棧操作STMED R13!,{R5-R6}...LDMED R13!,{R5-R6}兩段代碼的執行結果是一樣的,但是使用堆棧指令的壓棧和出棧操作編程很簡單(只要前后一致即可),而使用數據塊指令進行壓棧和出棧操作則需要考慮空與滿、加與減對應的問題。堆棧操作和數據塊傳送指令類似,也有4種模式,它們之間的關系如下表所示:2023/4/5121助記符說明操作條件碼位置SWPRd,Rm,[Rn]寄存器和存儲器字數據交換Rd←[Rn],[Rn]←Rm(Rn≠Rd或Rm)SWP{cond}SWPBRd,Rm,[Rn]寄存器和存儲器字節數據交換Rd←[Rn],[Rn]←Rm(Rn≠Rd或Rm)SWP{cond}BARM存儲器訪問指令——寄存器和存儲器交換指令SWP指令用于將一個內存單元(該單元地址放在寄存器Rn中)的內容讀取到一個寄存器Rd中,同時將另一個寄存器Rm的內容寫入到該內存單元中。使用SWP可實現信號量操作。指令格式如下:
SWP{cond}{B}Rd,Rm,[Rn]其中,B為可選后綴,若有B,則交換字節,否則交換32位字;R
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T/CIQA 87-2024煤和焦炭試驗配比和結果計算方法
- 官方的室內裝修施工合同3篇
- 擔保合同擔保合同(一)6篇
- 精裝房屋抵押借貸合同10篇
- 新建鐵路工程勞務協作合同3篇
- 鋼增強塑料復合管項目績效評估報告
- 高效節能電動機項目績效評估報告
- 小學第33個愛國衛生月主題活動
- 服裝設計高端時尚
- 兒歌表演唱教學設計
- 酒店籌開期操作手冊(業主代表小組適用)
- 城市生活垃圾衛生填埋場運行管理培訓
- 2023年《早》舒淇早期古裝掰全照原創
- 部編版六年級語文下冊根據語境寫詞語(小升初歸類練習)
- 人工智能之知識庫
- 張哲華鑫仔小品《警察和我》臺詞劇本手稿
- 中等職業學校英語課程標準(2020年版)(word精排版)
- 畢業生就業推薦表word模板
- 南京市特種設備安全監督檢驗研究院公開招考5名編外工作人員模擬檢測試卷【共1000題含答案解析】
- 2023年八年級生物學業水平考試復習試卷
- YY/T 1685-2020氣動脈沖振蕩排痰設備
評論
0/150
提交評論