ARM體系結(jié)構(gòu)(指令系統(tǒng))_第1頁(yè)
ARM體系結(jié)構(gòu)(指令系統(tǒng))_第2頁(yè)
ARM體系結(jié)構(gòu)(指令系統(tǒng))_第3頁(yè)
ARM體系結(jié)構(gòu)(指令系統(tǒng))_第4頁(yè)
ARM體系結(jié)構(gòu)(指令系統(tǒng))_第5頁(yè)
已閱讀5頁(yè),還剩157頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

嵌入式系統(tǒng)與開發(fā)第2章ARM體系結(jié)構(gòu)2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林22024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林22024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林2本章內(nèi)容ARM微處理器結(jié)構(gòu)ARM體系結(jié)構(gòu)簡(jiǎn)介ARM微處理器的寄存器結(jié)構(gòu)ARM微處理器的異常處理ARM的存儲(chǔ)器結(jié)構(gòu)ARM微處理器指令系統(tǒng)ARM微處理器的接口ARM微處理器指令系統(tǒng)ARM指令概述1基本尋指方式2ARM指令基本格式3ARM指令集4Thumb指令集52024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林4ARM指令集系統(tǒng)概述32位ARM指令集和相關(guān)譯碼機(jī)制非常簡(jiǎn)潔高效ARMV4版中增加了16位Thumb指令集2003年后出現(xiàn)了更高性能的Thumb-2指令集ARM指令集效率高,但是代碼密度低Thumb指令集具有較高的代碼密度,卻仍然保持ARM的大多數(shù)性能上的優(yōu)勢(shì),它是ARM指令集的子集所有的ARM指令都可以條件執(zhí)行,而Thumb指令僅有一條指令條件執(zhí)行ARM程序和Thumb程序可相互調(diào)用,相互之間的狀態(tài)切換開銷幾乎為零2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林5ARM指令集系統(tǒng)概述ARM支持3種數(shù)據(jù)類型字節(jié)、半字、字字必須4個(gè)字節(jié)邊界對(duì)齊,半字必須2個(gè)字節(jié)邊界對(duì)齊新版本增加指令,并保持指令向后兼容Load-store結(jié)構(gòu)load/store:從存儲(chǔ)器中讀某個(gè)值,操作完后再將其放回存儲(chǔ)器中只對(duì)存放在存放器的數(shù)據(jù)進(jìn)行處理對(duì)于存儲(chǔ)器中的數(shù)據(jù),只能使用load/store指令進(jìn)行存取2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林6ARM匯編語(yǔ)言根本格式要求不同的匯編語(yǔ)言開發(fā)環(huán)境或匯編器對(duì)格式有不同的要求,以下以ADS為例;錯(cuò)誤的例子STARTMOVR0,#1ABC:MOVR1,#2MOV R2,#3loop Mov R2,#3 B Loop;正解的例子START MOV R0,#1ABC MOV R1,#2 MOV R2,#3LOOP MOV R2,#3 B LOOPARM微處理器指令系統(tǒng)ARM指令概述1基本尋指方式2ARM指令基本格式3ARM指令集4Thumb指令集5ARM處理器尋址方式尋址方式是根據(jù)指令中給出的地址碼字段來(lái)實(shí)現(xiàn)尋找真實(shí)操作數(shù)地址的方式ARM處理器具有9種根本尋址方式2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林81寄存器尋址2立即尋址3寄存器移位尋址4寄存器間接尋址5基址尋址6多寄存器尋址7堆棧尋址8塊拷貝尋址9相對(duì)尋址2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林9SUBR0,R1,R2

;將R1的值減去R2的值,結(jié)果保存到R0操作數(shù)的值在存放器中,指令中的地址碼字段指出的是存放器編號(hào),指令執(zhí)行時(shí)直接取出存放器值來(lái)操作。存放器尋址指令舉例如下:MOVR1,R2 ;將R2的值存入R10xAA0x55R2R1尋址方式分類——存放器尋址MOVR1,R20xAA0xAA0x55R1R0SUBR0,R1,R20xA0R20x0AARM處理器尋址方式2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林10立即尋址指令中的操作碼字段后面的地址碼局部即是操作數(shù)本身,也就是說(shuō),數(shù)據(jù)就包含在指令當(dāng)中,取出指令也就取出了可以立即使用的操作數(shù)(這樣的數(shù)稱為立即數(shù))。立即尋址指令舉例如下:SUBS R0,R0,#1;R0減1,結(jié)果放入R0,并且影響標(biāo)志位MOV R0,#0xFF00;將立即數(shù)0xFF00裝入R0存放器0x55R0MOVR0,#0xFF00程序存儲(chǔ)尋址方式分類——立即尋址MOVR0,#0xFF000xFF00從代碼中獲得數(shù)據(jù)ARM處理器尋址方式2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林11存放器移位尋址是ARM指令集特有的尋址方式。當(dāng)最后一個(gè)操作數(shù)是存放器移位方式時(shí),此操作數(shù)在與前面操作數(shù)結(jié)合之前,首先進(jìn)行移位操作。存放器移位尋址指令舉例如下: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位ARM處理器尋址方式2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林12存放器間接尋址指令中的地址碼給出的是一個(gè)通用存放器的編號(hào),所需的操作數(shù)保存在存放器指定地址的存儲(chǔ)單元中,即存放器為操作數(shù)的地址指針。存放器間接尋址指令舉例如下:LDR R1,[R2] ;將R2指向的存儲(chǔ)單元的數(shù)據(jù)讀出 ;保存在R1中SWP R1,R1,[R2] ;將存放器R1的值和R2指定的存儲(chǔ) ;單元的內(nèi)容交換0x55R0R20x400000000xAA0x40000000尋址方式分類——存放器間接尋址LDRR0,[R2]0xAAARM處理器尋址方式2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林13基址尋址就是將基址存放器的內(nèi)容與指令中給出的偏移量〔<4K〕相加/減,形成操作數(shù)的有效地址?;穼ぶ酚糜谠L問(wèn)基址附近的存儲(chǔ)單元,常用于查表、數(shù)組操作、功能部件存放器訪問(wèn)等。存放器間接尋址是偏移量為0的基址尋址?;穼ぶ分噶钆e例如下(前索引尋址):LDR R2,[R3,#0x0C] ;讀取R3+0x0C地址上的存儲(chǔ)單元 ;的內(nèi)容,放入R2STR R1,[R0,#-4]! ;先R0=R0-4,然后把R1的值存放 ;到保存到R0指定的存儲(chǔ)單元尋址方式分類——基址尋址0x55R2R30x400000000xAA0x4000000CLDRR2,[R3,#0x0C]0xAA將R3+0x0C作為地址裝載數(shù)據(jù)0x55R2R30x400000000xAA0x4000000CLDRR2,[R3,#0x0C]!0xAA將R3+0x0C作為地址裝載數(shù)據(jù)0x4000000CARM處理器尋址方式2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林14

基址尋址指令舉例如下:LDR R0,[R1],#4;R0=[R1],R1=R1+4 ;后索引基址尋址

