嵌入式系統(tǒng)原理與應(yīng)用 課件 第3章 Cortex M3指令系統(tǒng)1_第1頁(yè)
嵌入式系統(tǒng)原理與應(yīng)用 課件 第3章 Cortex M3指令系統(tǒng)1_第2頁(yè)
嵌入式系統(tǒng)原理與應(yīng)用 課件 第3章 Cortex M3指令系統(tǒng)1_第3頁(yè)
嵌入式系統(tǒng)原理與應(yīng)用 課件 第3章 Cortex M3指令系統(tǒng)1_第4頁(yè)
嵌入式系統(tǒng)原理與應(yīng)用 課件 第3章 Cortex M3指令系統(tǒng)1_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

嵌入式系統(tǒng)設(shè)計(jì)西安郵電大學(xué)計(jì)算機(jī)學(xué)院王忠民第三章CortexM3指令系統(tǒng)學(xué)習(xí)目的了解ARMV7架構(gòu)新引入的Thrum-2指令系統(tǒng)的特點(diǎn),掌握Thumb-2指令集的編碼格式以及ARM匯編語(yǔ)言源程序的組成以及編寫規(guī)則。掌握基于純匯編工程的構(gòu)建方法,掌握啟動(dòng)文件的編寫與基本構(gòu)成,理解中斷(異常)向量表的作用。掌握基本的數(shù)據(jù)型操作數(shù)的尋址方式,理解常用的地址型操作數(shù)的尋址方式。熟悉算術(shù)運(yùn)算指令、邏輯運(yùn)算與位操作指令、內(nèi)部數(shù)據(jù)傳輸指令、存儲(chǔ)器數(shù)據(jù)傳送指令、比較與測(cè)試指令、控制轉(zhuǎn)移指令等中的常用指令的功能,掌握對(duì)處理器底層訪問、數(shù)據(jù)處理與控制轉(zhuǎn)移等一些基本指令的使用。學(xué)習(xí)內(nèi)容匯編語(yǔ)言基礎(chǔ)尋址方式算術(shù)運(yùn)算指令邏輯與位操作指令內(nèi)部數(shù)據(jù)傳送指令存儲(chǔ)器數(shù)據(jù)傳送指令比較與測(cè)試指令控制轉(zhuǎn)移指令匯編語(yǔ)言基礎(chǔ)尋址方式匯編語(yǔ)言指令系統(tǒng)(1)匯編語(yǔ)言指令系統(tǒng)(2)第三章CortexM3指令系統(tǒng)---學(xué)習(xí)內(nèi)容

ARM公司推出的微處理器IP核架構(gòu)已經(jīng)從ARMv1(1985年)發(fā)展到ARMv9(2021年),對(duì)應(yīng)的指令集也經(jīng)歷初期的32位ARM指令集、32位的ARM指令集和16位的Thumb指令集在ARM和Thumb兩種狀態(tài)下切換使用、16位和32位并存的Thumb-2指令集等幾個(gè)階段。處理器也從早期的32位字長(zhǎng)發(fā)展到ARMv8之后的64位字長(zhǎng)。處理器的性能得到了很大提高,為各種領(lǐng)域的應(yīng)用帶來(lái)了更加強(qiáng)大和安全的處理能力,并推動(dòng)了移動(dòng)計(jì)算、物聯(lián)網(wǎng)、邊緣計(jì)算、云計(jì)算等領(lǐng)域的發(fā)展。

1.ARM指令集 ARM指令集是一種由ARM公司開發(fā)的精簡(jiǎn)指令集(ReducedInstructionSetComputing,RISC),它以低功耗、高性能和簡(jiǎn)潔的設(shè)計(jì)而聞名。ARM指令集最初推出于上世紀(jì)80年代,面向嵌入式系統(tǒng)和移動(dòng)設(shè)備等領(lǐng)域,逐漸成為全球最常用的指令集架構(gòu)之一。 2.Thumb指令集 Thumb指令集于1994年首次在ARMv4T架構(gòu)中引入的。Thumb指令集采用16位的壓縮指令格式,相比于32位的ARM指令集,在相同存儲(chǔ)空間下可以存儲(chǔ)更多的指令,從而提高了代碼密度。這時(shí)候用戶應(yīng)用程序既可以用32位的ARM指令,也可用16位的Thumb指令,用戶程序需要根據(jù)具體情況在兩種模式之間切換,需要消耗系統(tǒng)資源。 3.Thumb-2指令集

