国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【嵌入式】Thumb指令集(學(xué)習(xí)筆記)

這篇具有很好參考價(jià)值的文章主要介紹了【嵌入式】Thumb指令集(學(xué)習(xí)筆記)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Thumb 指令集

Thumb指令集概述

ARM開發(fā)工具完全支持Thumb指令,應(yīng)用程序可以靈活的將ARM和Thumb子程序混合編程以便在例程的基礎(chǔ)上提高性能或代碼密度。在編寫Thumb指令時(shí),先要用偽指令CODE16聲明(ADS的編譯環(huán)境下),而且在ARM指令中要使用BX指令跳轉(zhuǎn)到Thumb指令,以切換處理器狀態(tài)。

Thumb指令集特點(diǎn)

?	采用16位二進(jìn)制編碼,而ARM指令是32位的。
?	Thumb是壓縮指令,先動(dòng)態(tài)解壓縮,然后作為標(biāo)準(zhǔn)的ARM指令執(zhí)行。
?	由CPSR的T位決定指令流。T置位,執(zhí)行Thumb指令流,T清0,執(zhí)行ARM指令流
?	由ARM模式進(jìn)入Thumb模式時(shí),是顯式或隱式的進(jìn)入;由Thumb進(jìn)入ARM模式時(shí),也是顯式或隱式的進(jìn)入。
?	Thumb指令集沒有協(xié)處理器指令、信號(hào)量指令、乘加指令、64位乘法指令以及訪問CPSR和SPSR的指令,而且指令的第2操作數(shù)受到限制。
?	除了分支指令B有條件執(zhí)行功能外,其他指令均無條件執(zhí)行。
?	大多數(shù)Thumb數(shù)據(jù)處理指令采用2地址格式。

Thumb指令集編碼如下:
【嵌入式】Thumb指令集(學(xué)習(xí)筆記)

Thumb狀態(tài)切換

在任何時(shí)刻,CPSR的第5位(位T)決定了ARM微處理器執(zhí)行的是ARM指令流還是Thumb指令流。當(dāng)T置1,則認(rèn)為是16位的Thumb指令流;當(dāng)T清0,則認(rèn)為是32位的ARM指令流。
? 進(jìn)入Thumb模式
進(jìn)入Thumb指令模式有兩種方法:一種是執(zhí)行一條交換轉(zhuǎn)移指令BX,另一種方法是利用異常返回,也可以把微處理器從ARM模式轉(zhuǎn)換為Thumb模式。
? 退出Thumb模式
退出Thumb指令模式也有兩種方法:一種是執(zhí)行Thumb指令中的交換轉(zhuǎn)移BX指令可以顯式的返回到ARM指令流。另一種是利用異常進(jìn)入ARM指令流 。

編程模型

Thumb指令集是ARM指令集的一個(gè)子集,并只能對(duì)限定的ARM寄存器進(jìn)行操作。
【嵌入式】Thumb指令集(學(xué)習(xí)筆記)
16位Thumb指令集是從32位ARM指令集提取指令格式的,每條Thumb指令有相同處理器模型所對(duì)應(yīng)的32位ARM指令。

Thumb數(shù)據(jù)處理指令包括一組高度優(yōu)化且相當(dāng)復(fù)雜的指令,范圍涵蓋編譯器通常需要的大多數(shù)操作。ARM指令支持在單條指令中完成一個(gè)操作數(shù)的移位及一個(gè)ALU操作,但Thumb指令集將移位操作和ALU操作分離為不同的指令。本部分從以下幾個(gè)方面介紹:
? 數(shù)據(jù)處理指令的二進(jìn)制編碼
? 數(shù)據(jù)處理指令的分類
? ARM指令與Thumb指令比較

數(shù)據(jù)處理指令

【嵌入式】Thumb指令集(學(xué)習(xí)筆記)
按照數(shù)據(jù)處理指令的功能,可以將其分為以下幾類:

	?	  算術(shù)運(yùn)算指令,它又分為以下幾類:
         	?	  ADD與SUB—低寄存器加法和減法
			?	  ADD—高或低寄存器
			?	  ADD與SUB—SP 
			?	  ADD—PC或SP相對(duì)偏移 
			?	  ADC,SBC和MUL
	?	  移位和循環(huán)移位操作(ASR,LSL,LSR和ROR)
	?	  比較指令(CMP和CMN)
	?	  傳送和取負(fù)指令(MOV,MVN和NEG)
	?	  測(cè)試指令(TST)

算術(shù)運(yùn)算指令