;ARM這種自動(dòng)索引機(jī)制不消耗額外的時(shí)間LDRR0,[R1,R2];R0=[R1+R2]尋址方式分類——基址尋址ARM處理器尋址方式2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林15多存放器尋址一次可傳送幾個(gè)存放器值,允許一條指令傳送16個(gè)存放器的任何子集或所有存放器。多存放器尋址指令舉例如下:LDMIA R1!,{R2-R7,R12};將R1指向的單元中的數(shù)據(jù)讀出到 ;R2~R7、R12中(R1自動(dòng)加4)STMIA R0!,{R2-R7,R12};將存放器R2~R7、R12的值保 ;存到R0指向的存儲(chǔ);單元中 ;(R0自動(dòng)加4)0x40000000R1R20x??0x010x400000000x??R3R40x??R60x??0x020x030x040x400000040x400000080x4000000C存儲(chǔ)器尋址方式分類——多存放器尋址LDRR1!,{R2-R4,R6}0x010x020x030x040x40000010ARM處理器尋址方式2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林16堆棧是一個(gè)按特定順序進(jìn)行存取的存儲(chǔ)區(qū),操作順序?yàn)椤昂筮M(jìn)先出〞。堆棧尋址是隱含的,它使用一個(gè)專門的存放器(堆棧指針)指向一塊存儲(chǔ)區(qū)域(堆棧),指針?biāo)赶虻拇鎯?chǔ)單元即是堆棧的棧頂。存儲(chǔ)器堆??煞譃閮煞N:向上生長(zhǎng):向高地址方向生長(zhǎng),稱為遞增堆棧向下生長(zhǎng):向低地址方向生長(zhǎng),稱為遞減堆棧尋址方式分類——堆棧尋址ARM處理器尋址方式2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林17尋址方式分類——堆棧尋址棧底棧頂棧區(qū)SP

堆棧存儲(chǔ)區(qū)棧頂棧底棧區(qū)

SP向下增長(zhǎng)向上增長(zhǎng)0x123456780x12345678堆棧壓棧堆棧壓棧ARM處理器尋址方式2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林18棧頂SP

棧頂SP

棧底空堆棧棧底滿堆棧堆棧指針指向最后壓入的堆棧的有效數(shù)據(jù)項(xiàng),稱為滿堆棧;堆棧指針指向下一個(gè)待壓入數(shù)據(jù)的空位置,稱為空堆棧。尋址方式分類——堆棧尋址0x123456780x12345678棧頂SP

0x12345678棧頂SP

壓棧壓棧ARM處理器尋址方式2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林19所以可以組合出四種類型的堆棧方式:滿遞增:堆棧向上增長(zhǎng),堆棧指針指向內(nèi)含有效數(shù)據(jù)項(xiàng)的最高地址。指令如LDMFA、STMFA等;空遞增:堆棧向上增長(zhǎng),堆棧指針指向堆棧上的第一個(gè)空位置。指令如LDMEA、STMEA等;滿遞減:堆棧向下增長(zhǎng),堆棧指針指向內(nèi)含有效數(shù)據(jù)項(xiàng)的最低地址。指令如LDMFD、STMFD等;空遞減:堆棧向下增長(zhǎng),堆棧指針向堆棧下的第一個(gè)空位置。指令如LDMED、STMED等。尋址方式分類——堆棧尋址ARM處理器尋址方式2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林20多存放器傳送指令用于將一塊數(shù)據(jù)從存儲(chǔ)器的某一位置拷貝到另一位置。如:LDMIA R0!,{R1-R7}STMIA R0!,{R1-R7} ;將R1~R7的數(shù)據(jù)保存到存儲(chǔ)器中。 ;存儲(chǔ)指針R0在保存第一個(gè)值之后增加, ;增長(zhǎng)方向?yàn)橄蛏显鲩L(zhǎng)。STMIB R0!,{R1-R7} ;將R1~R7的數(shù)據(jù)保存到存儲(chǔ)器中。 ;存儲(chǔ)指針R0在保存第一個(gè)值之前增加, ;增長(zhǎng)方向?yàn)橄蛏显鲩L(zhǎng)。尋址方式分類——塊拷貝尋址ARM處理器尋址方式2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林21相對(duì)尋址是基址尋址的一種變通。由程序計(jì)數(shù)器PC提供基準(zhǔn)地址,指令中的地址碼字段作為偏移量,兩者相加后得到的地址即為操作數(shù)的有效地址。相對(duì)尋址指令舉例如下:

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

BEQ LOOP ;條件跳轉(zhuǎn)到LOOP標(biāo)號(hào)處

...LOOP MOV R6,#1 ...SUBR1 ...

尋址方式分類——相對(duì)尋址ARM處理器尋址方式ARM微處理器指令系統(tǒng)ARM指令概述1基本尋指方式2ARM指令基本格式3ARM指令集4Thumb指令集52024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林2323ARM指令的編碼格式一條實(shí)際的指令的語(yǔ)法結(jié)構(gòu)〔助記符〕為ADDEQSR0,R1,R231~2827~2524~212019~1615~1211~0cond

opcodeSRnRdop200000010100100010000000000000010該指令的編碼格式為:ARM指令的一般格式2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林24ARM指令集指令編碼一覽2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林25ARM是三地址指令格式,指令的根本格式如下:<opcode>{<cond>}{S}<Rd>,<Rn>{,<operand2>}

其中<>號(hào)內(nèi)的項(xiàng)是必須的,{}號(hào)內(nèi)的項(xiàng)是可選的。各項(xiàng)的說(shuō)明如下:opcode:指令助記符; cond:執(zhí)行條件;S:是否影響CPSR存放器的值;Rd:目標(biāo)存放器; Rn:第1個(gè)操作數(shù)的存放器;operand2:第2個(gè)操作數(shù);指令語(yǔ)法目標(biāo)寄存器(Rd)第一操作數(shù)(Rn)第二操作數(shù)(Rm)ADDr3,r1,r2r3r1r2例:ARM根本指令格式2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林26ARM指令的根本格式如下:ARM指令根本格式ARM指令集——第2個(gè)操作數(shù)<opcode>{<cond>}{S}<Rd>,<Rn>{,<operand2>}

靈活的使用第2個(gè)操作數(shù)“operand2〞能夠提高代碼效率。它有如下的形式:#immed_8r——常數(shù)表達(dá)式;Rm——存放器方式;Rm,shift——存放器移位方式;2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林27ARM指令格式——操作數(shù)2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林282024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林29ARM指令格式ARM指令集——第2個(gè)操作數(shù)——立即數(shù) ADDR1,R2,0x1122AABB沒有直接對(duì)32位立即數(shù)直接進(jìn)行操作的指令如果直接將oprand2的12位立即數(shù),那么只能表示0x0000~0x0FFF 如何實(shí)現(xiàn)對(duì)更大立即數(shù)的處理?ARM只利用12位oprand2中的8位表示立即數(shù)#immed_8,其值為0~255#immed_8可循環(huán)右移假設(shè)干偶數(shù)位(ROR0,2,4,…,30,用4比特表示),從而可得到比12位立即數(shù)更大的數(shù)能編碼嗎?2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林30ARM指令格式ARM指令集——第2個(gè)操作數(shù)#immed_8r——常數(shù)表達(dá)式該常數(shù)必須對(duì)應(yīng)8位位圖,即一個(gè)8位的常數(shù)通過(guò)循環(huán)右移偶數(shù)位得到。循環(huán)右移10位0x12000100100x00000000000x00000000000x00000000000x00000000000x00000000000x80100000000x04000001008位常數(shù)2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林31ARM指令格式ARM指令集——第2個(gè)操作數(shù)#immed_8r——常數(shù)表達(dá)式該常數(shù)必須對(duì)應(yīng)8位位圖,即一個(gè)8位的常數(shù)通過(guò)循環(huán)右移偶數(shù)位得到。例如:AND R1,R2,#0x0F0000002024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林32ARM指令格式ARM指令集——第2個(gè)操作數(shù)Rm——存放器方式在存放器方式下,操作數(shù)即為存放器的數(shù)值。例如:SUB R1,R1,R22024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林33ARM指令格式ARM指令集——第2個(gè)操作數(shù)Rm,shift——存放器移位方式將存放器的移位結(jié)果作為操作數(shù)〔移位操作不消耗額外的時(shí)間〕,但Rm值保持不變,移位方法如下:操作碼說(shuō)明操作碼說(shuō)明ASR#n算術(shù)右移n位ROR#n循環(huán)右移n位LSL#n邏輯左移n位RRX#n帶擴(kuò)展的循環(huán)右移n位LSR#n邏輯右移n位TypeRsType為移位的一種類型,Rs為偏移量寄存器,低8位有效。2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林34

