![安徽理工大學(xué)計算機匯編教程-ARMThumb匯編語言.ppt_第1頁](http://file.renrendoc.com/FileRoot1/2019-2/2/0f0b660e-7847-48fd-b8e9-fea7fd877e4f/0f0b660e-7847-48fd-b8e9-fea7fd877e4f1.gif)
![安徽理工大學(xué)計算機匯編教程-ARMThumb匯編語言.ppt_第2頁](http://file.renrendoc.com/FileRoot1/2019-2/2/0f0b660e-7847-48fd-b8e9-fea7fd877e4f/0f0b660e-7847-48fd-b8e9-fea7fd877e4f2.gif)
![安徽理工大學(xué)計算機匯編教程-ARMThumb匯編語言.ppt_第3頁](http://file.renrendoc.com/FileRoot1/2019-2/2/0f0b660e-7847-48fd-b8e9-fea7fd877e4f/0f0b660e-7847-48fd-b8e9-fea7fd877e4f3.gif)
![安徽理工大學(xué)計算機匯編教程-ARMThumb匯編語言.ppt_第4頁](http://file.renrendoc.com/FileRoot1/2019-2/2/0f0b660e-7847-48fd-b8e9-fea7fd877e4f/0f0b660e-7847-48fd-b8e9-fea7fd877e4f4.gif)
![安徽理工大學(xué)計算機匯編教程-ARMThumb匯編語言.ppt_第5頁](http://file.renrendoc.com/FileRoot1/2019-2/2/0f0b660e-7847-48fd-b8e9-fea7fd877e4f/0f0b660e-7847-48fd-b8e9-fea7fd877e4f5.gif)
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
2019/7/16,第17章 ARM /Thumb匯編語言,1,8086/8088和ARM核匯編語言程序設(shè)計,第17章 ARM/Thumb匯編語言,2019/7/16,第17章 ARM /Thumb匯編語言,2,17.2 ARM指令的尋址方式,17.3 ARM匯編語言的語句格式,第17章 ARM/Thumb匯編語言,17.1 ARM指令的分類及格式,2019/7/16,第17章 ARM /Thumb匯編語言,3,17.1.1 ARM指令的分類,ARM處理器是基于精簡指令集計算機(RISC)原理設(shè)計的,指令集和相關(guān)譯碼機制較為簡單。ARM 指令歸納起來可分為以下6類: 跳轉(zhuǎn)指令 數(shù)據(jù)處理指令 程序狀態(tài)寄存器(PSR)傳輸指令 內(nèi)存取數(shù)/存數(shù)操作指令 協(xié)處理器指令 異常中斷產(chǎn)生指令,2019/7/16,第17章 ARM /Thumb匯編語言,4,17.1.2 ARM指令一般編碼格式,其中各位的含義如下: (1) cond (bit31 bit28)指令執(zhí)行的操作碼 (2) opcode (bit24 bit21) 指令操作符編碼 (3) S (bit20)決定指令操作是否影響CPSR (4) Rn (bit19 bit16)包含第一個操作數(shù)的寄存器編碼 (5) Rd (bit15 bit12)目標(biāo)寄存器編碼 (6) shifter_operand(bit11 bit0)表示第二個操作數(shù) (7) bit27bit25 為固定值001,2019/7/16,第17章 ARM /Thumb匯編語言,5,17.1.3 ARM指令基本語法格式,一條典型的ARM指令語法格式如下所示: S , 其中: opcode 指令助記符,如ADD,SUB等。 cond 指令執(zhí)行條件,如EQ,NE等。 S 決定指令的操作是否影響CPSR寄存器的值,書寫時影響CPSR。 Rd 目標(biāo)寄存器。 Rn 包含第一個操作數(shù)的寄存器。 operand2 第二個操作數(shù)。,2019/7/16,第17章 ARM /Thumb匯編語言,6,17.1.3 ARM指令基本語法格式,1. 第二個操作數(shù)operand2 在ARM指令中靈活使用第二個操作數(shù)能夠提高代碼的效率。第二個操作數(shù)operand2通常有下面三種格式: 立即數(shù)方式 寄存器方式 寄存器移位方式,2019/7/16,第17章 ARM /Thumb匯編語言,7,17.1.3 ARM指令基本語法格式,(1) 立即數(shù)方式 每個立即數(shù)由一個8位的常數(shù)循環(huán)右移偶數(shù)位得到。其中循環(huán)右移的位數(shù)由一個4位二進(jìn)制的兩倍表示。即立即數(shù)=8位常數(shù)imm8循環(huán)右移 2*循環(huán)移位次數(shù)。 立即數(shù)方式應(yīng)用舉例: MOV R0,#1 ;R0=1 AND R1,R2,#0xf ;R2與0x0f,結(jié)果保存在R1 LDR R0,R1,# -4 ;讀取R1地址上的存儲單元內(nèi)容,且R1=R1-4,2019/7/16,第17章 ARM /Thumb匯編語言,8,17.1.3 ARM指令基本語法格式,(2) 寄存器方式 在寄布器尋址方式下,操作數(shù)即為寄存器的數(shù)值。 寄存器方式應(yīng)用舉例: MOV R3,R2 ;將R2的數(shù)值放到R3中 ADD R0,Rl,R2 ;R0數(shù)值等于R1的數(shù)值加上R2的數(shù)值,2019/7/16,第17章 ARM /Thumb匯編語言,9,17.1.3 ARM指令基本語法格式,(3) 寄存器移位方式 將寄存器的移位結(jié)果作為操作數(shù),但寄存器的內(nèi)容保持不變,移位方法如下: ASR #n/Rs 算術(shù)右移n位(1n32)或寄存器Rs指定 LSL #n/Rs 邏輯左移n位(1n32)或寄存器Rs指定 LSR #n/Rs 邏輯右移n位(1n32)或寄存器Rs指定 ROR #n/Rs 循環(huán)右移n位(1n32)或寄存器Rs指定 RRX 擴展的循環(huán)右移 移位的位數(shù)可以用立即數(shù)方式或者寄存器方式表示。,2019/7/16,第17章 ARM /Thumb匯編語言,10,17.1.3 ARM指令基本語法格式,2. 條件碼cond,2019/7/16,第17章 ARM /Thumb匯編語言,11,17.2 ARM指令的尋址方式,17.3 ARM匯編語言的語句格式,第17章 ARM/Thumb匯編語言,17.1 ARM指令的分類及格式,2019/7/16,第17章 ARM /Thumb匯編語言,12,操作數(shù)的值在寄存器中,指令中的地址碼字段指出的是寄存器編號,指令執(zhí)行時直接取出寄存器值來操作。寄存器尋址指令舉例如下: MOV R1,R2 ;將R2的值存入R1 SUB R0,R1,R2 ;將R1的值減去R2的值,結(jié)果保存到R0,尋址方式分類寄存器尋址,MOV R1,R2,0xAA,17.2 ARM指令的尋址方式,2019/7/16,第17章 ARM /Thumb匯編語言,13,立即尋址指令中的操作碼字段后面的地址碼部分即是操作數(shù)本身,也就是說,數(shù)據(jù)就包含在指令當(dāng)中,取出指令也就取出了可以立即使用的操作數(shù)(這樣的數(shù)稱為立即數(shù))。立即尋址指令舉例如下: SUBS R0,R0,#1 ;R0減1,結(jié)果放入R0,并且影響標(biāo)志位 MOV R0,#0xFF000 ;將立即數(shù)0xFF000裝入R0寄存器,尋址方式分類立即尋址,MOV R0,#0xFF00,0xFF00,從代碼中獲得數(shù)據(jù),17.2 ARM指令的尋址方式,2019/7/16,第17章 ARM /Thumb匯編語言,14,寄存器移位尋址是ARM指令集特有的尋址方式。當(dāng)?shù)?個操作數(shù)是寄存器移位方式時,第2個寄存器操作數(shù)在與第1個操作數(shù)結(jié)合之前,選擇進(jìn)行移位操作。寄存器移位尋址指令舉例如下: MOV R0,R2,LSL #3 ;R2的值左移3位,結(jié)果放入R0,即是R0=R28 ANDS R1,R1,R2,LSL R3 ;R2的值左移R3位,然后和R1相“與”操作,存入R1,尋址方式分類寄存器移位尋址,MOV R0,R2,LSL #3,0x08,0x08,邏輯左移3位,17.2 ARM指令的尋址方式,2019/7/16,第17章 ARM /Thumb匯編語言,15,寄存器間接尋址指令中的地址碼給出的是一個通用寄存器的編號,所需的操作數(shù)保存在寄存器指定地址的存儲單元中,即寄存器為操作數(shù)的地址指針。寄存器間接尋址指令舉例如下: LDR R1,R2 ;將R2指向的存儲單元的數(shù)據(jù)讀出保存在R1中 SWP R1,R1,R2 ;將寄存器R1的值和R2指定的存儲單元的內(nèi)容交換,尋址方式分類寄存器間接尋址,LDR R1,R2,0xAA,17.2 ARM指令的尋址方式,2019/7/16,第17章 ARM /Thumb匯編語言,16,基址尋址就是將基址寄存器的內(nèi)容與指令中給出的偏移量相加,形成操作數(shù)的有效地址?;穼ぶ酚糜谠L問基址附近的存儲單元,常用于查表、數(shù)組操作、功能部件寄存器訪問等?;穼ぶ分噶钆e例如下: LDR R2,R3,#0x0C ;讀取R3+0x0C地址上的存儲單元的內(nèi)容,放入R2 STR R1,R0,#-4! ;先R0=R0-4,然后把R1的值寄存到保存到R0指定的存儲單元,尋址方式分類基址尋址,LDR R2,R3,#0x0C,0xAA,將R3+0x0C作為地址裝載數(shù)據(jù),17.2 ARM指令的尋址方式,2019/7/16,第17章 ARM /Thumb匯編語言,17,多寄存器尋址一次可傳送幾個寄存器值,允許一條指令傳送16個寄存器的任何子集或所有寄存器。多寄存器尋址指令舉例如下: LDMIA R1!,R2-R7,R12 ;將R1指向的單元中的數(shù)據(jù)讀出到 ;R2R7、R12中(R1自動加1) STMIA R0!,R2-R7,R12 ;將寄存器R2R7、R12的值保存到R0指向的存儲單元中 ;(R0自動加1),尋址方式分類多寄存器尋址,LDR R1!,R2-R4,R6,0x40000010,17.2 ARM指令的尋址方式,2019/7/16,第17章 ARM /Thumb匯編語言,18,堆棧是一個按特定順序進(jìn)行存取的存儲區(qū),操作順序為“后進(jìn)先出” 。堆棧尋址是隱含的,它使用一個專門的寄存器(堆棧指針)指向一塊存儲區(qū)域(堆棧),指針?biāo)赶虻拇鎯卧词嵌褩5臈m?。存儲器堆??煞譃閮煞N: 向上生長:向高地址方向生長,稱為遞增堆棧 向下生長:向低地址方向生長,稱為遞減堆棧,尋址方式分類堆棧尋址,17.2 ARM指令的尋址方式,2019/7/16,第17章 ARM /Thumb匯編語言,19,尋址方式分類堆棧尋址,0x12345678,0x12345678,17.2 ARM指令的尋址方式,2019/7/16,第17章 ARM /Thumb匯編語言,20,堆棧指針指向最后壓入的堆棧的有效數(shù)據(jù)項,稱為滿堆棧;堆棧指針指向下一個待壓入數(shù)據(jù)的空位置,稱為空堆棧。,尋址方式分類堆棧尋址,0x12345678,17.2 ARM指令的尋址方式,2019/7/16,第17章 ARM /Thumb匯編語言,21,所以可以組合出四種類型的堆棧方式: 滿遞增:堆棧向上增長,堆棧指針指向內(nèi)含有效數(shù)據(jù)項的最高地址。指令如LDMFA、STMFA等; 空遞增:堆棧向上增長,堆棧指針指向堆棧上的第一個空位置。指令如LDMEA、STMEA等; 滿遞減:堆棧向下增長,堆棧指針指向內(nèi)含有效數(shù)據(jù)項的最低地址。指令如LDMFD、STMFD等; 空遞減:堆棧向下增長,堆棧指針向堆棧下的第一個空位置。指令如LDMED、STMED等。,尋址方式分類堆棧尋址,17.2 ARM指令的尋址方式,2019/7/16,第17章 ARM /Thumb匯編語言,22,多寄存器傳送指令用于將一塊數(shù)據(jù)從存儲器的某一位置拷貝到另一位置。 如: STMIA R0!,R1-R7 ;將R1R7的數(shù)據(jù)保存到存儲器中。 ;存儲指針在保存第一個值之后增加, ;增長方向為向上增長。 STMIB R0!,R1-R7 ;將R1R7的數(shù)據(jù)保存到存儲器中。 ;存儲指針在保存第一個值之前增加, ;增長方向為向上增長。,尋址方式分類塊拷貝尋址,17.2 ARM指令的尋址方式,2019/7/16,第17章 ARM /Thumb匯編語言,23,相對尋址是基址尋址的一種變通。由程序計數(shù)器PC提供基準(zhǔn)地址,指令中的地址碼字段作為偏移量,兩者相加后得到的地址即為操作數(shù)的有效地址。相對尋址指令舉例如下: BL SUBR1 ;調(diào)用到SUBR1子程序 BEQ LOOP ;條件跳轉(zhuǎn)到LOOP標(biāo)號處 . LOOP MOV R6,#1 . SUBR1 .,尋址方式分類相對尋址,17.2 ARM指令的尋址方式,2019/7/16,第17章 ARM /Thumb匯編語言,24,17.2 ARM指令的尋址方式,17.3 ARM匯編語言的語句格式,第17章 ARM/Thumb匯編語言,17.1 ARM指令的分類及格式,2019/7/16,第17章 ARM /Thumb匯編語言,25,17.3 ARM匯編語言的語句格式,ARM(Thumb)匯編語言的語句格式為: 標(biāo)號 指令或偽指令 ;注釋,在匯編語言程序設(shè)計中,經(jīng)常使用各種符號代替地址、變量和常量等,以增加程序的可讀性。盡管符號的命名由編程者決定,但并不是任意的,必須遵循以下的約定: 符號區(qū)分大小寫,同名的大、小寫符號會被編譯器認(rèn)為是兩個不同的符號。 符號在其作用范圍內(nèi)必須唯一。 自定義的符號名不能與系統(tǒng)的保留字相同。 符號名不應(yīng)與指令或偽指令同名。,17.3.1 在匯編語言程序中常用的符號,2019/7/16,第17章 ARM /Thumb匯編語言,26,17.3.1 在匯編語言程序中常用的符號,1. 程序中的變量 程序中的變量是指其值在程序的運行過程中可以改變的量。ARM(Thumb)匯編程序所支持的變量有數(shù)字變量、邏輯變量和字符串變量。 數(shù)字變量用于在程序的運行中保存數(shù)字值,但注意數(shù)字值的大小不應(yīng)超出數(shù)字變量所能表示的范圍。 邏輯變量用于在程序的運行中保存邏輯值,邏輯值只有兩種取值情況:真或假。 字符串變量用于在程序的運行中保存一個字符串,但注意字符串的長度不應(yīng)超出字符串變量所能表示的范圍。,2019/7/16,第17章 ARM /Thumb匯編語言,27,17.3.1 在匯編語言程序中常用的符號,2. 程序中的常量 程序中的常量是指其值在程序的運行過程中不能被改變的量。ARM(Thumb)匯編程序所支持的常量有數(shù)字常量、邏輯常量和字符串常量。 數(shù)字常量一般為32位的整數(shù),當(dāng)作為無符號數(shù)時,其取值范圍為0232-1,當(dāng)作為有符號數(shù)時,其取值范圍為-231231-1。 邏輯常量只有兩種取值情況:真或假。 字符串常量為一個固定的字符串,一般用于程序運行時的信息提示。,2019/7/16,第17章 ARM /Thumb匯編語言,28,17.3.1 在匯編語言程序中常用的符號,3. 程序中的變量代換 程序中的變量可通過代換操作取得一個常量。代換操作符為“$”。 如果在數(shù)字變量前面有一個代換操作符“$”,編譯器會將該數(shù)字變量的值轉(zhuǎn)換為十六進(jìn)制的字符串,并將該十六進(jìn)制的字符串代換“$”后的數(shù)字變量。 如果在邏輯變量前面有一個代換操作符“$”,編譯器會將該邏輯變量代換為它的取值(真或假)。 如果在字符串變量前面有一個代換操作符“$”,編譯器會將該字符串變量的值代換“$”后的字符串變量。,2019/7/16,第17章 ARM /Thumb匯編語言,29,17.3.2 匯編語言程序中的表達(dá)式和運算符,表達(dá)式一般由變量、常量、運算符和括號構(gòu)成。常用的表達(dá)式有數(shù)字表達(dá)式、邏輯表達(dá)式和字符串表達(dá)式,其運算次序遵循如下的優(yōu)先級: 優(yōu)先級相同的雙目運算符的運算順序為從左到右。 相鄰的單目運算符的運算順序為從右到左,且單目運算符的優(yōu)先級高于其他運算符。 括號運算符的優(yōu)先級最高。,2019/7/16,第17章 ARM /Thumb匯編語言,30,1. 數(shù)字表達(dá)式及運算符, “”、“”、“”、“/” 及“MOD”算術(shù)運算符 以上的算術(shù)運算符分別代表加、減、乘、除和取余數(shù)運算。例如,以X和Y表示兩個數(shù)字表達(dá)式,則: XY 表示X與Y的和。 XY 表示X與Y的差。 XY 表示X與Y的乘積。 X/Y 表示X除以Y的商。 X:MOD:Y 表示X除以Y的余數(shù)。,2019/7/16,第17章 ARM /Thumb匯編語言,31,1. 數(shù)字表達(dá)式及運算符, “ROL”、“ROR”、“SHL”及“SHR”移位運算符 以X和Y表示兩個數(shù)字表達(dá)式,以上的移位運算符代表的運算如下: X:ROL:Y 表示將X循環(huán)左移Y位。 X:ROR:Y 表示將X循環(huán)右移Y位。 X:SHL:Y 表示將X左移Y位。 X:SHR:Y 表示將X右移Y位。,2019/7/16,第17章 ARM /Thumb匯編語言,32,1. 數(shù)字表達(dá)式及運算符,“AND”、“OR”、“NOT”及“EOR”按位邏輯運算符 以X和Y表示兩個數(shù)字表達(dá)式,以上的按位邏輯運算符代表的運算如下: X:AND:Y 表示將X和Y按位作邏輯與的操作。 X:OR:Y 表示將X和Y按位作邏輯或的操作。 :NOT:Y 表示將Y按位作邏輯非的操作。 X:EOR:Y 表示將X和Y按位作邏輯異或的操作。,2019/7/16,第17章 ARM /Thumb匯編語言,33,2. 邏輯表達(dá)式及運算符, “=”、“”、“=”、“” 運算符 以X和Y表示兩個邏輯表達(dá)式,以上的運算符代表的運算如下: X = Y 表示X等于Y。 X Y 表示X大于Y。 X = Y 表示X大于等于Y。 X Y 表示X不等于Y。,2019/7/16,第17章 ARM /Thumb匯編語言,34,2. 邏輯表達(dá)式及運算符, “LAND”、“LOR”、“LNOT”及“LEOR”運算符 以X和Y表示兩個邏輯表達(dá)式,以上的邏輯運算符代表的運算如下: X:LAND:Y 表示將X和Y 作邏輯與的操作。 X:LOR:Y 表示將X和Y作邏輯或的操作。 :LNOT:Y 表示將Y作邏輯非的操作。 X:LEOR:Y 表示將X和Y作邏輯異或的操作。,2019/7/16,第17章 ARM /Thumb匯編語言,35,3. 字符串表達(dá)式及運算符,LEN運算符 LEN運算符返回字符串的長度(字符數(shù)),以X表示字符串表達(dá)式,其語法格式如下: :LEN:X CHR運算符 CHR運算符將0255之間的整數(shù)轉(zhuǎn)換為一個字符,以M表示某一個整數(shù),其語法格式如下: :CHR:M,2019/7/16,第17章 ARM /Thumb匯編語言,36,3. 字符串表達(dá)式及運算符,STR運算符 STR運算符將將一個數(shù)字表達(dá)式或邏輯表達(dá)式轉(zhuǎn)換為一個字符
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 操作系統(tǒng)課程設(shè)計死鎖
- 2024年度企業(yè)抵押借款合同正本規(guī)范范本3篇
- 2024年裝修工程合同:某房地產(chǎn)公司與裝修公司之間的裝修工程合作
- 承德醫(yī)學(xué)院《構(gòu)成設(shè)計》2023-2024學(xué)年第一學(xué)期期末試卷
- 成都銀杏酒店管理學(xué)院《自動化專業(yè)英語》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五年度住宅小區(qū)地下車庫車位購置合同4篇
- 皮膚護(hù)理的講解
- 萬兆園區(qū)規(guī)劃與實施路徑的創(chuàng)新方案
- 豹紋墻面施工方案
- 2025年度智能安防門窗系統(tǒng)安裝施工合同范本3篇
- 工業(yè)項目投資估算及財務(wù)評價附表(有計算公式)
- 2024-2030年中國Micro LED行業(yè)發(fā)展現(xiàn)狀調(diào)研及市場前景趨勢報告
- 醫(yī)療機構(gòu)病歷管理規(guī)定(2024 年版)
- 高中英語外研版 單詞表 必修2
- 2024-2030年中國蓖麻行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略分析報告
- 2025國家開放大學(xué)電大??啤痘A(chǔ)寫作》期末試題及答案(試卷號2412)
- 用所給詞的適當(dāng)形式填空(專項訓(xùn)練)人教PEP版英語六年級上冊
- 2024年全國職業(yè)院校技能大賽“新型電力系統(tǒng)與維護(hù)”賽項考試題庫-中(多選題)
- DL∕T 677-2018 發(fā)電廠在線化學(xué)儀表檢驗規(guī)程
- 馬克思主義與社會科學(xué)方法論課后思考題答案全
- 七年級歷史下冊教學(xué)工作計劃
評論
0/150
提交評論