




已閱讀5頁,還剩198頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
ARM體系結(jié)構(gòu)與編程 2020 4 23 內(nèi)容 ARM概述和分類 ARM指令集和匯編程序設(shè)計(jì) ARM體系結(jié)構(gòu)和存儲系統(tǒng) ARM中斷和異常處理 第一章ARM概述和分類 2020 4 23 內(nèi)容 ARM簡介 ARM的分類 ARM的命名規(guī)則 基于ARM的嵌入式系統(tǒng)概述 2020 4 23 ARM介紹 什么是ARM 其實(shí) 人人都用ARM 什么是ARM ARM是一個(gè)公司的名字ARM代表一項(xiàng)技術(shù) 即AdvancedRISCMachineARM是一個(gè)內(nèi)核 而不是我們看到的具體的芯片 ARM發(fā)展的歷程 第一片ARM處理器是1983年10月到1985年4月間在位于英國劍橋的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ù)軟件工具 評估板 調(diào)試工具 應(yīng)用軟件 總線架構(gòu) 外圍設(shè)備單元 等等20世紀(jì)90年代 ARM快速進(jìn)入世界市場 ARMOfficesWorldwide 800 雇員全球 EnglandCambridge Maidenhead Sheffield BlackburnGermanyMunichFranceParis SophiaAntipolisKoreaSeoul USSeattle LosGatos WalnutCreek Austin Boston SanDiegoChinaTaiwanandShanghaiJapanShin Yokohama Tokyo ARMPartnershipModel 2020 4 23 ARM的應(yīng)用 2020 4 23 ARM分類 基于指令集體系結(jié)構(gòu) 構(gòu)架ISA 的分類ARMV1體系是最初版本 只有26位的尋址空間 沒有乘法指令 最終沒有商業(yè)化ARMV2體系與V1體系同為26位尋址空間 具有乘法和加法指令 支持協(xié)處理器ARMV3體系的尋址范圍擴(kuò)展到32位 具有乘法和加法指令 支持協(xié)處理器ARMV4體系增加了半字存儲操作 對調(diào)試的支持以及支持嵌入的ICEARMV5體系增加了DSP指令支持和對Java指令的支持ARMV6體系增加了媒體指令 ARMv6指令集合中加入了超過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 23 ARM系列處理器 基于處理器內(nèi)核的分類ARM7系列ARM9系列ARM9E系列ARM10E系列SecurCore系列StrongARM Xscale Intel ARM11 2020 4 23 ARM命名舉例 2020 4 23 ARM體系的變種 1 Thumb指令集 T變種 Thumb指令集是把32位的ARM指令集的一個(gè)子集重新編碼后而形成的一個(gè)特殊的16位的指令集2 長乘指令 M變種 長乘指令是一種生成64位相乘結(jié)果的乘法指令 此指令為ARM指令 M變種增加了兩條長乘指令3 增強(qiáng)型DSP指令 E變種 E變種的ARM體系增加了一些增強(qiáng)處理器對典型的DSP算法處理能力的附加指令 4 Java加速器Jazelle J變種 ARM的Jazelle技術(shù)是Java語言和先進(jìn)的32位RISC芯片完美結(jié)合的產(chǎn)物 5 ARM媒體功能擴(kuò)展 SIMD變種 2020 4 23 ARM的命名規(guī)則 ARM的命名分成兩類 基于ARMArchitecture的版本命名規(guī)則 基于ARMArchitecture版本的處理器系列命名規(guī)則 舉個(gè)例子 s3c2410采用ARMv4T架構(gòu)版本 ARM920T處理器系列 其中處理器核為ARM9TDMI 2020 4 23 基于ARMArchitecture的版本命名 規(guī)則 ARMv n variants x variants 分成四個(gè)組成部分 ARMv 固定字符 即ARMVersion n 指令集版本號 迄今為之 ARM架構(gòu)版本發(fā)布了7個(gè)系列 所以n 1 7 其中最新的版本是第7版 variants 變種 x variants 排除x后指定的變種常見的變種有 T Thumb指令集 M 長乘法指令 E 增強(qiáng)型DSP指令 J Java加速器Jazelle SIMD ARM媒體功能擴(kuò)展例如 ARMv5TxM表示ARM指令集版本為5 支持T變種 不支持M變種 2020 4 23 基于ARMArchitecture版本的處理器系列命名 采用上述的架構(gòu) 形成一系列的處理器 有時(shí)候還要區(qū)分處理器核和處理器系列 不過 在這里其實(shí)不用區(qū)分太細(xì) 畢竟這是功能的小部分的變化 核心是相同的 規(guī)則 ARM x y z T D M I E J F S x 處理器系列 y 存儲管理 保護(hù)單元 z cache T 支持Thumb指令集 D 支持片上調(diào)試 M 支持快速乘法器 I 支持EmbeddedICE 支持嵌入式跟蹤調(diào)試 E 支持增強(qiáng)型DSP指令 J 支持Jazelle F 具備向量浮點(diǎn)單元VFP S 可綜合版本 2020 4 23 基于ARM的嵌入式系統(tǒng)概述 1 RISC設(shè)計(jì)思想與CISC相比 有以下幾個(gè)方面不同 a 設(shè)計(jì)重點(diǎn)不同 RISC重點(diǎn)在于通過軟件的靈活降低硬件執(zhí)行指令的復(fù)雜度 即使得編譯器更高的復(fù)雜性b 指令集 RISC減少了指令種類 操作也簡單 基本是一個(gè)周期執(zhí)行一條指令 每一條指令長度是固定 而CISC指令長度不固定 執(zhí)行也需要多個(gè)周期c 寄存器 RISC擁有更多寄存器 都可以存放數(shù)據(jù)或地址 而CISC都是用于特定目的的專用寄存器d load store結(jié)構(gòu) 即處理器只處理寄存器中的數(shù)據(jù) 獨(dú)立的load store指令完成數(shù)據(jù)在寄存器和外部存儲器之間的傳送 即數(shù)據(jù)處理與存儲器訪問分開 而CISC能夠直接處理存取器中的數(shù)據(jù)注 ARM指令集屬于RISC指令集 但與單純的RISC有以下幾方面不同 2020 4 23 基于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ù)字信號處理器 DSP 指令 以支持16 16位乘法操作及飽和操作 2020 4 23 基于ARM的嵌入式系統(tǒng)概述 2 高速緩存 cache 1 為什么采用高速緩存微處理器的時(shí)鐘頻率比內(nèi)存速度提高快得多 高速緩存可以提高內(nèi)存的平均性能 2 高速緩存的工作原理高速緩存是一種小型 快速的存儲器 它保存部分主存內(nèi)容的拷貝 CPU 高速緩存控制器 CACHE 主存 數(shù)據(jù) 數(shù)據(jù) 地址 2020 4 23 基于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)核都是一樣的 不同的是存儲器和外設(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 的市場份額 嵌入式DSP處理器 DSP處理器對系統(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等屬于此范疇 二是在通用單片機(jī)或SOC中增加DSP協(xié)處理器 例如Intel的MCS 296和Infineon Siemens 的TriCore 推動嵌入式DSP處理器發(fā)展的另一個(gè)因素是嵌入式系統(tǒng)的智能化 例如各種帶有智能邏輯的消費(fèi)類產(chǎn)品 生物信息識別終端 帶有加解密算法的鍵盤 ADSL接入 實(shí)時(shí)語音壓解系統(tǒng) 虛擬現(xiàn)實(shí)顯示等 這類智能化算法一般都是運(yùn)算量較大 特別是向量運(yùn)算 指針線性尋址等較多 而這些正是DSP處理器的長處所在 嵌入式DSP處理器 有代表性的產(chǎn)品是TexasInstruments的TMS320系列和Motorola的DSP56000系列 TMS320系列處理器包括用于控制的C2000系列 移動通信的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í)代已來臨 這就是SystemOnChip SOC 各種通用處理器內(nèi)核將作為SOC設(shè)計(jì)公司的標(biāo)準(zhǔn)庫 和許多其它嵌入式系統(tǒng)外設(shè)一樣 成為VLSI設(shè)計(jì)中一種標(biāo)準(zhǔn)的器件 用標(biāo)準(zhǔn)的VHDL等語言描述 存儲在器件庫中 用戶只需定義出其整個(gè)應(yīng)用系統(tǒng) 仿真通過后就可以將設(shè)計(jì)圖交給半導(dǎo)體工廠制作樣品 這樣除個(gè)別無法集成的器件以外 整個(gè)嵌入式系統(tǒng)大部分均可集成到一塊或幾塊芯片中去 應(yīng)用系統(tǒng)電路板將變得很簡潔 對于減小體積和功耗 提高可靠性非常有利 它結(jié)合了許多功能區(qū)塊 將功能做在一個(gè)芯片上 ARMRISC MIPSRISC DSP或是其他的微處理器核心 加上通信的接口單元 例如通用串行端口 USB TCP IP通信單元 GPRS通信接口 GSM通信接口 IEEE1394 藍(lán)牙模塊接口等等 這些單元以往都是依照各單元的功能做成一個(gè)個(gè)獨(dú)立的處理芯片 嵌入式片上系統(tǒng) SoC 2020 4 23 基于ARM的嵌入式系統(tǒng)概述 4 嵌入式系統(tǒng)硬件 總線 4 嵌入式系統(tǒng)硬件微處理器 CPU 是嵌入式系統(tǒng)硬件平臺的核心構(gòu)件 但不是全部 按照馮 諾依曼體系結(jié)構(gòu)思想 計(jì)算機(jī)的硬件是由CPU 存儲器和I O設(shè)備三部分組成的 總線是把CPU與存儲器 I O設(shè)備相連接的信息通道 但總線并不僅僅指的是一束信號線 而應(yīng)包含相應(yīng)的通信協(xié)議 按照使用場合的不同 總線分成芯片級總線 CPU總線 板卡級總線 內(nèi)總線 和系統(tǒng)級總線 外總線 總線和總線橋 2020 4 23 基于ARM的嵌入式系統(tǒng)概述 4 嵌入式系統(tǒng)硬件AMBA總線是一個(gè)多總線系統(tǒng) 規(guī)范定義了三種可以組合使用的不同類型的總線 AHB AdvancedHigh performanceBus ASB AdvancedSystemBus 和APB AdvancedPeripheralBus AHB CPU核 存儲器控制器 中斷控制器 LCD控制器 DMA和USB主機(jī)模塊等 可以包括多個(gè)主模塊 APB WATCHDOG IIS IIC PWM ADC UART GPIO RTC等 只有一個(gè)主模塊 ASB 連接高性能系統(tǒng)模塊 在某些需高速且不必使用AHB總線的場合使用 2020 4 23 基于ARM的嵌入式系統(tǒng)概述 5 嵌入式存儲器大多數(shù)嵌入式產(chǎn)品的存儲器結(jié)構(gòu)是分層的 即多種類型的存儲器在決定存儲器層次 寬度 類型等特性時(shí) 需綜合考慮產(chǎn)品的價(jià)格 性能 功耗等因素 存儲器系統(tǒng) 寄存器 高速緩存SRAM 主存儲器DRAM 本地存儲器Flash ROM 磁盤 網(wǎng)絡(luò)存儲器Flash ROM 磁盤 時(shí)鐘周期 0 1 10 50 100 20000000 分層結(jié)構(gòu) 存儲器種類 RAM 隨機(jī)存取存儲器SRAM 靜態(tài)隨機(jī)存儲器 高速存儲器或cache 不需刷新電路即能保存內(nèi)部存儲數(shù)據(jù) DRAM 動態(tài)隨機(jī)存儲器 一般使用電容存儲 需經(jīng)常刷新1 SRAM比DRAM快2 SRAM比DRAM耗電多3 DRAM存儲密度比SRAM高得多4 DRAM需要周期性刷新SDRAM 同步動態(tài)隨機(jī)存儲器 是DRAM中的一種 因與處理器總線同步 故能突發(fā)式地輸出到總線ROM 只讀存儲器 閃速存儲器 FLASH PROM 可編程ROMEPROM 可擦除 可編程ROMEEPROM 電可擦除 可編程ROMFLASH 閃存相對傳統(tǒng)的EPROM芯片 這種芯片可以用電氣的方法快速地擦寫由于快擦寫存儲器不需要存儲電容器 故其集成度更高 制造成本低于DRAM它使用方便 既具有SRAM讀寫的靈活性和較快的訪問速度 又具有ROM在斷電后可不丟失信息的特點(diǎn) 所以快擦寫存儲器技術(shù)發(fā)展十分迅速FLASH的架構(gòu)大致上可分為具程序執(zhí)行能力的NOR架構(gòu)以及儲存數(shù)據(jù)的NAND架構(gòu) NOR技術(shù)和NAND技術(shù) NORFlash市場目前由Intel和AMD公司主導(dǎo) 其主要功能是程序的儲存 如PC中的BIOSNOR的特點(diǎn)是芯片內(nèi)執(zhí)行 XIP eXecuteInPlace 這樣應(yīng)用程序可以直接在flash閃存內(nèi)運(yùn)行 不必再把代碼讀到系統(tǒng)RAM中 NOR的傳輸效率很高 在1 4MB的小容量時(shí)具有很高的成本效益 但是很低的寫入和擦除速度大大影響了它的性能 NANDFlash相對上屬于封閉的市場 專利權(quán)掌握在少數(shù)廠商手中 Toshiba和Samsung公司為主 其主要功能是數(shù)據(jù)的儲存 如小型存儲卡 隨身電子盤等都是NAND結(jié)構(gòu)能提供極高的單元密度 可以達(dá)到高存儲密度 并且寫入和擦除的速度也很快 應(yīng)用NAND的困難在于flash的管理需要特殊的系統(tǒng)接口 2020 4 23 基于ARM的嵌入式系統(tǒng)概述 6 初始化啟動代碼 1 初始化硬件配置 2 診斷 3 引導(dǎo)初始化硬件配置包括 設(shè)置堆棧指針 硬件工作時(shí)鐘 存儲器映射等等 I O寄存器 快速SRAM 大塊DRAM 啟動ROM 啟動之前 I O寄存器 快速SRAM 大塊DRAM 啟動ROM 啟動之后 2020 4 23 基于ARM的嵌入式系統(tǒng)概述 6 初始化啟動代碼診斷硬件是否能正常工作 不能工作的是否隔離 即識別和隔離故障 引導(dǎo)過程包括裝載一個(gè)映像文件并將控制權(quán)交給它 裝載可以包括拷貝整個(gè)程序 代碼和數(shù)據(jù) 也可以只拷貝易變 volatile 變量的數(shù)據(jù)到RAM中 啟動后 通過更改PC指向映像文件的起始地址 從而交出控制權(quán) ARM的特點(diǎn) RISC指令集Load Store體系結(jié)構(gòu)固定的32位指令大多數(shù)指令單周期完成Thumb DSP jazeller功能擴(kuò)展低功耗 2020 4 23 小結(jié) 什么是ARMARM的特點(diǎn)ARM的分類ARM的命名規(guī)則嵌入式硬件體系結(jié)構(gòu)嵌入式存儲器存儲器映射 第二章ARM體系結(jié)構(gòu)和存儲系統(tǒng) 2020 4 23 內(nèi)容 流水線 pipeline 存儲 模式 model 寄存器 2020 4 23 存儲 地址空間 ARM結(jié)構(gòu)使用單個(gè)平面的232個(gè)8位字節(jié)地址空間 字節(jié)地址按照無符號數(shù)排列 從0到232 1 地址空間可以看作是包含230個(gè)32位字 或231個(gè)16位半字 32位地址線 數(shù)據(jù)線 支持如下數(shù)據(jù)類型 字節(jié) byte 8bits 半字 Halfword 16bits 半字必須對齊2字節(jié)邊界 字 Word 32bits 字必須對齊4字節(jié)邊界 2020 4 23 存儲 ARM處理器可以將存儲器中的字以下列格式存儲 大端格式 Big endian 字?jǐn)?shù)據(jù)的高字節(jié)存儲在低地址中 而低字節(jié)存儲在高地址中小端格式 Little endian 與小端對齊相反 字?jǐn)?shù)據(jù)的高字節(jié)存儲在高地址中 低字節(jié)存儲在低地址中 2020 4 23 ARM結(jié)構(gòu)通常希望所有的存儲器訪問都合理的對齊 具體來說就是字訪問的地址通常是字對齊的 而半字訪問使用的地址是半字對齊的 不按這種方式對齊的存儲器訪問稱為非對齊的存儲器訪問 非對齊的取指 不可預(yù)知結(jié)果 ARM狀態(tài)忽略低2位 Thumb狀態(tài)忽略最低位 忽略由存儲器實(shí)現(xiàn) 非對齊的數(shù)據(jù)訪問 執(zhí)行結(jié)果不可預(yù)測 忽略字單元地址的低2位 忽略半字單元地址的最低位 忽略可能由處理器或存儲器完成 存儲 非對齊的存儲器訪問 指令流水線 為增加處理器指令流的速度 ARM7系列使用3級流水線 允許多個(gè)操作同時(shí)處理 比逐條指令執(zhí)行要快 PC指向正被取指的指令 而非正在執(zhí)行的指令 Fetch Decode Execute 從存儲器中讀取指令 解碼指令 寄存器讀 從寄存器Bank 移位及ALU操作寄存器寫 到寄存器Bank PCPC PC 4PC 2 PC 8PC 4 ARMThumb 2020 4 23 處理器狀態(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 23 處理器模式 簡介 ARM體系結(jié)構(gòu)支持7種處理器模式 分別為 用戶模式 快中斷模式 中斷模式 管理模式 中止模式 未定義模式和系統(tǒng)模式 如下表所示 這樣的好處是可以更好的支持操作系統(tǒng)并提高工作效率 特權(quán)模式 除用戶模式外的6種模式異常模式 除系統(tǒng)模式外的特權(quán)模式 2020 4 23 處理器模式 2020 4 23 內(nèi)部寄存器 簡介 在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 23 ARM狀態(tài)各模式下可以訪問的寄存器 2020 4 23 內(nèi)部寄存器 r0 r12 通用寄存器 當(dāng)C和匯編互相調(diào)用時(shí) r0 r3用來傳遞函數(shù)參數(shù) 可記為a0 a3r13 用于各種模式下的堆棧寄存器 sp r14 用來保存程序返回地址的鏈接寄存器 lr r15 程序計(jì)數(shù)器 pc r8 FIQ r12 FIQ 允許快速中斷處理r8 User r12 User 除了FIQ模式外各模式公用除了User和System模式外 各種模式都有自己獨(dú)立的r13和r14 2020 4 23 內(nèi)部寄存器 R14寄存器與子程序調(diào)用 MOVPC LR R14 地址A 1 程序A執(zhí)行過程中調(diào)用程序B 操作流程 2 程序跳轉(zhuǎn)至標(biāo)號Label 執(zhí)行程序B 同時(shí)硬件將 BLLabel 指令的下一條指令所在地址存入R14 3 程序B執(zhí)行最后 將R14寄存器的內(nèi)容放入PC 返回程序A 2020 4 23 內(nèi)部寄存器 正常操作時(shí) 從R15讀取的值是處理器正在取指的地址 即當(dāng)前正在執(zhí)行指令的地址加上8個(gè)字節(jié) 兩條ARM指令的長度 由于ARM指令總是以字為單位 所以R15寄存器的最低兩位總是為0 2020 4 23 程序狀態(tài)寄存器 簡介 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è)對當(dāng)前處理器模式進(jìn)行編碼的位 1個(gè)用于指示當(dāng)前執(zhí)行指令 ARM還是Thumb 的位 2020 4 23 程序狀態(tài)寄存器 簡介 條件代碼標(biāo)志 保留 控制位 溢出標(biāo)志 進(jìn)位或借位擴(kuò)展 零 負(fù)或小于 IRQ禁止 FIQ禁止 狀態(tài)位 模式位 N Z C V I T F CPSR寄存器的格式 CPSR模式位設(shè)置表 2020 4 23 程序狀態(tài)寄存器 簡介 每個(gè)異常模式還帶有一個(gè)程序狀態(tài)保存寄存器 SPSR 它用于保存在異常事件發(fā)生之前的CPSR CPSR和SPSR通過特殊指令進(jìn)行訪問 注意 如果通過程序修改CPSR寄存器中的模式位進(jìn)入異常模式 那么硬件將不會把CPSR保存至SPSR中 2020 4 23 小結(jié) ARM處理器存儲格式指令流水線ARM處理器狀態(tài)ARM處理器模式SPLRPCCPSRSPSR 第三章ARM指令系統(tǒng) 2020 4 23 內(nèi)容 ARM指令集 ARM匯編程序設(shè)計(jì) ARM處理器尋址 2020 4 23 ARM處理器尋址方式 尋址方式分類 尋址方式是根據(jù)指令中給出的地址碼字段來實(shí)現(xiàn)尋找真實(shí)操作數(shù)地址的方式 ARM處理器具有9種基本尋址方式 1 寄存器尋址 2 立即尋址 3 寄存器移位尋址 4 寄存器間接尋址 5 基址尋址 6 多寄存器尋址 7 堆棧尋址 8 塊拷貝尋址 9 相對尋址 2020 4 23 操作數(shù)的值在寄存器中 指令中的地址碼字段指出的是寄存器編號 指令執(zhí)行時(shí)直接取出寄存器值來操作 寄存器尋址指令舉例如下 MOVR1 R2 將R2的值存入R1SUBR0 R1 R2 將R1的值減去R2的值 結(jié)果保存到R0 ARM處理器尋址方式 尋址方式分類 寄存器尋址 MOVR1 R2 0 xAA 2020 4 23 立即尋址指令中的操作碼字段后面的地址碼部分即是操作數(shù)本身 也就是說 數(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 23 寄存器移位尋址是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 R2 8ANDSR1 R1 R2 LSLR3 R2的值左移R3位 然后和R1相 與 操作 結(jié)果放入R1 ARM處理器尋址方式 尋址方式分類 寄存器移位尋址 MOVR0 R2 LSL 3 0 x08 0 x08 邏輯左移3位 2020 4 23 指令集介紹 ARM指令集 第2個(gè)操作數(shù) 2020 4 23 寄存器間接尋址指令中的地址碼給出的是一個(gè)通用寄存器的編號 所需的操作數(shù)保存在寄存器指定地址的存儲單元中 即寄存器為操作數(shù)的地址指針 寄存器間接尋址指令舉例如下 LDRR1 R2 將R2指向的存儲單元的數(shù)據(jù)讀出 保存在R1中SWPR1 R1 R2 將寄存器R1的值和R2指定的存儲 單元的內(nèi)容交換 ARM處理器尋址方式 尋址方式分類 寄存器間接尋址 LDRR0 R2 0 xAA 2020 4 23 基址尋址就是將基址寄存器的內(nèi)容與指令中給出的偏移量 4K 相加 減 形成操作數(shù)的有效地址 基址尋址用于訪問基址附近的存儲單元 常用于查表 數(shù)組操作 功能部件寄存器訪問等 寄存器間接尋址是偏移量為0的基址加偏移尋址 基址尋址指令舉例如下 前索引尋址 LDRR2 R3 0 x0C 讀取R3 0 x0C地址上的存儲單元的內(nèi)容 放入R2STRR1 R0 4 先R0 R0 4 然后把R0的值寄存 到保存到R1指定的存儲單元 ARM處理器尋址方式 尋址方式分類 基址尋址 LDRR2 R3 0 x0C 0 xAA 將R3 0 x0C作為地址裝載數(shù)據(jù) 基址尋址指令舉例如下 LDRR0 R1 4 R0 R1 R1 R1 4 后索引基址尋址 ARM這種自動索引機(jī)制不消耗額外的時(shí)間LDRR0 R1 R2 R0 R1 R2 ARM處理器尋址方式 尋址方式分類 基址尋址 2020 4 23 多寄存器尋址一次可傳送幾個(gè)寄存器值 允許一條指令傳送16個(gè)寄存器的任何子集或所有寄存器 多寄存器尋址指令舉例如下 LDMIAR1 R2 R7 R12 將R1指向的單元中的數(shù)據(jù)讀出到 R2 R7 R12中 R1自動加4 STMIAR0 R2 R7 R12 將寄存器R2 R7 R12的值保 存到R0指向的存儲 單元中 R0自動加4 ARM處理器尋址方式 尋址方式分類 多寄存器尋址 LDMIAR1 R2 R4 R6 0 x40000010 堆棧是一個(gè)按特定順序進(jìn)行存取的存儲區(qū) 操作順序?yàn)?后進(jìn)先出 堆棧尋址是隱含的 它使用一個(gè)專門的寄存器 堆棧指針 指向一塊存儲區(qū)域 堆棧 指針?biāo)赶虻拇鎯卧词嵌褩5臈m?存儲器堆棧可分為兩種 向上生長 向高地址方向生長 稱為遞增堆棧向下生長 向低地址方向生長 稱為遞減堆棧 ARM處理器尋址方式 尋址方式分類 堆棧尋址 2020 4 23 ARM處理器尋址方式 尋址方式分類 堆棧尋址 0 x12345678 0 x12345678 2020 4 23 堆棧指針指向最后壓入的堆棧的有效數(shù)據(jù)項(xiàng) 稱為滿堆棧 壓棧時(shí)先修改sp 后數(shù)據(jù)壓棧 出棧時(shí)先數(shù)據(jù)出棧 后修改sp 堆棧指針指向下一個(gè)待壓入數(shù)據(jù)的空位置 稱為空堆棧 壓棧時(shí)先數(shù)據(jù)壓棧 后修改sp 出棧時(shí)先修改sp 后數(shù)據(jù)出棧 ARM處理器尋址方式 尋址方式分類 堆棧尋址 0 x12345678 2020 4 23 所以可以組合出四種類型的堆棧方式 滿遞增 堆棧向上增長 堆棧指針指向內(nèi)含有效數(shù)據(jù)項(xiàng)的最高地址 指令如LDMFA STMFA等 空遞增 堆棧向上增長 堆棧指針指向堆棧上的第一個(gè)空位置 指令如LDMEA STMEA等 滿遞減 堆棧向下增長 堆棧指針指向內(nèi)含有效數(shù)據(jù)項(xiàng)的最低地址 指令如LDMFD STMFD等 空遞減 堆棧向下增長 堆棧指針向堆棧下的第一個(gè)空位置 指令如LDMED STMED等 ARM處理器尋址方式 尋址方式分類 堆棧尋址 2020 4 23 多寄存器傳送指令用于將一塊數(shù)據(jù)從存儲器的某一位置拷貝到另一位置 如 STMIAR0 R1 R7 將R1 R7的數(shù)據(jù)保存到存儲器中 存儲指針R0在保存第一個(gè)值之后增加 增長方向?yàn)橄蛏显鲩L STMIBR0 R1 R7 將R1 R7的數(shù)據(jù)保存到存儲器中 存儲指針R0在保存第一個(gè)值之前增加 增長方向?yàn)橄蛏显鲩L ARM處理器尋址方式 尋址方式分類 塊拷貝尋址 2020 4 23 相對尋址是基址尋址的一種變通 由程序計(jì)數(shù)器PC提供基準(zhǔn)地址 指令中的地址碼字段作為偏移量 兩者相加后得到的地址即為操作數(shù)的有效地址 相對尋址指令舉例如下 BLSUBR1 調(diào)用到SUBR1子程序BEQLOOP 條件跳轉(zhuǎn)到LOOP標(biāo)號處 LOOPMOVR6 1 SUBR1 ARM處理器尋址方式 尋址方式分類 相對尋址 2020 4 23 ARM指令小節(jié)目錄 1 指令格式2 數(shù)據(jù)處理指令3 條件碼4 乘法指令5 ARM分支指令6 存儲器訪問指令7 雜項(xiàng)指令8 偽指令 2020 4 23 指令集介紹 ARM指令集 指令格式 2020 4 23 ARM是三地址指令格式 指令的基本格式如下 指令集介紹 ARM指令集 基本指令格式 S 其中號內(nèi)的項(xiàng)是必須的 號內(nèi)的項(xiàng)是可選的 各項(xiàng)的說明如下 opcode 指令助記符 cond 執(zhí)行條件 S 是否影響CPSR寄存器的值 Rd 目標(biāo)寄存器 Rn 第1個(gè)操作數(shù)的寄存器 operand2 第2個(gè)操作數(shù) 例 2020 4 23 ARM指令的基本格式如下 指令集介紹 ARM指令集 第2個(gè)操作數(shù) S 靈活的使用第2個(gè)操作數(shù) operand2 能夠提高代碼效率 它有如下的形式 immed 8r 常數(shù)表達(dá)式 Rm 寄存器方式 Rm shift 寄存器移位方式 2020 4 23 指令集介紹 ARM指令集 第2個(gè)操作數(shù) immed 8r 常數(shù)表達(dá)式該常數(shù)必須對應(yīng)8位位圖 即一個(gè)8位的常數(shù)通過循環(huán)右移偶數(shù)位得到 循環(huán)右移10位 8位常數(shù) 例如 ADDR1 R2 0 x0F 0 x103 0 x104 0 x102 2020 4 23 指令集介紹 ARM指令集 第2個(gè)操作數(shù) Rm 寄存器方式在寄存器方式下 操作數(shù)即為寄存器的數(shù)值 例如 SUBR1 R1 R2 2020 4 23 指令集介紹 ARM指令集 第2個(gè)操作數(shù) Rm shift 寄存器移位方式將寄存器的移位結(jié)果作為操作數(shù) 移位操作不消耗額外的時(shí)間 但Rm值保持不變 2020 4 23 指令集介紹 ARM指令集 第2個(gè)操作數(shù) Rm shift 寄存器移位方式例如 ADDR1 R1 R1 LSL 3 R1 R1 R1 R3 2020 4 23 ARM指令小節(jié)目錄 1 指令格式2 數(shù)據(jù)處理指令3 條件碼4 乘法指令5 ARM分支指令6 存儲器訪問指令7 雜項(xiàng)指令8 偽指令 2020 4 23 簡單的ARM程序 文件名 test s 功能 實(shí)現(xiàn)兩個(gè)寄存器相加 說明 使用ARMulate軟件仿真調(diào)試AREAExample1 CODE READONLY 聲明代碼段Example1ENTRY 標(biāo)識程序入口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 23 指令集介紹 ARM指令集 ARM數(shù)據(jù)處理指令 數(shù)據(jù)處理指令大致可分為3類 數(shù)據(jù)傳送指令 算術(shù)邏輯運(yùn)算指令 比較指令 數(shù)據(jù)處理指令只能對寄存器的內(nèi)容進(jìn)行操作 而不能對內(nèi)存中的數(shù)據(jù)進(jìn)行操作 所有ARM數(shù)據(jù)傳送或算術(shù)邏輯運(yùn)算指令均可選擇使用S后綴 以使指令影響CPSR中的標(biāo)志 2020 4 23 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 23 ARM數(shù)據(jù)處理指令 算術(shù)運(yùn)算 注 這些指令影響N Z C和V標(biāo)志位 2020 4 23 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 23 ARM數(shù)據(jù)處理指令 比較指令 注 這些指令影響N Z C和V標(biāo)志位 如 CMNR0 1 測試R0的值是否為1的補(bǔ)碼 若是z置位 2020 4 23 ARM指令小節(jié)目錄 1 指令格式2 數(shù)據(jù)處理指令3 條件碼4 乘法指令5 ARM分支指令6 存儲器訪問指令7 雜項(xiàng)指令8 偽指令 2020 4 23 ARM指令的基本格式如下 指令集介紹 ARM指令集 條件碼 S 使用條件碼 cond 可以實(shí)現(xiàn)高效的邏輯操作 節(jié)省跳轉(zhuǎn)和條件語句 提高代碼效率 2020 4 23 指令條件碼表 2020 4 23 指令集介紹 ARM指令集 條件碼 C代碼 if a b a elseb 對應(yīng)的匯編代碼 CMPR0 R1 R0 a 與R1 b 比較ADDHIR0 R0 1 若R0 R1 則R0 R0 1ADDLSR1 R1 1 若R0 R1 則R1 R1 1 示例 2020 4 23 ARM指令小節(jié)目錄 1 指令格式2 數(shù)據(jù)處理指令3 條件碼4 乘法指令5 ARM分支指令6 存儲器訪問指令7 雜項(xiàng)指令8 偽指令 2020 4 23 指令集介紹 ARM指令集 乘法指令 ARM具有三種乘法指令 分別為 32 32位乘法指令 32 32位乘加指令 32 32位結(jié)果為64位的乘 乘加指令 2020 4 23 ARM指令 乘法指令 2020 4 23 ARM指令小節(jié)目錄 1 指令格式2 數(shù)據(jù)處理指令3 條件碼4 乘法指令5 ARM分支指令6 存儲器訪問指令7 雜項(xiàng)指令8 偽指令 2020 4 23 指令集介紹 ARM指令集 分支指令 在ARM中有兩種方式可以實(shí)現(xiàn)程序的跳轉(zhuǎn) 一種是使用分支指令直接跳轉(zhuǎn) 另一種則是直接向PC寄存器賦值實(shí)現(xiàn)跳轉(zhuǎn) 分支指令有以下三種 分支指令B 帶鏈接的分支指令BL 帶狀態(tài)切換的分支指令BX 2020 4 23 ARM指令 分支指令 2020 4 23 ARM指令小節(jié)目錄 1 指令格式2 數(shù)據(jù)處理指令3 條件碼4 乘法指令5 ARM分支指令6 存儲器訪問指令7 雜項(xiàng)指令8 偽指令 2020 4 23 指令集介紹 ARM指令集 存儲器訪問指令 ARM處理器是典型的RISC處理器 對存儲器的訪問只能使用加載和存儲指令實(shí)現(xiàn) 存儲器訪問指令分為 單寄存器操作指令和多寄存器操作指令 2020 4 23 ARM存儲器訪問指令 單寄存器加載 2020 4 23 ARM存儲器訪問指令 單寄存器存儲 2020 4 23 LDR和STR 字和無符號字節(jié)加載 存儲指令LDR指令用于從內(nèi)存中讀取單一字或字節(jié)數(shù)據(jù)存入寄存器中 STR指令用于將寄存器中的單一字或字節(jié)數(shù)據(jù)保存到內(nèi)存 指令格式如下 ARM存儲器訪問指令 單寄存器存儲 LDR cond T Rd 將指定地址上的字?jǐn)?shù)據(jù)讀入RdSTR cond T Rd 將Rd中的字?jǐn)?shù)據(jù)存入指定地址LDR cond B T Rd 將指定地址上的字節(jié)數(shù)據(jù)讀入RdSTR cond B T Rd 將Rd中的字節(jié)數(shù)據(jù)存入指定地址 2020 4 23 ARM存儲器訪問指令 單寄存器存儲 ARM指令集提供了幾種存儲器尋址的不同方式 這些方式是以下幾種變址模式的組合 注 表示要把計(jì)算出的地址回寫到基址寄存器 2020 4 23 LDR和STR 半字和有符號字節(jié)加載 存儲指令這類LDR STR指令可加載有符號半字或字節(jié) 可加載 存儲無符號半字 偏移量格式 尋址方式與加載 存儲字和無符號字節(jié)指令相同 ARM存儲器訪問指令 單寄存器存儲 LDR cond SBRd 將指定地址上的有符號字節(jié)讀入RdLDR cond SHRd 將指定地址上的有符號半字讀入RdLDR cond HRd 將指定地址上的半字?jǐn)?shù)據(jù)讀入RdSTR cond HRd 將Rd中的半字?jǐn)?shù)據(jù)存入指定地址 注意 半字?jǐn)?shù)據(jù)加載 寄存器高兩個(gè)字節(jié)置零 字節(jié)數(shù)據(jù)加載 寄存器高三個(gè)字節(jié)置零 2020 4 23 LDR和STR指令應(yīng)用示例 1 加載 存儲字和無符號字節(jié)指令LDRR2 R5 將R5指向地址的字?jǐn)?shù)據(jù)存入R2STRR1 R0 0 x04 將R1的數(shù)據(jù)存儲到R0 0 x04地址LDRBR3 R2 1 將R2指向地址的字節(jié)數(shù)據(jù)存入R3 R2 R2 1STRBR0 R3 R8 ASR 2 R0 R3 R8 4 存儲R0的最低有效字節(jié)2 加載 存儲半字和有符號字節(jié)指令LDRSBR1 R0 R3 將R0 R3地址上的字節(jié)數(shù)據(jù)存入R1 高24位用符號擴(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存儲器訪問指令 單寄存器存儲 2020 4 23 ARM存儲器訪問指令 多寄存器存取 多寄存器加載 存儲指令可以實(shí)現(xiàn)在一組寄存器和一塊連續(xù)的內(nèi)存單元之間傳輸數(shù)據(jù) LDM為加載多個(gè)寄存器 STM為存儲多個(gè)寄存器 允許一條指令傳送16個(gè)寄存器的任何子集或所有寄存器 它們主要用于現(xiàn)場保護(hù) 數(shù)據(jù)復(fù)制 常數(shù)傳遞等 2020 4 23 ARM存儲器訪問指令 多寄存器存取 多寄存器加載 存儲指令格式如下 LDM cond Rn reglist STM cond Rn reglist cond 指令執(zhí)行的條件 模式 控制地址的增長方式 一共有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 23 ARM存儲器訪問指令 多寄存器存取 多寄存器加載 存儲指令的8種模式如下表所示 右邊四種為堆棧操作 左邊四種為數(shù)據(jù)傳送操作 進(jìn)行數(shù)據(jù)復(fù)制時(shí) 先設(shè)置好源數(shù)據(jù)指針和目標(biāo)指針 然后使用塊拷貝尋址指令LDMIA STMIA LDMIB STMIB LDMDA STMDA LDMDB STMDB進(jìn)行讀取和存儲 進(jìn)行堆棧操作操作時(shí) 要先設(shè)置堆棧指針 SP 然后使用堆棧尋址指令STMFD LDMFD STMED LDMED STMFA LDMFA和STMEA LDMEA實(shí)現(xiàn)堆棧操作 2020 4 23 ARM存儲器訪問指令 多寄存器存取 使用數(shù)據(jù)塊傳送指令進(jìn)行堆棧操作STMDAR0 R5 R6 LDMIBR0 R5 R6 使用堆棧指令進(jìn)行堆棧操作STMEDR13 R5 R6 LDMEDR13 R5 R6 兩段代碼的執(zhí)行結(jié)果是一樣的 但是使用堆棧指令的壓棧和出棧操作編程很簡單 只要前后一致即可 而使用數(shù)據(jù)塊指令進(jìn)行壓棧和出棧操作則需要考慮空與滿 加與減對應(yīng)的問題 2020 4 23 ARM存儲器訪問指令 寄存器和存儲器交換指令 SWP指令用于將一個(gè)內(nèi)存單元 該單元地址放在寄存器Rn中 的內(nèi)容讀取到一個(gè)寄存器Rd中 同時(shí)將另一個(gè)寄存器Rm的內(nèi)容寫入到該內(nèi)存單元中 使用SWP可實(shí)現(xiàn)信號量操作 指令格式如下 SWP cond B Rd Rm Rn 其中 B為可選后綴 若有B 則交換字節(jié) 否則交換32位字 Rd用于保存從存儲器中讀入的數(shù)據(jù) Rm的數(shù)據(jù)用于存儲到存儲器中 若Rm與Rd相同 則為寄存器與存儲器內(nèi)容進(jìn)行互換 Rn為要進(jìn)行數(shù)據(jù)交換的存儲器地址 注 Rn不能與Rd和Rm相同 2020 4 23 ARM指令小節(jié)目錄 1 指令格式2 數(shù)據(jù)處理指令3 條件碼4 乘法指令5 ARM分支指令6 存儲器訪問指令7 雜項(xiàng)指令8 偽指令 2020 4 23 指令集介紹 ARM指令集 雜項(xiàng)指令 ARM指令集中有三條指令作為雜項(xiàng)指令 在實(shí)際應(yīng)用中這三條指令非常重要 它們?nèi)缦滤?2020 4 23 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ù) SWI cond immed 24 SWI指令格式 2020 4 23 ARM雜項(xiàng)指令 軟中斷指令 根據(jù)SWI指令傳遞的參數(shù)SWI異常處理程序可以作出相應(yīng)的處理 SWI指令傳遞參數(shù)有以下兩種方法 指令中的24位立即數(shù)指定了用戶請求的服務(wù)類型 參數(shù)通過通用寄存器傳遞 MOVR0 34 設(shè)置子功能號為34SWI12 調(diào)用12號軟中斷指令中的24位立即數(shù)被忽略 用戶請求的服務(wù)類型由寄存器R0的值決定 參數(shù)通過其它的通用寄存器傳遞 MOVR0 12 調(diào)用12號軟中斷MOVR1 34 設(shè)置子功能號為34SWI0 2020 4 23 ARM雜項(xiàng)指令 軟中斷指令 本示例只有一級軟中斷 含有二級中斷見異常處理 CMPR0 MaxSWILDRLSPC PC R0 LSL 2 BSWIOutOfRangeSwitableDCDdo SWI 0 該服務(wù)對應(yīng)的SWI指令中立即數(shù)為0DCDdo SWI 1 該服務(wù)對應(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 23 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 修改對應(yīng)于CPSR中的I控制位 3 將修改后的值寫回CPSR寄存器的對應(yīng)控制域 4 返回上一層函數(shù) 2020 4 23 ARM指令小節(jié)目錄 1 指令格式2 數(shù)據(jù)處理指令3 條件碼4 乘法指令5 ARM分支指令6 存儲器訪問指令7 雜項(xiàng)指令8 偽指令 2020 4 23 指令集介紹 ARM偽指令 ARM偽指令不屬于ARM指令集中的指令 是為了編程方便而定義的 偽指令可以像其它ARM指令一樣使用 但在編譯時(shí)這些指令將被等效的一條或多條ARM指令所代替 ARM偽指令有四條 分別為ADR偽指令 ADRL偽指令 LDR偽指令 NOP偽指令 2020 4 23 ARM偽指令 小范圍的地址讀取 ADR偽指令將基于PC相對偏移的地址值或基于寄存器相對偏移的地址值讀取到寄存器中 在匯編編譯器編譯源程序時(shí) ADR偽指令被編譯器替換成一條合適的指令 通常 編譯器用一條ADD指令或SUB指令來實(shí)現(xiàn)該ADR偽指令的功能 若不能用一條指令實(shí)現(xiàn) 則產(chǎn)生錯誤 編譯失敗 ADR cond register expr ADR偽指令格式 指令執(zhí)行的條件碼 加載的目標(biāo)寄存器 地址表達(dá)式 地址表達(dá)式expr的取指范圍 當(dāng)?shù)刂分凳亲止?jié)對齊時(shí) 其取指范圍為 255 255 當(dāng)?shù)刂分凳亲謱R時(shí) 其取指范圍為 1020 1020 2020 4 23 ARM偽指令 小范圍的地址讀取 ADRR0 Delay DelayMOVR0 r14 應(yīng)用示例 源程序 0 x20ADDr0 pc 0 x3c 0 x64MOVr0 r14 編譯后的反匯編代碼 使用偽指令將程序標(biāo)號Delay的地址存入R0 ADR偽指令被匯編成一條指令 2020 4 23 ARM偽指令 小范圍的地址讀取 2020 4 23 ARM偽指令 中等范圍的地址讀取 ADRL偽指令將基于PC相對偏移的地址值或基于寄存器相對偏移的地址值讀取到寄存器中 比ADR偽指令可以讀取更大范圍的地址 在匯編編譯器編譯源程序時(shí) ADRL偽指
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 財(cái)務(wù)主管職位離職信息保密及競業(yè)限制合同
- 北京農(nóng)商銀行理財(cái)合同復(fù)印
- 畜牧局考試題庫及答案
- 安全生產(chǎn)責(zé)任制的核心是什么內(nèi)容
- 安全生產(chǎn) 約談記錄
- 質(zhì)檢部的主要職責(zé)
- 安全生產(chǎn)許可證申領(lǐng)程序
- 衛(wèi)生院安全自查報(bào)告
- 防近月活動方案
- 施工企業(yè)安全生產(chǎn)教育培訓(xùn)制度
- 山東省東營市2023-2024學(xué)年高二下學(xué)期7月期末 英語試題(含解析)
- 《人文英語4》形考任務(wù)(1-8)試題答案解析
- 職業(yè)院校教學(xué)能力比賽現(xiàn)場答辯備賽題庫
- 社會語言學(xué)視角下網(wǎng)絡(luò)流行用語研究
- 《拍賣概論》考試題庫(精煉版)
- DL-T5434-2021電力建設(shè)工程監(jiān)理規(guī)范
- 設(shè)計(jì)投標(biāo)服務(wù)方案
- “一帶一路”倡議與國際合作課件
- 貨物供應(yīng)方案及運(yùn)輸方案
- 中醫(yī)養(yǎng)生健康小妙招的課件
- 拉鏈采購合同
評論
0/150
提交評論