桶形移位器操作助記符說(shuō)明移位操作結(jié)果Y值LSL邏輯左移xLSLyx<<y#0-31orRsLSR邏輯右移xLSRy(unsigned)x>>y#1-32orRsASR算術(shù)右移xASRy(signed)x>>Y#1-32orRsROR算術(shù)右移xRORy(unsigned)x>>y|(x<<32-y)#1-32orRsRRX擴(kuò)展的循環(huán)右移xRRXy(c_flag<<31)|(unsigned)x>>1#1-32orRsARM指令格式2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林35ARM指令格式ARM指令集——第2個(gè)操作數(shù)LSL移位操作:0LSR移位操作:0ASR移位操作:ROR移位操作:RRX移位操作:C2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林36ARM指令格式ARM指令集——第2個(gè)操作數(shù)Rm,shift——存放器移位方式例如:ADD R1,R1,R1,LSL#3 ;R1=R1+R1<<3SUB R1,R1,R2,LSRR3 ;R1=R1-R2>>R3試寫出計(jì)算R2=R3*153的程序MOV R2,#0x00ADD R2,R2,R3,LSL#7 ;R2=R2+R3<<7ADD R2,R2,R3,LSL#4 ;R2=R2+R3<<4ADD R2,R2,R3,LSL#3 ;R2=R2+R3<<3ADD R2,R2,R3 ;R2=R2+R32024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林37ARM指令的根本格式如下:條件碼ARM指令集——條件碼<opcode>{<cond>}{S}<Rd>,<Rn>{,<operand2>}

使用條件碼“cond〞可以實(shí)現(xiàn)高效的邏輯操作(節(jié)省跳轉(zhuǎn)和條件語(yǔ)句),提高代碼效率2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林38操作碼條件助記符標(biāo)志含義0000EQZ=1相等0001NEZ=0不相等0010CS/HSC=1無(wú)符號(hào)數(shù)大于或等于0011CC/LOC=0無(wú)符號(hào)數(shù)小于0100MIN=1負(fù)數(shù)0101PLN=0正數(shù)或零0110VSV=1溢出0111VCV=0沒有溢出1000HIC=1,Z=0無(wú)符號(hào)數(shù)大于1001LSC=0,Z=1無(wú)符號(hào)數(shù)小于或等于1010GEN=V有符號(hào)數(shù)大于或等于

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

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

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

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