Thumb-2指令集是在2003年在ARMv6T2架構(gòu)中引入的。最早使用Thumb-2指令集的ARM核是Cortex-M3。Thumb-2指令集使得開發(fā)者可以同時(shí)使用16位和32位指令,匯編程序會(huì)根據(jù)具體情況盡量把用戶的匯編指令翻譯成16位的指令,若16位不能表示,則會(huì)翻譯成32位的機(jī)器指令,并靈活地根據(jù)需求進(jìn)行代碼優(yōu)化,而不需要像早期那樣開發(fā)者需要在ARM指令集和Thumb指令集中間來(lái)回切換。由于CortexM3使用了Thumb-2指令集,因此,CortexM3核中程序狀態(tài)寄存器xPSR中的T狀態(tài)位始終為1。第三章CortexM3指令系統(tǒng)---ARM匯編語(yǔ)言指令系統(tǒng)5;文件名:TEST1.S

;功能:實(shí)現(xiàn)兩個(gè)寄存器相加;說明:使用ARMulate軟件仿真調(diào)試

AREA Example1,CODE,READONLY ;聲明代碼段Example1START

MOV R0,#0 ;設(shè)置參數(shù)

MOV R1,#10LOOP

BL ADD_SUB ;調(diào)用子程序ADD_SUB

SUBS R1,R1,#1

BNE LOOP ;跳轉(zhuǎn)到LOOPLOOP1

B LOOP1 ;死循環(huán)了!ADD_SUB

ADDS R0,R0,R1 ;R0=R0+R1

MOV PC,LR ;子程序返回

