cortex-m34基礎4指令系統(tǒng)-實時嵌入式-硬件基礎課件_第1頁
cortex-m34基礎4指令系統(tǒng)-實時嵌入式-硬件基礎課件_第2頁
cortex-m34基礎4指令系統(tǒng)-實時嵌入式-硬件基礎課件_第3頁
cortex-m34基礎4指令系統(tǒng)-實時嵌入式-硬件基礎課件_第4頁
cortex-m34基礎4指令系統(tǒng)-實時嵌入式-硬件基礎課件_第5頁
已閱讀5頁,還剩173頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

11、ARMv7概述2.Cortex-M3基礎

2.1結(jié)構框圖

2.2操作模式、特權等級2.3存器組2.4流水線

2.5總線

2.6存儲系統(tǒng)

2.7中斷和異常

2.8SYSTICK定時器主要內(nèi)容

2.9低功耗2.10復位2.11MPU2.12調(diào)試架構2.13調(diào)試部件

3.Cortex-M3指令集

3.1指令集綜述

3.2尋址方式

3.3指令集介紹

4.K60硬件基礎11、ARMv7概述主要內(nèi)容2.9低功耗21、ARMv7概述2.Cortex-M3基礎

2.1結(jié)構框圖

2.2操作模式、特權等級2.3存器組2.4流水線

2.5總線

2.6存儲系統(tǒng)

2.7中斷和異常

2.8SYSTICK定時器主要內(nèi)容

2.9低功耗2.10復位2.11MPU2.12調(diào)試架構2.13調(diào)試部件

3.Cortex-M3指令集

3.1指令集綜述

3.2尋址方式

3.3指令集介紹

4.K60硬件基礎21、ARMv7概述主要內(nèi)容2.9低功耗31、ARMv7概述2.Cortex-M3基礎

2.1結(jié)構框圖

2.2操作模式、特權等級2.3存器組2.4流水線

2.5總線

2.6存儲系統(tǒng)

2.7中斷和異常

2.8SYSTICK定時器主要內(nèi)容

2.9低功耗2.10復位2.11MPU2.12調(diào)試架構2.13調(diào)試部件

3.Cortex-M3指令集

3.1指令集綜述

3.2尋址方式

3.3指令集介紹

4.K60硬件基礎31、ARMv7概述主要內(nèi)容2.9低功耗1.CM3程序的文件類型:C程序:CM3開發(fā)中大部分程序使用C語言編寫,文件類型為“*.C”;匯編程序:涉及到硬件底層操作的代碼有時必須使用匯編語言編寫,文件類型為“*.S”。2.為什么學習CM3指令系統(tǒng):操作系統(tǒng)移植編寫啟動代碼方便程序調(diào)試1.CM3程序的文件類型:5概述5概述1.處理器的尋址方式;2.指令的特點;3.指令的種類,它能完成哪些功能。學習重點1.處理器的尋址方式;學習重點71、ARMv7概述2.Cortex-M3基礎

2.1結(jié)構框圖

2.2操作模式、特權等級2.3存器組2.4流水線

2.5總線

2.6存儲系統(tǒng)

2.7中斷和異常

2.8SYSTICK定時器主要內(nèi)容

2.9低功耗2.10復位2.11MPU2.12調(diào)試架構2.13調(diào)試部件

3.Cortex-M3指令集

3.1指令集綜述

3.2尋址方式

3.3指令集介紹

4.K60硬件基礎71、ARMv7概述主要內(nèi)容2.9低功耗3.2ARM處理器尋址方式尋址方式分類

尋址方式是根據(jù)指令中給出的地址碼字段來實現(xiàn)尋找真實操作數(shù)地址的方式。ARM處理器具有8種基本尋址方式。1.寄存器尋址;

2.立即尋址;3.寄存器移位尋址; 4.寄存器間接尋址;5.基址尋址; 6.多寄存器尋址;7.堆棧尋址; 8.相對尋址。3.2ARM處理器尋址方式尋址方式分類尋

操作數(shù)的值在寄存器中,指令中的地址碼字段指出的是寄存器編號,指令執(zhí)行時直接取出寄存器值來操作。寄存器尋址指令舉例如下:MOVR1,R2 ;將R2的值存入R1SUBR0,R1,R2;將R1的值減去R2的值,結(jié)果保存到R0

0xAA0x55R2R1尋址方式分類——寄存器尋址MOVR1,R20xAA3.2ARM處理器尋址方式操作數(shù)的值在寄存器中,指令中的地址碼字段指出

立即尋址指令中的操作碼字段后面的地址碼部分即是操作數(shù)本身,也就是說,數(shù)據(jù)就包含在指令當中,取出指令也就取出了可以立即使用的操作數(shù)(這樣的數(shù)稱為立即數(shù))。立即尋址指令舉例如下:SUBS R0,R0,#1;R0減1,結(jié)果放入R0,并且影響標志位MOV R0,#0xFF000;將立即數(shù)0xFF000裝入R0寄存器

0x55R0MOVR0,#0xFF00程序存儲尋址方式分類——立即尋址MOVR0,#0xFF000xFF00從代碼中獲得數(shù)據(jù)3.2ARM處理器尋址方式立即尋址指令中的操作碼字段后面的地址碼部分即

寄存器移位尋址是ARM指令集特有的尋址方式。當?shù)?個操作數(shù)是寄存器移位方式時,第2個寄存器操作數(shù)在與第1個操作數(shù)結(jié)合之前,選擇進行移位操作。寄存器移位尋址指令舉例如下:MOV R0,R2,LSL#3

;R2的值左移3位,結(jié)果放入R0, ;即是R0=R2×8ANDS R1,R1,R2,LSLR3

;R2的值左移R3位,然后和R1相 ;“與”操作,結(jié)果放入R10x55R0R20x01尋址方式分類——寄存器移位尋址MOVR0,R2,LSL#30x080x08邏輯左移3位3.2ARM處理器尋址方式寄存器移位尋址是ARM指令集特有的尋址方式。

寄存器間接尋址指令中的地址碼給出的是一個通用寄存器的編號,所需的操作數(shù)保存在寄存器指定地址的存儲單元中,即寄存器為操作數(shù)的地址指針。寄存器間接尋址指令舉例如下:LDR R1,[R2] ;將R2指向的存儲單元的數(shù)據(jù)讀出

;保存在R1中SWP R1,R1,[R2] ;將寄存器R1的值和R2指定的存儲

;單元的內(nèi)容交換0x55R0R20x400000000xAA0x40000000尋址方式分類——寄存器間接尋址LDRR0,[R2]0xAA3.2ARM處理器尋址方式寄存器間接尋址指令中的地址碼給出的是一個通用