(指令默認(rèn)條件)1111NV任何從不執(zhí)行(不要使用)指令條件碼表2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林39ARM指令集——條件碼C代碼(無(wú)符號(hào)):c=a-bif(c>0) a--;else b--;對(duì)應(yīng)的匯編代碼:SUBS R2,R0,R1;R0〔a〕與R1〔b〕相減SUBHI R0,R0,#1;假設(shè)R0>R1,那么R0=R0-1SUBLS R1,R1,#1;假設(shè)R0≤R1,那么R1=R1-1例如:所有的ARM指令都可以條件執(zhí)行,如果指令不標(biāo)明條件代碼,將默認(rèn)為無(wú)條件〔AL〕執(zhí)行Thumb指令只有B〔跳轉(zhuǎn)〕指令具有條件執(zhí)行功能條件碼ARM微處理器指令系統(tǒng)ARM指令概述1基本尋指方式2ARM指令基本格式3ARM指令集4Thumb指令集52024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林411.ARM分支指令2.數(shù)據(jù)處理指令3.存儲(chǔ)器訪問(wèn)指令4.乘法指令5.PSR指令6.軟件中斷指令7.偽指令A(yù)RM指令目錄2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林42指令集介紹ARM指令集——分支指令在ARM中有兩種方式可以實(shí)現(xiàn)程序的跳轉(zhuǎn),一種是使用分支指令直接跳轉(zhuǎn),另一種那么是直接向PC存放器賦值實(shí)現(xiàn)跳轉(zhuǎn)。分支指令有以下四種:分支指令B;帶鏈接的分支指令BL;帶狀態(tài)切換的分支指令BX。帶鏈接與狀態(tài)切換的分支指令BLX。2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林43ARM分支指令——指令編碼分支指令B/BL指令編碼格式指令執(zhí)行的條件碼L區(qū)別B指令〔L為0〕和BL指令〔L為1〕24位有符號(hào)立即數(shù)〔偏移量〕分支指令BX指令編碼格式指令執(zhí)行的條件碼Rm目標(biāo)地址存放器,該存放器裝載跳轉(zhuǎn)地址2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林44助記符說(shuō)明操作條件碼位置Blabel分支指令PC←labelB{cond}BLlabel帶鏈接的分支指令LR←PC-4,PC←labelBL{cond}BXRm帶狀態(tài)切換的分支指令PC←Rm,切換處理器狀態(tài)BX{cond}BLXRm帶鏈接和狀態(tài)切換的分支指令PC←Rm,PC←label,切換處理器狀態(tài)BLX{cond}ARM指令——分支指令2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林45ARM指令——分支指令分支指令——B指令,該指令跳轉(zhuǎn)范圍限制在當(dāng)前指令的±32M字節(jié)地址內(nèi)(ARM指令為字對(duì)齊,最低2位地址固定為0)。指令格式如下:B{cond}Label應(yīng)用例如:B WAITA ;跳轉(zhuǎn)到WAITA標(biāo)號(hào)處B 0x1234 ;跳轉(zhuǎn)到相對(duì)地址0x1234處助記符說(shuō)明操作條件碼位置Blabel分支指令PC←labelB{cond}BLlabel帶鏈接的分支指令LR←PC-4,PC←labelBL{cond}BXRm帶狀態(tài)切換的分支指令PC←Rm,切換處理器狀態(tài)BX{cond}BLXRm帶鏈接和狀態(tài)切換的分支指令PC←Rm,PC←label,切換處理器狀態(tài)BLX{cond}2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林46BLLabelxxxxxxLabelxxxMOVPC,LRAddr1Addr2xxxxxxLRPCARM指令——分支指令帶鏈接的分支指令——BL指令適用于子程序調(diào)用,使用該指令后,下一條指令的地址被拷貝到R14(即LR)連接存放器中,然后跳轉(zhuǎn)到指定地址運(yùn)行程序。跳轉(zhuǎn)范圍限制在當(dāng)前指令的±32M字節(jié)地址內(nèi)。指令格式如下:BL{cond}LabelAddr1LabelAddr2Addr21.當(dāng)程序執(zhí)行到BL跳轉(zhuǎn)指令時(shí),硬件將下一條指令的地址Addr2裝入LR存放器,并把跳轉(zhuǎn)地址裝入程序計(jì)數(shù)器〔PC〕2.程序跳轉(zhuǎn)到目標(biāo)地址Label繼續(xù)執(zhí)行,當(dāng)子程序執(zhí)行結(jié)束后,將LR存放器內(nèi)容存入PC,返回調(diào)用函數(shù)繼續(xù)執(zhí)行應(yīng)用例如〔調(diào)用子程序〕:BL Label 助記符說(shuō)明操作條件碼位置Blabel分支指令PC←labelB{cond}BLlabel帶鏈接的分支指令LR←PC-4,PC←labelBL{cond}BXRm帶狀態(tài)切換的分支指令PC←Rm,切換處理器狀態(tài)BX{cond}BLXRm帶鏈接和狀態(tài)切換的分支指令PC←Rm,PC←label,切換處理器狀態(tài)BLX{cond}2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林47ARM指令——分支指令帶狀態(tài)切換的分支指令——BX指令,該指令可以根據(jù)跳轉(zhuǎn)地址〔Rm〕的最低位來(lái)切換處理器狀態(tài)。其跳轉(zhuǎn)范圍限制在當(dāng)前指令的±32M字節(jié)地址內(nèi)(ARM指令為字對(duì)齊,最低2位地址固定為0)。指令格式如下:BX{cond}Rm跳轉(zhuǎn)地址Rm[0]跳轉(zhuǎn)后CPSR標(biāo)志T位處理器狀態(tài)00ARM11Thumb助記符說(shuō)明操作條件碼位置Blabel分支指令PC←labelB{cond}BLlabel帶鏈接的分支指令LR←PC-4,PC←labelBL{cond}BXRm帶狀態(tài)切換的分支指令PC←Rm,切換處理器狀態(tài)BX{cond}BLXRm帶鏈接和狀態(tài)切換的分支指令PC←Rm,PC←label,切換處理器狀態(tài)BLX{cond}2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林48ARM指令——分支指令帶狀態(tài)切換的分支指令——BX指令,該指令可以根據(jù)跳轉(zhuǎn)地址〔Rm〕的最低位來(lái)切換處理器狀態(tài)。其跳轉(zhuǎn)范圍限制在當(dāng)前指令的±32M字節(jié)地址內(nèi)(ARM指令為字對(duì)齊,最低2位地址固定為0)。Rm的位[0]不用作地址的一局部。假設(shè)Rm的位[0]為1,那么指令將CPSR中的標(biāo)志T置位,且將目標(biāo)地址的代碼解釋為Thumb代碼;假設(shè)Rm的位[0]為0,那么Rm的位[1]就不能為1。指令格式如下:BX{cond}Rm應(yīng)用例如:ADRLR0,ThumbFun+1;將Thumb程序的入口地址加1存入R0BXR0 ;跳轉(zhuǎn)到R0指定的地址, ;并根據(jù)R0的最低位來(lái)切換處理器狀態(tài)助記符說(shuō)明操作條件碼位置Blabel分支指令PC←labelB{cond}BLlabel帶鏈接的分支指令LR←PC-4,PC←labelBL{cond}BXRm帶狀態(tài)切換的分支指令PC←Rm,切換處理器狀態(tài)BX{cond}BLXRm帶鏈接和狀態(tài)切換的分支指令PC←Rm,PC←label,切換處理器狀態(tài)BLX{cond}2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林491.ARM分支指令2.數(shù)據(jù)處理指令3.存儲(chǔ)器訪問(wèn)指令4.乘法指令5.PSR指令6.軟件中斷指令7.偽指令A(yù)RM指令目錄2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林50ARM數(shù)據(jù)處理指令數(shù)據(jù)處理指令大致可分為3類:存放器間數(shù)據(jù)傳送指令;算術(shù)邏輯運(yùn)算指令;比較指令。數(shù)據(jù)處理指令只能對(duì)存放器的內(nèi)容進(jìn)行操作,而不能對(duì)內(nèi)存中的數(shù)據(jù)進(jìn)行操作。所有ARM數(shù)據(jù)處理指令均可選擇使用S后綴,以使指令影響狀態(tài)標(biāo)志。2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林51ARM數(shù)據(jù)處理指令最大的ARM指令家族,所有指令遵守同一指令格式包含:存放器間數(shù)據(jù)傳送指令算術(shù)、邏輯運(yùn)算指令比較指令A(yù)RM是Load/Store結(jié)構(gòu)所有指令只對(duì)存放器操作所有指令都將對(duì)1到2個(gè)存放器操作第一操作數(shù)總是存放器:Rn第二操作數(shù)總是通過(guò)桶形移位器送到ALU2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林52ARM數(shù)據(jù)處理指令——指令編碼指令執(zhí)行的條件碼I用于區(qū)別立即數(shù)〔I為1〕和存放器移位〔I為0〕opcode數(shù)據(jù)處理指令操作碼第二操作數(shù)Rd目標(biāo)存放器Rn第一操作數(shù)存放器S設(shè)置條件碼,與指令中的S位對(duì)應(yīng)帶進(jìn)位加法ADC0101帶進(jìn)位減法指令SBC0110帶進(jìn)位逆向減法指令RSC0111位測(cè)試指令TST1000相等測(cè)試指令TEQ1001比較指令CMP1010負(fù)數(shù)比較指令CMN1011邏輯或操作指令ORR1100數(shù)據(jù)傳送MOV1101位清除指令BIC1110數(shù)據(jù)非傳送MVN1111加法運(yùn)算指令A(yù)DD0100逆向減法指令RSB0011減法運(yùn)算指令SUB0010邏輯異或操作指令EOR0001邏輯與操作指令A(yù)ND0000說(shuō)明指令助記符操作碼opcode操作碼功能表2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林53助記符說(shuō)明操作條件碼位置MOVRd,operand2數(shù)據(jù)傳送Rd←operand2MOV{cond}{S}MVNRd,operand2數(shù)據(jù)非傳送Rd←(~operand2)MVN{cond}{S}ARM數(shù)據(jù)處理指令——數(shù)據(jù)傳送注:當(dāng)后綴S時(shí),這些指令根據(jù)結(jié)果更新標(biāo)志N和Z,在計(jì)算Operand2時(shí)更新標(biāo)志C,不影響標(biāo)志V。2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林54助記符說(shuō)明操作條件碼位置MOVRd,operand2數(shù)據(jù)傳送Rd←operand2MOV{cond}{S}MVNRd,operand2數(shù)據(jù)非傳送Rd←(~operand2)MVN{cond}{S}ARM數(shù)據(jù)處理指令——數(shù)據(jù)傳送

