版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
ARM指令系統(tǒng)及匯編程序設計ARM體系架構與原理教學·第四章Contents本章內容概覽ARM指令系統(tǒng)及匯編程序設計——從指令體系到實踐應用的完整學習路徑。01ARM指令系統(tǒng)概述02ARM指令格式與條件執(zhí)行03ARM尋址方式詳解04ARM指令分類與功能05ARM匯編程序設計實踐CHAPTER01ARM指令系統(tǒng)概述從RISC設計哲學到指令集架構演進的全景認知COREARCHITECTUREARM指令集的設計哲學與核心特點ARM指令集基于RISC精簡指令集架構設計,以加載-存儲模式、固定指令長度和條件執(zhí)行三大核心特征,實現(xiàn)了低功耗與高能效的統(tǒng)一,是嵌入式計算領域最成功的指令集架構之一。ARMCortex系列處理器芯片實物采用RISC精簡指令集設計,大多數(shù)指令單周期執(zhí)行,流水線設計簡潔高效,顯著降低CPU運算功耗加載-存儲架構:運算指令僅操作寄存器數(shù)據(jù),需通過LDR從內存加載、STR存回內存,實現(xiàn)數(shù)據(jù)與運算分離早期A32指令采用32位固定長度編碼,便于硬件解碼和多級流水線處理,提高指令吞吐率低功耗特性貫穿架構設計始終,適配智能手機、物聯(lián)網設備、嵌入式控制器等對能效要求極高的應用場景INSTRUCTIONSETARCHITECTUREARM指令的四大功能分類ARM指令按功能可劃分為數(shù)據(jù)處理、加載存儲、分支控制和體系管理四大類,分別承擔算術邏輯運算、內存數(shù)據(jù)交互、程序流程控制和系統(tǒng)硬件管理職責,共同構成完整的指令功能體系。數(shù)據(jù)處理指令算術運算包括ADD加法、SUB減法、MUL乘法等,支持帶進位運算和飽和運算邏輯運算包括AND與、ORR或、EOR異或等,以及LSL/LSR等移位操作,用于位級數(shù)據(jù)處理算術·邏輯加載/存儲指令LDR指令將內存數(shù)據(jù)加載到寄存器,STR指令將寄存器數(shù)據(jù)寫入內存,實現(xiàn)CPU與內存的數(shù)據(jù)交互支持單字、半字、字節(jié)等多種數(shù)據(jù)寬度的加載存儲,以及批量寄存器傳輸?shù)腖DM/STM指令LDR·STR分支指令B指令實現(xiàn)無條件跳轉,BL指令實現(xiàn)帶鏈接的函數(shù)調用,自動保存返回地址到LR寄存器條件跳轉指令如BEQ、BNE等根據(jù)CPSR狀態(tài)標志位決定是否跳轉,是程序流程控制的核心B·BLArchitectureEvolutionARM指令集架構演進歷程ARM指令集從32位A32起步,歷經Thumb壓縮指令、NEON多媒體擴展、64位A64革命性升級到ARMv9安全與AI增強,每次架構迭代都精準回應了移動計算、高性能運算和智能時代的核心需求。ARM指令集架構版本演進對照架構版本指令集變化核心特性與意義ARMv4/v532位A32+16位Thumb(T32)確立基礎指令體系;Thumb指令提高代碼密度,適配存儲受限的嵌入式設備ARMv7A32增強+NEON+VFPNEON高級SIMD指令強化多媒體處理;VFP矢量浮點指令提升科學計算與圖形渲染能力ARMv8全新64位A64+兼容32位A32引入AArch64執(zhí)行狀態(tài),支持64位尋址和運算;向下兼容AArch32保障舊程序運行ARMv9A64擴展+SVE2+MTESVE2可伸縮向量擴展加速AI推理;MTE內存標簽擴展增強安全性,面向智能計算時代ARM指令集歷經四代重大演進,從32位嵌入式指令發(fā)展為兼顧64位高性能計算與AI加速的完整體系CHAPTER02ARM指令格式與條件執(zhí)行深入解析32位指令編碼結構與條件碼驅動的靈活執(zhí)行機制INSTRUCTIONFORMATARM指令的標準格式解析ARM指令采用統(tǒng)一規(guī)范格式:操作碼{條件碼}{S后綴}目標寄存器,源寄存器,第二操作數(shù)。這種規(guī)整的格式設計體現(xiàn)了RISC架構簡潔一致的設計哲學。STANDARDFORMATopcode{cond}{S}Rd,Rn,operand2操作碼必選條件碼可選S后綴可選Rd目標Rn源operand2第二操作數(shù)01opcode操作碼:指令助記符(如ADD、STR),定義指令功能;cond條件碼可選,決定指令是否在特定條件下執(zhí)行02S后綴:可選,指定后指令執(zhí)行結果將更新CPSR中的N/Z/C/V條件標志位,供后續(xù)條件判斷使用03寄存器與操作數(shù):Rd為目標寄存器存放運算結果,Rn為第一操作數(shù)寄存器,operand2為第二操作數(shù)(寄存器、立即數(shù)或移位形式)04示例:ADDSR4,R0,R2→R4=R0+R2并更新標志位;MOVEQR1,#0→Z=1時將0移入R1CHAPTER09·ARMCPSR程序狀態(tài)寄存器詳解CPSR是ARM處理器的核心狀態(tài)寄存器,其32位分為條件標志位、保留位、控制位和模式位四個功能區(qū)。其中N/Z/C/V四個條件標志位是條件執(zhí)行機制的判斷依據(jù)。[31:28]條件標志位N負數(shù)標志——運算結果為負時置1Z零標志——結果為零時置1C進位標志——加法產生進位或減法產生借位時置1V溢出標志——有符號運算溢出時置1驅動ARM條件指令執(zhí)行體系的核心判斷依據(jù)控制位與中斷管理I/FI位禁止IRQ中斷、F位禁止FIQ中斷,置1時屏蔽對應中斷請求,用于臨界區(qū)代碼保護T工作狀態(tài)標識——0為ARM狀態(tài)(32位指令),1為Thumb狀態(tài)(16位指令),影響指令解碼方式中斷屏蔽+指令集狀態(tài)切換的雙重控制機制模式位M[4:0]用戶模式(10000)、FIQ(10001)、IRQ(10010)、管理(10011)、中止(10111)、系統(tǒng)(11111)等多種運行模式不同模式擁有獨立寄存器組(如FIQ模式有5個專用寄存器R8–R12),用于快速中斷響應和特權操作獨立寄存器組實現(xiàn)快速上下文切換CONDITIONCODESARM指令條件碼完整對照表ARM指令使用4位條件碼(位于指令編碼[31:28])定義15種可用執(zhí)行條件,涵蓋相等/不等、正負判斷、無符號高低比較和有符號大小比較,使幾乎每條指令都具備條件執(zhí)行能力。條件碼后綴含義標志位條件0000EQ相等Z=10001NE不等Z=00010CS/HS有進位/高于或相等(無符號)C=10011CC/LO無進位/低于(無符號)C=00100MI負數(shù)N=10101PL正數(shù)或零N=00110VS溢出V=10111VC無溢出V=01000HI高于(無符號)C=1且Z=01001LS低于或相同(無符號)C=0或Z=11010GE大于或等于(有符號)N=V1011LT小于(有符號)N≠V1100GT大于(有符號)Z=0且N=V1101LE小于或等于(有符號)Z=1或N≠V1110AL總是執(zhí)行(默認)任何狀態(tài)ConditionalExecution條件執(zhí)行機制的實際應用與優(yōu)勢ARM條件執(zhí)行機制允許幾乎每條指令根據(jù)CPSR標志位狀態(tài)選擇性執(zhí)行,無需跳轉即可完成if-else等條件邏輯,顯著減少分支指令數(shù)量、避免流水線沖刷,提升代碼密度和執(zhí)行效率。條件執(zhí)行代碼示例CMPR0,#0MOVEQR1,#1MOVNER1,#0三行指令實現(xiàn)if(R0==0)R1=1elseR1=0,無需任何跳轉指令ADDSR2,R2,R3ADDEQR4,R4,#1SUBNER5,R5,#1加法后根據(jù)結果標志位級聯(lián)執(zhí)行不同操作條件執(zhí)行的核心優(yōu)勢減少分支指令數(shù)量if-else等條件邏輯無需跳轉指令,直接通過條件碼控制執(zhí)行或忽略避免流水線沖刷消除短分支跳轉,維持流水線滿載運行,避免清空重填開銷提高代碼密度相同功能所需指令數(shù)更少、程序體積更小,對嵌入式設備尤為關鍵CHAPTER03ARM尋址方式詳解從立即尋址到基址變址,系統(tǒng)掌握ARM九種尋址方式的原理與應用ADDRESSINGMODES數(shù)據(jù)處理指令的三種操作數(shù)尋址方式ARM數(shù)據(jù)處理指令支持立即數(shù)、寄存器和寄存器移位三種第二操作數(shù)形式。其中寄存器移位尋址是ARM獨有的設計,允許在運算前對操作數(shù)進行邏輯/算術移位,一條指令同時完成移位和運算兩個操作。IMMEDIATE立即尋址操作數(shù)以#為前綴直接嵌入指令,如ADDR3,R3,#1;受8位+偶數(shù)移位編碼限制,非任意32位常量可直接表示。#immediateREGISTER寄存器尋址操作數(shù)來自寄存器,如ADDR3,R1,R2將R1與R2之和存入R3,是最基本的數(shù)據(jù)運算形式。R1+R2→R3SHIFTEDREGISTER寄存器移位尋址第二操作數(shù)運算前先移位,如ADDR3,R2,R1,LSL#3等價于R3=R2+R1×8,一條指令完成移位加運算。Shift+ALUSHIFTTYPES五種移位類型LSL邏輯左移、LSR邏輯右移、ASR算術右移、ROR循環(huán)右移和RRX帶進位循環(huán)右移,覆蓋全部移位運算需求。5TypesADDRESSINGMODES內存訪問尋址方式:多寄存器與基址變址ARM通過LDM/STM多寄存器尋址實現(xiàn)高效批量數(shù)據(jù)傳輸,通過前變址、后變址和自動變址三種基址變址模式實現(xiàn)靈活的內存訪問,后者在數(shù)組遍歷和棧操作中尤為高效。多寄存器尋址(LDM/STM)壓棧與彈棧:STMFDSP!,{R0-R7,LR}將9個寄存器壓棧保存,LDMFDSP!,{R0-R7,PC}彈出恢復,用于函數(shù)現(xiàn)場保護。這種批量操作大幅減少指令數(shù)量,提升上下文切換效率。模式組合:支持遞增/遞減、前/后模式組合(IA/IB/DA/DB),適配滿棧/空棧等不同棧結構實現(xiàn)。FD/ED/FA/EA四種后綴分別對應滿遞減、空遞減、滿遞增、空遞增棧類型。性能優(yōu)勢:單條指令完成最多16個寄存器的批量傳輸,相比單寄存器LDR/STR循環(huán),代碼密度提高,執(zhí)行周期顯著減少。9REG基址變址尋址(LDR/STR)前變址與自動變址:LDRR0,[R1,#4]先計算R1+4地址再加載;自動變址加!后綴寫回基址,如LDRR0,[R1,#4]!實現(xiàn)基址自動更新,簡化指針運算。后變址:LDRR0,[R1],#4先用R1地址加載再更新R1=R1+4,非常適合數(shù)組順序遍歷場景。偏移量可為12位立即數(shù)或寄存器值,支持移位操作。應用場景:結構體成員訪問、循環(huán)數(shù)組遍歷、鏈表節(jié)點操作。自動變址特性使C語言中*p++、*++p等操作可被編譯器高效映射為單條ARM指令。±OFFSETAddressingModesSummary特殊尋址方式與完整尋址體系總結ARM通過PC相對尋址支持位置無關跳轉,通過R13/SP約定實現(xiàn)堆棧操作,結合LDM/STM的塊拷貝模式,形成覆蓋立即數(shù)、寄存器、移位、基址偏移、多寄存器和相對跳轉的完整九種尋址方式體系。PC相對尋址以PC為基址加偏移計算目標地址,如Blabel指令實際執(zhí)行PC=PC+offset×4,支持位置無關代碼。這種尋址方式使代碼可在內存任意位置運行,無需重定位。PC+offset×4堆棧尋址約定R13為SP棧指針,STMFD/LDMFD實現(xiàn)滿遞減棧的壓棧出棧。ARM無專用堆棧指令,通過軟件約定統(tǒng)一規(guī)范,支持函數(shù)調用時的現(xiàn)場保護與恢復。R13/SP約定塊拷貝尋址STMIA/LDMIA實現(xiàn)連續(xù)內存塊批量復制,如LDMIAR0!,{R1-R4}從R0指向地址連續(xù)加載4個字。后綴!表示自動更新基址寄存器,IA表示傳送后地址增。LDMIA/STMIA批量九種尋址完整覆蓋立即、寄存器、寄存器移位、寄存器間接、基址變址(前/后/自動)、多寄存器、PC相對,體系完整。涵蓋數(shù)據(jù)傳送、算術邏輯、分支跳轉等各類指令需求。9Modes全體系CHAPTER04ARM指令分類與功能六大類指令全面解析:從數(shù)據(jù)運算到系統(tǒng)管理的完整指令功能圖譜INSTRUCTIONSET數(shù)據(jù)處理指令:算術運算與邏輯運算ARM數(shù)據(jù)處理指令涵蓋8種算術運算和5種邏輯運算指令,加上CMP比較、TST測試等專用標志位設置指令,構成了寄存器間數(shù)據(jù)運算的完整工具集,是ARM匯編編程中使用頻率最高的指令類別。算術運算指令ADD/ADC/SUB/SBC—基本四則運算,ADC和SBC用于多精度大數(shù)運算RSB/RSC—反向減法(Rd=Op2?Rn),在減法方向相反時避免額外MOV指令MUL/MLA—32位×32位→32位基本整數(shù)乘法與乘加運算(Rd=Rm×Rs+Rn)邏輯運算與比較AND/ORR/EOR/BIC—四種位級邏輯操作,BIC相當于AND第二操作數(shù)取反MOV/MVN/CMP/TST—數(shù)據(jù)傳送與條件判斷基礎,CMP/TST僅更新標志位Load/StoreInstructions加載/存儲指令:單字傳輸與批量傳輸ARM加載存儲指令實現(xiàn)寄存器與內存間的數(shù)據(jù)交互,LDR/STR處理單字/半字/字節(jié)傳輸,LDM/STM實現(xiàn)多寄存器批量傳輸。單字加載/存儲(LDR/STR)01LDRR0,[R1]從R1指向的內存地址加載32位數(shù)據(jù)到R0;STRR0,[R1]將R0存入R1指向的內存地址02LDRH/STRH處理16位半字,LDRB/STRB處理8位字節(jié);LDR偽指令(如LDRR0,=0x12345678)加載32位大常數(shù)批量加載/存儲(LDM/STM)01LDMIAR0!,{R1-R4}從R0地址連續(xù)加載4個寄存器,每次地址+4;STMIA實現(xiàn)對應的批量存儲操作02四種尋址模式:IA每次遞增/IB先遞增再操作/DA每次遞減/DB先遞減再操作,適配棧操作和塊數(shù)據(jù)搬運不同需求BranchInstructions分支指令:跳轉、條件分支與函數(shù)調用ARM分支指令通過B實現(xiàn)無條件跳轉、BL實現(xiàn)函數(shù)調用(自動保存返回地址到LR)、BX/BLX實現(xiàn)跨狀態(tài)切換跳轉。結合條件碼可派生出15種條件分支指令,跳轉范圍±32MB覆蓋大多數(shù)程序場景。01B指令無條件跳轉編碼為24位有符號偏移量左移2位,跳轉范圍±32MB;BEQ/BNE/BGT等條件分支根據(jù)CPSR標志位選擇性跳轉。±32MB02BL帶鏈接分支跳轉前自動將返回地址(PC+4)存入LR鏈接寄存器,是函數(shù)調用的標準實現(xiàn)方式。PC+4→LR03函數(shù)返回與嵌套調用用MOVPC,LR恢復調用點;嵌套調用時需在入口處將LR壓棧保存(STMFDSP!,{LR})。STMFD04BX/BLX分支交換跳轉同時根據(jù)目標地址最低位切換ARM/Thumb狀態(tài),支持跨指令集函數(shù)調用。ARM?ThumbChapter20·ARMInstructions程序狀態(tài)寄存器指令與異常產生指令MRS/MSR指令實現(xiàn)CPSR/SPSR與通用寄存器之間的雙向數(shù)據(jù)傳輸,支持按字節(jié)域精確寫入以避免意外修改。SWI軟件中斷指令是用戶程序請求操作系統(tǒng)服務的標準入口,BKPT/UDF分別服務于調試和指令集擴展。程序狀態(tài)寄存器指令01MRS讀取狀態(tài)寄存器—MRSR0,CPSR將當前程序狀態(tài)寄存器值讀取到R0;MRSR0,SPSR讀取備份狀態(tài)寄存器(異常模式下有效)。該指令是獲取處理器當前運行狀態(tài)的唯一途徑,常用于異常處理前保存現(xiàn)場。02MSR精確寫入—MSRCPSR_c,#0xD3寫入控制位域切換到管理模式;支持_c/_f/_x/_s四個字節(jié)域精確寫入,防止誤改其他位。域選擇機制確保特權級切換、中斷屏蔽等關鍵操作的原子性與安全性。MRS與MSR配合使用,實現(xiàn)程序狀態(tài)的安全讀取與按需修改,是ARM特權級編程的核心機制。異常產生指令01SWI軟件中斷—用戶程序通過SWI觸發(fā)管理模式切換,操作系統(tǒng)依據(jù)SWI編號(如SWI0x02)執(zhí)行對應系統(tǒng)調用。這是用戶態(tài)與內核態(tài)交互的標準接口,參數(shù)傳遞遵循ARM架構調用約定。02BKPT與UDF—BKPT斷點指令觸發(fā)調試異常供調試器接管;UDF未定義指令觸發(fā)異常,用于自定義指令集擴展的陷阱入口。兩者分別服務于軟件開發(fā)調試與硬件協(xié)處理器擴展場景。異常產生指令是ARM架構實現(xiàn)系統(tǒng)調用、調試支持和指令集擴展的標準化機制,確保軟件與硬件協(xié)同工作。SPECIALINSTRUCTIONS協(xié)處理器指令與特殊功能指令ARM通過CDP/LDC/STC/MCR/MRC五類協(xié)處理器指令實現(xiàn)與FPU、MMU等協(xié)處理器的完整交互。SWP原子交換、CLZ前導零計數(shù)等特殊指令為多處理器同步和高效數(shù)值運算提供硬件級支持。CDP/LDC/STCCDP協(xié)處理器數(shù)據(jù)操作指令指示協(xié)處理器執(zhí)行內部運算;LDC與STC在內存和協(xié)處理器寄存器之間完成數(shù)據(jù)的雙向傳輸。數(shù)據(jù)操作MCR/MRC實現(xiàn)ARM通用寄存器與協(xié)處理器寄存器之間的雙向數(shù)據(jù)交換,如MCRp15可訪問MMU頁表基址等系統(tǒng)控制寄存器。寄存器傳送SWP原子交換將內存值讀入寄存器的同時將另一寄存器值寫入同一地址,操作不可中斷,為多核同步提供硬件級原子保障。多核同步CLZ前導零計數(shù)統(tǒng)計32位數(shù)值最高位前連續(xù)零的個數(shù),廣泛應用于浮點歸一化和優(yōu)先級編碼等高效數(shù)值運算場景。數(shù)值運算INSTRUCTIONSETARM六大類指令功能總結ARM指令集按功能分為六大類:數(shù)據(jù)處理、加載存儲、分支控制、PSR處理、協(xié)處理器操作和異常產生,分別覆蓋寄存器運算、內存交互、流程控制、狀態(tài)管理、外設通信和系統(tǒng)調用六大核心需求,構成完整的指令功能體系。ARM指令六大分類功能速查指令類別典型指令核心功能數(shù)據(jù)處理指令ADD,SUB,AND,ORR,MOV,CMP,MUL寄存器間算術運算與邏輯運算,支持條件執(zhí)行和標志位更新加載/存儲指令LDR,STR,LDRB,LDM,STM,SWP寄存器與內存間數(shù)據(jù)交互,支持單字/半字/字節(jié)/批量傳輸分支指令B,BL,BX,BLX程序流程控制:無條件跳轉、函數(shù)調用、ARM/Thumb狀態(tài)切換PSR處理指令MRS,MSRCPSR/SPSR與通用寄存器雙向傳輸,用于模式切換和狀態(tài)管理協(xié)處理器指令CDP,LDC,STC,MCR,MRC主處理器與FPU/MMU等協(xié)處理器的數(shù)據(jù)操作和寄存器通信異常產生指令SWI,BKPT,UDF觸發(fā)軟件中斷(系統(tǒng)調用)、斷點調試異常和未定義指令異常六大類指令覆蓋運算、存儲、流程、狀態(tài)、外設和異常全部處理器功能需求CHAPTER05ARM匯編程序設計實踐從程序結構、偽指令到經典編程實例的匯編開發(fā)全流程ASSEMBLYSTRUCTUREARM匯編程序結構與常用偽指令ARM匯編程序由代碼段和數(shù)據(jù)段組成,通過AREA、ENTRY、END等段定義偽指令組織結構,通過DCB/DCW/DCD等數(shù)據(jù)定義偽指令聲明初始數(shù)據(jù),通過EQU、EXPORT、IMPORT等符號偽指令管理程序間的引用關系。段定義與控制偽指令AREA定義代碼段與數(shù)據(jù)段——MyCode,CODE,READONLY聲明只讀代碼段;MyData,DATA,READWRITE聲明可讀寫數(shù)據(jù)段ENTRY標記程序入口點,鏈接器據(jù)此確定起始地址;END標記匯編文件結束,編譯器忽略其后內容數(shù)據(jù)定義與符號管理偽指令DCB/DCW/DCD分別定義字節(jié)、半字、字序列;EQU定義常量符號(如MAXEQU100);ALIGN對齊到指定字節(jié)邊界EXPORT聲明全局符號供其他文件引用;IMPORT引入外部符號;LTORG聲明字面量池存放LDR偽指令的大常數(shù)ARMAssembly·編程實例編程實例一:循環(huán)求和程序循環(huán)求和程序展示了ARM匯編中MOV初始化、ADD累加、CMP比較和BLE條件跳轉的典型組合模式,是理解循環(huán)結構匯編實現(xiàn)的基礎范例。01初始化階段MOVR0,#0累加器清零MOVR1,#1計數(shù)器從1開始MOVR2,#100循環(huán)上界R0R1R202循環(huán)體執(zhí)行ADDR0,R0,R1累加當前值ADDR1,R1,#1計數(shù)器遞增CMPR1,R2比較與上界ADD→CMP03循環(huán)控制BLELOOP當R1≤R2時跳回繼續(xù)執(zhí)行有符號比較,檢查Z=1或N≠V條件標志位505004終止處理STOP標號處BSTOP死循環(huán)等待實際應用應調用系統(tǒng)退出服務BSTOPProgramming·ARMAssembly編程實例二:內存數(shù)據(jù)冒泡排序冒泡排序程序綜合運用了基址變址尋址訪問數(shù)組、嵌套循環(huán)控制排序輪次、CMP+BGT條件跳轉實現(xiàn)比較交換,展示了ARM匯編處理內存數(shù)據(jù)的完整編程模式。01地址初始化—LDRR0,=ARRAY加載數(shù)組首地址,LDRR1,[COUNT]加載元素個數(shù),SUBR2,R1,#1設置外層循環(huán)次數(shù)02內層比較交換—LDRR3,[R4]與LDRR5,[R4,#4]加載相鄰元素,CMPR3,R5比較后BGTSWAP跳轉執(zhí)行交換03元素交換—STRR5,[R4]與STRR3,[R4,#4]寫入交換后的值;ADDR4,R4,#4移動指針到下一對元素04循環(huán)控制—SUBSR6,R6,#1遞減內層計數(shù)并更新標志位;BNEINNER繼續(xù)內層循環(huán);外層遞減后BNEOUTER開始新一輪CHAPTER03·SUBROUTINEDESIGN編程實例三:子程序設計與調用約定ARM子程序設計遵循ATPCS調用約定:R0-R3傳參/返回、R4-R11被調用者保存、LR存返回地址。通過STMFD/LDMFD在函數(shù)入口和出口管理棧幀,確保嵌套調用時現(xiàn)場完整恢復。01—ATPCS調用約定01R0-R3傳遞前4個參數(shù)且R0兼作返回值;超出4個參數(shù)通過棧傳遞(調用者壓棧,被調用者從棧中讀取)02R4-R11被調用者保存(Callee-saved):函數(shù)使用前必須壓棧,返回前恢復;R12(IP)為臨時寄存器02—函數(shù)調用與返回03入口STMFDSP!,{R4-R7,LR}保存現(xiàn)場和返回地址;出口LDMFDSP!,{R4-R7,PC}恢復現(xiàn)場并彈回返回地址04BLFACTORIAL調用階乘函數(shù)(LR=PC+4自動保存);函數(shù)內R0傳入n,循環(huán)計算n!后R0返回結果REGISTERCONVENTIONR0–R3參數(shù)傳遞/返回值R4–R11被調用者保存R12IP臨時寄存器LR/PC返回地址/程序計數(shù)器STACKFRAMELIFECYCLEPROLOGUESTMFDSP!,{R4-R7,LR}EPILOGUELDMFDSP!,{R4-R7,PC}CHAPTER28·ASSEMBLY編程實例四:IRQ中斷處理程序設計IRQ中斷處理程序需在IRQ模式下完整保存R0-R12通用寄存器和修正后的LR返回地址,服務結束后通過帶^后綴的LDMFD一步恢復現(xiàn)場并將SPSR回寫CPSR,實現(xiàn)中斷返回與模式切換的原子操作。STEP01中斷入口處理器自動切至IRQ模式,CPSR備份到SPSR_irq,PC跳轉中斷向量(0x18);SUBLR,LR,#4修正返回地址(流水線偏移)0x18STEP02現(xiàn)場保存STMFDSP!,{R0-R12,LR}將所有通用寄存器和返回地址壓入IRQ模式專用棧(IRQ棧需提前初始化)R0–R12STEP03中斷服務清
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 綜合執(zhí)法人員必讀:執(zhí)法資格考試報名全流程避坑攻略
- ICU常見管道的護理
- LG手機日大型活動策劃思路
- HP性能測試常用工具比較
- ILT物流部門經理證書培訓
- 公司職員試用期轉正工作總結報告
- 2026年浙江中考語文考試(真題)試卷及答案
- 2026年監(jiān)理工程師《低碳標準》預測卷
- 防盜安全動員會
- 2026年測繪工程師《測繪管理與法規(guī)》真題試卷
- 2026年水發(fā)派思燃氣股份有限公司社會招聘備考題庫及1套參考答案詳解
- 公立醫(yī)院與醫(yī)療旅游機構的合作質量協(xié)議
- KISS復盤法培訓課件
- 2025年全國設備監(jiān)理師設備工程質量管理與檢驗新版真題附答案
- 2025年長沙理工電氣真題及答案
- 2025年郵政內部競聘考試題及答案
- 卵巢黃體破裂課件
- (正式版)DB15∕T 3413-2024 《住宅小區(qū)和商業(yè)用房供配電設施規(guī)范》
- 肌骨常見疾病的超聲診斷
- 耐壓測試儀操作規(guī)程培訓
- 建筑工程土建主體部分施工方案
評論
0/150
提交評論