版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
嵌入式系統(tǒng)第二章嵌入式處理器下第1頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月第二章嵌入式處理器2.1引言
2.2 嵌入式處理器概述2.3 ARM處理器基礎(chǔ)2.5 ARM程序設(shè)計(jì)基礎(chǔ)2.4 ARM指令系統(tǒng)第2頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月2.4 ARM指令系統(tǒng)
2.4.1ARM編程模型
2.4.2ARM尋址方式
2.4.3ARM指令集
2.4.4Thumb指令集第3頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月2.4.1ARM編程模型2.4ARM指令系統(tǒng)
流水線數(shù)據(jù)類型處理器模式處理器工作狀態(tài)寄存器組織異常存儲(chǔ)器和存儲(chǔ)器映射I/O第4頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月1.流水線
2.4.1ARM編程模型
流水線技術(shù)是現(xiàn)代微處理器普遍采用的一種技術(shù),它可以使得幾條指令并行執(zhí)行,因此可以大大提高處理器的運(yùn)行效率。
第5頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月1.流水線
2.4.1ARM編程模型從程序存儲(chǔ)器中讀取指令,放入流水線中操作碼和操作數(shù)被譯碼,決定執(zhí)行什么功能,為下一個(gè)時(shí)鐘周期準(zhǔn)備數(shù)據(jù)路徑所需要的控制信號(hào)執(zhí)行已譯碼的指令取指譯碼執(zhí)行ARM7的3級(jí)流水線:第6頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月1.流水線流水線能夠正常工作的條件是在任意時(shí)刻,每一級(jí)所使用的硬件必須能夠獨(dú)立操作,不能多級(jí)同時(shí)占用同一硬件資源。在正常情況下,每條指令都被劃分成這樣3個(gè)時(shí)鐘周期來(lái)完成,即指令執(zhí)行時(shí)間(Latency)是3周期。流水線的執(zhí)行使得程序計(jì)數(shù)器PC必須在當(dāng)前指令取指前計(jì)數(shù)。對(duì)于ARM處理器的3級(jí)流水線,以當(dāng)前PC取指后,PC值會(huì)增加為PC+4。2.4.1ARM編程模型第7頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月1.流水線圖2-5ARM單周期指令的多級(jí)流水線操作2.4.1ARM編程模型第8頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月1.流水線圖2-6ARM多周期指令的多級(jí)流水線操作2.4.1ARM編程模型第9頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月1.流水線圖2-7ARM分支指令的流水線操作2.4.1ARM編程模型第10頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月2.數(shù)據(jù)類型
ARM處理器支持以下數(shù)據(jù)類型:2.4.1ARM編程模型
Byte
字節(jié),8位;
Halfword
半字,16位(半字必須與 2字節(jié)邊界對(duì)準(zhǔn));
Word
字,32位(字必須與4字 節(jié)邊界對(duì)準(zhǔn))。第11頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月2.數(shù)據(jù)類型
2.4.1ARM編程模型圖2-8ARM數(shù)據(jù)類型存儲(chǔ)圖第12頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月3.處理器模式
ARM體系結(jié)構(gòu)支持7種處理器模式
:2.4.1ARM編程模型處理器模式說(shuō)明用戶usr程序正常執(zhí)行模式FIQfiq支持高速數(shù)據(jù)傳輸或通道處理IRQirq通用中斷處理管理svc操作系統(tǒng)保護(hù)模式中止abt虛擬存儲(chǔ)器或存儲(chǔ)器保護(hù)未定義und支持硬件協(xié)處理器的軟件仿真系統(tǒng)sys運(yùn)行特權(quán)操作系統(tǒng)任務(wù)第13頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月4.處理器工作狀態(tài)
ARM處理器具有特殊的兩種工作狀態(tài):2.4.1ARM編程模型
ARM狀態(tài):32位,執(zhí)行字對(duì)準(zhǔn)的ARM指令;
Thumb狀態(tài):16位,執(zhí)行半字對(duì)準(zhǔn)的Thumb指令。
ARM處理器的操作狀態(tài)可以通過(guò)BX指令(分支和交換指令)在ARM狀態(tài)和Thumb狀態(tài)之間切換。例:從ARM狀態(tài)切換到Thumb狀態(tài):
LDRR0,=Label+1BXR0從Thumb狀態(tài)切換到ARM狀態(tài):
LDRR0,=LabelBXR0第14頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月5.寄存器組織
ARM處理器共有37個(gè)寄存器:2.4.1ARM編程模型
31個(gè)通用寄存器:32位,含程序計(jì)數(shù)器PC;
6個(gè)狀態(tài)寄存器:32位,只使用了其中的12位。當(dāng)編寫(xiě)用戶程序時(shí),37個(gè)寄存器中僅有15個(gè)通用寄存器r0~r14、程序計(jì)數(shù)器PC(r15)和當(dāng)前程序狀態(tài)寄存器CPSR需要考慮。其余寄存器僅用于系統(tǒng)級(jí)編程和異常處理(如中斷)。第15頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月ARM狀態(tài)下寄存器組織第16頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月5.寄存器組織--不分組寄存器r0~r7
不分組意味著在所有處理器模式下,r0~r7都可被同樣訪問(wèn),沒(méi)有體系結(jié)構(gòu)所隱含的特殊用途。
2.4.1ARM編程模型第17頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月5.寄存器組織--分組寄存器r8~r14
分組意味著r8~r14的訪問(wèn)與當(dāng)前處理器的模式相關(guān)。如果要訪問(wèn)r8~r14,而不依賴于當(dāng)前處理器的模式,就必須使用規(guī)定的寄存器名稱。名稱的形式為:2.4.1ARM編程模型
r8_<mode>~r14_<mode>第18頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月5.寄存器組織--分組寄存器r8~r14
r8~r12各有兩組物理寄存器:一組為FIQ模式,另一組為FIQ以外的模式。寄存器r8~r12沒(méi)有指定特殊用途,而使用r8_fiq~r12_fiq則允許快速中斷。2.4.1ARM編程模型第19頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月5.寄存器組織--分組寄存器r8~r14
寄存器r13和r14的用途比較特殊:
2.4.1ARM編程模型
r13通常用作堆棧指針SP,被初始化成指向異常模式分配的堆棧。
r14通常用作子程序鏈接寄存器LR。處理異常時(shí),在程序入口處將異常處理程序用到的其它寄存器的值壓入堆棧,返回時(shí)重新將這些值加載到寄存器中。當(dāng)執(zhí)行分支指令BL時(shí),r15的內(nèi)容拷貝到r14中,從而成為子程序調(diào)用后的返回地址第20頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月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.1ARM編程模型第21頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月5.寄存器組織--當(dāng)前程序狀態(tài)寄存器CPSR
CPSR和SPSR具有相同的格式2.4.1ARM編程模型第22頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月標(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í)(無(wú)符號(hào)數(shù)溢出),C=1,否則C=0。─減法運(yùn)算(包括比較指令CMP):當(dāng)運(yùn)算時(shí)產(chǎn)生了借位(無(wú)符號(hào)數(shù)溢出),C=0,否則C=1。─對(duì)于包含移位操作的非加/減運(yùn)算指令,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在ARMv5及以上版本的E系列處理器中,用Q標(biāo)志位指示增強(qiáng)的DSP運(yùn)算指令是否發(fā)生了溢出。在其他版本的處理器中,Q標(biāo)志位無(wú)定義。第23頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月5.寄存器組織--Thumb狀態(tài)的寄存器集
2.4.1ARM編程模型Thumb狀態(tài)下寄存器組織第24頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月5.寄存器組織--Thumb狀態(tài)的寄存器集
2.4.1ARM編程模型Thumb狀態(tài)寄存器到ARM寄存器的映射第25頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月6.異常
異常(exception)是指由內(nèi)部或外部源產(chǎn)生從而使處理器需要處理的一個(gè)事件。2.4.1ARM編程模型例如,外部中斷或試圖實(shí)行未定義的指令都會(huì)引起異常的發(fā)生。處理異常之前,處理器必須保存當(dāng)前的狀態(tài),以便在異常處理完成后,能夠使原來(lái)的出現(xiàn)重新執(zhí)行。第26頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月6.異常
ARM支持7種類型的異常。對(duì)于每種異常,處理器將強(qiáng)制從異常對(duì)應(yīng)的某個(gè)固定地址開(kāi)始執(zhí)行程序。這些固定地址稱為異常向量。2.4.1ARM編程模型多個(gè)異常可能會(huì)同時(shí)發(fā)生,因此在ARM中就通過(guò)給各個(gè)異常賦予不同的優(yōu)先級(jí)來(lái)確定處理異常的順序。第27頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月6.異常
優(yōu)先級(jí)按照從高到低的順序排列如下:2.4.1ARM編程模型復(fù)位數(shù)據(jù)異常中止FIQIRQ預(yù)取指異常中止SWI、未定義指令(這兩種異常的指令編碼互斥,不可能同時(shí)發(fā)生)第28頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月異常類型具體含義復(fù)位當(dāng)處理器的復(fù)位電平有效時(shí)產(chǎn)生復(fù)位異常,程序跳轉(zhuǎn)到復(fù)位異常處理程序處執(zhí)行。未定義指令當(dāng)ARM處理器或協(xié)處理器遇到不能處理的指令時(shí),產(chǎn)生未定義指令異常??墒褂迷摦惓C(jī)制進(jìn)行軟件仿真。軟件中斷該異常由執(zhí)行SWI指令產(chǎn)生,可用于用戶模式下的程序調(diào)用特權(quán)操作指令??墒褂迷摦惓C(jī)制實(shí)現(xiàn)系統(tǒng)功能調(diào)用。指令預(yù)取中止若處理器預(yù)取指令的地址不存在,或該地址不允許當(dāng)前指令訪問(wèn),存儲(chǔ)器會(huì)向處理器發(fā)出中止信號(hào),但當(dāng)預(yù)取的指令被執(zhí)行時(shí),才會(huì)產(chǎn)生指令預(yù)取中止異常。數(shù)據(jù)中止若處理器數(shù)據(jù)訪問(wèn)指令的地址不存在,或該地址不允許當(dāng)前指令訪問(wèn)時(shí),產(chǎn)生數(shù)據(jù)中止異常。IRQ(外部中斷請(qǐng)求)當(dāng)處理器的外部中斷請(qǐng)求引腳有效,且CPSR中的I位為0時(shí),產(chǎn)生IRQ異常。系統(tǒng)的外設(shè)可通過(guò)該異常請(qǐng)求中斷服務(wù)。FIQ(快速中斷請(qǐng)求)當(dāng)處理器的快速中斷請(qǐng)求引腳有效且CPSR中的F位為0時(shí),產(chǎn)生FIQ異常。第29頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月6.異常
進(jìn)入異常的操作:2.4.1ARM編程模型在相應(yīng)的鏈接寄存器LR(r14)中保存下一條指令的地址將CPSR復(fù)制到相應(yīng)的SPSR中強(qiáng)制使CPSR模式位置成對(duì)應(yīng)異常類型的值強(qiáng)制使程序計(jì)數(shù)器指向相應(yīng)異常向量,取下一條指令第30頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月例子:用戶模式到
FIQ模式*spsr_fiqcpsrr7r4r5r2r1r0r3r6r15(pc)r14_fiqr13_fiqr12_fiqr10_fiqr11_fiqr9_fiqr8_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模式RegistersinuseRegistersinuse異常用戶模式FIQ模式spsr_fiq第31頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月7.存儲(chǔ)器和存儲(chǔ)器映射I/O
與單片機(jī)等簡(jiǎn)單系統(tǒng)相比,現(xiàn)在一些復(fù)雜的嵌入式系統(tǒng)中,存儲(chǔ)系統(tǒng)的功能更加強(qiáng)大,可能包含有多種現(xiàn)代計(jì)算機(jī)存儲(chǔ)技術(shù),如Cache和WriteBuffer、MMU、存儲(chǔ)保護(hù)機(jī)制、快速上下文切換等?;贏RM內(nèi)核的嵌入式系統(tǒng)可能包含F(xiàn)lash、ROM、SRAM、SDRAM等多種類型的存儲(chǔ)器,不同類型的存儲(chǔ)器存取速度和數(shù)據(jù)寬度等都不盡相同。2.4.1ARM編程模型第32頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月7.存儲(chǔ)器和存儲(chǔ)器映射I/O
存儲(chǔ)系統(tǒng)的設(shè)計(jì)可以是多種多樣的,但是應(yīng)當(dāng)遵循一定的規(guī)則,否則可能會(huì)引起一些不必要的麻煩。2.4.1ARM編程模型例如:可能使存儲(chǔ)系統(tǒng)的實(shí)現(xiàn)比較困難;可能導(dǎo)致向其它ARM處理器的移植出現(xiàn)麻煩;可能引起一些標(biāo)準(zhǔn)軟件(如編譯器)的不適應(yīng)?;谙到y(tǒng)設(shè)計(jì)和編程的考慮,關(guān)于ARM存儲(chǔ)系統(tǒng)一般只需涉及地址空間、存儲(chǔ)器格式、存儲(chǔ)器訪問(wèn)對(duì)準(zhǔn)以及存儲(chǔ)器映射I/O等方面的問(wèn)題。第33頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月7.存儲(chǔ)器和存儲(chǔ)器映射I/O--地址空間
ARM體系結(jié)構(gòu)使用232個(gè)8位字節(jié)的單一、線性地址空間,字節(jié)地址的范圍為0~232-1;也可以將地址空間看作由230個(gè)32位的字組成,字地址可被4整除,且按字對(duì)準(zhǔn),例如以A為字對(duì)準(zhǔn)地址的字地址由A、A+1、A+2、A+3共4個(gè)字節(jié)組成;在ARM體系結(jié)構(gòu)v4以上版本中,也可以將地址空間看作由231個(gè)16位的半字組成,半字地址可被2整除,且按半字對(duì)準(zhǔn),例如以A為字對(duì)準(zhǔn)地址的半字地址由A、A+1共2個(gè)字節(jié)組成。2.4.1ARM編程模型第34頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月7.存儲(chǔ)器和存儲(chǔ)器映射I/O--存儲(chǔ)器格式
存儲(chǔ)器格式是指字、半字、字節(jié)在存儲(chǔ)器中存放的方式,也反映了存儲(chǔ)器中字、半字、字節(jié)之間的映射關(guān)系。存儲(chǔ)器格式包括小端和大端兩種格式。2.4.1ARM編程模型第35頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月7.存儲(chǔ)器和存儲(chǔ)器映射I/O--存儲(chǔ)器格式
2.4.1ARM編程模型大、小端存儲(chǔ)格式對(duì)程序的影響第36頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月7.存儲(chǔ)器和存儲(chǔ)器映射I/O--存儲(chǔ)器訪問(wèn)對(duì)準(zhǔn)對(duì)于非對(duì)準(zhǔn)的取指,在ARM工作狀態(tài)下,未對(duì)準(zhǔn)的地址寫(xiě)入R15后,結(jié)果將不可預(yù)知或忽略地址位[1:0];在Thumb狀態(tài)下,未對(duì)準(zhǔn)的地址寫(xiě)入R15后,則通常忽略地址位[0]。對(duì)于非對(duì)準(zhǔn)的數(shù)據(jù)訪問(wèn),則體系結(jié)構(gòu)可能定義成以下行為之一:2.4.1ARM編程模型不可預(yù)知;忽略使訪問(wèn)非對(duì)準(zhǔn)的低地址位;忽略使訪問(wèn)非對(duì)準(zhǔn)的低地址位,但使用這些位控制加載數(shù)據(jù)的循環(huán)移位(適用于LDR和SWP指令)。第37頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月7.存儲(chǔ)器和存儲(chǔ)器映射I/O--存儲(chǔ)器映射I/O
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.1ARM編程模型第38頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月2.4 ARM指令系統(tǒng)
2.4.1ARM編程模型
2.4.2ARM尋址方式
2.4.3ARM指令集
2.4.4Thumb指令集第39頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月
尋址方式是指根據(jù)指令給出的地址碼尋找真實(shí)操作數(shù)地址的方式。 尋址方式的多樣化一方面出于編程的需要,另一方面可以增強(qiáng)程序設(shè)計(jì)的靈活性。2.4.2ARM尋址方式2.4ARM指令系統(tǒng)
第40頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月2.4.2ARM尋址方式2.4ARM指令系統(tǒng)
寄存器尋址立即尋址寄存器移位尋址寄存器間接尋址基址尋址多寄存器尋址堆棧尋址塊拷貝尋址相對(duì)尋址第41頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月1.寄存器尋址
指令地址碼給出寄存器的編號(hào),寄存器中的內(nèi)容為操作數(shù)。2.4.2ARM尋址方式例如:
ADD R0,R1,R2 ;R0←R1+R2寫(xiě)操作數(shù)的順序?yàn)椋旱谝粋€(gè)寄存器R0為結(jié)果寄存器,第二個(gè)寄存器R1為第一操作數(shù)寄存器,第三個(gè)寄存器R2為第二操作數(shù)寄存器。注意第42頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月2.立即尋址指令操作碼后的地址碼是立即數(shù),即操作數(shù)本身。2.4.2ARM尋址方式例如:
ADD R3,R3,#1 ;R3←R3+1AND R8,R7,#&FF ;R8←R7[7:0]立即數(shù)的表示以“#”為前綴,十六進(jìn)制的立即數(shù)在“#”后面加“&”符號(hào)。
注意第43頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月3.寄存器移位尋址
寄存器移位尋址是ARM指令集特有的尋址方式。第2個(gè)操作數(shù)與第1個(gè)操作數(shù)結(jié)合之前,選擇進(jìn)行移位操作。2.4.2ARM尋址方式例如:
ADDR3,R2,R1,LSL#3 ;R3←R2+8×R1第44頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月3.寄存器移位尋址
可采取的移位操作包括:2.4.2ARM尋址方式
LSL:邏輯左移(LogicalShiftLeft)。寄存器中字的低端空出的位補(bǔ)0。
LSR:邏輯右移(LogicalShiftRight)。寄存器中字的高端空出的位補(bǔ)0。
ASR:算術(shù)右移(ArithmeticShiftRight)。算術(shù)移位的對(duì)象是帶符號(hào)數(shù)。在移位過(guò)程中必須保持操作數(shù)的符號(hào)不變。若源操作數(shù)為正數(shù),則字的高端空出的位補(bǔ)0;若源操作數(shù)為負(fù)數(shù),則字的高端空出的位補(bǔ)1。
ROR:循環(huán)右移(ROtateRight)。從字的最低端移出的位填入字的高端空出的位。
RRX:擴(kuò)展為1的循環(huán)右移(RotateRighteXtendedby1place)。操作數(shù)右移1位,空位(位[31])用原C標(biāo)志填充。第45頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月3.寄存器移位尋址
2.4.2ARM尋址方式移位操作過(guò)程第46頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月4.寄存器間接尋址
指令地址碼給出寄存器的編號(hào),寄存器為地址指針,存放操作數(shù)的有效地址。2.4.2ARM尋址方式例如:
LDR R0,[R1] ;R0←[R1] STR R0,[R1] ;R0→[R1]第47頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月5.基址尋址
基址尋址是將基址寄存器的內(nèi)容與指令中給出的位移量相加,形成操作數(shù)有效地址。基址尋址用于訪問(wèn)基址附近的存儲(chǔ)單元。包括基址加偏移量尋址和基址加索引尋址,可以將寄存器間接尋址看作是位移量為0的基址加偏移量尋址。2.4.2ARM尋址方式第48頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月5.基址尋址--基址加偏移量尋址
基址加偏移量尋址中的偏移量最大為4KB,可分為前索引尋址和后索引尋址。2.4.2ARM尋址方式前索引尋址舉例:
LDR R0,[R1,#4] ;R0←[R1+4]第49頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月5.基址尋址--基址加偏移量尋址2.4.2ARM尋址方式例:
LDR R0,[R1,#4]! ;R0←[R1] ;R1←R1+4后索引尋址舉例:
LDR R0,[R1],#4 ;R0←[R1] ;R1←R1+4這種改變基址寄存器指向下一個(gè)傳送的地址對(duì)數(shù)據(jù)塊傳送很有用,還可以采用帶自動(dòng)索引的前索引尋址實(shí)現(xiàn)。注意第50頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月5.基址尋址--基址加索引尋址基址加索引尋址是指令指定一個(gè)基址寄存器,再指定另一個(gè)寄存器(稱為索引),其值作為位移加到基址上形成存儲(chǔ)器地址。
2.4.2ARM尋址方式例:
LDR R0,[R1,R2] ;R0←[R1+R2]第51頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月6.多寄存器尋址
多寄存器尋址是指一次可以傳動(dòng)多個(gè)寄存器的值,允許一條指令可以傳送16個(gè)寄存器的任何子集,包括16個(gè)寄存器。2.4.2ARM尋址方式例:LDMIA R1,{R0,R2,R5} ;R0←[R1] ;R2←[R1+4] ;R5←[R1+8]由于傳送的數(shù)據(jù)總是32位的字,因此基址寄存器R1應(yīng)當(dāng)字對(duì)準(zhǔn)。注意第52頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月7.堆棧尋址
堆棧是一種按照特定順序進(jìn)行存取的存儲(chǔ)區(qū)。這種特定的順序是指“后進(jìn)先出”(LIFO)或“先進(jìn)后出”(FILO)。使用堆棧時(shí)需要使用一個(gè)專門的寄存器作為堆棧指針,棧指針?biāo)付ǖ拇鎯?chǔ)單元就是堆棧的棧頂。如果堆棧指針指向最后壓入堆棧的有效數(shù)據(jù)項(xiàng),就稱為滿堆棧(fullstack);如果堆棧指針指向下一個(gè)數(shù)據(jù)項(xiàng)放入的空位置,就稱為空堆棧(emptystack)。2.4.2ARM尋址方式第53頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月7.堆棧尋址
另外,根據(jù)堆棧存儲(chǔ)區(qū)地址增長(zhǎng)的方向,可將堆棧分為遞增堆棧(ascendingstack)和遞減堆棧(descendingstack)。以上表示遞增、遞減、滿、空的堆棧的各種組合就產(chǎn)生了4種堆棧類型。
ARM支持所有這4種類型的堆棧,即滿遞增、空遞增、滿遞減、空遞減。
ARM指令使用push向堆棧寫(xiě)數(shù)據(jù),稱為進(jìn)棧;使用pop從堆棧讀數(shù)據(jù),稱為出棧。2.4.2ARM尋址方式堆棧指針指向最后壓入的數(shù)據(jù)且由低地址向高地址生成堆棧指針指向最后壓入的數(shù)據(jù)且由高地址向低地址生成堆棧指針指向下一個(gè)將要放入數(shù)據(jù)的空位置且由低地址向高地址生成堆棧指針指向下一個(gè)將要放入數(shù)據(jù)的空位置且由高地址向低地址生成第54頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月8.塊拷貝尋址
從堆棧的角度來(lái)看,多寄存器傳送指令是把一塊數(shù)據(jù)從存儲(chǔ)器的某一個(gè)位置拷貝到另一位置。從塊拷貝的角度來(lái)看,指令還要基于數(shù)據(jù)存儲(chǔ)在基址寄存器地址之上還是之下,地址在存儲(chǔ)第一個(gè)值之前或之后增加或減少。這兩種角度的映射均取決于執(zhí)行加載操作還是存儲(chǔ)操作。2.4.2ARM尋址方式第55頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月8.塊拷貝尋址
2.4.2ARM尋址方式向上生長(zhǎng)向下生長(zhǎng)滿空滿空增加之前STMIBSTMFALDMIBLDMED之后STMIASTMEALDMIALDMFD減少之前LDMDBLDMEASTMDBSTMFD之后LDMDALDMFASTMDASTMED表2-4多寄存器加載和存儲(chǔ)指令映射第56頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月8.塊拷貝尋址
2.4.2ARM尋址方式例如:LDMIA R0!,{R2-R9} ;將數(shù)據(jù)加載到R2~R9STMIA R1,{R2-R9} ;將數(shù)據(jù)存入存儲(chǔ)器執(zhí)行指令后,由于引用自動(dòng)索引“!”,R0的值共增加32,而R1不變。注意第57頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月8.塊拷貝尋址
2.4.2ARM尋址方式多寄存器指令的后綴含義如下:
I:Increment
D:DecrementorDescendingstack
A:AfterorAscendingstack
B:Before
F:Full
E:Empty 例如“FD”即表明是滿遞減堆棧尋址方式(fulldescendingstack)。第58頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月9.相對(duì)尋址
可以將相對(duì)尋址看作是以程序計(jì)數(shù)器PC為基址的一種基址尋址方式。指令的地址碼作為位移量,與PC相加得到操作數(shù)的有效地址。位移量指出了操作數(shù)與當(dāng)前指令之間的相對(duì)位置。2.4.2ARM尋址方式例:
BL SUBR ;轉(zhuǎn)移到SUBR
… ;返回到此SUBR … ;子程序入口地址
MOVPC,R14 ;返回第59頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月2.4 ARM指令系統(tǒng)
2.4.1ARM編程模型
2.4.2ARM尋址方式
2.4.3ARM指令集
2.4.4Thumb指令集第60頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月2.4ARM指令系統(tǒng)
ARM指令集編碼條件執(zhí)行ARM指令格式ARM存儲(chǔ)器訪問(wèn)指令A(yù)RM數(shù)據(jù)處理指令A(yù)RM分支指令A(yù)RM協(xié)處理器指令A(yù)RM雜項(xiàng)指令A(yù)RM偽指令2.4.3ARM指令集第61頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月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.3ARM指令集第62頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月1.ARM指令集編碼
2.4.3ARM指令集ARM指令集編碼第63頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月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.3ARM指令集第64頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月2.條件執(zhí)行2.4.3ARM指令集圖2-17ARM的條件代碼域第65頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月操作碼[31:28]助記符后綴標(biāo)志含義0000EQZ置位相等0001NEZ清零不等0010CS/HSC置位大于或等于(無(wú)符號(hào)>=)0011CC/LOC清零小于(無(wú)符號(hào)<)0100MIN置位負(fù)0101PLN清零正或零0110VSV置位溢出0111VCV清零未溢出1000HIC置位且Z清零大于(無(wú)符號(hào)>)1001LSC清零或Z置位小于或等于(無(wú)符號(hào)<=)1010GEN和V相同帶符號(hào)>=1011LTN和V不同帶符號(hào)<1100GTZ清零且N和V相同帶符號(hào)>1101LEZ置位或N和V不同帶符號(hào)<=1110AL任何總是(缺?。?111NV無(wú)從不(不要使用)第66頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月2.條件執(zhí)行2.4.3ARM指令集對(duì)于條件執(zhí)行,需要說(shuō)明的有以下兩點(diǎn):注意幾乎所有的ARM數(shù)據(jù)處理指令都可以根據(jù)執(zhí)行結(jié)果來(lái)選擇是否更新條件碼標(biāo)志。當(dāng)指令中包含后綴“S”時(shí),指令將更新條件碼標(biāo)志??梢愿鶕?jù)另一條指令設(shè)置的標(biāo)志,有條件地執(zhí)行某條指令。第67頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月3.ARM指令格式
ARM指令集是Load/Store型,只能通過(guò)Load/Store指令實(shí)現(xiàn)對(duì)存儲(chǔ)器的訪問(wèn),其它類型的指令都基于寄存器完成。2.4.3ARM指令集第68頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月操作碼;指令助記符,如ADD、LDR等可選的條件碼;執(zhí)行條件,如EQ、NE等可選后綴;若指定S,則根據(jù)指令執(zhí)行結(jié)果更新CPSR中的條件碼目標(biāo)寄存器存放第一操作數(shù)的寄存器第二操作數(shù)例:
LDR R0,[R1] BEQ DATAEVEN ADDS R2,R1,#1 SUBNES R2,R1,#0x20
ARM指令使用的基本格式如下所示:
<opcode>{<cond>}{S} <Rd>,<Rn>,{<operand2>}3.ARM指令格式
2.4.3ARM指令集第69頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月4.ARM存儲(chǔ)器訪問(wèn)指令--LDR、STR
LDR和STR為單一數(shù)據(jù)傳送指令,可傳送字和無(wú)符號(hào)字節(jié)、半字和帶符號(hào)字節(jié)、雙字。2.4.3ARM指令集第70頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月(1)字和無(wú)符號(hào)字節(jié)
op{cond}{B}{T}Rd,[Rn] ;零偏移
op{cond}{B}Rd,[Rn,Flexoffset]{!} ;前索引偏移
op{cond}{B}Rd,label ;程序相對(duì)偏移
op{cond}{B}{T}Rd,[Rn],Flexoffset ;后索引偏移4.ARM存儲(chǔ)器訪問(wèn)指令--LDR、STR
2.4.3ARM指令集句法:第71頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月(1)字和無(wú)符號(hào)字節(jié)
指令用于加載或存儲(chǔ)寄存器32位字或8位無(wú)符號(hào)字節(jié)。對(duì)于零偏移形式,Rn的值作為傳送數(shù)據(jù)的地址。對(duì)于前索引偏移形式,在傳送數(shù)據(jù)之前,將偏移量加到Rn中,結(jié)果作為傳送數(shù)據(jù)的存儲(chǔ)器地址。若使用“!”,則結(jié)果寫(xiě)回到Rn,且Rn不允許是R15。對(duì)于程序相對(duì)偏移形式,匯編器由PC計(jì)算偏移量,并將PC作為Rn生成前索引指令。不能使用后綴“!”。對(duì)于后索引形式,Rn的值作為傳送數(shù)據(jù)的存儲(chǔ)器地址。數(shù)據(jù)傳送之后,將偏移量加到Rn中,結(jié)果寫(xiě)回到Rn。Rn不允許是R15。4.ARM存儲(chǔ)器訪問(wèn)指令--LDR、STR
2.4.3ARM指令集指令說(shuō)明:第72頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月(1)字和無(wú)符號(hào)字節(jié)
LDR R8,[R10] LDRNE R2,[R5,#960]! STR R2,[R9,#CON] STRB R0,[R3,-R8,ASR#2] 4.ARM存儲(chǔ)器訪問(wèn)指令--LDR、STR
2.4.3ARM指令集例:第73頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月(2)半字和帶符號(hào)字節(jié)
op{cond}typeRd,[Rn] ;零偏移
op{cond}typeRd,[Rn,offset]{!} ;前索引偏移
op{cond}typeRd,label ;程序相對(duì)偏移
op{cond}typeRd,[Rn],offset ;后索引偏移4.ARM存儲(chǔ)器訪問(wèn)指令--LDR、STR
2.4.3ARM指令集句法:第74頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月(2)半字和帶符號(hào)字節(jié)指令用于加載寄存器16位半字或帶符號(hào)8位字節(jié),存儲(chǔ)寄存器16位半字。
帶符號(hào)加載是指帶符號(hào)擴(kuò)展到32位。
無(wú)符號(hào)半字加載是指零擴(kuò)展到32位。半字傳送的地址必須是偶數(shù),即按照半字對(duì)準(zhǔn)。不能將半字或字節(jié)加載到R15。。4.ARM存儲(chǔ)器訪問(wèn)指令--LDR、STR
2.4.3ARM指令集指令說(shuō)明:第75頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月(2)字和無(wú)符號(hào)字節(jié)
LDREQSH R11,[R6] LDRH R1,[R0,#12] STRH R4,[R0,R1]! LDRSB R1,[R6],R3,LSL#4 4.ARM存儲(chǔ)器訪問(wèn)指令--LDR、STR
2.4.3ARM指令集例:第76頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月(3)雙字
op{cond}DRd,[Rn] ;零偏移
op{cond}DRd,[Rn,offset]{!} ;前索引偏移
op{cond}DRd,label ;程序相對(duì)偏移
op{cond}DRd,[Rn],offset ;后索引偏移4.ARM存儲(chǔ)器訪問(wèn)指令--LDR、STR
2.4.3ARM指令集句法:第77頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月(3)雙字
指令用于加載或存儲(chǔ)兩個(gè)相鄰寄存器64位雙字。對(duì)于雙字傳送,地址必須是8的倍數(shù)。4.ARM存儲(chǔ)器訪問(wèn)指令--LDR、STR
2.4.3ARM指令集指令說(shuō)明:第78頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月(3)雙字
LDRD R6,[R11] LDRD R1,[R6] STRD R4,[R9,#24] STRD R14,[R9,#24] STRD R2,[R3],R6 4.ARM存儲(chǔ)器訪問(wèn)指令--LDR、STR
2.4.3ARM指令集例:第79頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月op{cond}modeRn{!},reglist{^}4.ARM存儲(chǔ)器訪問(wèn)指令--LDM、STM
2.4.3ARM指令集句法:第80頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月指令用于加載或存儲(chǔ)多個(gè)寄存器,可傳送R0~R15的任何組合。指令忽略地址的位[1:0]。到R15的加載將引起處理器轉(zhuǎn)移到加載地址處的指令如果Rn包含在寄存器列表中,且用“!”表明要寫(xiě)回,則若op是STM,且Rn是寄存器列表中數(shù)字最小的寄存器,則Rn的初值被保存。否則,Rn的加載和存儲(chǔ)值不可預(yù)知。4.ARM存儲(chǔ)器訪問(wèn)指令--LDM、STM
2.4.3ARM指令集指令說(shuō)明:第81頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月LDMIA R8, {R0,R2,R9}STMDB R1!, {R3-R6,R11,R12}STMFD R13!, {R0,R4-R7,LR} LDMFD R13!, {R0,R4-R7,PC}STMIA R5!, {R5,R4,R9} LDMDA R2, {}4.ARM存儲(chǔ)器訪問(wèn)指令--LDM、STM
2.4.3ARM指令集例:第82頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月PLD [Rn{Flexoffset}]4.ARM存儲(chǔ)器訪問(wèn)指令--PLD
2.4.3ARM指令集句法:指令用于Cache預(yù)加載,提示存儲(chǔ)系統(tǒng)從后面的幾條指令所指定的存儲(chǔ)器地址加載,用這種方法可以加速以后的存儲(chǔ)器訪問(wèn)。指令沒(méi)有地址的對(duì)準(zhǔn)限制。指令說(shuō)明:第83頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月4.ARM存儲(chǔ)器訪問(wèn)指令--PLD2.4.3ARM指令集PLD [R2]PLD [R0,#CON] ;CON范圍為±4KB例:第84頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月4.ARM存儲(chǔ)器訪問(wèn)指令--SWP
2.4.3ARM指令集SWP{cond}{B}Rd,Rm,[Rn]句法:指令用于在寄存器和存儲(chǔ)器之間進(jìn)行數(shù)據(jù)交換,可以使用SWP來(lái)實(shí)現(xiàn)信號(hào)量。對(duì)于非字對(duì)準(zhǔn)的處理與LDR、STR指令中的處理方法相同。指令說(shuō)明:例:SWPB R1,R1,[R0] ;交換字節(jié)第85頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月5.ARM數(shù)據(jù)處理指令
ARM數(shù)據(jù)處理指令可以完成的功能包括:2.4.3ARM指令集數(shù)據(jù)傳送算術(shù)運(yùn)算邏輯運(yùn)算比較測(cè)試乘法第86頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月5.ARM數(shù)據(jù)處理指令
ARM數(shù)據(jù)處理指令的特點(diǎn)
2.4.3ARM指令集操作數(shù)為32位,來(lái)自寄存器或定義的立即數(shù)。對(duì)于操作數(shù)可進(jìn)行符號(hào)擴(kuò)展和零擴(kuò)展。處理結(jié)果除了長(zhǎng)乘法指令為64位之外,均為32位,存放在寄存器中。大多數(shù)ARM通用數(shù)據(jù)處理指令都有一個(gè)靈活的第二操作數(shù)(flexiblesecondoperand)。第二操作數(shù)operand2可以是立即數(shù)形式或寄存器形式。#32位立即數(shù)Rm,{#shift}第87頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月5.ARM數(shù)據(jù)處理指令--移位操作2.4.3ARM指令集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頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月5.ARM數(shù)據(jù)處理指令--移位操作2.4.3ARM指令集圖2-18移位操作過(guò)程第89頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月ADD、SUB、RSB、ADC、SBC、RSCop{cond}{S}Rd,Rn,Operand25.ARM數(shù)據(jù)處理指令--算術(shù)運(yùn)算指令
2.4.3ARM指令集句法:第90頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月指令用于加、減、反減等算術(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)可從異常返回。在有寄存器控制移位的任何數(shù)據(jù)處理指令中,不能將R15作為Rd或任何操作數(shù)來(lái)使用。5.ARM數(shù)據(jù)處理指令--算術(shù)運(yùn)算指令2.4.3ARM指令集指令說(shuō)明:ADD、SUB、RSB、ADC、SBC、RSC第91頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月ADD R2,R1,R3SUBS R8,R6,#240 RSB R4,R4,#1280 ADCHI R11,R0,R3 RSCLES R0,R5,R0,LSLR4 RSCLES R0,R15,R0,LSLR4 5.ARM數(shù)據(jù)處理指令--算術(shù)運(yùn)算指令2.4.3ARM指令集例:ADD、SUB、RSB、ADC、SBC、RSC第92頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月AND、ORR、EOR、BICop{cond}{S}Rd,Rn,Operand25.ARM數(shù)據(jù)處理指令—邏輯運(yùn)算指令
2.4.3ARM指令集句法:第93頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月
媽媽新開(kāi)了個(gè)淘寶店,歡迎前來(lái)捧場(chǎng)
媽媽的淘寶點(diǎn)開(kāi)了快半年了,主要賣的是毛絨玩具、坐墊、抱枕之類的,但生意一直不是很好,感覺(jué)媽媽還是很用心的,花了不少功夫,但是就是沒(méi)有人氣,所以我也來(lái)出自己的一份力,幫忙宣傳一下。 并且媽媽總是去五亭龍?zhí)糇詈玫耐婢哒?、發(fā)貨,質(zhì)量絕對(duì)有保證。 另外我家就在揚(yáng)州五亭龍玩具城旁邊,貨源豐富,質(zhì)量可靠,價(jià)格便宜。歡迎大家來(lái)逛逛【揚(yáng)州五亭龍玩具總動(dòng)員】
99個(gè)人小廣告:第94頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月指令用于與、或、異或、位清零等邏輯運(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.3ARM指令集指令說(shuō)明:AND、ORR、EOR、BIC第95頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月AND R9,R2,#0xFF00ORREQ R2,R0,R5 EORS R0,R0,R3,RORR6 BICNES R8,R10,R0,RRX EORS R0,R15,R3,RORR6 5.ARM數(shù)據(jù)處理指令--邏輯運(yùn)算指令2.4.3ARM指令集
例:AND、ORR、EOR、BIC第96頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月MOV、MVNop{cond}{S}Rd,Operand25.ARM數(shù)據(jù)處理指令—數(shù)據(jù)傳送指令
2.4.3ARM指令集句法:第97頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月指令用于數(shù)據(jù)傳送。
MOV指令將Operand2的值拷貝到Rd;
MVN指令對(duì)Operand2的值按位取非后,將結(jié)果拷貝到Rd。關(guān)于條件碼標(biāo)志的影響與邏輯運(yùn)算指令相同。關(guān)于R15的使用與算術(shù)運(yùn)算指令相同。
5.ARM數(shù)據(jù)處理指令--數(shù)據(jù)傳送指令2.4.3ARM指令集指令說(shuō)明:MOV、MVN第98頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月MOV R5,R2MVNNE R11,#0x0F000000 MOVS R0,R0,ASRR3
5.ARM數(shù)據(jù)處理指令--數(shù)據(jù)傳送指令2.4.3ARM指令集
例:MOV、MVN第99頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月CMP、CMNop{cond}{S}Rd,Operand25.ARM數(shù)據(jù)處理指令--比較指令
2.4.3ARM指令集句法:第100頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月指令用于比較操作,根據(jù)結(jié)果更新條件碼標(biāo)志,結(jié)果并不放入寄存器。其中,CMP指令從Rn的值中減去Operand2的值,結(jié)果丟棄;CMN指令將Operand2的值加到Rn的值中,結(jié)果丟棄。如果將R15用作Rn,則使用的值是指令的地址加8。在控制寄存器移位的操作中,不能使用R15。5.ARM數(shù)據(jù)處理指令--比較指令2.4.3ARM指令集指令說(shuō)明:CMP、CMN第101頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月CMP R2,R9CMN R0,#6400CMPGT R13,R7,LSL#2 CMP R2,R15,ASRR0
5.ARM數(shù)據(jù)處理指令--比較指令2.4.3ARM指令集
例:CMP、CMN第102頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月TST、TEQop{cond}{S}Rd,Operand25.ARM數(shù)據(jù)處理指令--測(cè)試指令
2.4.3ARM指令集句法:第103頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月指令用于測(cè)試操作,根據(jù)結(jié)果更新條件碼標(biāo)志,結(jié)果不放入寄存器。其中,TST指令對(duì)Rn的值與Operand2的值進(jìn)行按位“與”操作,結(jié)果丟棄;TEQ指令對(duì)Rn的值與Operand2的值進(jìn)行按位“異或”操作,結(jié)果丟棄。關(guān)于條件碼標(biāo)志的影響與算術(shù)運(yùn)算指令相同。關(guān)于R15的使用與比較指令相同。5.ARM數(shù)據(jù)處理指令--測(cè)試指令2.4.3ARM指令集指令說(shuō)明:TST、TEQ第104頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月TST R0,#0x3F8TEQEQ R10,R9 TSTNE R1,R5,ASRR1 TEQ R15,R1,RORR0 5.ARM數(shù)據(jù)處理指令--測(cè)試指令2.4.3ARM指令集
例:TST、TEQ第105頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月MUL、MLAMUL{cond}{S}Rd,Rm,RsMLA{cond}{S}Rd,Rm,Rs,Rn5.ARM數(shù)據(jù)處理指令—乘法指令
2.4.3ARM指令集句法:第106頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月指令用于進(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.3ARM指令集指令說(shuō)明:MUL、MLA第107頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月MUL R10,R2,R5MLA R10,R2,R1,R5MULS R0,R2,R2 MULLT R2,R3,R2 MLAVCS R8,R6,R3,R8 MUL R15,R0,R3 MLA R1,R1,R6 5.ARM數(shù)據(jù)處理指令--乘法指令2.4.3ARM指令集
例:MUL、MLA第108頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月CLZ {cond}Rd,Rm5.ARM數(shù)據(jù)處理指令--CLZ
2.4.3ARM指令集句法:指令用于對(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。指令說(shuō)明:第109頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月B {cond} labelBL {cond} label6.ARM分支指令--B、BL
2.4.3ARM指令集句法:指令用于分支和帶鏈接分支的操作。其中,B指令引起處理器轉(zhuǎn)移到label;BL指令將下一條指令的地址拷貝到R14(LR,鏈接寄存器),并引起處理器轉(zhuǎn)移到label。指令說(shuō)明:第110頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月6.ARM分支指令--B、BL2.4.3ARM指令集B loopABL sub例:第111頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月BX {cond} Rm6.ARM分支指令--BX
2.4.3ARM指令集句法:指令用于實(shí)現(xiàn)分支,并可選地交換指令集。BX指令將引起處理器轉(zhuǎn)移到Rm中的地址。若Rm的位[0]為1,則指令集變換到Thumb指令集。指令說(shuō)明:第112頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月6.ARM分支指令--BX2.4.3ARM指令集BX R6例:第113頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月BLX {cond} Rm6.ARM分支指令--BLX
2.4.3ARM指令集句法:第114頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月6.ARM分支指令--BLX
2.4.3ARM指令集指令用于實(shí)現(xiàn)帶鏈接分支,并可選地交換指令集。
BLX指令具體用途有:將下一條指令的地址拷貝到R14(LR,鏈接寄存器)中;轉(zhuǎn)移到label或Rm中的地址;切換到Thumb指令集,條件是Rm的位[0]為1或者使用“BLXlabel”的形式。機(jī)器級(jí)的“BLXlabel”指令的轉(zhuǎn)移不能超過(guò)當(dāng)前指令地址的±32Mb范圍。指令說(shuō)明:第115頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月6.ARM分支指令--BX2.4.3ARM指令集BLX R0BLX thumbsub例:第116頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月7.ARM協(xié)處理器指令
2.4.3ARM指令集
ARM支持16個(gè)協(xié)處理器,如用于控制片上功能(如cache、MMU)的系統(tǒng)協(xié)處理器、浮點(diǎn)協(xié)處理器以及其它一些專用的協(xié)處理器。每個(gè)協(xié)處理器均忽略ARM處理器和其它協(xié)處理器的指令。如果協(xié)處理器沒(méi)有接受ARM的協(xié)處理器指令,則ARM將產(chǎn)生未定義指令中止的陷阱,以此可用來(lái)實(shí)現(xiàn)“協(xié)處理器丟失”的軟件仿真。第117頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月SWI {cond}immed_248.ARM雜項(xiàng)指令--SWI2.4.3ARM指令集句法:
SWI指令引起處理器SWI異常,即處理器變?yōu)楣芾砟J?,CPSR內(nèi)容保存到管理模式的SPSR中,執(zhí)行轉(zhuǎn)移到SWI向量。這條指令不影響條件碼標(biāo)志。指令說(shuō)明:軟件中斷指令——SWI第118頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月BKPT immed_168.ARM雜項(xiàng)指令--BKPT2.4.3ARM指令集句法:
BKPT指令引起處理器進(jìn)入調(diào)試模式,調(diào)試工具可利用這條指令到達(dá)特定的地址時(shí)查詢系統(tǒng)狀態(tài)。指令說(shuō)明:斷點(diǎn)指令——BKPT第119頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月MRS {cond}Rd,psrMSR {cond}psr_fields,#immed_8rMSR {cond}psr_fields,Rm8.ARM雜項(xiàng)指令--MRS、MSR
2.4.3ARM指令集句法:
PSR操作指令MRS和MSR配合使用,可用來(lái)更新PSR的讀-修改-寫(xiě)序列的一部分,如改變處理器模式或清除標(biāo)志Q。指令說(shuō)明:PSR操作指令——MRS、MSR第120頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月9.ARM偽指令--ADR、ADRL、LDR
2.4.3ARM指令集ADR {cond}register,exprADRL{cond}register,exprLDR {cond}register,=[expr|label-expr]
句法:
ADR、ADRL和LDR偽指令都是將一個(gè)地址加載到一個(gè)寄存器中。
指令說(shuō)明:第121頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月start MOV R0,#10 ADR R4,start ;=>SUBR4,PC,#0x0Cstart MOV R0,#10 ADRL R4,start+6000;=>ADDR4,PC,#0xE800 ;ADDR4,R4,#0x254LDR R3,=OxFF0 ;加載0xFF0到R3中
;=>MOV R3,#0xFF0LDR R1,=OxFFF ;加載0xFFF到R1中
;=>LDR R1,[PC,offset_to_litpool] ;… ;litpoolDCD0xFFFLDR R2,=place ;將place的地址加載到R2中
;=>LDR R2,[PC,offset_to_litpool] ;… ;litpoolDCDplace第122頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月9.ARM偽指令--NOP
2.4.3ARM指令集NOP句法:
NOP偽指令在匯編時(shí)被替換成ARM的空操作,如“MOVR0,R0”等。
NOP偽指令不能有條件執(zhí)行。
NOP偽指令不影響CPSR中的條件標(biāo)志位。指令說(shuō)明:空操作——NOP第123頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月2.4 ARM指令系統(tǒng)
2.4.1ARM編程模型
2.4.2ARM尋址方式
2.4.3ARM指令集
2.4.4Thumb指令集(*)第124頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月第二章嵌入式處理器2.1引言
2.2 嵌入式處理器概述2.3 ARM處理器基礎(chǔ)2.4 ARM指令系統(tǒng)2.5 ARM程序設(shè)計(jì)基礎(chǔ)第125頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月2.5 ARM程序設(shè)計(jì)基礎(chǔ)在嵌入式系統(tǒng)程序設(shè)計(jì)中,大量使用了C語(yǔ)言進(jìn)行編程。在有些程序中,使用匯編語(yǔ)言進(jìn)行編程則更加方便、簡(jiǎn)單,甚至是不可替代的,例如初始化硬件的代碼、啟動(dòng)代碼等。第126頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月2.5 ARM程序設(shè)計(jì)基礎(chǔ)匯編語(yǔ)言都具有一些相同的基本特征,例如:一條指令一行。使用標(biāo)號(hào)(label)給內(nèi)存單元提供名稱,從第一列開(kāi)始書(shū)寫(xiě)。指令必須從第二列或能區(qū)分標(biāo)號(hào)的地方開(kāi)始書(shū)寫(xiě)。注釋跟在指定的注釋字符后面(ARM使用的是“;”),一直書(shū)寫(xiě)到行尾。第127頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月2.5 ARM程序設(shè)計(jì)基礎(chǔ)
2.5.1ARM匯編語(yǔ)句格式
2.5.2ARM匯編程序格式
2.5.3匯編語(yǔ)言編程實(shí)例
2.5.4匯編語(yǔ)言與C語(yǔ)言的混合編程第128頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月2.5ARM程序設(shè)計(jì)基礎(chǔ)
2.5.1ARM匯編語(yǔ)句格式
ARM匯編語(yǔ)句的格式如下所示:{symbol}{instruction|directive|pseudo-instruction}{;comment}第129頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月2.5ARM程序設(shè)計(jì)基礎(chǔ)
2.5.1ARM匯編語(yǔ)句格式
symbol:符號(hào)。在ARM匯編語(yǔ)言中,符號(hào)在指令和偽指令中用作地址標(biāo)號(hào),在一些偽操作中用作變量或常量。符號(hào)的使用有以下一些規(guī)則:符號(hào)必須從一行的行頭開(kāi)始符號(hào)由大小寫(xiě)字母、數(shù)字以及下劃線組成,但不能包含空格符號(hào)區(qū)分大小寫(xiě)局部標(biāo)號(hào)以數(shù)字開(kāi)頭,其它符號(hào)都不能以數(shù)字開(kāi)頭符號(hào)在作用范圍內(nèi)是唯一的,即在其作用范圍內(nèi)不能有同名的符號(hào)程序中的符號(hào)不能與系統(tǒng)的內(nèi)部變量或系統(tǒng)預(yù)定義的符號(hào)同名程序中的符號(hào)通常不要與指令助記符或偽操作同名第130頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月2.5ARM程序設(shè)計(jì)基礎(chǔ)
2.5.1ARM匯編語(yǔ)句格式
instruction:指令。在ARM匯編語(yǔ)言中,指令不能從一行的行頭開(kāi)始。在一行語(yǔ)句中,指令的前面必須有空格或符號(hào)。
directive:偽操作。
pseudo-instruction:偽指令。
comment:語(yǔ)句的注釋。在ARM匯編語(yǔ)言中,注釋以分號(hào)“;”開(kāi)頭。注釋的結(jié)尾即為一行的結(jié)尾。注釋也可單獨(dú)占用一行。第131頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月2.5ARM程序設(shè)計(jì)基礎(chǔ)
2.5.1ARM匯編語(yǔ)句格式關(guān)于ARM匯編語(yǔ)句,需要說(shuō)明的有以下幾點(diǎn):指令、偽指令以及偽操作的助記符可全部使用大寫(xiě)字母,也可全部使用小寫(xiě)字母,但不能在一個(gè)助記符中既有大寫(xiě)字母又有小寫(xiě)字母;在程序中,語(yǔ)句之間最好適當(dāng)?shù)夭迦肟招?,這樣可提高源代碼的可讀性;如果一條語(yǔ)句很長(zhǎng),為提高可讀性,可使用“\”將其分成若干行進(jìn)行書(shū)寫(xiě)。在“\”后面不能再有其它字符,包括空格和制表符。
第132頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月2.5 ARM程序設(shè)計(jì)基礎(chǔ)
2.5.1ARM匯編語(yǔ)句格式
2.5.2ARM匯編程序格式
2.5.3匯編語(yǔ)言編程實(shí)例
2.5.4匯編語(yǔ)言與C語(yǔ)言的混合編程第133頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月2.5ARM程序設(shè)計(jì)基礎(chǔ)
2.5.2ARM匯編程序格式采用不同的編譯器,ARM匯編語(yǔ)言程序的格式可能會(huì)略有不同??傮w上,ARM匯編程序的基本格式是相同的。ARM匯編程序以段(section)為單位來(lái)組織源文件。第134頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月2.5ARM程序設(shè)計(jì)基礎(chǔ)
2.5.2ARM匯編程序格式ARM匯編程序經(jīng)過(guò)匯編處理后生成一個(gè)可執(zhí)行的映像文件,映像文件通常包括以下3個(gè)部分:一個(gè)或多個(gè)代碼段。代碼段的屬性通常是只讀的。
0或多個(gè)包含初始值的數(shù)據(jù)段。數(shù)據(jù)段的屬性通常是可讀/寫(xiě)的。
0或多個(gè)不包含初始值的數(shù)據(jù)段。這些數(shù)據(jù)段被初始化為0,屬性是可讀/寫(xiě)的。第135頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月ARM匯編程序的基本結(jié)構(gòu)AREAEXAMPLE,CODE,READONLY ENTRY start MOV R0,#10 MOV R1,#3 ADD R0,R0,R1 ENDAREA表示了一個(gè)段的開(kāi)始,同時(shí)定義了這個(gè)段的名稱和相關(guān)屬性標(biāo)識(shí)了程序執(zhí)行的第一條指令,即程序的入口點(diǎn)標(biāo)識(shí)源文件的結(jié)束。每一個(gè)匯編模塊必須包含一個(gè)END偽操作,用來(lái)指示模塊的結(jié)束第136頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月2.5 ARM程序設(shè)計(jì)基礎(chǔ)
2.5.1ARM匯編語(yǔ)句格式
2.5.2ARM匯編程序格式
2.5.3匯編語(yǔ)言編程實(shí)例
2.5.4匯編語(yǔ)言與C語(yǔ)言的混合編程第137頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月
AREAHelloWorld,CODE,READONLY
;聲明代碼段SWI_WriteCEQU &0
;輸出R0中的字符SWI_Exit
EQU &11
;程序結(jié)束
ENTRY
;代碼的入口START ADR R1,TEXT
;R1→“HelloWorld”LOOP LDRB R0,[R1],#1 ;讀取下一個(gè)字節(jié)
CMP R0,#0
;檢查文本終點(diǎn)
SWINE SWI_WriteC ;若非終點(diǎn),則打印
BNE LOOP
;并返回LOOP SWI SWI_Exit
;執(zhí)行結(jié)束TEXT = “HelloWorld”,&0a,&0d,0
END
;程序源代碼結(jié)束第138頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月
AREABlkCpy,CODE,READONLY ;聲明代碼段SWI_WriteC EQU &0 ;輸出R0中的字符SWI_Exit EQU &11 ;程序結(jié)束
ENTRY
;代碼的入口
ADR R1,TABLE1 ;R1→TABLE1 ADR R2,TABLE2 ;R2→TABLE2 ADR R3,T1END ;R3→T1ENDLOOP1 LDR R0,[R1],#4 ;讀取TABLE1的第一個(gè)字
STR R0,[R2],#4 ;拷貝到TABLE2 CMP R1,R3 ;結(jié)束?
BLT LOOP1 ;若非,則再拷貝
ADR R1,TABLE2 ;R1→TABLE2LOOP2 LDRB R0,[R1],#1 ;讀取下一個(gè)字
CMP R0,#0 ;檢查文本終點(diǎn)
SWINE SWI_WriteC ;若非終點(diǎn),則打印
BNE LOOP2 ;并返回LOOP2 SWI SWI_Exit ;執(zhí)行結(jié)束TABLE1 = “Thisistherightstring!”,&0a,&0d,0T1END
ALIGN
;保證字對(duì)準(zhǔn)TABLE2 = “Thisisthewrongstring!”,0
END
;程序源代碼結(jié)束第139頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月2.5 ARM程序設(shè)計(jì)基礎(chǔ)
2.5.1ARM匯編語(yǔ)句格式
2.5.2ARM匯編程序格式
2.5.3匯編語(yǔ)言編程實(shí)例
2.5.4匯編語(yǔ)言與C語(yǔ)言的混合編程第140頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月2.5ARM程序設(shè)計(jì)基礎(chǔ)
2.5.4匯編語(yǔ)言與C語(yǔ)言的混合編程高級(jí)語(yǔ)言使程序能夠以抽象的方式來(lái)表述。編譯器是支持高級(jí)語(yǔ)言、可以達(dá)到抽象目的的依賴。靈活地運(yùn)用匯編語(yǔ)言和C語(yǔ)言之間的關(guān)系進(jìn)行混合編程,有利于系統(tǒng)和相關(guān)模塊的開(kāi)發(fā)。第141頁(yè),課件共167頁(yè),創(chuàng)作于2023年2月2.5ARM程序設(shè)計(jì)基礎(chǔ)
2.5.4匯編語(yǔ)言與C語(yǔ)言的混合編程匯編語(yǔ)言和C語(yǔ)言的混合編程分為兩種情況:如果匯編代碼比較
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 45164-2024熔模鑄件缺陷分類及命名
- 二零二五年度百貨商場(chǎng)停車場(chǎng)管理合同樣本3篇
- 二零二五版員工股權(quán)激勵(lì)與管理合同模板3篇
- 二零二五年防盜門研發(fā)、生產(chǎn)、銷售一體化合作協(xié)議3篇
- 2024版家具經(jīng)銷商合作協(xié)議范本
- 二零二五年度音樂(lè)器材行業(yè)標(biāo)準(zhǔn)制定與執(zhí)行合同3篇
- 2024版云計(jì)算服務(wù)租賃合同
- 二零二五版?zhèn)€人子女教育還借款合同3篇
- 2024版前期物業(yè)服務(wù)管理協(xié)議
- 二零二五版體育健身器材研發(fā)與銷售合同3篇
- 2024年安全教育培訓(xùn)試題附完整答案(奪冠系列)
- 化學(xué)-山東省濰坊市、臨沂市2024-2025學(xué)年度2025屆高三上學(xué)期期末質(zhì)量檢測(cè)試題和答案
- 領(lǐng)導(dǎo)學(xué) 課件全套 孫健 第1-9章 領(lǐng)導(dǎo)要素- 領(lǐng)導(dǎo)力開(kāi)發(fā)
- 文化資本與民族認(rèn)同建構(gòu)-洞察分析
- 2025新譯林版英語(yǔ)七年級(jí)下單詞默寫(xiě)表
- 2024年私募基金爭(zhēng)議解決研究報(bào)告之一:私募基金管理人謹(jǐn)慎勤勉義務(wù)之邊界探析-國(guó)楓研究院
- 物業(yè)客服服務(wù)技巧培訓(xùn)
- 環(huán)衛(wèi)設(shè)施設(shè)備更新實(shí)施方案
- 招聘技巧的培訓(xùn)
- 北師大版一年級(jí)上冊(cè)數(shù)學(xué)全冊(cè)教案(教學(xué)設(shè)計(jì))及教學(xué)反思
- 福建省公路水運(yùn)工程試驗(yàn)檢測(cè)費(fèi)用參考指標(biāo)
評(píng)論
0/150
提交評(píng)論