MOV指令將8位圖立即數(shù)(參看“第2操作數(shù):#immed_8r——常數(shù)表達(dá)式”)或寄存器傳送到目標(biāo)寄存器(Rd),可用于移位運(yùn)算等操作。指令格式如下:MOV{cond}{S}Rd,operand2

MOV指令舉例如下:

MOV R1,#0xF000000BMOV R0,R1 MOVS R3,R1,LSL#2

MOV PC,LR ;R1=0xF000000B;R0=R1;R3=R1<<2,并影響標(biāo)志位;PC=LR,子程序返回2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林55助記符說(shuō)明操作條件碼位置MOVRd,operand2數(shù)據(jù)傳送Rd←operand2MOV{cond}{S}MVNRd,operand2數(shù)據(jù)非傳送Rd←(~operand2)MVN{cond}{S}ARM數(shù)據(jù)處理指令——數(shù)據(jù)傳送

MVN指令將8位圖立即數(shù)(參看“第2操作數(shù):#immed_8r——常數(shù)表達(dá)式”)或寄存器(operand2)按位取反后傳送到目標(biāo)寄存器(Rd),因?yàn)槠渚哂腥》垂δ埽钥梢匝b載范圍更廣的立即數(shù)。指令格式如下:MVN{cond}{S}Rd,operand2

MVN指令舉例如下:

MVN R1,#0xFF00 MVN R1,R2 ;R1=0xFFFF00FF;將R2按位取反,結(jié)果存到R12024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林56助記符說(shuō)明操作條件碼位置ADDRd,Rn,operand2加法運(yùn)算指令Rd←Rn+operand2ADD{cond}{S}SUBRd,Rn,operand2減法運(yùn)算指令Rd←Rn-operand2SUB{cond}{S}RSBRd,Rn,operand2逆向減法指令Rd←operand2-RnRSB{cond}{S}ADCRd,Rn,operand2帶進(jìn)位加法Rd←Rn+operand2+CarryADC{cond}{S}SBCRd,Rn,operand2帶進(jìn)位減法指令Rd←Rn-operand2-(NOT)CarrySBC{cond}{S}RSCRd,Rn,operand2帶進(jìn)位逆向減法指令Rd←operand2-Rn-(NOT)CarryRSC{cond}{S}ARM數(shù)據(jù)處理指令——算術(shù)運(yùn)算注:這些指令影響N,Z,C和V標(biāo)志位。2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林57助記符說(shuō)明操作條件碼位置ADDRd,Rn,operand2加法運(yùn)算指令Rd←Rn+operand2ADD{cond}{S}SUBRd,Rn,operand2減法運(yùn)算指令Rd←Rn-operand2SUB{cond}{S}RSBRd,Rn,operand2逆向減法指令Rd←operand2-RnRSB{cond}{S}ADCRd,Rn,operand2帶進(jìn)位加法Rd←Rn+operand2+CarryADC{cond}{S}SBCRd,Rn,operand2帶進(jìn)位減法指令Rd←Rn-operand2-(NOT)CarrySBC{cond}{S}RSCRd,Rn,operand2帶進(jìn)位逆向減法指令Rd←operand2-Rn-(NOT)CarryRSC{cond}{S}ARM數(shù)據(jù)處理指令——算術(shù)運(yùn)算加法運(yùn)算指令——ADD指令將operand2的值與Rn的值相加,結(jié)果保存到Rd存放器。指令格式如下:ADD{cond}{S}Rd,Rn,operand2應(yīng)用例如:ADDSR1,R1,#1020ADDR1,R1,R2,LSL#2;R1=R1+1020,并影響標(biāo)志位

;R1=R1+R2<<2

2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林58助記符說(shuō)明操作條件碼位置ADDRd,Rn,operand2加法運(yùn)算指令Rd←Rn+operand2ADD{cond}{S}SUBRd,Rn,operand2減法運(yùn)算指令Rd←Rn-operand2SUB{cond}{S}RSBRd,Rn,operand2逆向減法指令Rd←operand2-RnRSB{cond}{S}ADCRd,Rn,operand2帶進(jìn)位加法Rd←Rn+operand2+CarryADC{cond}{S}SBCRd,Rn,operand2帶進(jìn)位減法指令Rd←Rn-operand2-(NOT)CarrySBC{cond}{S}RSCRd,Rn,operand2帶進(jìn)位逆向減法指令Rd←operand2-Rn-(NOT)CarryRSC{cond}{S}ARM數(shù)據(jù)處理指令——算術(shù)運(yùn)算減法運(yùn)算指令——SUB指令用存放器Rn減去operand2,結(jié)果保存到Rd中。指令格式如下:SUB{cond}{S}Rd,Rn,operand2應(yīng)用例如:SUBS R0,R0,#240 ;R0=R0-240,并影響標(biāo)志位SUBS R2,R1,R2 ;R2=R1-R2,并影響標(biāo)志位2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林59助記符說(shuō)明操作條件碼位置ADDRd,Rn,operand2加法運(yùn)算指令Rd←Rn+operand2ADD{cond}{S}SUBRd,Rn,operand2減法運(yùn)算指令Rd←Rn-operand2SUB{cond}{S}RSBRd,Rn,operand2逆向減法指令Rd←operand2-RnRSB{cond}{S}ADCRd,Rn,operand2帶進(jìn)位加法Rd←Rn+operand2+CarryADC{cond}{S}SBCRd,Rn,operand2帶進(jìn)位減法指令Rd←Rn-operand2-(NOT)CarrySBC{cond}{S}RSCRd,Rn,operand2帶進(jìn)位逆向減法指令Rd←operand2-Rn-(NOT)CarryRSC{cond}{S}ARM數(shù)據(jù)處理指令——算術(shù)運(yùn)算逆向減法運(yùn)算指令——RSB指令將operand2的值減去Rn,結(jié)果保存到Rd中。指令格式如下:RSB{cond}{S}Rd,Rn,operand2應(yīng)用例如:RSBR3,R1,#0xFF00;R3=0xFF00-R1RSBSR1,R2,R2,LSL#2;R1=(R2<<2)-R2=R2×3影響標(biāo)志位2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林60助記符說(shuō)明操作條件碼位置ADDRd,Rn,operand2加法運(yùn)算指令Rd←Rn+operand2ADD{cond}{S}SUBRd,Rn,operand2減法運(yùn)算指令Rd←Rn-operand2SUB{cond}{S}RSBRd,Rn,operand2逆向減法指令Rd←operand2-RnRSB{cond}{S}ADCRd,Rn,operand2帶進(jìn)位加法Rd←Rn+operand2+CarryADC{cond}{S}SBCRd,Rn,operand2帶進(jìn)位減法指令Rd←Rn-operand2-(NOT)CarrySBC{cond}{S}RSCRd,Rn,operand2帶進(jìn)位逆向減法指令Rd←operand2-Rn-(NOT)CarryRSC{cond}{S}ARM數(shù)據(jù)處理指令——算術(shù)運(yùn)算帶進(jìn)位加法指令——ADC將operand2的值與Rn的值相加,再加上CPSR中的C條件標(biāo)志位,結(jié)果保存到Rd存放器。指令格式如下:ADC{cond}{S}Rd,Rn,operand2應(yīng)用例如〔使用ADC實(shí)現(xiàn)64位加法,結(jié)果存于R1〔高32位〕、R0中〕:ADDSR0,R0,R2 ;R0等于低32位相加,并影響標(biāo)志位

ADCR1,R1,R3

;R1等于高32位相加,并加上低位進(jìn)位2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林61助記符說(shuō)明操作條件碼位置ADDRd,Rn,operand2加法運(yùn)算指令Rd←Rn+operand2ADD{cond}{S}SUBRd,Rn,operand2減法運(yùn)算指令Rd←Rn-operand2SUB{cond}{S}RSBRd,Rn,operand2逆向減法指令Rd←operand2-RnRSB{cond}{S}ADCRd,Rn,operand2帶進(jìn)位加法Rd←Rn+operand2+CarryADC{cond}{S}SBCRd,Rn,operand2帶進(jìn)位減法指令Rd←Rn-operand2-(NOT)CarrySBC{cond}{S}RSCRd,Rn,operand2帶進(jìn)位逆向減法指令Rd←operand2-Rn-(NOT)CarryRSC{cond}{S}ARM數(shù)據(jù)處理指令——算術(shù)運(yùn)算帶進(jìn)位減法指令——SBC用存放器Rn減去operand2,再減去CPSR中的C條件標(biāo)志位的非(即假設(shè)C標(biāo)志清零,那么結(jié)果減去1),結(jié)果保存到Rd中。指令格式如下:SBC{cond}{S}Rd,Rn,operand2應(yīng)用例如〔使用SBC實(shí)現(xiàn)64位減法,結(jié)果存于R1、R0中〕:SUBSR0,R0,R2 ;低32位相減,并影響標(biāo)志位SBCR1,R1,R3 ;高32位相減,并減去低位借位2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林62助記符說(shuō)明操作條件碼位置ADDRd,Rn,operand2加法運(yùn)算指令Rd←Rn+operand2ADD{cond}{S}SUBRd,Rn,operand2減法運(yùn)算指令Rd←Rn-operand2SUB{cond}{S}RSBRd,Rn,operand2逆向減法指令Rd←operand2-RnRSB{cond}{S}ADCRd,Rn,operand2帶進(jìn)位加法Rd←Rn+operand2+CarryADC{cond}{S}SBCRd,Rn,operand2帶進(jìn)位減法指令Rd←Rn-operand2-(NOT)CarrySBC{cond}{S}RSCRd,Rn,operand2帶進(jìn)位逆向減法指令Rd←operand2-Rn-(NOT)CarryRSC{cond}{S}ARM數(shù)據(jù)處理指令——算術(shù)運(yùn)算帶進(jìn)位逆向減法指令——RSC指令用存放器operand2減去Rn,再減去CPSR中的C條件標(biāo)志位的非,結(jié)果保存到Rd中。指令格式如下:RSC{cond}{S}Rd,Rn,operand2應(yīng)用例如〔使用RSC指令實(shí)現(xiàn)求64位數(shù)值的負(fù)數(shù)〕:RSBSR2,R0,#0;R2=-R0RSCR3,R1,#0;R3=-R1-!Carry2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林63助記符說(shuō)明操作條件碼位置ANDRd,Rn,operand2邏輯與操作指令Rd←Rn&operand2AND{cond}{S}ORRRd,Rn,operand2邏輯或操作指令Rd←Rn|operand2ORR{cond}{S}EORRd,Rn,operand2邏輯異或操作指令Rd←Rn^operand2EOR{cond}{S}BICRd,Rn,operand2位清除指令Rd←Rn&(~operand2)BIC{cond}{S}ARM數(shù)據(jù)處理指令——邏輯運(yùn)算指令注:當(dāng)后綴S時(shí),這些指令根據(jù)結(jié)果更新標(biāo)志N和Z,在計(jì)算Operand2時(shí)更新標(biāo)志C,不影響標(biāo)志V。2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林64助記符說(shuō)明操作條件碼位置ANDRd,Rn,operand2邏輯與操作指令Rd←Rn&operand2AND{cond}{S}ORRRd,Rn,operand2邏輯或操作指令Rd←Rn|operand2ORR{cond}{S}EORRd,Rn,operand2邏輯異或操作指令Rd←Rn^operand2EOR{cond}{S}BICRd,Rn,operand2位清除指令Rd←Rn&(~operand2)BIC{cond}{S}ARM數(shù)據(jù)處理指令——邏輯運(yùn)算指令邏輯與操作指令——AND指令將operand2的值與存放器Rn的值按位作邏輯“與〞操作,結(jié)果保存到Rd中。指令格式如下:AND{cond}{S}Rd,Rn,operand2應(yīng)用例如:ANDSR0,R0,#0x01 ANDEQR2,R1,R3 ;R0=R0&0x01,取出最低位數(shù)據(jù);R2=R1&R32024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林65助記符說(shuō)明操作條件碼位置ANDRd,Rn,operand2邏輯與操作指令Rd←Rn&operand2AND{cond}{S}ORRRd,Rn,operand2邏輯或操作指令Rd←Rn|operand2ORR{cond}{S}EORRd,Rn,operand2邏輯異或操作指令Rd←Rn^operand2EOR{cond}{S}BICRd,Rn,operand2位清除指令Rd←Rn&(~operand2)BIC{cond}{S}ARM數(shù)據(jù)處理指令——邏輯運(yùn)算指令邏輯或操作指令——ORR指令將operand2的值與寄存器Rn的值按位作邏輯“或”操作,結(jié)果保存到Rd中。指令格式如下:ORR{cond}{S}Rd,Rn,operand2應(yīng)用示例:

ORRR0,R0,#0x0F

;將R0的低4位置1MOV R1,R2,LSR#24

ORR R3,R1,R3,LSL#8

;使用ORR指令將R2的高8位;數(shù)據(jù)移入到R3低8位中2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林66助記符說(shuō)明操作條件碼位置ANDRd,Rn,operand2邏輯與操作指令Rd←Rn&operand2AND{cond}{S}ORRRd,Rn,operand2邏輯或操作指令Rd←Rn|operand2ORR{cond}{S}EORRd,Rn,operand2邏輯異或操作指令Rd←Rn^operand2EOR{cond}{S}BICRd,Rn,operand2位清除指令Rd←Rn&(~operand2)BIC{cond}{S}ARM數(shù)據(jù)處理指令——邏輯運(yùn)算指令邏輯異或操作指令——EOR指令將operand2的值與存放器Rn的值按位作邏輯“異或〞操作,結(jié)果保存到Rd中。指令格式如下:EOR{cond}{S}Rd,Rn,operand2應(yīng)用例如:EOR R1,R1,#0x0F EORR2,R1,R0 EORS R0,R5,#0x01

;將R1的低4位取反;R2=R1^R0;將R5和0x01進(jìn)行邏輯異或,;結(jié)果保存到R0,并影響標(biāo)志位

2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林67助記符說(shuō)明操作條件碼位置ANDRd,Rn,operand2邏輯與操作指令Rd←Rn&operand2AND{cond}{S}ORRRd,Rn,operand2邏輯或操作指令Rd←Rn|operand2ORR{cond}{S}EORRd,Rn,operand2邏輯異或操作指令Rd←Rn^operand2EOR{cond}{S}BICRd,Rn,operand2位清除指令Rd←Rn&(~operand2)BIC{cond}{S}ARM數(shù)據(jù)處理指令——邏輯運(yùn)算指令位去除指令——BIC指令將存放器Rn的值與operand2的值的反碼按位作邏輯“與〞操作,結(jié)果保存到Rd中。指令格式如下:BIC{cond}{S}Rd,Rn,operand2應(yīng)用例如:BICR1,R1,#0x0F BIC R1,R2,R3

;將R1的低4位清零,其它位不變;將R3的反碼和R2相邏輯“與〞,;結(jié)果保存到R1中2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林68助記符說(shuō)明操作條件碼位置CMPRn,operand2比較指令標(biāo)志N、Z、C、V←Rn-operand2CMP{cond}CMNRn,operand2負(fù)數(shù)比較指令標(biāo)志N、Z、C、V←Rn+operand2CMN{cond}TSTRn,operand2位測(cè)試指令標(biāo)志N、Z、C、V←Rn&operand2TST{cond}TEQRn,operand2相等測(cè)試指令標(biāo)志N、Z、C、V←Rn^operand2TEQ{cond}ARM數(shù)據(jù)處理指令——比較指令注:這些指令影響N,Z,C和V標(biāo)志位。2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林69助記符說(shuō)明操作條件碼位置CMPRn,operand2比較指令標(biāo)志N、Z、C、V←Rn-operand2CMP{cond}CMNRn,operand2負(fù)數(shù)比較指令標(biāo)志N、Z、C、V←Rn+operand2CMN{cond}TSTRn,operand2位測(cè)試指令標(biāo)志N、Z、C、V←Rn&operand2TST{cond}TEQRn,operand2相等測(cè)試指令標(biāo)志N、Z、C、V←Rn^operand2TEQ{cond}ARM數(shù)據(jù)處理指令——比較指令比較指令——CMP指令將存放器Rn的值減去operand2的值,根據(jù)操作的結(jié)果更新CPSR中的相應(yīng)條件標(biāo)志位(N/Z/C/V),以便后面的指令根據(jù)相應(yīng)的條件標(biāo)志來(lái)判斷是否執(zhí)行。CMP指令與SUBS指令的區(qū)別在于CMP指令不保存運(yùn)算結(jié)果。指令格式如下: CMP{cond} Rn,operand2應(yīng)用例如:CMP R1,#10 ;R1與10比較,設(shè)置相關(guān)標(biāo)志位CMPGT R1,R2 ;R1與R2比較,設(shè)置相關(guān)標(biāo)志位 ;假設(shè)R1>10,那么執(zhí)行本指令2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林70助記符說(shuō)明操作條件碼位置CMPRn,operand2比較指令標(biāo)志N、Z、C、V←Rn-operand2CMP{cond}CMNRn,operand2負(fù)數(shù)比較指令標(biāo)志N、Z、C、V←Rn+operand2CMN{cond}TSTRn,operand2位測(cè)試指令標(biāo)志N、Z、C、V←Rn&operand2TST{cond}TEQRn,operand2相等測(cè)試指令標(biāo)志N、Z、C、V←Rn^operand2TEQ{cond}ARM數(shù)據(jù)處理指令——比較指令負(fù)數(shù)比較指令——CMN指令使用存放器Rn的值加上operand2的值,根據(jù)操作的結(jié)果更新CPSR中的相應(yīng)條件標(biāo)志位,以便后面的指令根據(jù)相應(yīng)的條件標(biāo)志來(lái)判斷是否執(zhí)行。指令格式如下:CMN{cond} Rn,operand2應(yīng)用例如:CMN R0,#1 ;R0+1,判斷R0是否為1的補(bǔ)碼 ;如果是,那么設(shè)置Z標(biāo)志位2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林71助記符說(shuō)明操作條件碼位置CMPRn,operand2比較指令標(biāo)志N、Z、C、V←Rn-operand2CMP{cond}CMNRn,operand2負(fù)數(shù)比較指令標(biāo)志N、Z、C、V←Rn+operand2CMN{cond}TSTRn,operand2位測(cè)試指令標(biāo)志N、Z、C、V←Rn&operand2TST{cond}TEQRn,operand2相等測(cè)試指令標(biāo)志N、Z、C、V←Rn^operand2TEQ{cond}ARM數(shù)據(jù)處理指令——比較指令負(fù)數(shù)比較指令——CMN指令使用存放器Rn的值加上operand2的值,根據(jù)操作的結(jié)果更新CPSR中的相應(yīng)條件標(biāo)志位,以便后面的指令根據(jù)相應(yīng)的條件標(biāo)志來(lái)判斷是否執(zhí)行。指令格式如下:CMN{cond} Rn,operand2注意:CMN指令與ADDS指令的區(qū)別在于CMN指令不保存運(yùn)算結(jié)果。CMN指令可用于負(fù)數(shù)比較,比方CMNR0,#1指令那么表示R0與-1比較,假設(shè)R0為-1(即1的補(bǔ)碼),那么Z置位;否那么Z復(fù)位。2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林72助記符說(shuō)明操作條件碼位置CMPRn,operand2比較指令標(biāo)志N、Z、C、V←Rn-operand2CMP{cond}CMNRn,operand2負(fù)數(shù)比較指令標(biāo)志N、Z、C、V←Rn+operand2CMN{cond}TSTRn,operand2位測(cè)試指令標(biāo)志N、Z、C、V←Rn&operand2TST{cond}TEQRn,operand2相等測(cè)試指令標(biāo)志N、Z、C、V←Rn^operand2TEQ{cond}ARM數(shù)據(jù)處理指令——比較指令位測(cè)試指令——TST指令將存放器Rn的值與operand2的值按位作邏輯“與〞操作,根據(jù)操作的結(jié)果更新CPSR中的相應(yīng)條件標(biāo)志位,以便后面的指令根據(jù)相應(yīng)的條件標(biāo)志來(lái)判斷是否執(zhí)行。指令格式如下:TST{cond}Rn,operand2應(yīng)用例如:TST R0,#0x01 ;判斷R0的最低位是否為0TST R1,#0x0F ;判斷R1的低4位是否為02024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林73助記符說(shuō)明操作條件碼位置CMPRn,operand2比較指令標(biāo)志N、Z、C、V←Rn-operand2CMP{cond}CMNRn,operand2負(fù)數(shù)比較指令標(biāo)志N、Z、C、V←Rn+operand2CMN{cond}TSTRn,operand2位測(cè)試指令標(biāo)志N、Z、C、V←Rn&operand2TST{cond}TEQRn,operand2相等測(cè)試指令標(biāo)志N、Z、C、V←Rn^operand2TEQ{cond}ARM數(shù)據(jù)處理指令——比較指令位測(cè)試指令——TST指令將存放器Rn的值與operand2的值按位作邏輯“與〞操作,根據(jù)操作的結(jié)果更新CPSR中的相應(yīng)條件標(biāo)志位,以便后面的指令根據(jù)相應(yīng)的條件標(biāo)志來(lái)判斷是否執(zhí)行。指令格式如下:TST{cond}Rn,operand2注意:TST指令與ANDS指令的區(qū)別在于TST指令不保存運(yùn)算結(jié)果。TST指令通常與EQ、NE條件碼配合使用,當(dāng)所有測(cè)試位均為0時(shí),EQ有效〔Z=1〕,而只要有一個(gè)測(cè)試位不為0,那么NE有效〔Z=0〕。2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林74助記符說(shuō)明操作條件碼位置CMPRn,operand2比較指令標(biāo)志N、Z、C、V←Rn-operand2CMP{cond}CMNRn,operand2負(fù)數(shù)比較指令標(biāo)志N、Z、C、V←Rn+operand2CMN{cond}TSTRn,operand2位測(cè)試指令標(biāo)志N、Z、C、V←Rn&operand2TST{cond}TEQRn,operand2相等測(cè)試指令標(biāo)志N、Z、C、V←Rn^operand2TEQ{cond}ARM數(shù)據(jù)處理指令——比較指令相等測(cè)試指令——TEQ指令將存放器Rn的值與operand2的值按位作邏輯“異或〞操作,根據(jù)操作的結(jié)果更新CPSR中的相應(yīng)條件標(biāo)志位,以便后面的指令根據(jù)相應(yīng)的條件標(biāo)志來(lái)判斷是否執(zhí)行。指令格式如下:TEQ{cond}Rn,operand2應(yīng)用例如:TEQ R0,R1 ;比較R0與R1是否相等(不影響V位和C位)2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林75助記符說(shuō)明操作條件碼位置CMPRn,operand2比較指令標(biāo)志N、Z、C、V←Rn-operand2CMP{cond}CMNRn,operand2負(fù)數(shù)比較指令標(biāo)志N、Z、C、V←Rn+operand2CMN{cond}TSTRn,operand2位測(cè)試指令標(biāo)志N、Z、C、V←Rn&operand2TST{cond}TEQRn,operand2相等測(cè)試指令標(biāo)志N、Z、C、V←Rn^operand2TEQ{cond}ARM數(shù)據(jù)處理指令——比較指令相等測(cè)試指令——TEQ指令將存放器Rn的值與operand2的值按位作邏輯“異或〞操作,根據(jù)操作的結(jié)果更新CPSR中的相應(yīng)條件標(biāo)志位,以便后面的指令根據(jù)相應(yīng)的條件標(biāo)志來(lái)判斷是否執(zhí)行。指令格式如下:TEQ{cond}Rn,operand2注意:TEQ指令與EORS指令的區(qū)別在于TEQ指令不保存運(yùn)算結(jié)果。使用TEQ進(jìn)行相等測(cè)試時(shí),常與EQ、NE條件碼配合使用。當(dāng)兩個(gè)數(shù)據(jù)相等時(shí),EQ有效;否那么NE有效。2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林76例題12024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林77例題12024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林781.ARM分支指令2.數(shù)據(jù)處理指令3.存儲(chǔ)器訪問(wèn)指令4.乘法指令5.PSR指令6.軟件中斷指令7.偽指令A(yù)RM指令目錄2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林793.3.3Load/Store指令A(yù)RM指令集——存儲(chǔ)器訪問(wèn)指令A(yù)RM處理器是典型的RISC處理器,對(duì)存儲(chǔ)器的訪問(wèn)只能使用加載和存儲(chǔ)指令實(shí)現(xiàn)。ARM的RAM存儲(chǔ)空間及I/O映射空間統(tǒng)一編址,除對(duì)RAM操作以外,對(duì)外圍IO、程序數(shù)據(jù)的訪問(wèn)均要通過(guò)加載/存儲(chǔ)指令進(jìn)行。存儲(chǔ)器訪問(wèn)指令分為單存放器操作指令、多存放器操作指令和交換指令。2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林803.3.3Load/Store指令根本存儲(chǔ)/加載指令是字/字節(jié)存儲(chǔ)/加載指令:LDR/STR/LDRB/STRBARMV4后添加對(duì)半字及有符號(hào)數(shù)的支持存儲(chǔ)/加載半字:LDRH/STRH加載有符號(hào)半字/字節(jié):LDRSH/LDRSB所有存儲(chǔ)/加載均可條件執(zhí)行,條件碼在LDR/STR之后格式:<LDR|STR>{cond}{size}{T}Rd,<address>2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林81助記符說(shuō)明操作條件碼位置LDRRd,addressing加載字?jǐn)?shù)據(jù)Rd←[addressing],addressing索引LDR{cond}LDRBRd,addressing加載無(wú)符號(hào)字節(jié)數(shù)據(jù)Rd←[addressing],addressing索引LDR{cond}BLDRTRd,addressing以用戶模式加載字?jǐn)?shù)據(jù)Rd←[addressing],addressing索引LDR{cond}TLDRBTRd,addressing以用戶模式加載無(wú)符號(hào)字節(jié)數(shù)據(jù)Rd←[addressing],addressing索引LDR{cond}BTLDRHRd,addressing加載無(wú)符號(hào)半字?jǐn)?shù)據(jù)Rd←[addressing],addressing索引LDR{cond}HLDRSBRd,addressing加載有符號(hào)字節(jié)數(shù)據(jù)Rd←[addressing],addressing索引LDR{cond}SBLDRSHRd,addressing加載有符號(hào)半字?jǐn)?shù)據(jù)

Rd←[addressing],addressing索引

LDR{cond}SHARM存儲(chǔ)器訪問(wèn)指令——單存放器加載2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林82助記符說(shuō)明操作條件碼位置STRRd,addressing存儲(chǔ)字?jǐn)?shù)據(jù)[addressing]←Rd,addressing索引STR{cond}STRBRd,addressing存儲(chǔ)字節(jié)數(shù)據(jù)[addressing]←Rd,addressing索引STR{cond}BSTRTRd,addressing以用戶模式存儲(chǔ)字?jǐn)?shù)據(jù)[addressing]←Rd,