基址尋址就是將基址寄存器的內(nèi)容與指令中給出的偏移量相加,形成操作數(shù)的有效地址?;穼ぶ酚糜谠L問基址附近的存儲單元,常用于查表、數(shù)組操作、功能部件寄存器訪問等?;穼ぶ分噶钆e例如下:LDR R2,[R3,#0x0C] ;讀取R3+0x0C地址上的存儲單元

;的內(nèi)容,放入R2STR R1,[R0,#-4]! ;先R0=R0-4,然后把R1的值寄存

;到保存到R0指定的存儲單元尋址方式分類——基址尋址0x55R2R30x400000000xAA0x4000000CLDRR2,[R3,#0x0C]0xAA將R3+0x0C作為地址裝載數(shù)據(jù)3.2ARM處理器尋址方式基址尋址就是將基址寄存器的內(nèi)容與指令中給出的

多寄存器尋址一次可傳送幾個寄存器值,允許一條指令傳送16個寄存器的任何子集或所有寄存器。多寄存器尋址指令舉例如下:LDMIA R1!,{R2-R7,R12};將R1指向的單元中的數(shù)據(jù)讀出到

;R2~R7、R12中(R1自動加1)STMIA R0!,{R2-R7,R12};將寄存器R2~R7、R12的值保

;存到R0指向的存儲;單元中

;(R0自動加1)0x40000000R1R20x??0x010x400000000x??R3R40x??R60x??0x020x030x040x400000040x400000080x4000000C存儲器尋址方式分類——多寄存器尋址LDMIAR1!,{R2-R4,R6}0x010x020x030x040x400000103.2ARM處理器尋址方式多寄存器尋址一次可傳送幾個寄存器值,允許一條

堆棧是一個按特定順序進行存取的存儲區(qū),操作順序為“后進先出”。堆棧尋址是隱含的,它使用一個專門的寄存器(堆棧指針)指向一塊存儲區(qū)域(堆棧),指針所指向的存儲單元即是堆棧的棧頂。存儲器堆??煞譃閮煞N:向上生長:向高地址方向生長,稱為遞增堆棧向下生長:向低地址方向生長,稱為遞減堆棧尋址方式分類——堆棧尋址3.2ARM處理器尋址方式堆棧是一個按特定順序進行存取的存儲區(qū),操作順尋址方式分類——堆棧尋址棧底棧頂棧區(qū)SP堆棧存儲區(qū)棧頂棧底棧區(qū)SP向下增長向上增長0x123456780x12345678堆棧壓棧堆棧壓棧3.2ARM處理器尋址方式尋址方式分類——堆棧尋址棧底棧頂棧區(qū)SP堆棧存儲區(qū)棧頂棧底棧頂SP棧頂SP棧底空堆棧棧底滿堆棧堆棧指針指向最后壓入的堆棧的有效數(shù)據(jù)項,稱為滿堆棧;堆棧指針指向下一個待壓入數(shù)據(jù)的空位置,稱為空堆棧。尋址方式分類——堆棧尋址0x123456780x12345678棧頂SP0x12345678棧頂SP壓棧壓棧3.2ARM處理器尋址方式棧頂SP棧頂SP棧底空堆棧棧底滿堆棧堆棧指針指向最后壓入所以可以組合出四種類型的堆棧方式:滿遞增:堆棧向上增長,堆棧指針指向內(nèi)含有效數(shù)據(jù)項的最高地址。指令如LDMFA、STMFA等;空遞增:堆棧向上增長,堆棧指針指向堆棧上的第一個空位置。指令如LDMEA、STMEA等;滿遞減:堆棧向下增長,堆棧指針指向內(nèi)含有效數(shù)據(jù)項的最低地址。指令如LDMFD、STMFD等;空遞減:堆棧向下增長,堆棧指針向堆棧下的第一個空位置。指令如LDMED、STMED等。尋址方式分類——堆棧尋址3.2ARM處理器尋址方式所以可以組合出四種類型的堆棧方式:尋址方式分類——堆棧尋址3

相對尋址是基址尋址的一種變通。由程序計數(shù)器PC提供基準地址,指令中的地址碼字段作為偏移量,兩者相加后得到的地址即為操作數(shù)的有效地址。相對尋址指令舉例如下:

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

BEQ LOOP ;條件跳轉(zhuǎn)到LOOP標號處

...LOOP MOV R6,#1 ...SUBR1 ...尋址方式分類——相對尋址3.2ARM處理器尋址方式相對尋址是基址尋址的一種變通。由程序計數(shù)器P201、ARMv7概述2.Cortex-M3基礎

2.1結(jié)構框圖

2.2操作模式、特權等級2.3存器組2.4流水線

2.5總線

2.6存儲系統(tǒng)

2.7中斷和異常

2.8SYSTICK定時器主要內(nèi)容

2.9低功耗2.10復位2.11MPU2.12調(diào)試架構2.13調(diào)試部件

3.Cortex-M3指令集

3.1指令集綜述

3.2尋址方式

3.3指令集介紹

4.K60硬件基礎201、ARMv7概述主要內(nèi)容2.9低功耗3.3指令集介紹3.3.1匯編基礎3.3.2指令集3.3.3CM3中的前衛(wèi)指令3.3指令集介紹簡單的程序;文件名:TEST1.S

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

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

ENTRY ;標識程序入口

CODE32 ;聲明32位ARM指令START MOV R0,#0 ;設置參數(shù)

MOV R1,#10LOOP BL ADD_SUB ;調(diào)用子程序ADD_SUB

B LOOP ;跳轉(zhuǎn)到LOOPADD_SUB

ADDS R0,R0,R1 ;R0=R0+R1 MOV PC,LR ;子程序返回

END ;文件結(jié)束

使用“;”進行注釋標號頂格寫實際代碼段聲明文件結(jié)束簡單的程序;文件名:TEST1.S使用“;”進行注釋標號頂3.3指令集介紹

3.3.1匯編基礎3.3.2指令集3.3.3CM3中的前衛(wèi)指令3.3指令集介紹243.3.1匯編基礎1、基本語法標號

操作碼操作數(shù)1,操作數(shù)2,……;注釋注釋:1)標號可選,如果有,必須頂格寫。標號的作用是讓匯編器來計算程序轉(zhuǎn)移地址。2)操作碼是指令的助記符,前面必須至少有一個空白符。3)第1操作數(shù),通常給出本指令的執(zhí)行結(jié)果的存儲位置。4)第2操作數(shù)以后的操作數(shù),通常是參與運算的數(shù)據(jù)或其位置。5);后的為注釋,不影響匯編器的工作。243.3.1匯編基礎1、基本語法標號注釋:252、匯編語言中的后綴1)條件執(zhí)行后綴通常用于跳轉(zhuǎn)指令;2)如果其他指令在IF-THEN指令塊中,也可以使用條件執(zhí)行后;3)條件后綴和S后綴可同時使用。252、匯編語言中的后綴1)條件執(zhí)行后綴通常用于跳轉(zhuǎn)指令;263、統(tǒng)一匯編語言ULA