END ;文件結(jié)束使用“;”進(jìn)行注釋標(biāo)號(hào)頂格寫實(shí)際代碼段聲明文件結(jié)束第三章CortexM3指令系統(tǒng)---ARM匯編語(yǔ)言源程序的組成匯編語(yǔ)言源程序組成:紅色:指令黃色:偽指令藍(lán)色:標(biāo)號(hào)黑色:注釋語(yǔ)句格式標(biāo)號(hào)---標(biāo)號(hào)是可選的,如果有,它必須頂格寫。標(biāo)號(hào)的作用是讓匯編器來(lái)計(jì)算程序轉(zhuǎn)移的地址。操作碼---操作碼是指令的助記符,說明指令的功能,必須有。它的前面必須有至少一個(gè)空格,通常使用一個(gè)“Tab”鍵來(lái)產(chǎn)生。操作數(shù)---指令處理的對(duì)象。操作碼后面往往跟隨若干個(gè)操作數(shù),而第1個(gè)操作數(shù),通常都給出本指令執(zhí)行結(jié)果的存儲(chǔ)地。不同指令需要不同數(shù)目的操作數(shù),并且對(duì)操作數(shù)的語(yǔ)法要求也不同。通常目的操作數(shù)和源操作數(shù)1都是寄存器尋址方式,源操作數(shù)2可以是立即數(shù)、寄存器或寄存器移位等。注釋---注釋均以“;”開頭,它的有無(wú)不影響匯編操作,只是給程序員看的,能讓程序更易理解。注意:此格式適用于算數(shù)運(yùn)算指令和邏輯運(yùn)算指令等,對(duì)寄存器賦值以及存儲(chǔ)器讀寫指令不適合。{標(biāo)號(hào)} 操作碼{cond}{s}{.w/.n} 目的操作數(shù)(Rd), 第1操作數(shù)(Rn), 第2操作數(shù)(Rm) {;注釋}第三章CortexM3指令系統(tǒng)---匯編語(yǔ)言基礎(chǔ)---語(yǔ)句格式ADD R0,R1,R2ADD R1,R1,R2ADDR1,R2;等價(jià)于ADDR1,R1,R2ADDR0,R1,R2,LSL#1-------------------------------MOV R0,R1MOV R0,#10------------------------------LDRR0,[R1]STRRO,[R1]LDMIARd!,{寄存器列表}STMIARd!,{寄存器列表}操作數(shù)在CPU內(nèi)操作數(shù)在存儲(chǔ)器單元判斷依據(jù)助記符英文含義標(biāo)志位作用根據(jù)四個(gè)狀態(tài)標(biāo)志位(Z、C、N、V)的狀態(tài)來(lái)判斷EQEQualZ=1判斷兩個(gè)數(shù)相等(不區(qū)分有無(wú)符號(hào)數(shù))NENotEqualZ=0判斷兩個(gè)數(shù)不相等(不區(qū)分有無(wú)符號(hào)數(shù))CS/HSCarrySet/HigherorSameC=1判斷無(wú)符號(hào)數(shù)大于或等于CC/LOCarryClear/LOwerC=0判斷無(wú)符號(hào)數(shù)小于MIMInusN=1判斷結(jié)果是否為負(fù)數(shù)PLPLusN=0判斷結(jié)果是否為正數(shù)或零VSoVerflowSetV=1判斷有符號(hào)數(shù)溢出VCoVerflowClearV=0判斷有符號(hào)數(shù)沒有溢出根據(jù)有符號(hào)數(shù)或無(wú)符號(hào)數(shù)來(lái)判斷(Higher,Lower)(Greater,Less)HIunsignedHIgherC=1ANDZ=0判斷無(wú)符號(hào)數(shù)大于LSunsignedLowerorSameC=0ORZ=1判斷無(wú)符號(hào)數(shù)小于或等于GEsignedGreaterthanorEqualN=V判斷有符號(hào)數(shù)大于或等于LTsignedLessThanN!=V判斷有符號(hào)數(shù)小于GTsignedGreaterThanZ=0ANDN=V判斷有符號(hào)數(shù)大于LEsignedLessthanorEqualZ=1ORN!=V判斷有符號(hào)數(shù)小于或等于第三章CortexM3指令系統(tǒng)---匯編語(yǔ)言基礎(chǔ)---指令的條件碼第三章CortexM3指令系統(tǒng)---匯編語(yǔ)言基礎(chǔ)---指令編碼格式16-bitencodingoftheADDinstruction(寄存器用四位編碼,r0-r12都為16位指令)16-bitand32-bitencodingoftheORRSinstructionADDR0,R1=ADDR0,R0,R1;4408=0100010000001000ADDSR0,R1=ADDSR0,R0,R1 ;1840ORRSR1,R2;4311=0100001100010001ORRSR1,R1,R2;4311ORRSR1,R8 ;EA510108----32位指令,因?yàn)镽8的原因16位表示不了ORRSR0,R1,R2;EA510002=11101010010100010000000000000010演示encode(寄存器用3位編碼,r0-r7為16位指令,若用r8-r12就得用32位指令---S需要占位編碼)第三章CortexM3指令系統(tǒng)---UnifiedAssemblerLanguage(統(tǒng)一的匯編語(yǔ)言)為了最有力地支持Thumb‐2,引了一個(gè)“統(tǒng)一匯編語(yǔ)言(UAL)”語(yǔ)法機(jī)制。對(duì)于16位指令和32位指令均能實(shí)現(xiàn)的一些操作(常見于數(shù)據(jù)處理操作),有時(shí)雖然指令的實(shí)際操作數(shù)不同,或者對(duì)立即數(shù)的長(zhǎng)度有不同的限制,但是匯編器允許開發(fā)者以相同的語(yǔ)法格式書寫,并且由匯編器來(lái)決定是使用16位指令,還是使用32位指令。以前,Thumb的語(yǔ)法和ARM的語(yǔ)法不同,在有了UAL之后,兩者的書寫格式就統(tǒng)一了。 ADD R0,R1;傳統(tǒng)的Thumb語(yǔ)法 ADD R0,R0,R1;UAL語(yǔ)法允許的等值寫法(R0=R0+R1)第三章CortexM3指令系統(tǒng)---UnifiedAssemblerLanguage(統(tǒng)一的匯編語(yǔ)言)在Thumb‐2指令集中,有些操作既可以由16位指令完成,也可以由32位指令完成。例如,R0=R0+1這樣的操作,16位的與32位的指令都提供了助記符為“ADD”的指令。在UAL下,你可以讓匯編器決定用哪個(gè),也可以手工指定是用16位的還是32位的: ADDS R0,#1;匯編器將為了節(jié)省空間而使用16位指令 ADDS.N R0,#1;指定使用16位指令(N=Narrow) ADDS.W R0,#1;指定使用32位指令(W=Wide).W(Wide)后綴指定32位指令。如果沒有給出后綴,匯編器會(huì)先試著用16位指令以縮小代碼體積,如果不行再使用32位指令。因此,使用“.N”其實(shí)是多此一舉,不過匯編器可能仍然允許這樣的語(yǔ)法。再次重申,這是ARM公司匯編器的語(yǔ)法,其它匯編器的可能略有區(qū)別,但如果沒有給出后綴,匯編器就總是會(huì)盡量選擇更短的指令。KEILMDK5純匯編程序工程架構(gòu)(啟動(dòng)文件startup.s)

STACK_TOP EQU0x20005000 ;宏定義主堆棧指針STACK_TOP

IMPORT mycode AREA RESET, CODE ;代碼段的名字RESET(必須為RESET)

DCD STACK_TOP ;向量表第一項(xiàng):堆棧指針值

DCD start

;向量表第二項(xiàng):主程序入口地址

ENTRY ;程序的入口start MOVR0,#0 MOVR1,#10 LDRR2,=mycode BLXR2 ;轉(zhuǎn)名稱為mycode的用戶程序deadloop B deadloop ;在此死循環(huán),空等待

END第三章CortexM3指令系統(tǒng)---匯編語(yǔ)言基礎(chǔ) EXPORT mycode AREA ADDCODE,CODE ;代碼段的名字ADDCODE

mycode ADD R0,R0,R1 SUBS R1,#1 BNE mycode BX R14 END用戶匯編文件:mycode.s第三章CortexM3指令系統(tǒng)---匯編語(yǔ)言基礎(chǔ)演示1-100add純匯編工程演示1-100addcall純匯編工程課后作業(yè)任務(wù)要求:參照

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論