addressing索引STR{cond}TSTRBTRd,addressing以用戶模式存儲(chǔ)字節(jié)數(shù)據(jù)[addressing]←Rd,addressing索引STR{cond}BTSTRHRd,addressing存儲(chǔ)半字?jǐn)?shù)據(jù)[addressing]←Rd,addressing索引STR{cond}HARM存儲(chǔ)器訪問(wèn)指令——單存放器存儲(chǔ)LDR/STR指令用于對(duì)內(nèi)存變量的訪問(wèn)、內(nèi)存緩沖區(qū)數(shù)據(jù)的訪問(wèn)、查表、外圍部件的控制操作等。假設(shè)使用LDR指令加載數(shù)據(jù)到PC存放器,那么實(shí)現(xiàn)程序跳轉(zhuǎn)功能。所有單存放器加載/存儲(chǔ)指令可分為“字和無(wú)符號(hào)字節(jié)加載存儲(chǔ)指令〞和“半字和有符號(hào)字節(jié)加載存儲(chǔ)指令。2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林83LDR和STR——字和無(wú)符號(hào)字節(jié)加載/存儲(chǔ)指令LDR指令用于從內(nèi)存中讀取單一字或字節(jié)數(shù)據(jù)存入存放器中,STR指令用于將存放器中的單一字或字節(jié)數(shù)據(jù)保存到內(nèi)存。指令格式如下:ARM存儲(chǔ)器訪問(wèn)指令——單存放器存儲(chǔ)LDR{cond}{T} Rd,<地址>;將指定地址上的字?jǐn)?shù)據(jù)讀入RdSTR{cond}{T} Rd,<地址>;將Rd中的字?jǐn)?shù)據(jù)存入指定地址