1)為了支持Thumb-2,并且最大程度的發(fā)揮其功能,ARM匯編器引入了一個“統(tǒng)一匯編語言”ULA,同時支持16位和32位指令。

2)在ULA語法中,指令使用后綴s才可以影響APSR。

3)在UAL下,匯編器能主動決定用16位指令或32位指令,也可以手工指定;263、統(tǒng)一匯編語言ULA1)為了支持Thumb-2,3.3指令集介紹3.3.1匯編基礎

3.3.2指令集3.3.3CM3中的前衛(wèi)指令3.3指令集介紹存儲器訪問指令算術運算指令邏輯運算指令移位、循環(huán)指令展開指令數(shù)據(jù)反轉(zhuǎn)指令位域處理和操作指令條件跳轉(zhuǎn)指令屏障和存儲器屏障指令飽和運算指令28存儲器訪問指令28存儲器訪問指令——后綴裝載指令:LDRx目標寄存器,源地址保存指令:STRx源寄存器,目標地址B:從/向指定位置加載/存儲字節(jié)H:從/向指定位置加載/存儲半字無:從/向指定位置加載/存儲字EX:排他性加載/存儲D:從/向指定位置加載/存儲雙字存儲器訪問指令——后綴裝載指令:LDRx目標寄存器,存儲器訪問指令——地址形式裝載指令:LDRx目標寄存器,源地址保存指令:STRx源寄存器,目標地址立即數(shù):立即數(shù)可以是一個無符號的數(shù)值。這個數(shù)據(jù)可以加到基址寄存器,也可以從基址寄存器中減去這個數(shù)值。如:LDRR1,[R0,#0x12]

寄存器:寄存器中的數(shù)值可以加到基址寄存器,也可以從基址寄存器中減去這個數(shù)值。如:LDRR1,[R0,R2]

寄存器及移位常數(shù):寄存器移位后的值可以加到基址寄存器,也可以從基址寄存器中減去這個數(shù)值。如:LDRR1,[R0,R2,LSL

#2]存儲器訪問指令——地址形式裝載指令:LDRx目標寄存器存儲器訪問指令——尋址方式裝載指令:LDRx目標寄存器,源地址保存指令:STRx源寄存器,目標地址零偏移:如:LDRRd,[Rn]前索引偏移:

如:LDRRd,[Rn,#0x04]!程序相對偏移:

如:LDRRd,labe1

后索引偏移:

如:LDRRd,[Rn],#0x04存儲器訪問指令——尋址方式裝載指令:LDRx目標寄存存儲器訪問指令——單寄存器加載/存儲存儲器訪問指令——單寄存器加載/存儲0x55R2R50x400000000x123456780x40000000存儲器地址應用示例:LDR R2,[R5]

;將R5指向地址的字數(shù)據(jù)存入R20x12345678ARM存儲器訪問指令——單寄存器加載應用0x55R2R50x400000000x123456780x0x12345678R1R20x400000000x??0x40000004存儲器地址應用示例:STR R1,[R2,#0x04]

;將R1的數(shù)據(jù)存儲到R0+0x04地址0x12345678+4ARM存儲器訪問指令——單寄存器保存應用0x12345678R1R20x400000000x??0x3535存儲器訪問指令——多寄存器存取裝載指令:LDM

源地址,目標寄存器列表存儲指令:STM

目標地址,源寄存器列表存儲器源地址目標寄存器1目標寄存器n存儲器目標地址源寄存器1源寄存器n存儲器訪問指令——多寄存器存取裝載指令:LDM源地址存儲器訪問指令——多寄存器存取裝載指令:LDM存儲指令:STMxxLDM/STM指令搭配不同的后綴實現(xiàn)不同方式地址增長方式:IA:每次傳送后地址加4DB:每次傳送前地址減4存儲器訪問指令——多寄存器存取裝載指令:LDM存儲指令:ST存儲器訪問指令——多寄存器加載/存儲存儲器訪問指令——多寄存器加載/存儲ARM存儲器訪問指令——多寄存器存取數(shù)據(jù)塊傳送指令操作過程如右圖所示,其中R1為指令執(zhí)行前的基址寄存器,R1’則為指令執(zhí)行后的基址寄存器。R5R6R7R1R1’指令STMIAR1!,{R5-R7}4008H4004H4000H4014H4010H400CHR5R6R7R1’R1指令STMDBR1!,{R5-R7}4008H4004H4000H4014H4010H400CHARM存儲器訪問指令——多寄存器存取數(shù)據(jù)塊傳送指令操作過程如0x40000000R1R20x??0x010x400000000x??R3R40x??R60x??0x020x030x040x400000040x400000080x4000000C存儲器0x010x020x030x040x40000010應用示例:LDMIAR1!,{R2-R4,R6}

將R1指向的內(nèi)存數(shù)據(jù)讀取到R0-R4和R6寄存器中存儲器訪問指令——多寄存器存取0x40000000R1R20x??0x010x40000041另外兩種存儲器操作為棧的PUSH和POP.PUSH{R0,R4-R7,R9}POP{R2,R3}41另外兩種存儲器操作為棧的PUSH和POP.PUSH{R42存儲器訪問指令算術運算指令邏輯運算指令移位、循環(huán)指令展開指令數(shù)據(jù)反轉(zhuǎn)指令位域處理和操作指令條件跳轉(zhuǎn)指令屏障和存儲器屏障指令飽和運算指令42存儲器訪問指令常見的算術四則運算指令常見的算術四則運算指令44存儲器訪問指令算術運算指令邏輯運算指令移位、循環(huán)指令展開指令數(shù)據(jù)反轉(zhuǎn)指令位域處理和操作指令條件跳轉(zhuǎn)指令屏障和存儲器屏障指令飽和運算指令44存儲器訪問指令cortex-m34基礎4指令系統(tǒng)--實時嵌入式-硬件基礎課件46存儲器訪問指令算術運算指令邏輯運算指令移位、循環(huán)指令展開指令數(shù)據(jù)反轉(zhuǎn)指令位域處理和操作指令條件跳轉(zhuǎn)指令屏障和存儲器屏障指令飽和運算指令46存儲器訪問指令47移位操作指令47移位操作指令cortex-m34基礎4指令系統(tǒng)--實時嵌入式-硬件基礎課件49存儲器訪問指令算術運算指令邏輯運算指令移位、循環(huán)指令展開指令數(shù)據(jù)反轉(zhuǎn)指令位域處理和操作指令條件跳轉(zhuǎn)指令屏障和存儲器屏障指令飽和運算指令49存儲器訪問指令50帶符號展開指令SXTBRd,Rm;Rd=signext(Rm[7:0])SXTHRd,Rm;Rd=signext(Rm[15:0])50帶符號展開指令SXTBRd,Rm;Rd=signe51存儲器訪問指令算術運算指令邏輯運算指令移位、循環(huán)指令展開指令數(shù)據(jù)反轉(zhuǎn)指令位域處理和操作指令條件跳轉(zhuǎn)指令屏障和存儲器屏障指令飽和運算指令51存儲器訪問指令52數(shù)據(jù)反轉(zhuǎn)指令52數(shù)據(jù)反轉(zhuǎn)指令53存儲器訪問指令算術運算指令邏輯運算指令移位、循環(huán)指令展開指令數(shù)據(jù)反轉(zhuǎn)指令位域處理和操作指令條件跳轉(zhuǎn)指令屏障和存儲器屏障指令飽和運算指令53存儲器訪問指令54位域處理指令54位域處理指令5555565657存儲器訪問指令算術運算指令邏輯運算指令移位、循環(huán)指令展開指令數(shù)據(jù)反轉(zhuǎn)指令位域處理和操作指令條件跳轉(zhuǎn)指令屏障和存儲器屏障指令飽和運算指令57存儲器訪問指令58跳轉(zhuǎn)依據(jù)在CM3中,下列指令可以更新PSR中的標志:

16位算術邏輯指令

32位帶S后綴的算術邏輯指令

比較指令(如,CMP/CMN)和測試指令(如TST/TEQ)

直接寫PSR/APSR(MSR指令)58跳轉(zhuǎn)依據(jù)在CM3中,下列指令可以更新PSR中的標志:操作碼條件助記符標志含義0000EQZ=1相等0001NEZ=0不相等0010CS/HSC=1無符號數(shù)大于或等于0011CC/LOC=0無符號數(shù)小于0100MIN=1負數(shù)0101PLN=0正數(shù)或零0110VSV=1溢出0111VCV=0沒有溢出1000HIC=1,Z=0無符號數(shù)大于1001LSC=0,Z=1無符號數(shù)小于或等于1010GEN=V有符號數(shù)大于或等于

1011LTN!=V有符號數(shù)小于

1100GTZ=0,N=V有符號數(shù)大于

1101LEZ=1,N!=V有符號數(shù)小于或等于

1110AL任何無條件執(zhí)行

(指令默認條件)1111NV任何從不執(zhí)行(不要使用)指令條件碼表操作碼條件助記符標志含義0000EQZ=1相等0001NEZ60BEQlabel;當Z=1時轉(zhuǎn)移CMPR0,R1;比較R0,R1ITTETGT;IfR0>R1Then(T代表Then,E代表Else)MOVGTR2,R0MOVLER2,R0MOVGTR3,R1MOVGTR3,R160BEQlabel;當Z=1時轉(zhuǎn)移C61存儲器訪問指令算術運算指令邏輯運算指令移位、循環(huán)指令展開指令數(shù)據(jù)反轉(zhuǎn)指令位域處理和操作指令條件跳轉(zhuǎn)指令屏障和存儲器屏障指令飽和運算指令61存儲器訪問指令62隔離指令在一些結(jié)構比較復雜的存儲器系統(tǒng)中是必要的。在這類系統(tǒng)中,如果沒有必要的隔離,會導致系統(tǒng)發(fā)生紊亂危象(racecondition),(相當于數(shù)電中的“競爭與冒險”)。如果RAM的訪問是帶緩沖的,并且寫完之后馬上讀,就必須讓它“喘口氣”——用DMB指令來隔離,以保證緩沖中的數(shù)據(jù)已經(jīng)落實到RAM中。DSB比DMB更保險(當然也是有執(zhí)行代價的),它是寧可錯殺也不漏網(wǎng)——清空了寫緩沖,使得任何它后面的指令,不管要不要使用先前的存儲器訪問結(jié)果,通通等待訪問完成。如果某個程序從下一條要執(zhí)行的指令處更新了自己,但是先前的舊指令已經(jīng)被預取到流水線中去了,此時就必須清洗流水線,把舊版本的指令洗出去,再預取新版本的指令。因此,必須在被更新代碼段的前面使用ISB,以保證舊的代碼從流水線中被清洗出去,不再有機會執(zhí)行。62隔離指令在一些結(jié)構比較復雜的存儲器系統(tǒng)中是必要的63存儲器訪問指令算術運算指令邏輯運算指令移位、循環(huán)指令展開指令數(shù)據(jù)反轉(zhuǎn)指令位域處理和操作指令條件跳轉(zhuǎn)指令屏障和存儲器屏障指令飽和運算指令63存儲器訪問指令64

CM3中的飽和運算指令分為兩種:1)“沒有直流分量”的交流信號飽和——帶符號飽和運算;

2)無符號飽和運算則類似于“削頂失真+單向?qū)ā薄?/p>

64CM3中的飽和運算指令分為兩種:65指令名

功能描述SSAT.WRd,#imm5,Rn,{,shift}以帶符號數(shù)的邊界進行飽和運算(交流)USAT.WRd,#imm5,Rn,{,shift}以無符號數(shù)的邊界進行飽和運算(帶紋波的直流)65指令名功能描述SSAT.WRd,#imm53.3指令集介紹3.3.1匯編基礎3.3.2指令集

3.3.3CM3中的前衛(wèi)指令3.3指令集介紹MSR/MRSIF-THENSDIV/UDIVREV/REVH/REVSHSXTB/SXTH/UXTB/UXTHUBFX/SBFXLDRD/STRD表格跳轉(zhuǎn)字節(jié)/表格跳轉(zhuǎn)半字67MSR/MRS6768MRS、MSR專用特殊寄存器訪問指令,只能在特權級狀態(tài)下使用,APSR除外,APSR可以在用戶級狀態(tài)下使用。MRS<Rn>,<SReg>;加載特殊功能寄存器的值到RnMSR<Sreg>,<Rn>;存儲Rn的值到特殊功能寄存器指定PSP進行更新的例子:LDRR0,=0x20008000MSRPSP,R0BXLR;如果是從異常(Handler模式)返回到用戶線程模式,則使用新的PSP的值作為棧頂指針實質(zhì)上是替換了之前線程狀態(tài)使用的PSP指針(所指向的內(nèi)存地址空間)68MRS、MSR專用特殊寄存器訪問指令,只能在特6969MSR/MRSIF-THENSDIV/UDIVREV/REVH/REVSHSXTB/SXTH/UXTB/UXTHUBFX/SBFXLDRD/STRD表格跳轉(zhuǎn)字節(jié)/表格跳轉(zhuǎn)半字70MSR/MRS7071IF-THEN(IT)指令圍起一個快,里面最多有4條指令,可以條件執(zhí)行。IT指令已經(jīng)帶了一個“T”,因此還可以最多再帶3個“T”或者“E”,并且對T和E的順序沒有要求,其中T對應條件成立時執(zhí)行的語句,E對應條件不成立時執(zhí)行的語句。71IF-THEN(IT)指令圍起一個快,里面最多有7272MSR/MRSIF-THENSDIV/UDIVREV/REVH/REVSHSXTB/SXTH/UXTB/UXTHUBFX/SBFXLDRD/STRD表格跳轉(zhuǎn)字節(jié)/表格跳轉(zhuǎn)半字73MSR/MRS737432位硬件除法指令7432位硬件除法指令MSR/MRSIF-THENSDIV/UDIVREV/REVH/REVSHSXTB/SXTH/UXTB/UXTHUBFX/SBFXLDRD/STRD表格跳轉(zhuǎn)字節(jié)/表格跳轉(zhuǎn)半字75MSR/MRS7576這些指令專門服務于大端模式和小端模式的轉(zhuǎn)換,最常用于網(wǎng)絡應用程序中(網(wǎng)絡通常是大端,主機通常是小端)76這些指令專門服務于大端模式和小端模式的轉(zhuǎn)換,最常77

RBIT比前面的REV之流更精細,它是按位反轉(zhuǎn)的,相當于把32位整數(shù)的二進制表示法水平旋轉(zhuǎn)180度。其格式為:77RBIT比前面的REV之流更精細,它是按位MSR/MRSIF-THENSDIV/UDIVREV/REVH/REVSHSXTB/SXTH/UXTB/UXTHUBFX/SBFXLDRD/STRD表格跳轉(zhuǎn)字節(jié)/表格跳轉(zhuǎn)半字78MSR/MRS7879指令格式79指令格式MSR/MRSIF-THENSDIV/UDIVREV/REVH/REVSHSXTB/SXTH/UXTB/UXTHUBFX/SBFXLDRD/STRD表格跳轉(zhuǎn)字節(jié)/表格跳轉(zhuǎn)半字80MSR/MRS8081UBFX/SBFX都是位段提取指令,語法格式為:UBFX從Rn中取出任一個位段,執(zhí)行零擴展后放到Rd中。SBFX也抽取任意的位段,但是以帶符號的方式進行擴展。81UBFX/SBFX都是位段提取指令,語法格式為:UBFMSR/MRSIF-THENSDIV/UDIVREV/REVH/REVSHSXTB/SXTH/UXTB/UXTHUBFX/SBFXLDRD/STRD表格跳轉(zhuǎn)字節(jié)/表格跳轉(zhuǎn)半字82MSR/MRS828364位數(shù)據(jù)加載/存儲指令8364位數(shù)據(jù)加載/存儲指令MSR/MRSIF-THENSDIV/UDIVREV/REVH/REVSHSXTB/SXTH/UXTB/UXTHUBFX/SBFXLDRD/STRD表格跳轉(zhuǎn)字節(jié)/表格跳轉(zhuǎn)半字(TBB/TBH)84MSR/MRS8485TBB(查表跳轉(zhuǎn)字節(jié)范圍的偏移量)指令和TBH(查表跳轉(zhuǎn)半字范圍的偏移量)指令,分別用于從一個字節(jié)數(shù)組表中查找轉(zhuǎn)移地址,和從半字數(shù)組表中查找轉(zhuǎn)移地址。TBB和TBH只能做前向跳轉(zhuǎn),即偏移量只能是無符號整數(shù)。因為CM3的指令至少是按半字對齊的,表中的數(shù)值都是在左移一位后才作為前向跳轉(zhuǎn)的偏移量的。又因為PC的值為當前地址+4,故TBB的跳轉(zhuǎn)范圍可達255*2+4=514;TBH的跳轉(zhuǎn)范圍更可高達65535*2+4=128KB+2。Rn指向跳轉(zhuǎn)表的基質(zhì),Rm則給出表中元素的下標。85TBB(查表跳轉(zhuǎn)字節(jié)范圍的偏移量)指令和TBH(86868787888889THEEND.89THEEND.901、ARMv7概述2.Cortex-M3基礎

2.1結(jié)構框圖

2.2操作模式、特權等級2.3存器組2.4流水線

2.5總線

2.6存儲系統(tǒng)

2.7中斷和異常

2.8SYSTICK定時器主要內(nèi)容

2.9低功耗2.10復位2.11MPU2.12調(diào)試架構2.13調(diào)試部件

3.Cortex-M3指令集

3.1指令集綜述

3.2尋址方式

3.3指令集介紹

4.K60硬件基礎11、ARMv7概述主要內(nèi)容2.9低功耗911、ARMv7概述2.Cortex-M3基礎

2.1結(jié)構框圖

2.2操作模式、特權等級2.3存器組2.4流水線

2.5總線

2.6存儲系統(tǒng)

2.7中斷和異常

2.8SYSTICK定時器主要內(nèi)容

2.9低功耗2.10復位2.11MPU2.12調(diào)試架構2.13調(diào)試部件

3.Cortex-M3指令集

3.1指令集綜述

3.2尋址方式

3.3指令集介紹

4.K60硬件基礎21、ARMv7概述主要內(nèi)容2.9低功耗921、ARMv7概述2.Cortex-M3基礎

2.1結(jié)構框圖

2.2操作模式、特權等級2.3存器組2.4流水線

2.5總線

2.6存儲系統(tǒng)

2.7中斷和異常

2.8SYSTICK定時器主要內(nèi)容

2.9低功耗2.10復位2.11MPU2.12調(diào)試架構2.13調(diào)試部件

3.Cortex-M3指令集

3.1指令集綜述

3.2尋址方式

3.3指令集介紹

4.K60硬件基礎31、ARMv7概述主要內(nèi)容2.9低功耗1.CM3程序的文件類型:C程序:CM3開發(fā)中大部分程序使用C語言編寫,文件類型為“*.C”;匯編程序:涉及到硬件底層操作的代碼有時必須使用匯編語言編寫,文件類型為“*.S”。2.為什么學習CM3指令系統(tǒng):操作系統(tǒng)移植編寫啟動代碼方便程序調(diào)試1.CM3程序的文件類型:94概述5概述1.處理器的尋址方式;2.指令的特點;3.指令的種類,它能完成哪些功能。學習重點1.處理器的尋址方式;學習重點961、ARMv7概述2.Cortex-M3基礎

2.1結(jié)構框圖

2.2操作模式、特權等級2.3存器組2.4流水線

2.5總線

2.6存儲系統(tǒng)

2.7中斷和異常

2.8SYSTICK定時器主要內(nèi)容

2.9低功耗2.10復位2.11MPU2.12調(diào)試架構2.13調(diào)試部件

3.Cortex-M3指令集

3.1指令集綜述

3.2尋址方式

3.3指令集介紹

4.K60硬件基礎71、ARMv7概述主要內(nèi)容2.9低功耗3.2ARM處理器尋址方式尋址方式分類

尋址方式是根據(jù)指令中給出的地址碼字段來實現(xiàn)尋找真實操作數(shù)地址的方式。ARM處理器具有8種基本尋址方式。1.寄存器尋址;

2.立即尋址;3.寄存器移位尋址; 4.寄存器間接尋址;5.基址尋址; 6.多寄存器尋址;7.堆棧尋址; 8.相對尋址。3.2ARM處理器尋址方式尋址方式分類尋

操作數(shù)的值在寄存器中,指令中的地址碼字段指出的是寄存器編號,指令執(zhí)行時直接取出寄存器值來操作。寄存器尋址指令舉例如下:MOVR1,R2 ;將R2的值存入R1SUBR0,R1,R2;將R1的值減去R2的值,結(jié)果保存到R0

0xAA0x55R2R1尋址方式分類——寄存器尋址MOVR1,R20xAA3.2ARM處理器尋址方式操作數(shù)的值在寄存器中,指令中的地址碼字段指出

立即尋址指令中的操作碼字段后面的地址碼部分即是操作數(shù)本身,也就是說,數(shù)據(jù)就包含在指令當中,取出指令也就取出了可以立即使用的操作數(shù)(這樣的數(shù)稱為立即數(shù))。立即尋址指令舉例如下:SUBS R0,R0,#1;R0減1,結(jié)果放入R0,并且影響標志位MOV R0,#0xFF000;將立即數(shù)0xFF000裝入R0寄存器

0x55R0MOVR0,#0xFF00程序存儲尋址方式分類——立即尋址MOVR0,#0xFF000xFF00從代碼中獲得數(shù)據(jù)3.2ARM處理器尋址方式立即尋址指令中的操作碼字段后面的地址碼部分即

寄存器移位尋址是ARM指令集特有的尋址方式。當?shù)?個操作數(shù)是寄存器移位方式時,第2個寄存器操作數(shù)在與第1個操作數(shù)結(jié)合之前,選擇進行移位操作。寄存器移位尋址指令舉例如下:MOV R0,R2,LSL#3

;R2的值左移3位,結(jié)果放入R0, ;即是R0=R2×8ANDS R1,R1,R2,LSLR3

;R2的值左移R3位,然后和R1相 ;“與”操作,結(jié)果放入R10x55R0R20x01尋址方式分類——寄存器移位尋址MOVR0,R2,LSL#30x080x08邏輯左移3位3.2ARM處理器尋址方式寄存器移位尋址是ARM指令集特有的尋址方式。

寄存器間接尋址指令中的地址碼給出的是一個通用寄存器的編號,所需的操作數(shù)保存在寄存器指定地址的存儲單元中,即寄存器為操作數(shù)的地址指針。寄存器間接尋址指令舉例如下:LDR R1,[R2] ;將R2指向的存儲單元的數(shù)據(jù)讀出

;保存在R1中SWP R1,R1,[R2] ;將寄存器R1的值和R2指定的存儲

;單元的內(nèi)容交換0x55R0R20x400000000xAA0x40000000尋址方式分類——寄存器間接尋址LDRR0,[R2]0xAA3.2ARM處理器尋址方式寄存器間接尋址指令中的地址碼給出的是一個通用

基址尋址就是將基址寄存器的內(nèi)容與指令中給出的偏移量相加,形成操作數(shù)的有效地址?;穼ぶ酚糜谠L問基址附近的存儲單元,常用于查表、數(shù)組操作、功能部件寄存器訪問等?;穼ぶ分噶钆e例如下:LDR R2,[R3,#0x0C] ;讀取R3+0x0C地址上的存儲單元

;的內(nèi)容,放入R2STR R1,[R0,#-4]! ;先R0=R0-4,然后把R1的值寄存

;到保存到R0指定的存儲單元尋址方式分類——基址尋址0x55R2R30x400000000xAA0x4000000CLDRR2,[R3,#0x0C]0xAA將R3+0x0C作為地址裝載數(shù)據(jù)3.2ARM處理器尋址方式基址尋址就是將基址寄存器的內(nèi)容與指令中給出的

多寄存器尋址一次可傳送幾個寄存器值,允許一條指令傳送16個寄存器的任何子集或所有寄存器。多寄存器尋址指令舉例如下:LDMIA R1!,{R2-R7,R12};將R1指向的單元中的數(shù)據(jù)讀出到

;R2~R7、R12中(R1自動加1)STMIA R0!,{R2-R7,R12};將寄存器R2~R7、R12的值保

;存到R0指向的存儲;單元中

;(R0自動加1)0x40000000R1R20x??0x010x400000000x??R3R40x??R60x??0x020x030x040x400000040x400000080x4000000C存儲器尋址方式分類——多寄存器尋址LDMIAR1!,{R2-R4,R6}0x010x020x030x040x400000103.2ARM處理器尋址方式多寄存器尋址一次可傳送幾個寄存器值,允許一條

堆棧是一個按特定順序進行存取的存儲區(qū),操作順序為“后進先出”。堆棧尋址是隱含的,它使用一個專門的寄存器(堆棧指針)指向一塊存儲區(qū)域(堆棧),指針所指向的存儲單元即是堆棧的棧頂。存儲器堆??煞譃閮煞N:向上生長:向高地址方向生長,稱為遞增堆棧向下生長:向低地址方向生長,稱為遞減堆棧尋址方式分類——堆棧尋址3.2ARM處理器尋址方式堆棧是一個按特定順序進行存取的存儲區(qū),操作順尋址方式分類——堆棧尋址棧底棧頂棧區(qū)SP堆棧存儲區(qū)棧頂棧底棧區(qū)SP向下增長向上增長0x123456780x12345678堆棧壓棧堆棧壓棧3.2ARM處理器尋址方式尋址方式分類——堆棧尋址棧底棧頂棧區(qū)SP堆棧存儲區(qū)棧頂棧底棧頂SP棧頂SP棧底空堆棧棧底滿堆棧堆棧指針指向最后壓入的堆棧的有效數(shù)據(jù)項,稱為滿堆棧;堆棧指針指向下一個待壓入數(shù)據(jù)的空位置,稱為空堆棧。尋址方式分類——堆棧尋址0x123456780x12345678棧頂SP0x12345678棧頂SP壓棧壓棧3.2ARM處理器尋址方式棧頂SP棧頂SP棧底空堆棧棧底滿堆棧堆棧指針指向最后壓入所以可以組合出四種類型的堆棧方式:滿遞增:堆棧向上增長,堆棧指針指向內(nèi)含有效數(shù)據(jù)項的最高地址。指令如LDMFA、STMFA等;空遞增:堆棧向上增長,堆棧指針指向堆棧上的第一個空位置。指令如LDMEA、STMEA等;滿遞減:堆棧向下增長,堆棧指針指向內(nèi)含有效數(shù)據(jù)項的最低地址。指令如LDMFD、STMFD等;空遞減:堆棧向下增長,堆棧指針向堆棧下的第一個空位置。指令如LDMED、STMED等。尋址方式分類——堆棧尋址3.2ARM處理器尋址方式所以可以組合出四種類型的堆棧方式:尋址方式分類——堆棧尋址3

相對尋址是基址尋址的一種變通。由程序計數(shù)器PC提供基準地址,指令中的地址碼字段作為偏移量,兩者相加后得到的地址即為操作數(shù)的有效地址。相對尋址指令舉例如下:

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

BEQ LOOP ;條件跳轉(zhuǎn)到LOOP標號處

...LOOP MOV R6,#1 ...SUBR1 ...尋址方式分類——相對尋址3.2ARM處理器尋址方式相對尋址是基址尋址的一種變通。由程序計數(shù)器P1091、ARMv7概述2.Cortex-M3基礎

2.1結(jié)構框圖

2.2操作模式、特權等級2.3存器組2.4流水線

2.5總線

2.6存儲系統(tǒng)

2.7中斷和異常

2.8SYSTICK定時器主要內(nèi)容

2.9低功耗2.10復位2.11MPU2.12調(diào)試架構2.13調(diào)試部件

3.Cortex-M3指令集

3.1指令集綜述

3.2尋址方式

3.3指令集介紹

4.K60硬件基礎201、ARMv7概述主要內(nèi)容2.9低功耗3.3指令集介紹3.3.1匯編基礎3.3.2指令集3.3.3CM3中的前衛(wèi)指令3.3指令集介紹簡單的程序;文件名:TEST1.S

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

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

ENTRY ;標識程序入口

CODE32 ;聲明32位ARM指令START MOV R0,#0 ;設置參數(shù)

MOV R1,#10LOOP BL ADD_SUB ;調(diào)用子程序ADD_SUB

B LOOP ;跳轉(zhuǎn)到LOOPADD_SUB

ADDS R0,R0,R1 ;R0=R0+R1 MOV PC,LR ;子程序返回

END ;文件結(jié)束

使用“;”進行注釋標號頂格寫實際代碼段聲明文件結(jié)束簡單的程序;文件名:TEST1.S使用“;”進行注釋標號頂3.3指令集介紹

3.3.1匯編基礎3.3.2指令集3.3.3CM3中的前衛(wèi)指令3.3指令集介紹1133.3.1匯編基礎1、基本語法標號

操作碼操作數(shù)1,操作數(shù)2,……;注釋注釋:1)標號可選,如果有,必須頂格寫。標號的作用是讓匯編器來計算程序轉(zhuǎn)移地址。2)操作碼是指令的助記符,前面必須至少有一個空白符。3)第1操作數(shù),通常給出本指令的執(zhí)行結(jié)果的存儲位置。4)第2操作數(shù)以后的操作數(shù),通常是參與運算的數(shù)據(jù)或其位置。5);后的為注釋,不影響匯編器的工作。243.3.1匯編基礎1、基本語法標號注釋:1142、匯編語言中的后綴1)條件執(zhí)行后綴通常用于跳轉(zhuǎn)指令;2)如果其他指令在IF-THEN指令塊中,也可以使用條件執(zhí)行后;3)條件后綴和S后綴可同時使用。252、匯編語言中的后綴1)條件執(zhí)行后綴通常用于跳轉(zhuǎn)指令;1153、統(tǒng)一匯編語言ULA

