資源描述:
《arm嵌入式系統(tǒng)基礎(chǔ)教程》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、第4章目錄1.ARM處理器尋址方式2.指令集介紹ARM指令集Thumb指令集第4章目錄1.ARM處理器尋址方式2.指令集介紹ARM指令集Thumb指令集第4章ARM7TDMI(-S)指令系統(tǒng)簡介ARM處理器是基于精簡指令集計(jì)算機(jī)(RISC)原理設(shè)計(jì)的,指令集和相關(guān)譯碼機(jī)制較為簡單。ARM7TDMI(-S)具有32位ARM指令集和16位Thumb指令集,ARM指令集效率高,但是代碼密度低;而Thumb指令集具有較高的代碼密度,卻仍然保持ARM的大多數(shù)性能上的優(yōu)勢(shì),它是ARM指令集的子集。所有的ARM指令都是可以有條件執(zhí)行的,而Thumb指令僅有一條指令具備條件執(zhí)行功能。ARM程序和Thumb
2、程序可相互調(diào)用,相互之間的狀態(tài)切換開銷幾乎為零。第4章ARM7TDMI(-S)指令系統(tǒng)ARM指令集與Thumb指令集的關(guān)系Thumb指令集具有靈活、小巧的特點(diǎn)ARM指令集支持ARM核所有的特性,具有高效、快速的特點(diǎn)4.1ARM處理器尋址方式尋址方式分類尋址方式是根據(jù)指令中給出的地址碼字段來實(shí)現(xiàn)尋找真實(shí)操作數(shù)地址的方式。ARM處理器具有9種基本尋址方式。1.寄存器尋址;2.立即尋址;3.寄存器移位尋址;4.寄存器間接尋址;5.基址尋址;6.多寄存器尋址;7.堆棧尋址;8.塊拷貝尋址;9.相對(duì)尋址。操作數(shù)的值在寄存器中,指令中的地址碼字段指出的是寄存器編號(hào),指令執(zhí)行時(shí)直接取出寄存器值來操作。寄
3、存器尋址指令舉例如下:MOVR1,R2;將R2的值存入R1SUBR0,R1,R2;將R1的值減去R2的值,結(jié)果保存到R00xAA0x55R2R14.1ARM處理器尋址方式尋址方式分類——寄存器尋址MOVR1,R20xAA立即尋址指令中的操作碼字段后面的地址碼部分即是操作數(shù)本身,也就是說,數(shù)據(jù)就包含在指令當(dāng)中,取出指令也就取出了可以立即使用的操作數(shù)(這樣的數(shù)稱為立即數(shù))。立即尋址指令舉例如下:SUBSR0,R0,#1;R0減1,結(jié)果放入R0,并且影響標(biāo)志位MOVR0,#0xFF000;將立即數(shù)0xFF000裝入R0寄存器0x55R0MOVR0,#0xFF00程序存儲(chǔ)4.1ARM處理器尋址方式
4、尋址方式分類——立即尋址MOVR0,#0xFF000xFF00從代碼中獲得數(shù)據(jù)寄存器移位尋址是ARM指令集特有的尋址方式。當(dāng)?shù)?個(gè)操作數(shù)是寄存器移位方式時(shí),第2個(gè)寄存器操作數(shù)在與第1個(gè)操作數(shù)結(jié)合之前,選擇進(jìn)行移位操作。寄存器移位尋址指令舉例如下:MOVR0,R2,LSL#3;R2的值左移3位,結(jié)果放入R0,;即是R0=R2×8ANDSR1,R1,R2,LSLR3;R2的值左移R3位,然后和R1相;“與”操作,結(jié)果放入R10x55R0R20x014.1ARM處理器尋址方式尋址方式分類——寄存器移位尋址MOVR0,R2,LSL#30x080x08邏輯左移3位寄存器間接尋址指令中的地址碼給出的是
5、一個(gè)通用寄存器的編號(hào),所需的操作數(shù)保存在寄存器指定地址的存儲(chǔ)單元中,即寄存器為操作數(shù)的地址指針。寄存器間接尋址指令舉例如下:LDRR1,[R2];將R2指向的存儲(chǔ)單元的數(shù)據(jù)讀出;保存在R1中SWPR1,R1,[R2];將寄存器R1的值和R2指定的存儲(chǔ);單元的內(nèi)容交換0x55R0R20x400000000xAA0x400000004.1ARM處理器尋址方式尋址方式分類——寄存器間接尋址LDRR1,[R2]0xAA基址尋址就是將基址寄存器的內(nèi)容與指令中給出的偏移量相加,形成操作數(shù)的有效地址?;穼ぶ酚糜谠L問基址附近的存儲(chǔ)單元,常用于查表、數(shù)組操作、功能部件寄存器訪問等?;穼ぶ分噶钆e例如下:L
6、DRR2,[R3,#0x0C];讀取R3+0x0C地址上的存儲(chǔ)單元;的內(nèi)容,放入R2STRR1,[R0,#-4]!;先R0=R0-4,然后把R1的值寄存;到保存到R0指定的存儲(chǔ)單元4.1ARM處理器尋址方式尋址方式分類——基址尋址0x55R2R30x400000000xAA0x4000000CLDRR2,[R3,#0x0C]0xAA將R3+0x0C作為地址裝載數(shù)據(jù)多寄存器尋址一次可傳送幾個(gè)寄存器值,允許一條指令傳送16個(gè)寄存器的任何子集或所有寄存器。多寄存器尋址指令舉例如下:LDMIAR1!,{R2-R7,R12};將R1指向的單元中的數(shù)據(jù)讀出到;R2~R7、R12中(R1自動(dòng)加1)STM
7、IAR0!,{R2-R7,R12};將寄存器R2~R7、R12的值保;存到R0指向的存儲(chǔ);單元中;(R0自動(dòng)加1)0x40000000R1R20x??0x010x400000000x??R3R40x??R60x??0x020x030x040x400000040x400000080x4000000C存儲(chǔ)器4.1ARM處理器尋址方式尋址方式分類——多寄存器尋址LDRR1!,{R2-R4,R6}0x010x020x030x04