LDR{cond}B{T} Rd,<地址>;將指定地址上的字節(jié)數(shù)據(jù)讀入RdSTR{cond}B{T} Rd,<地址>;將Rd中的字節(jié)數(shù)據(jù)存入指定地址其中,T為可選后綴。假設(shè)指令有T,那么即使處理器是在特權(quán)模式下,存儲(chǔ)系統(tǒng)也將訪問(wèn)看成是在用戶模式下進(jìn)行的。T在用戶模式下無(wú)效,不能與前索引偏移一起使用T。2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林84ARM存儲(chǔ)器訪問(wèn)指令——單存放器存儲(chǔ)LDR和STR——字和無(wú)符號(hào)字節(jié)加載/存儲(chǔ)指令編碼指令執(zhí)行的條件碼I為1時(shí),偏移量為12位立即數(shù),為0時(shí),偏移量為存放器移位P表示前/后變址U表示加/減B為1表示字節(jié)訪問(wèn),為0表示字訪問(wèn)W表示回寫為指令的尋址方式Rd為源/目標(biāo)存放器Rn為基址存放器L用于區(qū)別加載〔L為1〕或存儲(chǔ)〔L為0〕2024/1/17中國(guó)礦業(yè)大學(xué)——信電學(xué)院——張林85ARM存儲(chǔ)器訪問(wèn)指令——單存放器存儲(chǔ)LDR和STR——字和無(wú)符號(hào)字節(jié)加載/存儲(chǔ)指令LDR/STR指令尋址非常靈活,它由兩局部組成,其中一局部為一個(gè)基址存放器,可以為任一個(gè)通用存放器;另一局部為一個(gè)地址偏移量。地址偏移量有以下3種格式:立即數(shù)。立即數(shù)可以是一個(gè)無(wú)符號(hào)的數(shù)值。這個(gè)數(shù)據(jù)可以加到基址存放器,也可以從基址存放器中減去這個(gè)數(shù)值。如:LDRR1,[R0,#0x12];R1<-[R0+0x12]存放器。存放器中的數(shù)值可以加到基址

溫馨提示

  • 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ù)覽,若沒有圖紙預(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)論