




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、嵌入式系統(tǒng) 第二章 嵌入式處理器下第1頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三第二章 嵌入式處理器2.1 引言 2.2 嵌入式處理器概述 2.3ARM處理器基礎(chǔ) 2.5ARM程序設(shè)計(jì)基礎(chǔ)2.4ARM指令系統(tǒng)第2頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三2.4 ARM指令系統(tǒng) 2.4.1 ARM編程模型 2.4.2 ARM尋址方式 2.4.3 ARM指令集 2.4.4 Thumb指令集第3頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三2.4.1 ARM編程模型2.4 ARM指令系統(tǒng) 流水線 數(shù)據(jù)類型 處理器模式 處理器工作狀態(tài) 寄存器組織 異常
2、 存儲(chǔ)器和存儲(chǔ)器映射I/O 第4頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三1. 流水線 2.4.1 ARM編程模型 流水線技術(shù)是現(xiàn)代微處理器普遍采用的一種技術(shù),它可以使得幾條指令并行執(zhí)行,因此可以大大提高處理器的運(yùn)行效率。 第5頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三1. 流水線 2.4.1 ARM編程模型從程序存儲(chǔ)器中讀取指令,放入流水線中 操作碼和操作數(shù)被譯碼,決定執(zhí)行什么功能,為下一個(gè)時(shí)鐘周期準(zhǔn)備數(shù)據(jù)路徑所需要的控制信號(hào)執(zhí)行已譯碼的指令取 指譯 碼執(zhí) 行ARM7的3級(jí)流水線: 第6頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三1. 流水
3、線 流水線能夠正常工作的條件是在任意時(shí)刻,每一級(jí)所使用的硬件必須能夠獨(dú)立操作,不能多級(jí)同時(shí)占用同一硬件資源。 在正常情況下,每條指令都被劃分成這樣3個(gè)時(shí)鐘周期來完成,即指令執(zhí)行時(shí)間(Latency)是3周期。 流水線的執(zhí)行使得程序計(jì)數(shù)器PC必須在當(dāng)前指令取指前計(jì)數(shù)。對(duì)于ARM處理器的3級(jí)流水線,以當(dāng)前PC取指后,PC值會(huì)增加為PC4。 2.4.1 ARM編程模型第7頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三1. 流水線圖2-5 ARM單周期指令的多級(jí)流水線操作2.4.1 ARM編程模型第8頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三1. 流水線圖2-6 ARM
4、多周期指令的多級(jí)流水線操作 2.4.1 ARM編程模型第9頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三1. 流水線圖2-7 ARM分支指令的流水線操作 2.4.1 ARM編程模型第10頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三2. 數(shù)據(jù)類型 ARM處理器支持以下數(shù)據(jù)類型:2.4.1 ARM編程模型 Byte字節(jié),8位; Halfword半字,16位(半字必須與2字節(jié)邊界對(duì)準(zhǔn)); Word字,32位(字必須與4字節(jié)邊界對(duì)準(zhǔn))。第11頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三2. 數(shù)據(jù)類型 2.4.1 ARM編程模型圖2-8 ARM數(shù)據(jù)類型存儲(chǔ)圖
5、 第12頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三3. 處理器模式 ARM體系結(jié)構(gòu)支持7種處理器模式 :2.4.1 ARM編程模型處理器模式說 明用戶 usr程序正常執(zhí)行模式FIQ fiq支持高速數(shù)據(jù)傳輸或通道處理IRQ irq通用中斷處理管理 svc操作系統(tǒng)保護(hù)模式中止 abt虛擬存儲(chǔ)器或存儲(chǔ)器保護(hù)未定義 und支持硬件協(xié)處理器的軟件仿真系統(tǒng) sys運(yùn)行特權(quán)操作系統(tǒng)任務(wù)第13頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三4. 處理器工作狀態(tài) ARM處理器具有特殊的兩種工作狀態(tài):2.4.1 ARM編程模型 ARM狀態(tài):32位,執(zhí)行字對(duì)準(zhǔn)的ARM指令; Thumb
6、狀態(tài):16位,執(zhí)行半字對(duì)準(zhǔn)的Thumb指令。 ARM處理器的操作狀態(tài)可以通過BX指令(分支和交換指令)在ARM狀態(tài)和Thumb狀態(tài)之間切換。例:從ARM狀態(tài)切換到Thumb狀態(tài): LDR R0,=Label+1 BX R0從Thumb狀態(tài)切換到ARM狀態(tài): LDR R0,=Label BX R0第14頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三5. 寄存器組織 ARM處理器共有37個(gè)寄存器: 2.4.1 ARM編程模型 31個(gè)通用寄存器:32位,含程序計(jì)數(shù)器PC; 6個(gè)狀態(tài)寄存器:32位,只使用了其中的12位。 當(dāng)編寫用戶程序時(shí),37個(gè)寄存器中僅有15個(gè)通用寄存器r0r14、程
7、序計(jì)數(shù)器PC(r15)和當(dāng)前程序狀態(tài)寄存器CPSR需要考慮。其余寄存器僅用于系統(tǒng)級(jí)編程和異常處理(如中斷)。 第15頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三ARM狀態(tài)下寄存器組織第16頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三5. 寄存器組織-不分組寄存器r0r7 不分組意味著在所有處理器模式下,r0r7都可被同樣訪問,沒有體系結(jié)構(gòu)所隱含的特殊用途。 2.4.1 ARM編程模型第17頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三5. 寄存器組織-分組寄存器r8r14 分組意味著r8r14的訪問與當(dāng)前處理器的模式相關(guān)。 如果要訪問r8r14,而
8、不依賴于當(dāng)前處理器的模式,就必須使用規(guī)定的寄存器名稱。 名稱的形式為:2.4.1 ARM編程模型 r8_r14_第18頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三5. 寄存器組織-分組寄存器r8r14 r8r12各有兩組物理寄存器:一組為FIQ模式,另一組為FIQ以外的模式。 寄存器r8r12沒有指定特殊用途,而使用r8_fiqr12_fiq則允許快速中斷。 2.4.1 ARM編程模型第19頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三5. 寄存器組織-分組寄存器r8r14 寄存器r13和r14的用途比較特殊: 2.4.1 ARM編程模型 r13通常用作堆棧指針S
9、P,被初始化成指向異常模式分配的堆棧。 r14通常用作子程序鏈接寄存器LR。處理異常時(shí),在程序入口處將異常處理程序用到的其它寄存器的值壓入堆棧,返回時(shí)重新將這些值加載到寄存器中。當(dāng)執(zhí)行分支指令BL時(shí),r15的內(nèi)容拷貝到r14中,從而成為子程序調(diào)用后的返回地址第20頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三5. 寄存器組織-程序計(jì)數(shù)器r15 寄存器r15通常被用作程序計(jì)數(shù)器PC。 在ARM狀態(tài)下,PC的值保存在位31:2,而位1:0為0;在Thumb狀態(tài)下,PC的值保存在位31:1,而位0為0。2.4.1 ARM編程模型第21頁,共167頁,2022年,5月20日,19點(diǎn)22分
10、,星期三5. 寄存器組織-當(dāng)前程序狀態(tài)寄存器CPSR CPSR和SPSR具有相同的格式 2.4.1 ARM編程模型第22頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三標(biāo)志位含 義N當(dāng)用兩個(gè)補(bǔ)碼表示的帶符號(hào)數(shù)進(jìn)行運(yùn)算時(shí),N=1 表示運(yùn)算的結(jié)果為負(fù)數(shù);N=0 表示運(yùn)算的結(jié)果為正數(shù)或零;ZZ=1 表示運(yùn)算的結(jié)果為零;Z=0表示運(yùn)算的結(jié)果為非零;C可以有4種方法設(shè)置C的值: 加法運(yùn)算(包括比較指令CMN):當(dāng)運(yùn)算結(jié)果產(chǎn)生了進(jìn)位時(shí)(無符號(hào)數(shù)溢出),C=1,否則C=0。 減法運(yùn)算(包括比較指令CMP):當(dāng)運(yùn)算時(shí)產(chǎn)生了借位(無符號(hào)數(shù)溢出),C=0,否則C=1。 對(duì)于包含移位操作的非加/減運(yùn)算指
11、令,C為移出值的最后一位。 對(duì)于其他的非加/減運(yùn)算指令,C的值通常不改變。V可以有2種方法設(shè)置V的值: 對(duì)于加/減法運(yùn)算指令,當(dāng)操作數(shù)和運(yùn)算結(jié)果為二進(jìn)制的補(bǔ)碼表示的帶符號(hào)數(shù)時(shí),V=1表示符號(hào)位溢出。 對(duì)于其他的非加/減運(yùn)算指令,V的值通常不改變。Q在ARM v5及以上版本的E系列處理器中,用Q標(biāo)志位指示增強(qiáng)的DSP運(yùn)算指令是否發(fā)生了溢出。在其他版本的處理器中,Q標(biāo)志位無定義。第23頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三5. 寄存器組織-Thumb狀態(tài)的寄存器集 2.4.1 ARM編程模型Thumb狀態(tài)下寄存器組織 第24頁,共167頁,2022年,5月20日,19點(diǎn)22分
12、,星期三5. 寄存器組織-Thumb狀態(tài)的寄存器集 2.4.1 ARM編程模型Thumb狀態(tài)寄存器到ARM寄存器的映射 第25頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三6. 異常 異常(exception)是指由內(nèi)部或外部源產(chǎn)生從而使處理器需要處理的一個(gè)事件。 2.4.1 ARM編程模型 例如,外部中斷或試圖實(shí)行未定義的指令都會(huì)引起異常的發(fā)生。 處理異常之前,處理器必須保存當(dāng)前的狀態(tài),以便在異常處理完成后,能夠使原來的出現(xiàn)重新執(zhí)行。 第26頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三6. 異常 ARM支持7種類型的異常。對(duì)于每種異常,處理器將強(qiáng)制從異常對(duì)應(yīng)的某
13、個(gè)固定地址開始執(zhí)行程序。這些固定地址稱為異常向量。 2.4.1 ARM編程模型 多個(gè)異??赡軙?huì)同時(shí)發(fā)生,因此在ARM中就通過給各個(gè)異常賦予不同的優(yōu)先級(jí)來確定處理異常的順序。第27頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三6. 異常 優(yōu)先級(jí)按照從高到低的順序排列如下: 2.4.1 ARM編程模型復(fù)位數(shù)據(jù)異常中止FIQIRQ預(yù)取指異常中止SWI、未定義指令(這兩種異常的指令編碼互斥,不可能同時(shí)發(fā)生) 第28頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三異常類型具體含義復(fù)位當(dāng)處理器的復(fù)位電平有效時(shí)產(chǎn)生復(fù)位異常,程序跳轉(zhuǎn)到復(fù)位異常處理程序處執(zhí)行。未定義指令當(dāng)ARM處理器
14、或協(xié)處理器遇到不能處理的指令時(shí),產(chǎn)生未定義指令異常。可使用該異常機(jī)制進(jìn)行軟件仿真。軟件中斷該異常由執(zhí)行SWI指令產(chǎn)生,可用于用戶模式下的程序調(diào)用特權(quán)操作指令??墒褂迷摦惓C(jī)制實(shí)現(xiàn)系統(tǒng)功能調(diào)用。指令預(yù)取中止若處理器預(yù)取指令的地址不存在,或該地址不允許當(dāng)前指令訪問,存儲(chǔ)器會(huì)向處理器發(fā)出中止信號(hào),但當(dāng)預(yù)取的指令被執(zhí)行時(shí),才會(huì)產(chǎn)生指令預(yù)取中止異常。數(shù)據(jù)中止若處理器數(shù)據(jù)訪問指令的地址不存在,或該地址不允許當(dāng)前指令訪問時(shí),產(chǎn)生數(shù)據(jù)中止異常。IRQ(外部中斷請(qǐng)求)當(dāng)處理器的外部中斷請(qǐng)求引腳有效,且CPSR中的I位為0時(shí),產(chǎn)生IRQ異常。系統(tǒng)的外設(shè)可通過該異常請(qǐng)求中斷服務(wù)。FIQ(快速中斷請(qǐng)求)當(dāng)處理器的快速
15、中斷請(qǐng)求引腳有效且CPSR中的F位為0時(shí),產(chǎn)生FIQ異常。第29頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三6. 異常 進(jìn)入異常的操作:2.4.1 ARM編程模型在相應(yīng)的鏈接寄存器LR (r14)中保存下一條指令的地址將CPSR復(fù)制到相應(yīng)的SPSR中強(qiáng)制使CPSR模式位置成對(duì)應(yīng)異常類型的值強(qiáng)制使程序計(jì)數(shù)器指向相應(yīng)異常向量,取下一條指令第30頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三例子: 用戶模式到 FIQ模式*spsr_fiqcpsrr7r4r5r2r1r0r3r6r15 (pc)r14_fiqr13_fiqr12_fiqr10_fiqr11_fiqr9_f
16、iqr8_fiqr14 (lr)r13 (sp)r12r10r11r9r8用戶模式 CPSR 復(fù)制到 FIQ 模式 SPSRcpsrr15 (pc)r14 (lr)r13 (sp)r12r10r11r9r8r7r4r5r2r1r0r3r6r14_fiqr13_fiqr12_fiqr10_fiqr11_fiqr9_fiqr8_fiq返回一個(gè)從用戶模式計(jì)算的地址,PC值存儲(chǔ)在FIQ模式Registers in useRegisters in use異常用戶模式FIQ 模式spsr_fiq第31頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三7. 存儲(chǔ)器和存儲(chǔ)器映射I/O 與單片機(jī)等簡(jiǎn)單
17、系統(tǒng)相比,現(xiàn)在一些復(fù)雜的嵌入式系統(tǒng)中,存儲(chǔ)系統(tǒng)的功能更加強(qiáng)大,可能包含有多種現(xiàn)代計(jì)算機(jī)存儲(chǔ)技術(shù),如Cache和Write Buffer、MMU、存儲(chǔ)保護(hù)機(jī)制、快速上下文切換等。 基于ARM內(nèi)核的嵌入式系統(tǒng)可能包含F(xiàn)lash、ROM、SRAM、SDRAM等多種類型的存儲(chǔ)器,不同類型的存儲(chǔ)器存取速度和數(shù)據(jù)寬度等都不盡相同。2.4.1 ARM編程模型第32頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三7. 存儲(chǔ)器和存儲(chǔ)器映射I/O 存儲(chǔ)系統(tǒng)的設(shè)計(jì)可以是多種多樣的,但是應(yīng)當(dāng)遵循一定的規(guī)則,否則可能會(huì)引起一些不必要的麻煩。2.4.1 ARM編程模型例如: 可能使存儲(chǔ)系統(tǒng)的實(shí)現(xiàn)比較困難; 可
18、能導(dǎo)致向其它ARM處理器的移植出現(xiàn)麻煩; 可能引起一些標(biāo)準(zhǔn)軟件(如編譯器)的不適應(yīng)。 基于系統(tǒng)設(shè)計(jì)和編程的考慮,關(guān)于ARM存儲(chǔ)系統(tǒng)一般只需涉及地址空間、存儲(chǔ)器格式、存儲(chǔ)器訪問對(duì)準(zhǔn)以及存儲(chǔ)器映射I/O等方面的問題。 第33頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三7. 存儲(chǔ)器和存儲(chǔ)器映射I/O-地址空間 ARM體系結(jié)構(gòu)使用232個(gè)8位字節(jié)的單一、線性地址空間,字節(jié)地址的范圍為02321; 也可以將地址空間看作由230個(gè)32位的字組成,字地址可被4整除,且按字對(duì)準(zhǔn),例如以A為字對(duì)準(zhǔn)地址的字地址由A、A1、A2、A3共4個(gè)字節(jié)組成; 在ARM體系結(jié)構(gòu)v4以上版本中,也可以將地址空間
19、看作由231個(gè)16位的半字組成,半字地址可被2整除,且按半字對(duì)準(zhǔn),例如以A為字對(duì)準(zhǔn)地址的半字地址由A、A1共2個(gè)字節(jié)組成。2.4.1 ARM編程模型第34頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三7. 存儲(chǔ)器和存儲(chǔ)器映射I/O-存儲(chǔ)器格式 存儲(chǔ)器格式是指字、半字、字節(jié)在存儲(chǔ)器中存放的方式,也反映了存儲(chǔ)器中字、半字、字節(jié)之間的映射關(guān)系。 存儲(chǔ)器格式包括小端和大端兩種格式。 2.4.1 ARM編程模型第35頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三7. 存儲(chǔ)器和存儲(chǔ)器映射I/O-存儲(chǔ)器格式 2.4.1 ARM編程模型大、小端存儲(chǔ)格式對(duì)程序的影響 第36頁,共16
20、7頁,2022年,5月20日,19點(diǎn)22分,星期三7. 存儲(chǔ)器和存儲(chǔ)器映射I/O-存儲(chǔ)器訪問對(duì)準(zhǔn) 對(duì)于非對(duì)準(zhǔn)的取指,在ARM工作狀態(tài)下,未對(duì)準(zhǔn)的地址寫入R15后,結(jié)果將不可預(yù)知或忽略地址位1:0;在Thumb狀態(tài)下,未對(duì)準(zhǔn)的地址寫入R15后,則通常忽略地址位0。 對(duì)于非對(duì)準(zhǔn)的數(shù)據(jù)訪問,則體系結(jié)構(gòu)可能定義成以下行為之一:2.4.1 ARM編程模型 不可預(yù)知; 忽略使訪問非對(duì)準(zhǔn)的低地址位; 忽略使訪問非對(duì)準(zhǔn)的低地址位,但使用這些位控制加載數(shù)據(jù)的循環(huán)移位(適用于LDR和SWP指令)。 第37頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三7. 存儲(chǔ)器和存儲(chǔ)器映射I/O-存儲(chǔ)器映射I/O
21、ARM系統(tǒng)實(shí)現(xiàn)I/O功能的標(biāo)準(zhǔn)方法是使用存儲(chǔ)器映射I/O。 這種方法使用特定的存儲(chǔ)器地址,對(duì)這些地址加載和存儲(chǔ),即可完成I/O操作。 通常,對(duì)存儲(chǔ)器映射I/O地址加載對(duì)應(yīng)輸入,對(duì)對(duì)存儲(chǔ)器映射I/O地址存儲(chǔ)對(duì)應(yīng)輸出。 另外,加載和存儲(chǔ)也可執(zhí)行控制功能,替代或附加到正常的I/O操作上。 2.4.1 ARM編程模型第38頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三2.4 ARM指令系統(tǒng) 2.4.1 ARM編程模型 2.4.2 ARM尋址方式 2.4.3 ARM指令集 2.4.4 Thumb指令集第39頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三 尋址方式是指根據(jù)指令給
22、出的地址碼尋找真實(shí)操作數(shù)地址的方式。 尋址方式的多樣化一方面出于編程的需要,另一方面可以增強(qiáng)程序設(shè)計(jì)的靈活性。2.4.2 ARM尋址方式2.4 ARM指令系統(tǒng) 第40頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三2.4.2 ARM尋址方式2.4 ARM指令系統(tǒng) 寄存器尋址 立即尋址 寄存器移位尋址 寄存器間接尋址 基址尋址 多寄存器尋址 堆棧尋址 塊拷貝尋址 相對(duì)尋址 第41頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三1. 寄存器尋址 指令地址碼給出寄存器的編號(hào),寄存器中的內(nèi)容為操作數(shù)。 2.4.2 ARM尋址方式例如: ADD R0,R1,R2;R0R1+R2
23、寫操作數(shù)的順序?yàn)椋旱谝粋€(gè)寄存器R0為結(jié)果寄存器,第二個(gè)寄存器R1為第一操作數(shù)寄存器,第三個(gè)寄存器R2為第二操作數(shù)寄存器。 注意第42頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三2. 立即尋址 指令操作碼后的地址碼是立即數(shù),即操作數(shù)本身。 2.4.2 ARM尋址方式例如: ADD R3,R3,#1;R3R3+1 AND R8,R7,#&FF;R8R77:0 立即數(shù)的表示以“#”為前綴,十六進(jìn)制的立即數(shù)在“#”后面加“&”符號(hào)。 注意第43頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三3. 寄存器移位尋址 寄存器移位尋址是ARM指令集特有的尋址方式。第2個(gè)操作數(shù)與第1
24、個(gè)操作數(shù)結(jié)合之前,選擇進(jìn)行移位操作。 2.4.2 ARM尋址方式例如: ADD R3,R2,R1,LSL #3;R3R2+8R1 第44頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三3. 寄存器移位尋址 可采取的移位操作包括:2.4.2 ARM尋址方式 LSL:邏輯左移(Logical Shift Left)。寄存器中字的低端空出的位補(bǔ)0。 LSR:邏輯右移(Logical Shift Right)。寄存器中字的高端空出的位補(bǔ)0。 ASR:算術(shù)右移(Arithmetic Shift Right)。算術(shù)移位的對(duì)象是帶符號(hào)數(shù)。在移位過程中必須保持操作數(shù)的符號(hào)不變。若源操作數(shù)為正數(shù),則
25、字的高端空出的位補(bǔ)0;若源操作數(shù)為負(fù)數(shù),則字的高端空出的位補(bǔ)1。 ROR:循環(huán)右移(ROtate Right)。從字的最低端移出的位填入字的高端空出的位。 RRX:擴(kuò)展為1的循環(huán)右移(Rotate Right eXtended by 1 place)。操作數(shù)右移1位,空位(位31)用原C標(biāo)志填充。第45頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三3. 寄存器移位尋址 2.4.2 ARM尋址方式移位操作過程第46頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三4. 寄存器間接尋址 指令地址碼給出寄存器的編號(hào),寄存器為地址指針,存放操作數(shù)的有效地址。 2.4.2 ARM
26、尋址方式例如:LDR R0,R1;R0R1STRR0,R1;R0R1 第47頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三5. 基址尋址 基址尋址是將基址寄存器的內(nèi)容與指令中給出的位移量相加,形成操作數(shù)有效地址。 基址尋址用于訪問基址附近的存儲(chǔ)單元。 包括基址加偏移量尋址和基址加索引尋址,可以將寄存器間接尋址看作是位移量為0的基址加偏移量尋址。 2.4.2 ARM尋址方式第48頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三5. 基址尋址-基址加偏移量尋址 基址加偏移量尋址中的偏移量最大為4KB,可分為前索引尋址和后索引尋址。 2.4.2 ARM尋址方式前索引尋址舉例
27、:LDRR0,R1,#4;R0R1+4 第49頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三5. 基址尋址-基址加偏移量尋址2.4.2 ARM尋址方式例:LDRR0,R1,#4!;R0R1;R1R1+4 后索引尋址舉例:LDR R0,R1,#4;R0R1;R1R1+4這種改變基址寄存器指向下一個(gè)傳送的地址對(duì)數(shù)據(jù)塊傳送很有用,還可以采用帶自動(dòng)索引的前索引尋址實(shí)現(xiàn)。注意第50頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三5. 基址尋址-基址加索引尋址 基址加索引尋址是指令指定一個(gè)基址寄存器,再指定另一個(gè)寄存器(稱為索引),其值作為位移加到基址上形成存儲(chǔ)器地址。 2.4.
28、2 ARM尋址方式例:LDR R0,R1,R2;R0R1+R2 第51頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三6. 多寄存器尋址 多寄存器尋址是指一次可以傳動(dòng)多個(gè)寄存器的值,允許一條指令可以傳送16個(gè)寄存器的任何子集,包括16個(gè)寄存器。 2.4.2 ARM尋址方式例:LDMIAR1,R0,R2,R5;R0R1;R2R1+4;R5R1+8由于傳送的數(shù)據(jù)總是32位的字,因此基址寄存器R1應(yīng)當(dāng)字對(duì)準(zhǔn)。注意第52頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三7. 堆棧尋址 堆棧是一種按照特定順序進(jìn)行存取的存儲(chǔ)區(qū)。這種特定的順序是指“后進(jìn)先出”(LIFO)或“先進(jìn)后出”
29、(FILO)。 使用堆棧時(shí)需要使用一個(gè)專門的寄存器作為堆棧指針,棧指針?biāo)付ǖ拇鎯?chǔ)單元就是堆棧的棧頂。 如果堆棧指針指向最后壓入堆棧的有效數(shù)據(jù)項(xiàng),就稱為滿堆棧(full stack);如果堆棧指針指向下一個(gè)數(shù)據(jù)項(xiàng)放入的空位置,就稱為空堆棧(empty stack)。2.4.2 ARM尋址方式第53頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三7. 堆棧尋址 另外,根據(jù)堆棧存儲(chǔ)區(qū)地址增長的方向,可將堆棧分為遞增堆棧(ascending stack)和遞減堆棧(descending stack)。 以上表示遞增、遞減、滿、空的堆棧的各種組合就產(chǎn)生了4種堆棧類型。 ARM支持所有這4種
30、類型的堆棧,即滿遞增、空遞增、滿遞減、空遞減。 ARM指令使用push向堆棧寫數(shù)據(jù),稱為進(jìn)棧;使用pop從堆棧讀數(shù)據(jù),稱為出棧。 2.4.2 ARM尋址方式堆棧指針指向最后壓入的數(shù)據(jù)且由低地址向高地址生成堆棧指針指向最后壓入的數(shù)據(jù)且由高地址向低地址生成堆棧指針指向下一個(gè)將要放入數(shù)據(jù)的空位置且由低地址向高地址生成堆棧指針指向下一個(gè)將要放入數(shù)據(jù)的空位置且由高地址向低地址生成第54頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三8. 塊拷貝尋址 從堆棧的角度來看,多寄存器傳送指令是把一塊數(shù)據(jù)從存儲(chǔ)器的某一個(gè)位置拷貝到另一位置。 從塊拷貝的角度來看,指令還要基于數(shù)據(jù)存儲(chǔ)在基址寄存器地址之上
31、還是之下,地址在存儲(chǔ)第一個(gè)值之前或之后增加或減少。這兩種角度的映射均取決于執(zhí)行加載操作還是存儲(chǔ)操作。 2.4.2 ARM尋址方式第55頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三8. 塊拷貝尋址 2.4.2 ARM尋址方式向上生長向下生長滿空滿空增 加之前STMIBSTMFALDMIBLDMED之后STMIASTMEALDMIALDMFD減 少之前LDMDBLDMEASTMDBSTMFD之后LDMDALDMFASTMDASTMED表2-4 多寄存器加載和存儲(chǔ)指令映射 第56頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三8. 塊拷貝尋址 2.4.2 ARM尋址方式例
32、如:LDMIAR0!,R2-R9;將數(shù)據(jù)加載到R2R9STMIAR1,R2-R9;將數(shù)據(jù)存入存儲(chǔ)器執(zhí)行指令后,由于引用自動(dòng)索引“!”,R0的值共增加32,而R1不變。 注意第57頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三8. 塊拷貝尋址 2.4.2 ARM尋址方式多寄存器指令的后綴含義如下:I:IncrementD:Decrement or Descending stackA:After or Ascending stackB:BeforeF:FullE:Empty例如“FD”即表明是滿遞減堆棧尋址方式(full descending stack)。 第58頁,共167頁,2
33、022年,5月20日,19點(diǎn)22分,星期三9. 相對(duì)尋址 可以將相對(duì)尋址看作是以程序計(jì)數(shù)器PC為基址的一種基址尋址方式。 指令的地址碼作為位移量,與PC相加得到操作數(shù)的有效地址。 位移量指出了操作數(shù)與當(dāng)前指令之間的相對(duì)位置。 2.4.2 ARM尋址方式例:BL SUBR;轉(zhuǎn)移到SUBR;返回到此SUBR;子程序入口地址MOV PC,R14;返回第59頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三2.4 ARM指令系統(tǒng) 2.4.1 ARM編程模型 2.4.2 ARM尋址方式 2.4.3 ARM指令集 2.4.4 Thumb指令集第60頁,共167頁,2022年,5月20日,19點(diǎn)2
34、2分,星期三2.4 ARM指令系統(tǒng) ARM指令集編碼 條件執(zhí)行 ARM指令格式 ARM存儲(chǔ)器訪問指令 ARM數(shù)據(jù)處理指令 ARM分支指令 ARM協(xié)處理器指令 ARM雜項(xiàng)指令 ARM偽指令 2.4.3 ARM指令集第61頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三1. ARM指令集編碼 ARM指令集采用32位二進(jìn)制編碼方式,大部分指令編碼中定義了第一操作數(shù)、第二操作數(shù)、目的操作數(shù)、條件標(biāo)志影響位以及每條指令所對(duì)應(yīng)的不同功能實(shí)現(xiàn)的二進(jìn)制位。 每條ARM指令都具有不同的編碼方式,與不同的指令功能相對(duì)應(yīng)。 2.4.3 ARM指令集第62頁,共167頁,2022年,5月20日,19點(diǎn)22
35、分,星期三1. ARM指令集編碼 2.4.3 ARM指令集ARM指令集編碼第63頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三2. 條件執(zhí)行 條件執(zhí)行是指只有在當(dāng)前程序狀態(tài)寄存器CPSR中的條件碼標(biāo)志滿足指定的條件時(shí),帶條件碼的指令才能執(zhí)行。 條件轉(zhuǎn)移是絕大多數(shù)指令集的標(biāo)準(zhǔn)特征,但ARM指令集將條件執(zhí)行擴(kuò)展到所有指令,包括監(jiān)控調(diào)用和協(xié)處理器指令。 2.4.3 ARM指令集第64頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三2. 條件執(zhí)行2.4.3 ARM指令集圖2-17 ARM的條件代碼域第65頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三操作碼31:
36、28助記符后綴標(biāo)志含義0000EQZ置位相等0001NEZ清零不等0010CS/HSC置位大于或等于(無符號(hào)=)0011CC/LOC清零小于(無符號(hào))1001LSC清零或Z置位小于或等于(無符號(hào)=1011LTN和V不同帶符號(hào)1101LEZ置位或N和V不同帶符號(hào)=1110AL任何總是(缺?。?111NV無從不(不要使用)第66頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三2. 條件執(zhí)行2.4.3 ARM指令集對(duì)于條件執(zhí)行,需要說明的有以下兩點(diǎn): 注意幾乎所有的ARM數(shù)據(jù)處理指令都可以根據(jù)執(zhí)行結(jié)果來選擇是否更新條件碼標(biāo)志。當(dāng)指令中包含后綴“S”時(shí),指令將更新條件碼標(biāo)志??梢愿鶕?jù)另一條
37、指令設(shè)置的標(biāo)志,有條件地執(zhí)行某條指令。第67頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三3. ARM指令格式 ARM指令集是Load/Store型,只能通過Load/Store指令實(shí)現(xiàn)對(duì)存儲(chǔ)器的訪問,其它類型的指令都基于寄存器完成。2.4.3 ARM指令集第68頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三操作碼;指令助記符,如ADD、LDR等可選的條件碼;執(zhí)行條件,如EQ、NE等可選后綴;若指定S,則根據(jù)指令執(zhí)行結(jié)果更新CPSR中的條件碼目標(biāo)寄存器存放第一操作數(shù)的寄存器第二操作數(shù)例:LDR R0, R1 BEQDATAEVENADDSR2,R1,#1SUBNES
38、 R2,R1,#0 x20 ARM指令使用的基本格式如下所示: S, , 3. ARM指令格式 2.4.3 ARM指令集第69頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三4. ARM存儲(chǔ)器訪問指令-LDR、STR LDR和STR為單一數(shù)據(jù)傳送指令,可傳送字和無符號(hào)字節(jié)、半字和帶符號(hào)字節(jié)、雙字。 2.4.3 ARM指令集第70頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三(1)字和無符號(hào)字節(jié) op cond B T Rd, Rn ;零偏移 op cond B Rd, Rn, Flexoffset ! ;前索引偏移 op cond B Rd, label ;程序相對(duì)偏
39、移 op cond B T Rd, Rn ,Flexoffset ;后索引偏移4. ARM存儲(chǔ)器訪問指令-LDR、STR 2.4.3 ARM指令集 句法:第71頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三(1)字和無符號(hào)字節(jié) 指令用于加載或存儲(chǔ)寄存器32位字或8位無符號(hào)字節(jié)。 對(duì)于零偏移形式,Rn的值作為傳送數(shù)據(jù)的地址。 對(duì)于前索引偏移形式,在傳送數(shù)據(jù)之前,將偏移量加到Rn中,結(jié)果作為傳送數(shù)據(jù)的存儲(chǔ)器地址。若使用“!”,則結(jié)果寫回到Rn,且Rn不允許是R15。 對(duì)于程序相對(duì)偏移形式,匯編器由PC計(jì)算偏移量,并將PC作為Rn生成前索引指令。不能使用后綴“!”。 對(duì)于后索引形式,R
40、n的值作為傳送數(shù)據(jù)的存儲(chǔ)器地址。數(shù)據(jù)傳送之后,將偏移量加到Rn中,結(jié)果寫回到Rn。Rn不允許是R15。4. ARM存儲(chǔ)器訪問指令-LDR、STR 2.4.3 ARM指令集 指令說明:第72頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三(1)字和無符號(hào)字節(jié) LDR R8,R10LDRNE R2,R5,#960!STR R2,R9,#CONSTRB R0, R3,-R8,ASR #24. ARM存儲(chǔ)器訪問指令-LDR、STR 2.4.3 ARM指令集 例:第73頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三(2)半字和帶符號(hào)字節(jié) op cond type Rd, Rn;
41、零偏移 op cond type Rd, Rn, offset !;前索引偏移 op cond type Rd, label;程序相對(duì)偏移 op cond type Rd, Rn, offset;后索引偏移4. ARM存儲(chǔ)器訪問指令-LDR、STR 2.4.3 ARM指令集 句法:第74頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三(2)半字和帶符號(hào)字節(jié) 指令用于加載寄存器16位半字或帶符號(hào)8位字節(jié),存儲(chǔ)寄存器16位半字。 帶符號(hào)加載是指帶符號(hào)擴(kuò)展到32位。 無符號(hào)半字加載是指零擴(kuò)展到32位。 半字傳送的地址必須是偶數(shù),即按照半字對(duì)準(zhǔn)。 不能將半字或字節(jié)加載到R15。 。4. A
42、RM存儲(chǔ)器訪問指令-LDR、STR 2.4.3 ARM指令集 指令說明:第75頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三(2)字和無符號(hào)字節(jié) LDREQSHR11,R6LDRHR1,R0,#12STRHR4,R0,R1!LDRSBR1,R6,R3,LSL #4 4. ARM存儲(chǔ)器訪問指令-LDR、STR 2.4.3 ARM指令集 例:第76頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三(3)雙字 op cond D Rd, Rn;零偏移 op cond D Rd, Rn, offset !;前索引偏移 op cond D Rd, label;程序相對(duì)偏移 op
43、cond D Rd, Rn, offset;后索引偏移4. ARM存儲(chǔ)器訪問指令-LDR、STR 2.4.3 ARM指令集 句法:第77頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三(3)雙字 指令用于加載或存儲(chǔ)兩個(gè)相鄰寄存器64位雙字。 對(duì)于雙字傳送,地址必須是8的倍數(shù)。 4. ARM存儲(chǔ)器訪問指令-LDR、STR 2.4.3 ARM指令集 指令說明:第78頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三(3)雙字 LDRDR6,R11LDRDR1,R6STRDR4,R9,#24STRDR14,R9,#24STRDR2,R3,R6 4. ARM存儲(chǔ)器訪問指令-LDR
44、、STR 2.4.3 ARM指令集 例:第79頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三op cond mode Rn !, reglist 4. ARM存儲(chǔ)器訪問指令-LDM、STM 2.4.3 ARM指令集 句法:第80頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三 指令用于加載或存儲(chǔ)多個(gè)寄存器,可傳送R0R15的任何組合。 指令忽略地址的位1:0。 到R15的加載將引起處理器轉(zhuǎn)移到加載地址處的指令 如果Rn包含在寄存器列表中,且用“!”表明要寫回,則若op是STM,且Rn是寄存器列表中數(shù)字最小的寄存器,則Rn的初值被保存。否則,Rn的加載和存儲(chǔ)值不可預(yù)知。
45、 4. ARM存儲(chǔ)器訪問指令-LDM、STM 2.4.3 ARM指令集 指令說明:第81頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三LDMIAR8,R0,R2,R9STMDBR1!, R3-R6,R11,R12STMFDR13!,R0,R4-R7,LRLDMFDR13!,R0,R4-R7,PCSTMIAR5!,R5,R4,R9LDMDAR2, 4. ARM存儲(chǔ)器訪問指令-LDM、STM 2.4.3 ARM指令集 例:第82頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三PLD RnFlexoffset 4. ARM存儲(chǔ)器訪問指令-PLD 2.4.3 ARM指令集 句
46、法: 指令用于Cache預(yù)加載,提示存儲(chǔ)系統(tǒng)從后面的幾條指令所指定的存儲(chǔ)器地址加載,用這種方法可以加速以后的存儲(chǔ)器訪問。 指令沒有地址的對(duì)準(zhǔn)限制。 指令說明:第83頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三4. ARM存儲(chǔ)器訪問指令-PLD2.4.3 ARM指令集PLDR2PLDR0,#CON;CON范圍為4KB 例:第84頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三4. ARM存儲(chǔ)器訪問指令-SWP 2.4.3 ARM指令集SWP cond B Rd, Rm, Rn 句法: 指令用于在寄存器和存儲(chǔ)器之間進(jìn)行數(shù)據(jù)交換,可以使用SWP來實(shí)現(xiàn)信號(hào)量。對(duì)于非字對(duì)準(zhǔn)的
47、處理與LDR、STR指令中的處理方法相同。 指令說明: 例:SWPBR1,R1,R0;交換字節(jié)第85頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三5. ARM數(shù)據(jù)處理指令 ARM數(shù)據(jù)處理指令可以完成的功能包括:2.4.3 ARM指令集數(shù)據(jù)傳送算術(shù)運(yùn)算邏輯運(yùn)算比較測(cè)試乘法 第86頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三5. ARM數(shù)據(jù)處理指令 ARM數(shù)據(jù)處理指令的特點(diǎn) 2.4.3 ARM指令集操作數(shù)為32位,來自寄存器或定義的立即數(shù)。對(duì)于操作數(shù)可進(jìn)行符號(hào)擴(kuò)展和零擴(kuò)展。處理結(jié)果除了長乘法指令為64位之外,均為32位,存放在寄存器中。大多數(shù)ARM通用數(shù)據(jù)處理指令都有
48、一個(gè)靈活的第二操作數(shù)(flexible second operand)。第二操作數(shù)operand2可以是 立即數(shù)形式 或 寄存器形式 。 32位立即數(shù) Rm,#shift 第87頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三5. ARM數(shù)據(jù)處理指令-移位操作2.4.3 ARM指令集ASR:算術(shù)右移。即將寄存器內(nèi)容除以2n。LSR:邏輯右移。即將寄存器內(nèi)容除以2n。LSL:邏輯左移。即將寄存器內(nèi)容乘以2n。ROR:循環(huán)右移。RRX:帶擴(kuò)展的循環(huán)右移。將寄存器內(nèi)容循環(huán)右移1位,進(jìn)位標(biāo)志拷貝到位31。第88頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三5. ARM數(shù)據(jù)處理
49、指令-移位操作2.4.3 ARM指令集圖2-18 移位操作過程 第89頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三ADD、SUB、RSB、ADC、SBC、RSC op cond S Rd, Rn, Operand25. ARM數(shù)據(jù)處理指令-算術(shù)運(yùn)算指令 2.4.3 ARM指令集 句法:第90頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三 指令用于加、減、反減等算術(shù)運(yùn)算,包括帶進(jìn)位的算術(shù)運(yùn)算。 算術(shù)運(yùn)算中如果使用R15作為Rn,則其值為指令的地址加8。如果使用R15作為Rd,則執(zhí)行轉(zhuǎn)移到結(jié)果相應(yīng)的地址;或者在使用“S”的情況下,拷貝SPSR到CPSR,利用這點(diǎn)可從異
50、常返回。 在有寄存器控制移位的任何數(shù)據(jù)處理指令中,不能將R15作為Rd或任何操作數(shù)來使用。5. ARM數(shù)據(jù)處理指令-算術(shù)運(yùn)算指令2.4.3 ARM指令集 指令說明:ADD、SUB、RSB、ADC、SBC、RSC 第91頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三ADDR2,R1,R3SUBSR8,R6,#240RSBR4,R4,#1280ADCHIR11,R0,R3RSCLESR0,R5,R0,LSL R4RSCLESR0,R15,R0,LSL R4 5. ARM數(shù)據(jù)處理指令-算術(shù)運(yùn)算指令2.4.3 ARM指令集 例:ADD、SUB、RSB、ADC、SBC、RSC 第92頁,共
51、167頁,2022年,5月20日,19點(diǎn)22分,星期三AND、ORR、EOR、BIC op cond S Rd, Rn, Operand2 5. ARM數(shù)據(jù)處理指令邏輯運(yùn)算指令 2.4.3 ARM指令集 句法:第93頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三 媽媽新開了個(gè)淘寶店,歡迎前來捧場(chǎng) 媽媽的淘寶點(diǎn)開了快半年了,主要賣的是毛絨玩具、坐墊、抱枕之類的,但生意一直不是很好,感覺媽媽還是很用心的,花了不少功夫,但是就是沒有人氣,所以我也來出自己的一份力,幫忙宣傳一下。 并且媽媽總是去五亭龍?zhí)糇詈玫耐婢哒?、發(fā)貨,質(zhì)量絕對(duì)有保證。 另外我家就在揚(yáng)州五亭龍玩具城旁邊,貨源豐富,質(zhì)
52、量可靠,價(jià)格便宜。 歡迎大家來逛逛【揚(yáng)州五亭龍玩具總動(dòng)員】個(gè)人小廣告:第94頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三 指令用于與、或、異或、位清零等邏輯運(yùn)算。 BIC指令用于將Rn中的位與Operand2值中的相應(yīng)位的反碼進(jìn)行“與”操作。 若指定S,則指令將根據(jù)結(jié)果更新標(biāo)志N和Z;計(jì)算Operand2時(shí)更新標(biāo)志C;不影響標(biāo)志V。 關(guān)于R15的使用與算術(shù)運(yùn)算指令相同。 5. ARM數(shù)據(jù)處理指令-邏輯運(yùn)算指令2.4.3 ARM指令集 指令說明:AND、ORR、EOR、BIC 第95頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三ANDR9,R2,#0 xFF00OR
53、REQR2,R0,R5EORSR0,R0,R3,ROR R6BICNESR8,R10,R0,RRXEORSR0,R15,R3,ROR R6 5. ARM數(shù)據(jù)處理指令-邏輯運(yùn)算指令2.4.3 ARM指令集 例:AND、ORR、EOR、BIC第96頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三MOV、MVN op cond S Rd, Operand2 5. ARM數(shù)據(jù)處理指令數(shù)據(jù)傳送指令 2.4.3 ARM指令集 句法:第97頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三 指令用于數(shù)據(jù)傳送。 MOV指令將Operand2的值拷貝到Rd; MVN指令對(duì)Operand2的
54、值按位取非后,將結(jié)果拷貝到Rd。 關(guān)于條件碼標(biāo)志的影響與邏輯運(yùn)算指令相同。關(guān)于R15的使用與算術(shù)運(yùn)算指令相同。 5. ARM數(shù)據(jù)處理指令-數(shù)據(jù)傳送指令2.4.3 ARM指令集 指令說明:MOV、MVN第98頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三MOVR5,R2MVNNER11,#0 x0F000000MOVSR0,R0,ASR R3 5. ARM數(shù)據(jù)處理指令-數(shù)據(jù)傳送指令2.4.3 ARM指令集 例:MOV、MVN第99頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三CMP、CMN op cond S Rd, Operand2 5. ARM數(shù)據(jù)處理指令-比較指
55、令 2.4.3 ARM指令集 句法:第100頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三 指令用于比較操作,根據(jù)結(jié)果更新條件碼標(biāo)志,結(jié)果并不放入寄存器。 其中,CMP指令從Rn的值中減去Operand2的值,結(jié)果丟棄;CMN指令將Operand2的值加到Rn的值中,結(jié)果丟棄。如果將R15用作Rn,則使用的值是指令的地址加8。在控制寄存器移位的操作中,不能使用R15。5. ARM數(shù)據(jù)處理指令-比較指令2.4.3 ARM指令集 指令說明:CMP、CMN第101頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三CMPR2,R9CMNR0,#6400CMPGTR13,R7,L
56、SL #2CMPR2,R15,ASR R0 5. ARM數(shù)據(jù)處理指令-比較指令2.4.3 ARM指令集 例:CMP、CMN第102頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三TST、TEQ op cond S Rd, Operand2 5. ARM數(shù)據(jù)處理指令-測(cè)試指令 2.4.3 ARM指令集 句法:第103頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三 指令用于測(cè)試操作,根據(jù)結(jié)果更新條件碼標(biāo)志,結(jié)果不放入寄存器。 其中,TST指令對(duì)Rn的值與Operand2的值進(jìn)行按位“與”操作,結(jié)果丟棄;TEQ指令對(duì)Rn的值與Operand2的值進(jìn)行按位“異或”操作,結(jié)果丟
57、棄。 關(guān)于條件碼標(biāo)志的影響與算術(shù)運(yùn)算指令相同。 關(guān)于R15的使用與比較指令相同。 5. ARM數(shù)據(jù)處理指令-測(cè)試指令2.4.3 ARM指令集 指令說明:TST、TEQ 第104頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三TSTR0,#0 x3F8TEQEQR10,R9TSTNER1,R5,ASR R1TEQR15,R1,ROR R0 5. ARM數(shù)據(jù)處理指令-測(cè)試指令2.4.3 ARM指令集 例:TST、TEQ第105頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三MUL、MLA MUL cond S Rd, Rm, RsMLA cond S Rd, Rm, Rs,
58、 Rn5. ARM數(shù)據(jù)處理指令乘法指令 2.4.3 ARM指令集 句法:第106頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三 指令用于進(jìn)行乘法和乘加32位32位運(yùn)算,結(jié)果為低32位。 如果指定S,則指令根據(jù)結(jié)果更新標(biāo)志N和Z;不影響標(biāo)志V;在ARMv4之前版本中標(biāo)志C不可靠;在ARMv5以后版本中不影響標(biāo)志C。 R15不能用作Rd、Rm、Rs或Rn。Rd不能與Rm相同。5. ARM數(shù)據(jù)處理指令-乘法指令2.4.3 ARM指令集 指令說明:MUL、MLA 第107頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三MULR10,R2,R5MLAR10,R2,R1,R5MU
59、LSR0,R2,R2MULLTR2,R3,R2MLAVCSR8,R6,R3,R8MULR15,R0,R3MLAR1,R1,R6 5. ARM數(shù)據(jù)處理指令-乘法指令2.4.3 ARM指令集 例:MUL、MLA第108頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三CLZcond Rd, Rm5. ARM數(shù)據(jù)處理指令- CLZ 2.4.3 ARM指令集 句法: 指令用于對(duì)Rm中值的前導(dǎo)零的個(gè)數(shù)進(jìn)行計(jì)數(shù),結(jié)果放入Rd中。若Rm內(nèi)容為0,則結(jié)果為32;若Rm位31為1,則結(jié)果為0。 指令不影響條件碼標(biāo)志。 Rd不允許是R15。 指令說明:第109頁,共167頁,2022年,5月20日,19
60、點(diǎn)22分,星期三BcondlabelBLcondlabel6. ARM分支指令-B、BL 2.4.3 ARM指令集 句法: 指令用于分支和帶鏈接分支的操作。 其中,B指令引起處理器轉(zhuǎn)移到label;BL指令將下一條指令的地址拷貝到R14(LR,鏈接寄存器),并引起處理器轉(zhuǎn)移到label。 指令說明:第110頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三6. ARM分支指令-B、BL2.4.3 ARM指令集Bloop ABLsub 例:第111頁,共167頁,2022年,5月20日,19點(diǎn)22分,星期三BXcondRm 6. ARM分支指令-BX 2.4.3 ARM指令集 句法:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《第02節(jié) 熱力學(xué)第一定律》教學(xué)設(shè)計(jì)
- 2025年金融市場(chǎng)與投資理財(cái)知識(shí)考試題及答案
- 2025年經(jīng)濟(jì)學(xué)原理與應(yīng)用實(shí)例知識(shí)試題及答案
- 2025年境外投資顧問職業(yè)考試試卷及答案
- 2019年全國高中數(shù)學(xué)聯(lián)賽B卷加試解答
- 商場(chǎng)專廳拆除合同協(xié)議
- 正規(guī)旅游出境合同協(xié)議
- 微水泥合同協(xié)議
- 商場(chǎng)廣告協(xié)議書范本
- 商品經(jīng)銷合同補(bǔ)充協(xié)議
- 面部筋膜培訓(xùn)課件
- ISO17025(2017中文清晰版本)
- 《Python與數(shù)據(jù)分析應(yīng)用》課件-第10章 數(shù)據(jù)分析工具Pandas
- 春季如何預(yù)防過敏
- 人教版高中英語選擇性必修二單詞表
- GB/T 24091-2024適應(yīng)氣候變化脆弱性、影響和風(fēng)險(xiǎn)評(píng)估指南
- 中國腫瘤相關(guān)貧血診治專家共識(shí)2023版解讀課件
- 湖北武漢市2025屆高三第一次調(diào)研測(cè)試數(shù)學(xué)試卷含解析
- 科研項(xiàng)目保密協(xié)議承諾書
- 軍工項(xiàng)目招投標(biāo)操作手冊(cè)
- 2024年江蘇泰州市第四人民醫(yī)院招考聘用高層次人才11人管理單位遴選500模擬題附帶答案詳解
評(píng)論
0/150
提交評(píng)論