1)為了支持Thumb-2,并且最大程度的發(fā)揮其功能,ARM匯編器引入了一個“統(tǒng)一匯編語言”ULA,同時支持16位和32位指令。

2)在ULA語法中,指令使用后綴s才可以影響APSR。

3)在UAL下,匯編器能主動決定用16位指令或32位指令,也可以手工指定;263、統(tǒng)一匯編語言ULA1)為了支持Thumb-2,3.3指令集介紹3.3.1匯編基礎

3.3.2指令集3.3.3CM3中的前衛(wèi)指令3.3指令集介紹存儲器訪問指令算術運算指令邏輯運算指令移位、循環(huán)指令展開指令數(shù)據(jù)反轉(zhuǎn)指令位域處理和操作指令條件跳轉(zhuǎn)指令屏障和存儲器屏障指令飽和運算指令117存儲器訪問指令28存儲器訪問指令——后綴裝載指令:LDRx目標寄存器,源地址保存指令:STRx源寄存器,目標地址B:從/向指定位置加載/存儲字節(jié)H:從/向指定位置加載/存儲半字無:從/向指定位置加載/存儲字EX:排他性加載/存儲D:從/向指定位置加載/存儲雙字存儲器訪問指令——后綴裝載指令:LDRx目標寄存器,存儲器訪問指令——地址形式裝載指令:LDRx目標寄存器,源地址保存指令:STRx源寄存器,目標地址立即數(shù):立即數(shù)可以是一個無符號的數(shù)值。這個數(shù)據(jù)可以加到基址寄存器,也可以從基址寄存器中減去這個數(shù)值。如:LDRR1,[R0,#0x12]

寄存器:寄存器中的數(shù)值可以加到基址寄存器,也可以從基址寄存器中減去這個數(shù)值。如:LDRR1,[R0,R2]

寄存器及移位常數(shù):寄存器移位后的值可以加到基址寄存器,也可以從基址寄存器中減去這個數(shù)值。如:LDRR1,[R0,R2,LSL

#2]存儲器訪問指令——地址形式裝載指令:LDRx目標寄存器存儲器訪問指令——尋址方式裝載指令:LDRx目標寄存器,源地址保存指令:STRx源寄存器,目標地址零偏移:如:LDRRd,[Rn]前索引偏移:

如:LDRRd,[Rn,#0x04]!程序相對偏移:

如:LDRRd,labe1

后索引偏移:

如:LDRRd,[Rn],#0x04存儲器訪問指令——尋址方式裝載指令:LDRx目標寄存存儲器訪問指令——單寄存器加載/存儲存儲器訪問指令——單寄存器加載/存儲0x55R2R50x400000000x123456780x40000000存儲器地址應用示例:LDR R2,[R5]

;將R5指向地址的字數(shù)據(jù)存入R20x12345678ARM存儲器訪問指令——單寄存器加載應用0x55R2R50x400000000x123456780x0x12345678R1R20x400000000x??0x40000004存儲器地址應用示例:STR R1,[R2,#0x04]

;將R1的數(shù)據(jù)存儲到R0+0x04地址0x12345678+4ARM存儲器訪問指令——單寄存器保存應用0x12345678R1R20x400000000x??0x12435存儲器訪問指令——多寄存器存取裝載指令:LDM

源地址,目標寄存器列表存儲指令:STM

目標地址,源寄存器列表存儲器源地址目標寄存器1目標寄存器n存儲器目標地址源寄存器1源寄存器n存儲器訪問指令——多寄存器存取裝載指令:LDM源地址存儲器訪問指令——多寄存器存取裝載指令:LDM存儲指令:STMxxLDM/STM指令搭配不同的后綴實現(xiàn)不同方式地址增長方式:IA:每次傳送后地址加4DB:每次傳送前地址減4存儲器訪問指令——多寄存器存取裝載指令:LDM存儲指令:ST存儲器訪問指令——多寄存器加載/存儲存儲器訪問指令——多寄存器加載/存儲ARM存儲器訪問指令——多寄存器存取數(shù)據(jù)塊傳送指令操作過程如右圖所示,其中R1為指令執(zhí)行前的基址寄存器,R1’則為指令執(zhí)行后的基址寄存器。R5R6R7R1R1’指令STMIAR1!,{R5-R7}4008H4004H4000H4014H4010H400CHR5R6R7R1’R1指令STMDBR1!,{R5-R7}4008H4004H4000H4014H4010H400CHARM存儲器訪問指令——多寄存器存取數(shù)據(jù)塊傳送指令操作過程如0x40000000R1R20x??0x010x400000000x??R3R40x??R60x??0x020x030x040x400000040x400000080x4000000C存儲器0x010x020x030x040x40000010應用示例:LDMIAR1!,{R2-R4,R6}

將R1指向的內(nèi)存數(shù)據(jù)讀取到R0-R4和R6寄存器中存儲器訪問指令——多寄存器存取0x40000000R1R20x??0x010x400000130另外兩種存儲器操作為棧的PUSH和POP.PUSH{R0,R4-R7,R9}POP{R2,R3}41另外兩種存儲器操作為棧的PUSH和POP.PUSH{R131存儲器訪問指令算術運算指令邏輯運算指令移位、循環(huán)指令展開指令數(shù)據(jù)反轉(zhuǎn)指令位域處理和操作指令條件跳轉(zhuǎn)指令屏障和存儲器屏障指令飽和運算指令42存儲器訪問指令常見的算術四則運算指令常見的算術四則運算指令133存儲器訪問指令算術運算指令邏輯運算指令移位、循環(huán)指令展開指令數(shù)據(jù)反轉(zhuǎn)指令位域處理和操作指令條件跳轉(zhuǎn)指令屏障和存儲器屏障指令飽和運算指令44存儲器訪問指令cortex-m34基礎4指令系統(tǒng)--實時嵌入式-硬件基礎課件135存儲器訪問指令算術運算指令邏輯運算指令移位、循環(huán)指令展開指令數(shù)據(jù)反轉(zhuǎn)指令位域處理和操作指令條件跳轉(zhuǎn)指令屏障和存儲器屏障指令飽和運算指令46存儲器訪問指令136移位操作指令47移位操作指令cortex-m34基礎4指令系統(tǒng)--實時嵌入式-硬件基礎課件138存儲器訪問指令算術運算指令邏輯運算指令移位、循環(huán)指令展開指令數(shù)據(jù)反轉(zhuǎn)指令位域處理和操作指令條件跳轉(zhuǎn)指令屏障和存儲器屏障指令飽和運算指令49存儲器訪問指令139帶符號展開指令SXTBRd,Rm;Rd=signext(Rm[7:0])SXTHRd,Rm;Rd=signext(Rm[15:0])50帶符號展開指令SXTBRd,Rm;Rd=signe140存儲器訪問指令算術運算指令邏輯運算指令移位、循環(huán)指令展開指令數(shù)據(jù)反轉(zhuǎn)指令位域處理和操作指令條件跳轉(zhuǎn)指令屏障和存儲器屏障指令飽和運算指令51存儲器訪問指令141數(shù)據(jù)反轉(zhuǎn)指令52數(shù)據(jù)反轉(zhuǎn)指令142存儲器訪問指令算術運算指令邏輯運算指令移位、循環(huán)指令展開指令數(shù)據(jù)反轉(zhuǎn)指令位域處理和操作指令條件跳轉(zhuǎn)指令屏障和存儲器屏障指令飽和運算指令53存儲器訪問指令143位域處理指令54位域處理指令1445514556146存儲器訪問指令算術運算指令邏輯運算指令移位、循環(huán)指令展開指令數(shù)據(jù)反轉(zhuǎn)指令位域處理和操作指令條件跳轉(zhuǎn)指令屏障和存儲器屏障指令飽和運算指令57存儲器訪問指令147跳轉(zhuǎn)依據(jù)在CM3中,下列指令可以更新PSR中的標志:

16位算術邏輯指令

32位帶S后綴的算術邏輯指令

比較指令(如,CMP/CMN)和測試指令(如TST/TEQ)

直接寫PSR/APSR(MSR指令)58跳轉(zhuǎn)依據(jù)在CM3中,下列指令可以更新PSR中的標志:操作碼條件助記符標志含義0000EQZ=1相等0001NEZ=0不相等0010CS/HSC=1無符號數(shù)大于或等于0011CC/LOC=0無符號數(shù)小于0100MIN=1負數(shù)0101PLN=0正數(shù)或零0110VSV=1溢出0111VCV=0沒有溢出1000HIC=1,Z=0無符號數(shù)大于1001LSC=0,Z=1無符號數(shù)小于或等于1010GEN=V有符號數(shù)大于或等于

1011LTN!=V有符號數(shù)小于

1100GTZ=0,N=V有符號數(shù)大于

1101LEZ=1,N!=V有符號數(shù)小于或等于

1110AL任何無條件執(zhí)行

(指令默認條件)1111NV任何從不執(zhí)行(不要使用)指令條件碼表操作碼條件助記符標志含義0000EQZ=1相等0001NEZ149BEQlabel;當Z=1時轉(zhuǎn)移CMPR0,R1;比較R0,R1ITTETGT;IfR0>R1Then(T代表Then,E代表Else)MOVGTR2,R0MOVLER2,R0MOVGTR3,R1MOVGTR3,R160BEQlabel;當Z=1時轉(zhuǎn)移C150存儲器訪問指令算術運算指令邏輯運算指令移位、循環(huán)指令展開指令數(shù)據(jù)反轉(zhuǎn)指令位域處理和操作指令條件跳轉(zhuǎn)指令屏障和存儲器屏障指令飽和運算指令61存儲器訪問指令151隔離指令在一些結(jié)構比較復雜的存儲器系統(tǒng)中是必要的。在這類系統(tǒng)中,如果沒有必要的隔離,會導致系統(tǒng)發(fā)生紊亂危象(racecondition),(相當于數(shù)電中的“競爭與冒險”)。如果RAM的訪問是帶緩沖的,并且寫完之后馬上讀,就必須讓它“喘口氣”——用DMB指令來隔離,以保證緩沖中的數(shù)據(jù)已經(jīng)落實到RAM中。DSB比DMB更保險(當然也是有執(zhí)行代價的),它是寧可錯殺也不漏網(wǎng)——清空了寫緩沖,使得任何它后面的指令,不管要不要使用先前的存儲器訪問結(jié)果,通通等待訪問完成。如果某個程序從下一條要執(zhí)行的指令處更新了自己,但是先

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論