版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
第2章ARM/THUMB微處理器結(jié)構(gòu)及指令系統(tǒng)第2章ARM/THUMB微處理器結(jié)構(gòu)及指令系統(tǒng)1本章主要內(nèi)容:(1)ARM/Thumb及相關技術簡介(2)ARM/Thumb微處理器的應用領域及特點(3)ARM/Thumb微處理器系列(4)ARM/Thumb微處理器的結(jié)構(gòu)(5)ARM/Thumb指令系統(tǒng)本章主要內(nèi)容:2
第二章目錄1ARM微處理器概述
1.1ARM處理器系列1.2RISC體系結(jié)構(gòu)
1.3ARM和Thumb狀態(tài)1.4寄存器
1.5ARM指令集概述1.6Thumb指令集概述2ARM微處理器體系結(jié)構(gòu)
2.1數(shù)據(jù)類型
2.2ARM微處理器的工作狀態(tài)
2.3
ARM體系結(jié)構(gòu)的存儲器格式2.4處理器模式
2.5寄存器組織2.6異常3
ARM/Thumb指令系統(tǒng)3.1處理器尋址方式3.2指令集介紹
3.3指令集介紹第二章目錄1ARM微處理3※1ARM微處理器概述
●ARM處理器系列
●RISC體系結(jié)構(gòu)
●ARM和Thumb狀態(tài)
●寄存器
●ARM指令集概述
●Thumb指令集概述※2ARM微處理器體系結(jié)構(gòu)
●數(shù)據(jù)類型
●ARM微處理器的工作狀態(tài)
●ARM體系結(jié)構(gòu)的存儲器格式
●處理器模式
●寄存器組織
●異常※3
ARM/Thumb指令系統(tǒng)
●處理器尋址方式
●指令集介紹
●指令集介紹
第二章目錄※1ARM微處理器概述※2ARM微處理器體系結(jié)構(gòu)※341ARM微處理器概述ARM簡介:
ARM(AdvancedRISCMachines),既可以認為是一個公司的名字,也可以認為是對一類微處理器的通稱,還可以認為是一種技術的名字。
1991年ARM公司成立于英國劍橋,主要出售芯片設計技術的授權(quán)。目前,采用ARM技術知識產(chǎn)權(quán)(IP)核的微處理器已遍及工業(yè)控制、消費類電子產(chǎn)品、通信系統(tǒng)、網(wǎng)絡系統(tǒng)、無線系統(tǒng)等各類產(chǎn)品市場,ARM1ARM微處理器概述ARM簡介:A5ARM公司簡介將技術授權(quán)給其它芯片廠商形成各具特色的ARM芯片...ARM公司簡介將技術授權(quán)給其它芯片廠商形成各具特色的ARM芯6
第二章目錄※1ARM微處理器概述
●ARM處理器系列
●RISC體系結(jié)構(gòu)
●ARM和Thumb狀態(tài)
●寄存器
●ARM指令集概述
●Thumb指令集概述※2ARM微處理器體系結(jié)構(gòu)
●數(shù)據(jù)類型
●ARM微處理器的工作狀態(tài)
●ARM體系結(jié)構(gòu)的存儲器格式
●處理器模式
●寄存器組織
●異常※3
ARM/Thumb指令系統(tǒng)
●處理器尋址方式
●指令集介紹
●指令集介紹第二章目錄※1ARM微處7ARM處理器核簡介ARM公司開發(fā)了很多系列的ARM處理器核,目前最新的系列已經(jīng)是ARM11了,而ARM6核以及更早的系列已經(jīng)很罕見了。目前應用比較廣泛的系列是:ARM7ARM9ARM9EARM10SecurCoreXscale
1.1ARM處理器系列
ARM處理器核簡介ARM公司開發(fā)了很多系列的8ARM處理器核簡介——ARM7該系列包括ARM7TDMI、ARM7TDMI-S、帶有高速緩存處理器宏單元的ARM720T和擴充了Jazelle的ARM7EJ-S。該系列處理器提供Thumb16位壓縮指令集和EmbededICE軟件調(diào)試方式,適用于更大規(guī)模的SoC設計中。Jazelle是ARM體系結(jié)構(gòu)的一種相關技術,用于在處理器指令層次對JAVA加速ARM7系列廣泛應用于多媒體和嵌入式設備,包括Internet設備、網(wǎng)絡和調(diào)制解調(diào)器設備,以及移動電話、PDA等無線設備。
1.1ARM處理器系列
ARM處理器核簡介——ARM7該系列包括AR9ARM處理器核簡介——ARM9該系列包括ARM9TDMI、ARM920T和帶有高速緩存處理器宏單元的ARM940T。除了兼容ARM7系列,而且能夠更加靈活的設計。ARM9系列主要應用于引擎管理、儀器儀表、安全系統(tǒng)和機頂盒等領域。
1.1ARM處理器系列
ARM處理器核簡介——ARM9該系列包括AR10ARM處理器核簡介——ARM10該系列包括ARM1020E和ARM1022E處理器核,其核心在于使用向量浮點(VFP)單元VFP10提供高性能的浮點解決方案,從而極大提高了處理器的整型和浮點運算性能??梢杂糜谝曨l游戲機和高性能打印機等場合。
1.1ARM處理器系列
ARM處理器核簡介——ARM10該系列包括A11ARM處理器核簡介——SecurCore該系列涵蓋了SC100、SC110、SC200和SC210處理核。該系列處理器主要針對新興的安全市場,以一種全新的安全處理器設計為智能卡和其它安全IC開發(fā)提供獨特的32位系統(tǒng)設計,并具有特定反偽造方法,從而有助于防止對硬件和軟件的盜版。
1.1ARM處理器系列
ARM處理器核簡介——SecurCore該系12ARM處理器核簡介——XscaleIntelXscale微控制器則提供全性能、高性價比、低功耗的解決方案,支持16位Thumb指令并集成數(shù)字信號處理(DSP)指令。
1.1ARM處理器系列
ARM處理器核簡介——XscaleIntel13
第二章目錄※1ARM微處理器概述
●ARM處理器系列
●RISC體系結(jié)構(gòu)
●ARM和Thumb狀態(tài)
●寄存器
●ARM指令集概述
●Thumb指令集概述※2ARM微處理器體系結(jié)構(gòu)
●數(shù)據(jù)類型
●ARM微處理器的工作狀態(tài)
●ARM體系結(jié)構(gòu)的存儲器格式
●處理器模式
●寄存器組織
●異?!?
ARM/Thumb指令系統(tǒng)
●處理器尋址方式
●指令集介紹
●指令集介紹第二章目錄※1ARM微處141.2RISC體系結(jié)構(gòu)●RISC特點如下:精簡指令集計算機RISC結(jié)構(gòu)的產(chǎn)生是相對于傳統(tǒng)的復雜指令集計算機CISC結(jié)構(gòu)而言的。1.2RISC體系結(jié)構(gòu)●RISC特點如下:精151.2RISC體系結(jié)構(gòu)■指令規(guī)整、對稱、簡單。指令小于100條,基本尋址方式有2~3種?!鰡沃芷谥噶睢!鲋噶钭珠L度一致,單拍完成,便于流水操作;■
ARM7三級流水線:取指、譯碼、執(zhí)行;■
ARM9五級流水線;■
ARMl0六級流水線?!龃罅康募拇嫫?。寄存器不少于32個。數(shù)據(jù)處理器的指令只對寄存器的內(nèi)容操作。只有加載/存儲指令可以訪問存儲器?!馬ISC特點如下:1.2RISC體系結(jié)構(gòu)■指令規(guī)整、對稱、簡單。指令小16
第二章目錄※1ARM微處理器概述
●ARM處理器系列●RISC體系結(jié)構(gòu)
●ARM和Thumb狀態(tài)
●寄存器●ARM指令集概述●Thumb指令集概述※2ARM微處理器體系結(jié)構(gòu)
●數(shù)據(jù)類型
●ARM微處理器的工作狀態(tài)
●ARM體系結(jié)構(gòu)的存儲器格式
●處理器模式
●寄存器組織
●異?!?
ARM/Thumb指令系統(tǒng)
●處理器尋址方式
●指令集介紹
●指令集介紹第二章目錄※1ARM微處171.3ARM和Thumb狀態(tài)Thumb指令集的功能是32位ARM指令集的功能子集。Thumb在性能和代碼大小之間提供了出色的折中。正在執(zhí)行Thumb指令集的處理器是工作在Thumb狀態(tài)下。正在執(zhí)行ARM指令集的處理器是工作在ARM狀態(tài)下。1.3ARM和Thumb狀態(tài)Thumb指令集的功能是32位18
第二章目錄※1ARM微處理器概述
●ARM處理器系列
●RISC體系結(jié)構(gòu)
●ARM和Thumb狀態(tài)
●寄存器
●ARM指令集概述
●Thumb指令集概述※2ARM微處理器體系結(jié)構(gòu)
●數(shù)據(jù)類型
●ARM微處理器的工作狀態(tài)
●ARM體系結(jié)構(gòu)的存儲器格式
●處理器模式
●寄存器組織
●異常※3
ARM/Thumb指令系統(tǒng)
●處理器尋址方式
●指令集介紹
●指令集介紹第二章目錄※1ARM微處191.4.寄存器
ARM處理器有37(31+6)個物理寄存器,有18個可編程訪問的寄存器。寄存器被安排成部分重疊的組。每種處理器模式都有不同的寄存器組。分組的寄存器在異常處理和特權(quán)操作時,可得到快速的上下文切換。1.4.寄存器ARM處理器有37(31+6)個物理寄存器20
第二章目錄※1ARM微處理器概述
●ARM處理器系列
●RISC體系結(jié)構(gòu)
●ARM和Thumb狀態(tài)
●寄存器
●ARM指令集概述
●Thumb指令集概述※2ARM微處理器體系結(jié)構(gòu)
●數(shù)據(jù)類型
●ARM微處理器的工作狀態(tài)
●ARM體系結(jié)構(gòu)的存儲器格式
●處理器模式
●寄存器組織
●異?!?
ARM/Thumb指令系統(tǒng)
●處理器尋址方式
●指令集介紹
●指令集介紹第二章目錄※1ARM微處21數(shù)據(jù)處理指令
加載和存儲指令分支指令協(xié)處理器指令雜項指令ARM指令集
1.5ARM指令集概述ARM指令集可分為5大類指令,所有指令都可以條件執(zhí)行,其中一些指令還可以根據(jù)執(zhí)行結(jié)果更新CPSR寄存器的相關標志位:數(shù)據(jù)處理指令加載和存儲指令ARM指令集22
第二章目錄※1ARM微處理器概述
●ARM處理器系列
●RISC體系結(jié)構(gòu)
●ARM和Thumb狀態(tài)
●寄存器
●ARM指令集概述
●Thumb指令集概述※2ARM微處理器體系結(jié)構(gòu)
●數(shù)據(jù)類型
●ARM微處理器的工作狀態(tài)
●ARM體系結(jié)構(gòu)的存儲器格式
●處理器模式
●寄存器組織
●異?!?
ARM/Thumb指令系統(tǒng)
●處理器尋址方式
●指令集介紹
●指令集介紹第二章目錄※1ARM微處23Thumb指令集可分為4大類指令:分支指令;數(shù)據(jù)處理指令;寄存器加載和存儲指令;異常產(chǎn)生指令。Thumb指令集
1.6Thumb指令集概述
Thumb指令集可分為4大類指令:Thumb24
第二章目錄※1ARM微處理器概述
●ARM處理器系列
●RISC體系結(jié)構(gòu)
●ARM和Thumb狀態(tài)
●寄存器
●ARM指令集概述
●Thumb指令集概述※2ARM微處理器體系結(jié)構(gòu)
●數(shù)據(jù)類型
●ARM微處理器的工作狀態(tài)
●ARM體系結(jié)構(gòu)的存儲器格式
●處理器模式
●寄存器組織
●異?!?
ARM/Thumb指令系統(tǒng)
●處理器尋址方式
●指令集介紹
●指令集介紹第二章目錄※1ARM微處25上節(jié)內(nèi)容回顧:ARM—公司名稱、微處理器名稱和嵌入式技術名稱;特點—高性能、小體積、低功耗、緊代碼密度、多供應商、高占有率;系列—ARM7、ARM9(E)、ARM10、Xscale、StrongARM和SecurCore等;結(jié)構(gòu)—兩種CPU工作狀態(tài)、32位RISC結(jié)構(gòu)、多寄存器、多處理器模式、兩種指令集;上節(jié)內(nèi)容回顧:ARM—公司名稱、微處理器名稱和嵌入式技術名稱26教學內(nèi)容:ARM處理器體系結(jié)構(gòu)●數(shù)據(jù)類型●ARM微處理器的工作狀態(tài)●ARM體系結(jié)構(gòu)的存儲器格式●處理器模式●寄存器組織●異常教學內(nèi)容:ARM處理器體系結(jié)構(gòu)●數(shù)據(jù)類型27體系結(jié)構(gòu)直接支持的數(shù)據(jù)類型ARM處理器支持下列數(shù)據(jù)類型:字節(jié)8位半字16位(必須分配為占用兩個字節(jié))字32位(必須分配為占用4各字節(jié))1112342
2.1數(shù)據(jù)類型體系結(jié)構(gòu)直接支持的數(shù)據(jù)類型ARM處理器支持下列數(shù)據(jù)類型:1128
第二章目錄※1ARM微處理器概述
●ARM處理器系列
●RISC體系結(jié)構(gòu)
●ARM和Thumb狀態(tài)
●寄存器
●ARM指令集概述
●Thumb指令集概述※2ARM微處理器體系結(jié)構(gòu)
●數(shù)據(jù)類型
●ARM微處理器的工作狀態(tài)
●ARM體系結(jié)構(gòu)的存儲器格式●處理器模式●寄存器組織●異?!?
ARM/Thumb指令系統(tǒng)
●處理器尋址方式
●指令集介紹
●指令集介紹第二章目錄※1ARM微處292.2ARM微處理器的工作狀態(tài)
ARM微處理器的工作狀態(tài)一般有兩種:ARM狀態(tài)—處理器執(zhí)行32位的字對齊的ARM指令;Thumb狀態(tài)—處理器執(zhí)行16位的、半字對齊的Thumb指令。2.2ARM微處理器的工作狀態(tài)ARM微處理器的工作狀態(tài)一30處理器狀態(tài)切換進入Thumb狀態(tài):當操作數(shù)寄存器的狀態(tài)位(位[0])為1時,執(zhí)行BX指令進入Thumb狀態(tài)。如果處理器在Thumb狀態(tài)進入異常,則當異常處理返回時,自動轉(zhuǎn)換到Thumb狀態(tài)。進入ARM狀態(tài)。當操作數(shù)寄存器的狀態(tài)位(位[0])為0時執(zhí)行BX指令進入ARM狀態(tài)。當處理器進行異常處理是時,進入ARM狀態(tài)從異常向量地址處開始執(zhí)行。處理器狀態(tài)切換進入Thumb狀態(tài):進入ARM狀態(tài)。31處理器狀態(tài)切換使用BX指令將ARM7TDMI內(nèi)核的操作狀態(tài)在ARM狀態(tài)和Thumb狀態(tài)之間進行切換,程序如下所示。;從Arm狀態(tài)切換到Thumb狀態(tài)LDRR0,=Lable+1BXR0;從Thumb狀態(tài)切換到ARM狀態(tài)LDRR0,=LableBXR0地址最低位為1,表示切換到Thumb狀態(tài)地址最低位為0,表示切換到ARM狀態(tài)跳轉(zhuǎn)地址標號2.2ARM微處理器的工作狀態(tài)
處理器狀態(tài)切換使用BX指令將ARM7TDMI32
第二章目錄※1ARM微處理器概述
●ARM處理器系列
●RISC體系結(jié)構(gòu)
●ARM和Thumb狀態(tài)
●寄存器
●ARM指令集概述
●Thumb指令集概述※2ARM微處理器體系結(jié)構(gòu)
●數(shù)據(jù)類型
●ARM微處理器的工作狀態(tài)
●ARM體系結(jié)構(gòu)的存儲器格式
●處理器模式●寄存器組織●異?!?
ARM/Thumb指令系統(tǒng)
●處理器尋址方式
●指令集介紹
●指令集介紹第二章目錄※1ARM微處332.3ARM體系結(jié)構(gòu)的存儲器格式
ARM體系結(jié)構(gòu)可以用兩種方法存儲字數(shù)據(jù),稱為大端格式和小端格式。
3124231615870位小端模式byte3byte2byte1byte0字地址
8402.3ARM體系結(jié)構(gòu)的存儲器格式ARM體系342.3ARM體系結(jié)構(gòu)的存儲器格式
ARM體系結(jié)構(gòu)可以用兩種方法存儲字數(shù)據(jù),稱為大端格式和小端格式。3124231615870位大端模式字地址
840byte0byte1byte2byte32.3ARM體系結(jié)構(gòu)的存儲器格式ARM體系35
第二章目錄※1ARM微處理器概述
●ARM處理器系列
●RISC體系結(jié)構(gòu)
●ARM和Thumb狀態(tài)
●寄存器
●ARM指令集概述
●Thumb指令集概述※2ARM微處理器體系結(jié)構(gòu)
●數(shù)據(jù)類型
●ARM微處理器的工作狀態(tài)●ARM體系結(jié)構(gòu)的存儲器格式
●處理器模式
●寄存器組織●異常※3
ARM/Thumb指令系統(tǒng)
●處理器尋址方式
●指令集介紹
●指令集介紹第二章目錄※1ARM微處36簡介ARM體系結(jié)構(gòu)支持7種處理器模式,分別為:用戶模式、快中斷模式、中斷模式、管理模式、中止模式、未定義模式和系統(tǒng)模式。這樣的好處是可以更好的支持操作系統(tǒng)并提高工作效率。2.2.4處理器模式
簡介ARM體系結(jié)構(gòu)支持7種處理器模式,分別為37處理器模式說明備注用戶(usr)正常程序工作模式不能直接切換到其它模式系統(tǒng)(sys)用于支持操作系統(tǒng)的特權(quán)任務等與用戶模式類似,但具有可以直接切換到其它模式等特權(quán)快中斷(fiq)支持高速數(shù)據(jù)傳輸及通道處理FIQ異常響應時進入此模式中斷(irq)用于通用中斷處理IRQ異常響應時進入此模式管理(svc)操作系統(tǒng)保護代碼系統(tǒng)復位和軟件中斷響應時進入此模式中止(abt)用于支持虛擬內(nèi)存和/或存儲器保護在ARM7TDMI沒有大用處未定義(und)支持硬件協(xié)處理器的軟件仿真未定義指令異常響應時進入此模式處理器模式2.2.4處理器模式
處理器模式說明備注用戶(usr)正常程序工作模式不能38特權(quán)模式處理器模式說明備注用戶(usr)正常程序工作模式不能直接切換到其它模式系統(tǒng)(sys)用于支持操作系統(tǒng)的特權(quán)任務等與用戶模式類似,但具有可以直接切換到其它模式等特權(quán)快中斷(fiq)支持高速數(shù)據(jù)傳輸及通道處理FIQ異常響應時進入此模式中斷(irq)用于通用中斷處理IRQ異常響應時進入此模式管理(svc)操作系統(tǒng)保護代碼系統(tǒng)復位和軟件中斷響應時進入此模式中止(abt)用于支持虛擬內(nèi)存和/或存儲器保護在ARM7TDMI沒有大用處未定義(und)支持硬件協(xié)處理器的軟件仿真未定義指令異常響應時進入此模式除用戶模式外,其它模式均為特權(quán)模式。ARM內(nèi)部寄存器和一些片內(nèi)外設在硬件設計上只允許(或者可選為只允許)特權(quán)模式下訪問。此外,特權(quán)模式可以自由的切換處理器模式,而用戶模式不能直接切換到別的模式。未定義(und)中止(abt)管理(svc)中斷(irq)快中斷(fiq)系統(tǒng)(sys)2.2.4處理器模式
特權(quán)模式處理器模式說明備注用戶(usr)正39異常模式處理器模式說明備注用戶(usr)正常程序工作模式不能直接切換到其它模式系統(tǒng)(sys)用于支持操作系統(tǒng)的特權(quán)任務等與用戶模式類似,但具有可以直接切換到其它模式等特權(quán)快中斷(fiq)支持高速數(shù)據(jù)傳輸及通道處理FIQ異常響應時進入此模式中斷(irq)用于通用中斷處理IRQ異常響應時進入此模式管理(svc)操作系統(tǒng)保護代碼系統(tǒng)復位和軟件中斷響應時進入此模式中止(abt)用于支持虛擬內(nèi)存和/或存儲器保護在ARM7TDMI沒有大用處未定義(und)支持硬件協(xié)處理器的軟件仿真未定義指令異常響應時進入此模式未定義(und)中止(abt)管理(svc)中斷(irq)快中斷(fiq)這五種模式稱為異常模式。它們除了可以通過程序切換進入外,也可以由特定的異常進入。當特定的異常出現(xiàn)時,處理器進入相應的模式。每種異常模式都有一些獨立的寄存器,以避免異常退出時用戶模式的狀態(tài)不可靠。2.2.4處理器模式
異常模式處理器模式說明備注用戶(usr)正40用戶和系統(tǒng)模式處理器模式說明備注用戶(usr)正常程序工作模式不能直接切換到其它模式系統(tǒng)(sys)用于支持操作系統(tǒng)的特權(quán)任務等與用戶模式類似,但具有可以直接切換到其它模式等特權(quán)快中斷(fiq)支持高速數(shù)據(jù)傳輸及通道處理FIQ異常響應時進入此模式中斷(irq)用于通用中斷處理IRQ異常響應時進入此模式管理(svc)操作系統(tǒng)保護代碼系統(tǒng)復位和軟件中斷響應時進入此模式中止(abt)用于支持虛擬內(nèi)存和/或存儲器保護在ARM7TDMI沒有大用處未定義(und)支持硬件協(xié)處理器的軟件仿真未定義指令異常響應時進入此模式這兩種模式都不能由異常進入,而且它們使用完全相同的寄存器組。系統(tǒng)模式是特權(quán)模式,不受用戶模式的限制。操作系統(tǒng)在該模式下訪問用戶模式的寄存器就比較方便,而且操作系統(tǒng)的一些特權(quán)任務可以使用這個模式訪問一些受控的資源。系統(tǒng)(sys)用戶(usr)2.2.4處理器模式
用戶和系統(tǒng)模式處理器模式說明備注用戶(us41處理器啟動時的模式轉(zhuǎn)換圖管理模式SVC(Supervisor)多種特權(quán)模式變化用戶程序的運行模式復位后缺省模式主要完成各模式的堆棧設置,注意不要進入用戶模式一般為用戶模式User處理器啟動時的模式轉(zhuǎn)換圖管理模式SVC多種特權(quán)模式變化用戶程42
第二章目錄※1ARM微處理器概述
●ARM處理器系列
●RISC體系結(jié)構(gòu)
●ARM和Thumb狀態(tài)
●寄存器
●ARM指令集概述
●Thumb指令集概述※2ARM微處理器體系結(jié)構(gòu)
●數(shù)據(jù)類型
●ARM微處理器的工作狀態(tài)●ARM體系結(jié)構(gòu)的存儲器格式●處理器模式
●寄存器組織
●異常※3
ARM/Thumb指令系統(tǒng)
●處理器尋址方式
●指令集介紹
●指令集介紹第二章目錄※1ARM微處43簡介2.5寄存器組織ARM處理器有37(31+6)個物理寄存器,有18個可編程訪問的寄存器。寄存器被安排成部分重疊的組。在不同的工作模式和處理器狀態(tài)下,程序員可以訪問的寄存器也不盡相同。分組的寄存器在處理處理器異常和特權(quán)操作時可得到快速的上下文切換。簡介2.5寄存器組織ARM處理器有37(31+6)個物理寄44寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統(tǒng)管理中止未定義中斷快中斷通用寄存器和程序計數(shù)器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)R15狀態(tài)寄存器CPSRCPSRSPSR無SPSR_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiqARM狀態(tài)各模式下的寄存器寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系45寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統(tǒng)管理中止未定義中斷快中斷通用寄存器和程序計數(shù)器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)R15狀態(tài)寄存器CPSRCPSRSPSR無SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiqARM狀態(tài)各模式下的寄存器SPSR_fiqSPSR_irqSPSR_undSPSR_abtSPSR_svcCPSRR15R14_fiqR14_irqR14_undR14_abtR14_svcR14R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8R7R6R5R4R3R2R1R0所有的37個寄存器,分成兩大類:31個通用32位寄存器;6個狀態(tài)寄存器。寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系46寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統(tǒng)管理中止未定義中斷快中斷通用寄存器和程序計數(shù)器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)R15狀態(tài)寄存器CPSRCPSRSPSR無SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq無CPSRR15R14R13R12R11R10R9R8R7R6R5R4R3R2R1R0用戶無CPSRR15R14R13R12R11R10R9R8R7R6R5R4R3R2R1R0系統(tǒng)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狀態(tài)各模式下可以訪問的寄存器寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系47寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統(tǒng)管理中止未定義中斷快中斷通用寄存器和程序計數(shù)器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)R15狀態(tài)寄存器CPSRCPSRSPSR無SPSR_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiq一般的通用寄存器R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8R7R6R5R4R3R2R1R0在匯編語言中寄存器R0~R13為保存數(shù)據(jù)或地址值的通用寄存器。它們是完全通用的寄存器,不會被體系結(jié)構(gòu)作為特殊用途,并且可用于任何使用通用寄存器的指令。寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系48寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統(tǒng)管理中止未定義中斷快中斷通用寄存器和程序計數(shù)器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)R15狀態(tài)寄存器CPSRCPSRSPSR無SPSR_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiq一般的通用寄存器R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8R7R6R5R4R3R2R1R0R7R6R5R4R3R2R1R0其中R0~R7為未分組的寄存器,也就是說對于任何處理器模式,這些寄存器都對應于相同的32位物理寄存器。寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系49寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統(tǒng)管理中止未定義中斷快中斷通用寄存器和程序計數(shù)器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)R15狀態(tài)寄存器CPSRCPSRSPSR無SPSR_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiq一般的通用寄存器R14_fiqR14_irqR14_undR14_abtR14_svcR14R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8寄存器R8~R14為分組寄存器。它們所對應的物理寄存器取決于當前的處理器模式,幾乎所有允許使用通用寄存器的指令都允許使用分組寄存器寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系50寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統(tǒng)管理中止未定義中斷快中斷通用寄存器和程序計數(shù)器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)R15狀態(tài)寄存器CPSRCPSRSPSR無SPSR_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiq一般的通用寄存器R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8寄存器R8~R12有兩個分組的物理寄存器。一個用于除FIQ模式之外的所有寄存器模式,另一個用于FIQ模式。這樣在發(fā)生FIQ中斷后,可以加速FIQ的處理速度。寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系51寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統(tǒng)管理中止未定義中斷快中斷通用寄存器和程序計數(shù)器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)R15狀態(tài)寄存器CPSRCPSRSPSR無SPSR_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiq一般的通用寄存器寄存器R13、R14分別有6個分組的物理寄存器。一個用于用戶和系統(tǒng)模式,其余5個分別用于5種異常模式。R14_fiqR14_irqR14_undR14_abtR14_svcR14R13_fiqR13_irqR13_undR13_abtR13_svcR13寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系52寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統(tǒng)管理中止未定義中斷快中斷通用寄存器和程序計數(shù)器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)R15狀態(tài)寄存器CPSRCPSRSPSR無SPSR_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiq堆棧指針寄存器R13(SP)寄存器R13常作為堆棧指針(SP)。在ARM指令集當中,沒有以特殊方式使用R13的指令或其它功能,只是習慣上都這樣使用。但是在Thumb指令集中存在使用R13的指令。寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系53寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統(tǒng)管理中止未定義中斷快中斷通用寄存器和程序計數(shù)器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)R15狀態(tài)寄存器CPSRCPSRSPSR無SPSR_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiq鏈接寄存器R14(LR)R14為鏈接寄存器(LR),在結(jié)構(gòu)上有兩個特殊功能:在每種模式下,模式自身的R14版本用于保存子程序返回地址;當發(fā)生異常時,將R14對應的異常模式版本設置為異常返回地址(有些異常有一個小的固定偏移量)。寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系54Lable程序A程序BR14R14寄存器與子程序調(diào)用BLLable地址A???MOVPC,LRR14(地址A)Lable???1.程序A執(zhí)行過程中調(diào)用程序B;操作流程2.程序跳轉(zhuǎn)至標號Lable,執(zhí)行程序B。同時硬件將“BLLable”指令的下一條指令所在地址存入R14;3.程序B執(zhí)行最后,將R14寄存器的內(nèi)容放入PC,返回程序A;2.5寄存器組織Lable程序A程序BR14R14寄存器與子程序調(diào)用BL55R14寄存器與異常發(fā)生異常發(fā)生時,程序要跳轉(zhuǎn)至異常服務程序,對返回地址的處理與子程序調(diào)用類似,都是由硬件完成的。區(qū)別在于有些異常有一個小常量的偏移。2.5寄存器組織R14寄存器與異常發(fā)生異常發(fā)生時,程序要跳轉(zhuǎn)56R14寄存器注意要點當發(fā)生異常嵌套時,這些異常之間可能會發(fā)生沖突。例如:如果用戶在用戶模式下執(zhí)行程序時發(fā)生了IRQ中斷,用戶模式寄存器不會被破壞。但是如果允許在IRQ模式下的中斷處理程序重新使能IRQ中斷,并且發(fā)生了嵌套的IRQ中斷時,外部中斷處理程序保存在R14_irq中的任何值都將被嵌套中斷的返回地址所覆蓋。2.5寄存器組織R14寄存器注意要點當發(fā)生異常嵌套時,這些異57R14寄存器注意要點R14R14_irq用戶模式下的程序IRQ模式下的程序AareturnB...XA地址A地址A1.執(zhí)行用戶模式下的程序;2.發(fā)生IRQ中斷,硬件將某個地址存入IRQ模式下的R14_irq寄存器,用戶模式下的R14沒有被破壞;3.IRQ服務程序A執(zhí)行完畢,將R14_irq寄存器的內(nèi)容減去某個常量后存入PC,返回之前被中斷的程序;未被破壞R14寄存器注意要點R14R14_irq用戶模式下的程序IR58R14寄存器注意要點R14R14_irq用戶模式下的程序IRQ模式下的程序AaB...XA地址A地址A1.執(zhí)行用戶模式下的程序;2.發(fā)生IRQ中斷,硬件將某個地址存入IRQ模式下的R14_irq寄存器,用戶模式下的R14沒有被破壞;3.IRQ服務程序A執(zhí)行完畢,將R14_irq寄存器的內(nèi)容減去某個常量后存入PC,返回之前被中斷的程序;未被破壞IRQ模式下的程序BareturnB...XA地址B地址B4.如果在IRQ處理程序中打開IRQ中斷,并且再次發(fā)生IRQ中斷,或者調(diào)用子程序;5.硬件將返回地址保存在R14_irq寄存器中,原來保存的返回地址將被覆蓋,造成錯誤;被破壞6.在程序B返回到程序A,然后在返回到用戶模式下被中斷的程序時,發(fā)生錯誤,將不能正確返回;returnreturn解決辦法是確保R14的對應版本在發(fā)生中斷嵌套時不再保存任何有意義的值(將R14入棧),或者切換到其它處理器模式下。2.5寄存器組織R14寄存器注意要點R14R14_irq用戶模式下的程序IR59寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統(tǒng)管理中止未定義中斷快中斷通用寄存器和程序計數(shù)器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)R15狀態(tài)寄存器CPSRCPSRSPSR無SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq程序計數(shù)器R15(PC)寄存器R15為程序計數(shù)器(PC),它指向正在取指的地址??梢哉J為它是一個通用寄存器,但是對于它的使用有許多與指令相關的限制或特殊情況。如果R15使用的方式超出了這些限制,那么結(jié)果將是不可預測的。寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系60讀R15的限制正常操作時,從R15讀取的值是處理器正在取指的地址,即當前正在執(zhí)行指令的地址加上8個字節(jié)(兩條ARM指令的長度)。由于ARM指令總是以字為單位,所以R15寄存器的最低兩位總是為0。LDRR0,PC??????PCPC-4PC-8正在執(zhí)行正在譯碼正在取指流水線狀態(tài)地址程序代碼2.5寄存器組織讀R15的限制正常操作時,從R15讀取的值是61讀R15的限制當使用STR或STM指令保存R15時,會有一個例外。這些指令可能將當前指令地址加8字節(jié)或加12字節(jié)保存(將來可能還有其它數(shù)字)。偏移量是8還是12取決于具體的ARM芯片,但是對于一個確定的芯片,這個值是一個常量。所以最好避免使用STR和STM指令來保存R15,如果很難做到,那么應當在程序中計算出該芯片的偏移量。2.5寄存器組織讀R15的限制當使用STR或STM指令保存R62讀R15的限制計算偏移量程序代碼:SUB R1,PC,#4 ;R1=下面STR指令的地址STR PC,[R0] ;保存STR指令地址+偏移量LDR R0,[R0] ;然后重裝SUB R0,R0,R1 ;計算偏移量2.5寄存器組織讀R15的限制計算偏移量程序代碼:SUB R1,PC,#4 63寫R15的限制
正常操作時,寫入R15的值被當作一個指令地址,程序從這個地址處繼續(xù)執(zhí)行(相當于執(zhí)行一次無條件跳轉(zhuǎn))。2.5寄存器組織寫R15的限制正常操作時,寫入R15的值被64寫R15的限制
由于ARM指令以字節(jié)為邊界,因此寫入R15的值最低兩位通常為0b00。具體的規(guī)則取決于內(nèi)核結(jié)構(gòu)的版本:在ARM結(jié)構(gòu)V3版及以下版本中,寫入R15的值的最低兩位被忽略,因此跳轉(zhuǎn)地址由指令的實際目標地址(寫入R15的值)和0xFFFFFFFC相與得到;在ARM結(jié)構(gòu)V4版及以上版本中,寫入R15的值的最低兩位為0,如果不是,結(jié)果將不可預測。2.5寄存器組織寫R15的限制由于ARM指令以字節(jié)為邊界,因65寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統(tǒng)管理中止未定義中斷快中斷通用寄存器和程序計數(shù)器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)R15狀態(tài)寄存器CPSRCPSRSPSR無SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq程序狀態(tài)寄存器CPSR寄存器CPSR為程序狀態(tài)寄存器,在異常模式中,另外一個寄存器“程序狀態(tài)保存寄存器(SPSR)”可以被訪問。每種異常都有自己的SPSR,在因為異常事件而進入異常時它保存CPSR的當前值,異常退出時可通過它恢復CPSR。寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系66Thumb狀態(tài)寄存器Thumb狀態(tài)寄存器集是ARM狀態(tài)集的子集,程序員可以直接訪問的寄存器為:8個通用寄存器R0~R7;程序計數(shù)器(PC);堆棧指針(SP);鏈接寄存器(LR);有條件訪問程序狀態(tài)寄存器(CPSR)。2.5寄存器組織Thumb狀態(tài)寄存器Thumb狀態(tài)寄存器集是67Thumb狀態(tài)各模式下的寄存器CPSRCPSR狀態(tài)寄存器R15PCR14_fiqR14_irqR14_undR14_abtR14_svcR14LRR13_fiqR13_irqR13_undR13_abtR13_svcR13SPR7R7(v4,wr)R6R6(v3)R5R5(v2)R4R4(v1)R3R3(a4)R2R2(a3)R1R1(a2)R0R0(a1)通用寄存器和程序計數(shù)器快中斷中斷未定義中止管理系統(tǒng)用戶各模式下實際訪問的寄存器寄存器在匯編中的名稱寄存器類別注意:括號內(nèi)為ATPCS中寄存器的命名,可以使用RN匯編偽指令將寄存器定義多個名字。其中ADS1.2的匯編程序直接支持這些名稱,但注意a1~a4,v1~v4必須用小寫。Thumb狀態(tài)各模式下的寄存器CPSRCPSR狀態(tài)寄存器R168Thumb狀態(tài)下的通用寄存器CPSRCPSR狀態(tài)寄存器R15PCR14_fiqR14_irqR14_undR14_abtR14_svcR14LRR13_fiqR13_irqR13_undR13_abtR13_svcR13SPR7R7(v4,wr)R6R6(v3)R5R5(v2)R4R4(v1)R3R3(a4)R2R2(a3)R1R1(a2)R0R0(a1)通用寄存器和程序計數(shù)器快中斷中斷未定義中止管理系統(tǒng)用戶各模式下實際訪問的寄存器寄存器在匯編中的名稱寄存器類別R7R6R5R4R3R2R1R0在匯編語言中寄存器R0~R7為保存數(shù)據(jù)或地址值的通用寄存器。對于任何處理器模式,它們中的每一個都對應于相同的32為物理寄存器。它們是完全通用的寄存器,不會被體系結(jié)構(gòu)作為特殊的用途,并且可用于任何使用通用寄存器的指令。Thumb狀態(tài)下的通用寄存器CPSRCPSR狀態(tài)寄存器R1569Thumb狀態(tài)下的堆棧指針寄存器(SP)CPSRCPSR狀態(tài)寄存器R15PCR14_fiqR14_irqR14_undR14_abtR14_svcR14LRR13_fiqR13_irqR13_undR13_abtR13_svcR13SPR7R7(v4,wr)R6R6(v3)R5R5(v2)R4R4(v1)R3R3(a4)R2R2(a3)R1R1(a2)R0R0(a1)通用寄存器和程序計數(shù)器快中斷中斷未定義中止管理系統(tǒng)用戶各模式下實際訪問的寄存器寄存器在匯編中的名稱寄存器類別堆棧指針SP對應ARM狀態(tài)的寄存器R13。每個異常模式都有其自身的SP分組版本,SP通常指向各異常模式所專用的堆棧。
注意:在發(fā)生異常時,處理器自動進入ARM狀態(tài)。R13_fiqR13_irqR13_undR13_abtR13_svcR13Thumb狀態(tài)下的堆棧指針寄存器(SP)CPSRCPSR狀態(tài)70Thumb狀態(tài)下的鏈接寄存器R14(LR)CPSRCPSR狀態(tài)寄存器R15PCR14_fiqR14_irqR14_undR14_abtR14_svcR14LRR13_fiqR13_irqR13_undR13_abtR13_svcR13SPR7R7(v4,wr)R6R6(v3)R5R5(v2)R4R4(v1)R3R3(a4)R2R2(a3)R1R1(a2)R0R0(a1)通用寄存器和程序計數(shù)器快中斷中斷未定義中止管理系統(tǒng)用戶各模式下實際訪問的寄存器寄存器在匯編中的名稱寄存器類別鏈接寄存器LR對應ARM狀態(tài)寄存器R14,在結(jié)構(gòu)上有兩個特殊功能,詳見“ARM狀態(tài)下的鏈接寄存器LR”。
注意:在發(fā)生異常時,處理器自動進入ARM狀態(tài)。R14_fiqR14_irqR14_undR14_abtR14_svcR14Thumb狀態(tài)下的鏈接寄存器R14(LR)CPSRCPSR狀71ARM狀態(tài)和Thumb狀態(tài)之間寄存器的關系Thumb狀態(tài)R0~R7與ARM狀態(tài)R0~R7相同;Thumb狀態(tài)CPSR和SPSR與ARM狀態(tài)CPSR和SPSR相同;Thumb狀態(tài)SP映射到ARM狀態(tài)R13;Thumb狀態(tài)LR映射到ARM狀態(tài)R14;Thumb狀態(tài)PC映射到ARM狀態(tài)PC(R15)。2.5寄存器組織ARM狀態(tài)和Thumb狀態(tài)之間寄存器的關系Thumb狀態(tài)R072Thumb狀態(tài)寄存器在Arm狀態(tài)寄存器上的映射R1
R2
R3
R4
R5
R6
R7
R8
R9
R10
R11
R12
R0
堆棧指針(R13)
連接寄存器(R14)
程序計數(shù)器(R15)
低寄存器高寄存器Thumb狀態(tài)寄存器在Arm狀態(tài)寄存器上的映射R1R2R73在Thumb狀態(tài)中訪問高寄存器
在Thumb狀態(tài)中,高寄存器(R8~R15)不是標準寄存器集的一部分。匯編語言程序員對它們的訪問受到限制,但可以將它們用于快速暫存。可以使用MOV、CMP和ADD指令對高寄存器操作。2.5寄存器組織在Thumb狀態(tài)中訪問高寄存器在Thumb74程序狀態(tài)寄存器—CPSR(1)+SPSR(5)2.5寄存器組織CPSR反映了當前處理器的狀態(tài):4個條件代碼標志;2個中斷控制位;
5個對當前處理器模式進行編碼的位;1個指示當前執(zhí)行指令的工作狀態(tài)位;保留位。SPSR:備份程序狀態(tài)字,保存異常事件發(fā)生之前的CPSR.每個異常模式帶有一個備份程序狀態(tài)寄存器,用于保存在異常事件發(fā)生之前的CPSR;CPSR和SPSR通過特殊指令進行訪問。程序狀態(tài)寄存器—CPSR(1)+SPSR(5)2.5寄存器75程序狀態(tài)寄存器NZCV——IM0M1M2M3M4TF—...313029282726876543210條件代碼標志保留控制位溢出標志進位或借位擴展零負或小于IRQ禁止FIQ禁止狀態(tài)位模式位NZCVITFCPSR寄存器的格式
大多數(shù)“數(shù)值處理指令”可以選擇是否影響條件代碼標志位(指令帶S后綴);但有些指令執(zhí)行總是影響條件代碼標志。所有ARM指令都可按條件來執(zhí)行,而Thumb指令中只有分支指令可按條件執(zhí)行。
運算結(jié)果的最高位反映在該標志位。對于有符號二進制補碼,結(jié)果為負數(shù)時N=1,結(jié)果為正數(shù)或零時N=0;
指令結(jié)果為0時Z=1(表示比較結(jié)果“相等”),否則Z=0;
當進行加法運算,并且最高位產(chǎn)生進位時C=1,否則C=0。當進行減法運算,并且最高位產(chǎn)生借位時C=0,否則C=1。對于移位操作指令,C為從最高位最后移出的值,其它指令C通常不變;當進行加法/減法運算,并且發(fā)生有符號溢出時V=1,否則V=0,其它指令V通常不變。
最低8位為控制位,當發(fā)生異常時,這些位被硬件改變。當處理器處于一個特權(quán)模式時,可用軟件操作這些位。
保留位被保留將來使用。為了提高程序的可移植性,當改變CPSR標志和控制位時,請不要改變這些保留位。另外,請確保您程序的運行不受保留位的值影響,因為將來的處理器可能會將這些位設置為1或者0。
程序狀態(tài)寄存器NZCV——IM0M1M2M3M4TF—..76CPSR模式位設置表M[4:0]模式M[4:0]模式10000用戶10111中止10001快中斷11011未定義10010中斷11111系統(tǒng)10011管理注意:不是所有模式位的組合都定義了有效的處理器模式,如果使用了錯誤的設置,將引起一個無法恢復的錯誤。CPSR模式位設置表M[4:0]模式M[4:0]模式100077
第二章目錄※1ARM微處理器概述
●ARM處理器系列
●RISC體系結(jié)構(gòu)
●ARM和Thumb狀態(tài)
●寄存器
●ARM指令集概述
●Thumb指令集概述※2ARM微處理器體系結(jié)構(gòu)
●數(shù)據(jù)類型
●ARM微處理器的工作狀態(tài)●ARM體系結(jié)構(gòu)的存儲器格式●處理器模式●寄存器組織
●異?!?
ARM/Thumb指令系統(tǒng)
●處理器尋址方式
●指令集介紹
●指令集介紹第二章目錄※1ARM微處78簡介只要正常的程序流被暫時中止,處理器就進入異常模式。例如響應一個來自外設的中斷。在處理異常之前,ARM7TDMI內(nèi)核保存當前的處理器狀態(tài),這樣當處理程序結(jié)束時可以恢復執(zhí)行原來的程序。如果同時發(fā)生兩個或更多異常,那么將按照固定的順序來處理異常,詳見“異常優(yōu)先級”部分。2.6異常簡介只要正常的程序流被暫時中止,處理器就進入79異常處理器模式異常類型模式正常地址復位管理0x00000000未定義指令未定義0x00000004軟件中斷(SWI)管理0x00000008預取中止(取指令存儲器中止)中止0x0000000C數(shù)據(jù)中止(數(shù)據(jù)訪問存儲器中止)中止0x00000010IRQ(中斷)IRQ0x00000018FIQ(快速中斷)FIQ0x0000001C異常處理器模式異常類型模式正常地址復位管理0x000000080異常的入口和出口處理
如果異常處理程序已經(jīng)把返回地址拷貝到堆棧,那么可以使用一條多寄存器傳送指令來恢復用戶寄存器并實現(xiàn)返回。SUBLR,LR,#4 ;計算返回地址STMFDSP!,{R0-R3,LR};保存使用到的寄存器...LDMFDSP!,{R0-R3,PC}^ ;中斷返回中斷處理代碼的開始部分和退出部分2.6異常異常的入口和出口處理如果異常處理程序已經(jīng)把返回地址81如果異常處理程序已經(jīng)把返回地址拷貝到堆棧,那么可以使用一條多寄存器傳送指令來恢復用戶寄存器并實現(xiàn)返回。中斷處理代碼的開始部分和退出部分異常的入口和出口處理SUBLR,LR,#4 ;計算返回地址STMFDSP!,{R0-R3,LR} ;保存使用到的寄存器...LDMFDSP!,{R0-R3,PC}^ ;中斷返回注意:中斷返回指令的寄存器列表(其中必須包括PC)后的“^”符號表示這是一條特殊形式的指令。這條指令在從存儲器中裝載PC的同時(PC是最后恢復的),CPSR也得到恢復。這里使用的堆棧指針SP(R13)是屬于異常模式的寄存器,每個異常模式有自己的堆棧指針。這個堆棧指針應必須在系統(tǒng)啟動時初始化。2.6異常如果異常處理程序已經(jīng)把返回地址拷貝到堆棧,那么可以82進入異常在異常發(fā)生后,ARM7TDMI內(nèi)核會作以下工作:1.在適當?shù)腖R中保存下一條指令的地址,當異常入口來自:ARM狀態(tài),那么ARM7TDMI將當前指令地址加4或加8復制(取決于異常的類型)到LR中;為Thumb狀態(tài),那么ARM7TDMI將當前指令地址加4或加8(取決于異常的類型)復制到LR中;異常處理器程序不必確定狀態(tài)。2.6異常進入異常在異常發(fā)生后,ARM7TDMI內(nèi)核會作以下工作:1.83進入異常在異常發(fā)生后,ARM7TDMI內(nèi)核會作以下工作:2.將CPSR復制到適當?shù)腟PSR中;3.將CPSR模式位強制設置為與異常類型相對應的值;4.強制PC從相關的異常向量處取指。2.6異常進入異常在異常發(fā)生后,ARM7TDMI內(nèi)核會作以下工作:2.84ARM7TDMI內(nèi)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年高職藥品質(zhì)量與安全(藥品檢驗)試題及答案
- 2025年高職(動物科學)動物營養(yǎng)期末測試試題及答案
- 2025年高職第二學年(石油化工技術)石油化工設備基礎測試題及答案
- 2025年大學二年級(智能視聽工程)音頻技術綜合測試題及答案
- 2025年中職烹飪工藝與營養(yǎng)(中式面點制作)試題及答案
- 逗女孩開心的搞笑祝福語大全
- 中國移動廉潔培訓課件
- 養(yǎng)老院老人生活設施維修人員行為規(guī)范制度
- 養(yǎng)老院老人意外傷害處理制度
- 養(yǎng)老院服務質(zhì)量監(jiān)督與投訴處理制度
- 能源行業(yè)人力資源開發(fā)新策略
- 工作照片拍攝培訓課件
- 2025年海南三亞市吉陽區(qū)教育系統(tǒng)公開招聘編制教師122人(第1號)筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 2026年孝昌縣供水有限公司公開招聘正式員工備考題庫參考答案詳解
- 托管學校合作合同協(xié)議
- 2025年醫(yī)保局支部書記述職報告
- 世說新語課件
- 全體教師大會上副校長講話:點醒了全校200多名教師!毀掉教學質(zhì)量的不是學生是這7個環(huán)節(jié)
- 民航招飛pat測試題目及答案
- T-CDLDSA 09-2025 健身龍舞彩帶龍 龍舞華夏推廣套路技術規(guī)范
- 中文版 API SPEC 5L-2018(2019) 管線鋼管規(guī)范 第46th版
評論
0/150
提交評論