ADD與SUB--低寄存器加法和減法
句法:

op Rd,Rn,Rm
op Rd,Rn,#expr3
op Rd,#expr8

用法:
指令中Rd、Rn、Rm必須是低寄存器(R0~R7)。指令更新NZCV標(biāo)志。

例子:

ADD R3,R1,R5	    	
ADD R9,R2,R6
SUB R0,R4,#5			
SUB R4,R5,#201

ADD--高或低寄存器
句法:
ADD Rd,Rm
用法:

Rd←Rd+Rm
Rd和Rm是低寄存器時(shí),更新標(biāo)志NZCV

例子:

ADD R12,R4
ADD R10,R11
ADD R2,R4

ADD與SUB--SP
句法:

ADD SP,#expr
SUB SP,#expr

用法:

SP←SP+expr
不影響條件標(biāo)志碼

例子:

ADD SP,#312

ADD--PC或SP偏移量
句法:

ADD Rd,Rp,#expr
Rp:SP或PC

用法:

Rd←Rp+#expr
不影響條件標(biāo)志碼

例子:

ADD R6,SP,#64
ADD R2,PC,#980

ADC、SBC和MUL
(帶進(jìn)位位的加法、帶進(jìn)位位的減法、乘法)
句法:

op Rd,Rm

用法:

ADC:Rd←Rd+Rm+C
SBC: Rd ←Rd-Rm-(1-C)  借位
MUL:Rd ←Rd×Rm

限制:Rd和Rm必須是低寄存器(R0~R7)
ADC和SBC影響NZCV
MUL影響NZ

AND、ORR、EOR和BIC(按位邏輯操作)
句法:

op Rd,Rm

用法:

AND邏輯“與”操作
ORR邏輯“或”操作
EOR邏輯“異或”操作
BIC:Rd AND NOT Rm
必須是低寄存器,影響NZ標(biāo)志

ASR、LSL、LSR和ROR(邏輯和循環(huán)位移)
句法:

op Rd,Rs
op Rd,Rm,#expr
Rd、Rs、Rm必須是R0~R7范圍內(nèi)的寄存器

例子:

ASR R3,R5
LSR R0,R2,#6
ROR R2,R7,#2
LSL R9,R1

CMP和CMN(比較和比較負(fù)值)
句法:

CMP Rn,#expr
CMP Rn,Rm
CMN Rn,Rm

用法:

只更新條件碼標(biāo)志,不存放結(jié)果
CMP:Rn-expr(或Rm)
CMN:Rm+Rn

其中:CMP Rn,Rm指令允許使用高寄存器
例子:

CMP R2,#255		CMP R9,#24
CMN R1,R5		CMN R0,R10

MOV、MVN和NEG(傳送、傳送非和取負(fù))
句法:

MOV Rd,#expr
MOV Rd,Rm
MVN Rd,Rm
NEG Rd,Rm

用法:

MOV:Rd←#expr(或Rm)
MVN:Rd ←NOT Rm
NEG: Rd ←Rm×(-1)

TST(測(cè)試)
句法:

TST Rn,Rm

用法:

Rm AND Rn,丟棄結(jié)果,更新條件碼標(biāo)志NZ
Rn、Rm必須在R0~R7范圍內(nèi)

轉(zhuǎn)移指令

轉(zhuǎn)移指令的二進(jìn)制編碼如下:
【嵌入式】Thumb指令集(學(xué)習(xí)筆記)
轉(zhuǎn)移指令分類如下:
? B-分支指令,Thumb指令集惟一可條件執(zhí)行的指令。
? BL-帶鏈接的長分支。
? BX-分支指令,并可選擇地切換指令集。
? BLX-帶鏈接分支,并可選地交換指令集。

B	<cond> <label>	    ;格式1	 目標(biāo)為Thumb代碼
B	<label>	            ;格式2	 目標(biāo)為Thumb代碼
BL	<label>	            ;格式3	 目標(biāo)為Thumb代碼
BLX	<label>	            ;格式3a	 目標(biāo)為ARM代碼
B{L}X  Rm		        ;格式4	 目標(biāo)為ARM或Thumb代碼

Thumb的數(shù)據(jù)存取指令又可以分為:
單寄存器數(shù)據(jù)存取指令(LDR和STR)
多寄存器數(shù)據(jù)存取指令 (LDM和STM)
【嵌入式】Thumb指令集(學(xué)習(xí)筆記)
匯編格式如下:

<op> Rd,[Rn,<#off5>]	;<op> = LDR|LDRB|STR|STRB
<op> Rd,[Rn,<#off5>]	;<op> = LDRH| STRH 
<op> Rd,[Rn,Rm]	;
<op> =LDR|LDRH|LDRSH|LDRB|LDRSB|STR|STRH|STRB
<op> Rd,[PC,<#off8>] 
<op> Rd,[SP,<#off8>]	;<op> = LDR| STR//該兩條指令偏移量為8位

多寄存器數(shù)據(jù)存取指令
【嵌入式】Thumb指令集(學(xué)習(xí)筆記)
匯編格式如下:

LDMIA Rn!,{}
STMIA Rn!,{}
POP {{,PC}}
PUSH {{,LR}}

異常中斷指令

Thumb軟件中斷指令

Thumb軟件中斷指令的二進(jìn)制編碼如下
【嵌入式】Thumb指令集(學(xué)習(xí)筆記)
Thumb軟件中斷指令的匯編格式如下:
SWI <8位立即數(shù)>;<8位立即數(shù)>為數(shù)字表達(dá)式,其取值為0~255范圍內(nèi)的整數(shù)。

Thumb斷點(diǎn)指令

Thumb斷點(diǎn)指令的二進(jìn)制編碼如下:
【嵌入式】Thumb指令集(學(xué)習(xí)筆記)
Thumb斷點(diǎn)指令的匯編格式如下:
BKPT immed_8文章來源地址http://www.zghlxwxcb.cn/news/detail-421385.html

到了這里,關(guān)于【嵌入式】Thumb指令集(學(xué)習(xí)筆記)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 嵌入式學(xué)習(xí)筆記匯總

    嵌入式學(xué)習(xí)筆記匯總

    本文整理STM32、STM8和uCOS-III的所有文章鏈接。 源碼:mySTM32-learn STM32學(xué)習(xí)筆記(1)——LED和蜂鳴器 STM32學(xué)習(xí)筆記(2)——按鍵輸入實(shí)驗(yàn) STM32學(xué)習(xí)筆記(3)——時(shí)鐘系統(tǒng) STM32學(xué)習(xí)筆記(4)——NVIC中斷優(yōu)先級(jí)管理和外部中斷EXTI STM32學(xué)習(xí)筆記(5)——系統(tǒng)定時(shí)器SysTick STM32學(xué)習(xí)筆

    2023年04月20日
    瀏覽(91)
  • 嵌入式學(xué)習(xí)筆記——IIC通信

    嵌入式學(xué)習(xí)筆記——IIC通信

    本文接著之前的M4系列介紹,對(duì)另外一個(gè)十分常見的通信總線進(jìn)行一個(gè)介紹,就是IIC總線。 首先,還是找個(gè)免費(fèi)勞動(dòng)力來做一個(gè)官方的介紹,下面這一段話非常全面的介紹了IIC的各個(gè)特征,用之前提到的通信特征來總結(jié),IIC是一種串行,同步,半雙工,板級(jí)有線通信。與SPI對(duì)

    2024年02月06日
    瀏覽(92)
  • 嵌入式學(xué)習(xí)筆記——SPI通信

    嵌入式學(xué)習(xí)筆記——SPI通信

    之前已經(jīng)介紹了STM32的ADC、DMA、EXTI、TIME、NVIC、USART以及普通IO模式,此系列筆者還打算寫最后三個(gè)大的內(nèi)容,分別是SPI通信、IIC通信以及看門狗,后面就看大家的需求了,需要什么可以留在評(píng)論區(qū),本文首先來介紹SPI的有關(guān)知識(shí)。 在通信協(xié)議分類的介紹中,提到過SPI,它是一

    2023年04月09日
    瀏覽(30)
  • 嵌入式學(xué)習(xí)筆記——SysTick(系統(tǒng)滴答)

    嵌入式學(xué)習(xí)筆記——SysTick(系統(tǒng)滴答)

    上一篇中,介紹了關(guān)于STM32F407的時(shí)鐘系統(tǒng),在了解了系統(tǒng)的時(shí)鐘后,最重要的內(nèi)容就是搞定定時(shí)器的操作,本文從最基本的定時(shí)器,也是內(nèi)核里面自帶的一個(gè)定時(shí)器——SysTick(系統(tǒng)滴答)來進(jìn)行介紹。旨在搞清楚什么是系統(tǒng)滴答,系統(tǒng)滴答有什么用,系統(tǒng)滴答怎么用。 SysTick這

    2024年01月21日
    瀏覽(30)
  • 【嵌入式算法】學(xué)習(xí)筆記(一):數(shù)字濾波算法

    【嵌入式算法】學(xué)習(xí)筆記(一):數(shù)字濾波算法

    最近在做直流電機(jī)的畢設(shè)中,由于需要采集轉(zhuǎn)速,電流,電壓,溫度等參數(shù),常規(guī)的采集容易受到干擾,所以特意復(fù)習(xí)了一下關(guān)于數(shù)字濾波有關(guān)的知識(shí),并作出相應(yīng)的整理。 本文對(duì)數(shù)字濾波進(jìn)行簡單介紹,講解七種常用的濾波算法并用C語言實(shí)現(xiàn),并比較其優(yōu)缺點(diǎn) 。由于篇幅

    2023年04月22日
    瀏覽(27)
  • 嵌入式學(xué)習(xí)筆記(17)代碼重定位實(shí)戰(zhàn) 上篇

    嵌入式學(xué)習(xí)筆記(17)代碼重定位實(shí)戰(zhàn) 上篇

    3.5.1任務(wù):在iSRAM中將代碼從0xd0020010重定位到0xd0024000 注解:本練習(xí)對(duì)代碼本身運(yùn)行無實(shí)際意義,我們做這個(gè)重定位純粹是為了練習(xí)重定位技能。但是某些情況重定位就是必須的,譬如在uboot中。 3.5.2思路 (1)通過鏈接腳本將代碼鏈接到0xd0024000(鏈接地址) (2)使用dnw下載時(shí)將

    2024年02月09日
    瀏覽(23)
  • 嵌入式學(xué)習(xí)筆記——PWM與輸入捕獲(下)

    嵌入式學(xué)習(xí)筆記——PWM與輸入捕獲(下)

    上一篇介紹了通用定時(shí)器的輸出比較部分,這一篇再來介紹一下輸入捕獲的相關(guān)內(nèi)容。 輸入捕獲,見名知意,就用來對(duì)輸入信號(hào)進(jìn)行捕獲的,說到捕獲輸入信號(hào),之前介紹過一個(gè)叫做外部中斷的片上外設(shè),它的作用也是捕獲輸入;它們的不同在于,外部中斷捕獲的只是邊沿,

    2024年02月06日
    瀏覽(28)
  • 嵌入式學(xué)習(xí)筆記(16)反匯編工具objdump

    嵌入式學(xué)習(xí)筆記(16)反匯編工具objdump

    2.4.1反匯編的原理為什么要用反匯編 arm-linux-objdump -D led.elf led_elf.dis objdump是gcc工具鏈中的反匯編工具,作用是由編譯鏈接好的elf格式的可執(zhí)行程序反過來得到匯編源代碼 -D表示反匯編 左邊的是elf可執(zhí)行程序(反匯編的源) 右邊的是反匯編生成的反匯編程序 反匯編的原因有以

    2024年02月09日
    瀏覽(28)
  • 嵌入式學(xué)習(xí)筆記——STM32的時(shí)鐘樹

    嵌入式學(xué)習(xí)筆記——STM32的時(shí)鐘樹

    在之前的所有代碼編程的過程中,似乎每次都繞不開一個(gè)叫做時(shí)鐘使能的東西,當(dāng)時(shí)我們是在數(shù)據(jù)手冊(cè)上直接看其掛接在那條時(shí)鐘線上的,那么STM32內(nèi)部的時(shí)鐘到底是怎么一個(gè)構(gòu)型呢,本文來對(duì)此做一個(gè)介紹。 老規(guī)矩,一個(gè)新的名詞出現(xiàn),首先需要搞清楚它是個(gè)啥,下圖中對(duì)

    2024年02月02日
    瀏覽(24)
  • 嵌入式學(xué)習(xí)筆記(20) SoC時(shí)鐘系統(tǒng)簡介

    嵌入式學(xué)習(xí)筆記(20) SoC時(shí)鐘系統(tǒng)簡介

    什么是時(shí)鐘,SoC為什么需要時(shí)鐘 (1)時(shí)鐘同步工作系統(tǒng)的同步節(jié)拍 (2)SoC內(nèi)部有很多器件,譬如CPU、DRAM控制器、串口、GPIO等內(nèi)部外設(shè),這些東西要彼此協(xié)調(diào)工作,需要一個(gè)同步的時(shí)鐘系統(tǒng)來指揮。這個(gè)就是SoC的時(shí)鐘系統(tǒng)。 時(shí)鐘一般如何獲得? (1)外部直接輸入時(shí)鐘信號(hào)

    2024年02月09日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包