第3章 ARM微處理器的指令集.

Slides:



Advertisements
Similar presentations
請按左鍵換頁 為人的藝術 ~善緣貴人多~ 廣結善緣 1. 有什麼觀念,就有什麼行為; 有什麼行為,就有什麼習慣; 有什麼習慣,就有什麼性格; 有什麼性格,就有什麼命運。 2. 對長輩謙虛是本分,對平輩謙虛是修養, 對 晚輩謙虛是高貴,對所有人謙虛是安全。 3. 廣結善緣,圓融的人際關係( EQ ):
Advertisements

台中市牙醫師公會 社會教育委員會 蔡佩音醫師 迎接新口腔時代. 蛀牙 v.s 全身疾病.
幼小課程統合與銜接 楊朝祥 中原大學講座教授.
五專醫護類科介紹 樹人醫專 職業教育組 李天豪 組長.
ARM 编程技巧.
機關改制(含員工權益保障)業務簡介 報告人:王奐寅 100年6月24日.
追求阳光心态 做一个心理健康的人 上海市徐汇区精神卫生中心 吴洪明.
耶和華神已掌權 主耶和華我的神 我的王 我的心要倚靠祢 凡投靠祢的必不懼怕 等候祢的必不羞愧 願祢的崇高過於諸天 祢的榮耀高過全地
嵌入式系统教案 武汉创维特信息技术有限公司 2017/3/4.
企业所得税年度纳税申报表(2014年版) 2015年1月.
NEUSOFT Institute of information Technology .ChengDu
说课课件 感悟工业革命力量,闪耀科技创新光辉 ----《走向整体的世界》教学设计及反思 爱迪生 西门子 卡尔·本茨 诺贝尔 学军中学 颜先辉.
保良局何壽南小學 學校經驗分享: 學生成長的支援
門神 在傳統觀念中,門是居住環境中與外界相通的出入口,具有重要的屏障作用。門神顧名思義就是護宅守門的神仙,每逢過年,上至天子百官下至普通百姓,家家戶戶必在門上張貼門神,以保一家平安。 門神種類主要有宅第大門上將軍武門神、內室門戶上祈福文門神,還有童子門神、仙子門神等,形象豐富多樣,皇家貴戚還往往在畫上瀝粉貼金,十分吉祥喜慶。
教师应做学生的心理保健师 (之三) 昆明市心桥心理健康研究所 钱锡安
美国史 美利坚合众国创造了一个人类建国史的奇迹,在短短230年的时间从一个被英帝国奴役的殖民地到成为驾驭全世界的“超级大国”、“世界警察”,美国的探索为人类的发展提供了很宝贵的经验。
典型案例---医院.
2014年度企业所得税业务培训 蚌埠市地方税务局所得税科.
企业所得税年度纳税申报表(2014年版)培训 国家税务总局所得税司 2014年12月.
國中小教師甄試相關事宜 心理的準備 甄試日期 甄試方式 甄試內容 正式教師與代課教師差別 相關問題 關起門來說的問題 結語.
校 長 翁世盟 家長會長 蔡宏奕 教師會長 葉蕙境 敬上
課程內容 態度決定高度 履歷及面試重點提要 履歷 面試服裝及注意事項 性向分析 性向分析測驗.
我班最喜愛的零食 黃行杰.
宁波万里国际学校 陈湘龙
企业所得税年度纳税申报表(2014年版)培训 国家税务总局公告2014年第63号
第3章 基于ARM的处理器体系结构1 主讲 马洪连.
微机原理与接口技术 第二章 ARM微处理器硬件结构
公主的月亮 最近看了一本友人劉清彥譯的書〔公主的月亮〕,極有趣味。 這個難題由一個生病的小公主提出,她嬌憨的告訴疼她的國王,
公主的月亮 最近看了一本友人劉清彥譯的書〔公主的月亮〕,極有趣味。 這個難題由一個生病的小公主提出,她嬌憨的告訴疼她的國王,
為人的藝術 ~善緣貴人多~ 請按左鍵換頁.
為人的藝術 ~善緣貴人多~ 請按左鍵換頁.
常常喜乐 赞美我主.
足太阳膀胱经.
互 联 网 对 减 速 机 技 术 及 市 场 发 展 的 影 响 乔 华 山.
大连理工大学软件学院 软件工程系 赖晓晨 计算机组成与结构 大连理工大学软件学院 软件工程系 赖晓晨
EQ劇場 ~ 李爾王.
ARM及Thumb指令集.
ARM 架构.
嵌入式系统讲义 第3章 ARM指令系统 周国运
指令集架構 計算機也跟人類一樣,需要提供一套完整的語言讓人們跟它充分溝通,以完成正確的計算工作。
ARM CPU從高階語言到Machine Code
嵌入式微处理器系统 第二章 处理器技术(1) 北京大学软件与微电子学院.
College of Computer Science & Technology
第4章 汇编语言程序设计 汇编语言源程序格式 汇编语言上机过程 汇编语言与C语言混合编程技术.
汇编语言程序设计课程设计 第二次实验 DEBUG基本命令与算术运算指令
第四章 Thumb 指令集 4.1 Thumb 指令集概述 4.2 Thumb 指令详细介绍.
提纲 第四章 ARM指令分类及寻址方式 1 ARM 微处理器指令的分类 2 ARM 微处理器指令的条件域 3 ARM 微处理器指令的寻址方式.
嵌入式体系结构与应用 第三章-ARM指令系统(ARMv4T).
第2章 ARM微处理器硬件结构 计算机体系结构分类 ARM版本及系列 ARM处理器结构 存储系统机制.
第四章 ARM指令集 ARM指令集概述 ARM寻址方式 ARM指令详细介绍 一些基本的ARM指令功能段.
ARM處理器 定址方式.
第五章 C/C++及汇编语言的混合编程 5.1 ARM C/C++编译器 5.2 在C/C++程序中内嵌汇编指令
嵌入式系统教案 武汉创维特信息技术有限公司 2019/1/18.
(第2版).
條件處理.
(第2版).
第六次全国人口普查 近期数据处理工作部署 夏雨春 2010年12月28日.
第2章 ARM体系结构.
ARM 架构.
ARM 架构.
ARM及Thumb指令集 (练习).
影片剪輯及後製 台大醫院雲林分院教材室 影片製作專員 陳建良.
第九章 BIOS和DOS中断 在存储器系统中,从地址0FE000H开始的8K ROM(只读存储器)中装有BIOS(Basic Iuput /output System)例行程序。驻留在ROM中的BIOS给PC系列的不同微处理器提供了兼容的系统加电自检,引导装入,主要I/O设备的处理程序以及接口控制等功能模块来处理所有的系统中断。使用BIOS功能调用,给程序员编程带来很大方便,程序员不必了解硬件操作的具体细节,直接用指令设置参数,然后中断调用BIOS中的子功能,所以利用BIOS功能编写的程序简洁,可读性好,
ARM指令集 Author : Steve Furber Advisor: Mei-Ling Chiang Speaker: 徐翔宇
嵌入式系统教案 武汉创维特信息技术有限公司 2019/4/29.
微處理機 Microprocessor (100上)
ARM简介及BootLoader介绍 黄大荣
微處理機 Microprocessor (100上) ARM 內核嵌入式SOC原理
第3章 目录 1.简介 2.ARM7TDMI 3.ARM7TDMI的模块和内部框图 4.体系结构直接支持的数据类型 5.处理器状态
嵌入式系统教案 武汉创维特信息技术有限公司 2019/10/1.
Presentation transcript:

第3章 ARM微處理器的指令集

大綱 3.1 ARM微處理器的指令集概述 3.2 ARM指令的定址方式 3.3 ARM指令集 3.4 Thumb指令及應用 3.5 討論

大綱 3.1 ARM微處理器的指令集概述 3.2 ARM指令的定址方式 3.3 ARM指令集 3.4 Thumb指令及應用 3.5 討論 3.5 討論 P-3/67

3.1 ARM微處理器的指令集概述 本章將介紹ARM指令集以及各類指令對應的定址方式。而對於Thumb指令集我們稍微地加以介紹。通過對本章的閱讀,希望讀者能瞭解ARM微處理器所支援的指令集及具體的使用方法。 以下,在本章節中,我們將敘述下列的主要內容: ARM指令集與Thumb指令集概述。 ARM指令集的分類與具體應用。 Thumb指令集簡介及應用場合。

3.1.1 ARM微處理器的指令的分類與格式 ARM微處理器的指令集是以載入/存回(Load/Store)為基礎的,也即指令集僅能處理暫存器中的資料,而且處理結果都要放回暫存器中。因此,對系統記憶體的存取則需要通過專用的載入/存回指令來完成。因此,讀者需對載入與存回的觀念相當清楚。 ARM微處理器的指令集可以分為跳躍指令、資料處理指令、程式狀態暫存器(PSR)處理指令、載入/存回指令、協同處理器指令和例外事件產生指令六大類,具體的指令及功能(下表中指令為基本ARM指令,不包括衍生的ARM指令)。 P-5/67

3.1.2 指令的條件區域 當處理器工作在ARM狀態時,幾乎所有的指令均根據CPSR中條件欄位的各位元狀態和指令的條件區域有條件的執行。當指令的執行條件滿足時,指令被執行,否則指令就被忽略。 指令的幾個重點: 所有的ARM指令均包含一個可選擇的條件碼,以{cond}來表示 只有滿足CPSR的條件欄位所指定的條件時,帶條件的程式碼才可執行

3.1.2 指令的條件區域 條件碼{cond} 組合語言附加字尾 旗標欄位 意 義 0000 EQ Z設定 相等 0001 NE Z清除 3.1.2 指令的條件區域 條件碼{cond} 組合語言附加字尾 旗標欄位 意 義 0000 EQ Z設定 相等 0001 NE Z清除 不相等 0010 CS C設定 無號數大於或等於 0011 CC C清除 無號數小於 0100 MI N設定 負數 0101 PL N清除 正數或零 0110 VS V設定 溢位 0111 VC V清除 無溢位 1000 HI C設定且Z清除 無號數大於 1001 LS C清除且Z設定 無號數小於或等於 1010 GE N等於V 有號數大於或等於 1011 LT N不等於V 有號數小於 1100 GT Z清除且N等於V 有號數大於 1101 LE Z設定或N不等於V 有號數小於或等於 1110 AL 忽略 無條件執行 1111 無意義,不存在 P-7/67

大綱 3.1 ARM微處理器的指令集概述 3.2 ARM指令的定址方式 3.3 ARM指令集 3.4 Thumb指令及應用 3.5 討論 3.5 討論 P-8/67

3.2 ARM指令的定址方式 所謂的定址方式就是微處理器根據指令中所給予的位址訊息來尋找出實體位址的方式。 立即定址 暫存器間接定址 基底定址 相對定址 多暫存器定址 堆疊定址 P-9/67

3.2.1 立即定位 立即定址,這是一種特殊的定址方式,運算元本身就在指令中直接加以設定,只要取出指令也就取到了運算元。這個運算元被稱為立即數值,因此其對應的定址方式也就叫做立即定址。例如,以下所示的指令: ADD R3,R3,#1 ;R3←R3+1 AND R8,R7,#&ff ;R8←R7[7:0] 在以上兩個指令中,第二個來源運算元即為立即數值,並要求以“#”為首碼。對於以十六進制表示的立即數值,還要求在“#”後加上“0x”或“&”。第一個指令是完成R3暫存器的內容加1,然後將結果放回R3中。而第2個指令則是將32-bit的R7取其低8-bit的數值,也即是作AND邏輯運算,然後將結果傳送至R8中。 P-10/67

3.2.2 暫存器間接定址 暫存器定址就是利用暫存器中的數值作為運算元,這種定址方式是各類微處理器經常採用的一種方式,也是一種執行效率較高的定址方式。如下,所示的指令: ADD R0,R1,R2 ;R0←R1+R2 該指令的執行效果是將暫存器R1和R2的內容相加,其結果存放在暫存器R0中。 P-11/67

3.2.3 基底定址 基底定址就是將基底暫存器的內容與指令中所給予的位址偏移量加以相加,並進而得到一個運算元的有效位址。 3.2.3 基底定址 基底定址就是將基底暫存器的內容與指令中所給予的位址偏移量加以相加,並進而得到一個運算元的有效位址。 基底定址方式常用於存取某基底位址附近的記憶體資料,這包含了基底加上偏移量,以及基底加上索引值等來定址的方式。 基底加上偏移量所定址之用的基底暫存器所包含的並非是正確的位址。這基底暫存器需加上或是減掉最大達4KB的偏移量來計算出所要存取的位址。例如,以下所列的指令: LDR R0,[R1,#4] ;R0←[R1+4] P-12/67

3.2.4 相對定址 相對定址是以程式計數器PC的目前數值作為基底位址,指令中的位址標號作為偏移量,而將兩者相加之後可以得到有效位址。 3.2.4 相對定址 相對定址是以程式計數器PC的目前數值作為基底位址,指令中的位址標號作為偏移量,而將兩者相加之後可以得到有效位址。 以下所列的程式段落完成了副程式的跳躍與返回。其中,跳躍指令BL採用了相對定址方式: BL NEXT ;跳躍到副程式NEXT處執行 …… NEXT MOV PC,LR ;從副程式返回 P-13/67

3.2.5多暫存器定址 多暫存器定址,一個指令可以完成多個暫存器值的傳送。這種定址方式可以用一個指令完成傳送最多16個通用暫存器的值。例如,以下指令: LDMIA R0,{R1,R2,R3,R4} ;R1←[R0] ;R2←[R0+4] ;R3←[R0+8] ;R4←[R0+12] 該指令的尾碼IA表示在每次執行完載入/存回操作後,R0按字元組長度增加。 上敘例子可將連續記憶體單元的數值傳送到R1~R4。

3.2.6 堆疊定址 遞增堆疊(Ascending Stack):堆疊由低位址向高位址生長 3.2.6 堆疊定址 遞增堆疊(Ascending Stack):堆疊由低位址向高位址生長 遞減堆疊(Decending Stack):當堆疊由高位址向低位址生長 ARM微處理器支援這四種類型的堆疊工作方式,即: 滿遞增堆疊:堆疊指標指向最後填入的資料,且由低位址向高位址生長。 滿遞減堆疊:堆疊指標指向最後填入的資料,且由高位址向低位址生長。 空遞增堆疊:堆疊指標指向下一個將要放入資料的空位置,且由低位址向高地址生長。 空遞減堆疊:堆疊指標指向下一個將要放入資料的空位置,且由高位址向低地址生長。 P-15/67

大綱 3.1 ARM微處理器的指令集概述 3.2 ARM指令的定址方式 3.3 ARM指令集 3.4 Thumb指令及應用 3.5 討論 3.5 討論 P-16/67

3.3.1 跳躍指令 跳躍指令用於實現程式流程的跳躍,在ARM程式中有兩種方法可以實現程式流程的跳躍: 3.3.1 跳躍指令 跳躍指令用於實現程式流程的跳躍,在ARM程式中有兩種方法可以實現程式流程的跳躍: 使用特定的跳躍指令。 直接向程式計數器PC寫入跳躍位址值。 向程式計數器PC寫入跳躍位址值,可以實現在4GB的位址空間中的任意跳躍。若是在跳躍之前結合使用,如,MOV LR,PC等類似指令,可以保存將來的返回位址值,從而實現在4GB連續的線性位址空間的副程式的呼叫使用。 P-17/67

3.3.1 跳躍指令 ARM指令集中的跳躍指令可以完成從目前指令向前或向後的32MB的位址空間的跳躍,包括以下4個指令: 3.3.1 跳躍指令 ARM指令集中的跳躍指令可以完成從目前指令向前或向後的32MB的位址空間的跳躍,包括以下4個指令: B Branch,跳躍指令。 BL Branch with Link,包含返回的跳躍指令,也即是呼叫副程式。 BLX Branch and Exchange Instruction Set,包含返回和狀態切換的跳躍指令。 BX Branch with Link and Exchange Instruction Set,包含狀態切換的跳躍指令。 P-18/67

3.3.2 資料處理指令 資料處理指令可分為資料傳送指令、算術邏輯運算指令和比較指令。 3.3.2 資料處理指令 資料處理指令可分為資料傳送指令、算術邏輯運算指令和比較指令。 資料傳送指令用於在暫存器和記憶體之間進行資料的雙向傳輸。 算術邏輯運算指令完成常用的算術與邏輯的運算,該類指令不但將運算結果保存在目的暫存器中,同時更新CPSR中的相應條件旗標位元。 比較指令不保存運算結果,只更新CPSR中相應的條件旗標位元。此外,同樣需注意的是,資料處理指令僅僅當條件碼欄位是真的情況才會執行。 P-19/67

3.3.2 資料處理指令 資料處理指令包括: MOV 資料傳送指令 MVN 資料取反相後傳送指令 CMP 比較指令 CMN 反相比較指令 3.3.2 資料處理指令 資料處理指令包括: MOV 資料傳送指令 MVN 資料取反相後傳送指令 CMP 比較指令 CMN 反相比較指令 TST 位元測試指令 TEQ 相等測試指令 ADD 加法指令 ADC 包含進位元加法指令 SUB 減法指令 SBC 包含借位減法指令 RSB 反向減法指令 RSC 包含借位的反向減法指令 AND 邏輯AND指令 ORR 邏輯OR指令 EOR 邏輯XOR指令 BIC 位元清除指令 P-20/67

3.3.3 乘法指令與乘加指令 ARM微處理器支援的乘法指令與乘加指令共有6條,可分為運算結果為32位元和運算結果為64位元等兩類型。 3.3.3 乘法指令與乘加指令 ARM微處理器支援的乘法指令與乘加指令共有6條,可分為運算結果為32位元和運算結果為64位元等兩類型。 指令中的所有運算元與目的暫存器必須為通用暫存器,且不能對運算元使用立即數值或是被移位的暫存器。同時,目的暫存器和運算元1必須是不同的暫存器。 乘法指令與乘加指令共有以下所列的6個: MUL 32位元乘法指令 MLA 32位元乘加指令 SMULL 64位元有號數乘法指令 SMLAL 64位元有號數乘加指令 UMULL 64位元無號數乘法指令 UMLAL 64位元無號數乘加指令 P-21/67

3.3.4 程式狀態暫存器(PSR)存取指令 ARM微處理器支援程式狀態暫存器存取指令,用於在程式狀態暫存器和通用暫存器之間傳送資料 程式狀態暫存器存取指令包括以下兩條: MRS 程式狀態暫存器到通用暫存器的資料傳送指令 MSR 通用暫存器到程式狀態暫存器的資料傳送指令 P-22/67

3.3.4 程式狀態暫存器(PSR)存取指令 MRS指令 MRS指令範例: MRS指令的格式為: MRS{條件} 通用暫存器,程式狀態暫存器(CPSR或SPSR) MRS指令用於將程式狀態暫存器的內容傳送到通用暫存器中。該指令一般用在以下幾種情況: 當需要改變程式狀態暫存器的內容時,可用MRS將程式狀態暫存器的內容讀入通用暫存器,修改後再寫回程式狀態暫存器。 當在例外事件處理或程序切換時,需要保存程式狀態暫存器的值,可先用該指令讀出程式狀態暫存器的值,然後加以保存。 MRS指令範例: MRS R0,CPSR ;傳送CPSR的內容到R0 MRS R0,SPSR ;傳送SPSR的內容到R0 P-23/67

3.3.5 載入/存回指令 ARM微處理器支援載入/存回指令用於在暫存器和記憶體之間傳送資料,載入指令用於將記憶體中的資料傳送到暫存器,存回指令則完成相反的操作。 常用的載入存回指令如下: LDR 字元組資料載入指令 STR 字元組資料存回指令 LDRB 位元組資料載入指令 STRB 位元組資料存回指令 LDRH 半字元組資料載入指令 STRH 半字元組資料存回指令

3.3.5 載入/存回指令 LDR指令 LDR指令的格式為: LDR{條件} 目的暫存器,<記憶體位址> 3.3.5 載入/存回指令 LDR指令 LDR指令的格式為: LDR{條件} 目的暫存器,<記憶體位址> LDR指令用於從記憶體中將一個32位元的字元組資料傳送到目的暫存器中。該指令通常用於從記憶體中讀取32位元的字元組資料到通用暫存器,然後對資料進行處理。當程式計數器PC作為目的暫存器時,指令從記憶體中讀取的字元組資料被當作目的地址,從而可以實現程式流程的跳躍。該指令在程式設計中比較常用,且定址方式靈活多變,讀者需加以掌握與應用。 P-25/67

3.3.5 載入/存回指令 LDRB指令 LDRB指令範例: LDRB指令的格式為: 3.3.5 載入/存回指令 LDRB指令 LDRB指令的格式為: LDR{條件}B 目的暫存器,<記憶體位址> LDRB指令用於從記憶體中將一個8位元的位元組資料傳送到目的暫存器中,同時將暫存器的高24-bit清除。該指令通常用於從記憶體中讀取8位元的位元組資料到通用暫存器,然後對資料進行處理。當程式計數器PC作為目的暫存器時,指令從記憶體中讀取的字元組資料被當作目的地址,從而可以實現程式流程的跳躍。 LDRB指令範例: LDRB R0,[R1] ;將記憶體位址為R1的位元組資料讀入暫存器R0,並將R0的高24位清除。 LDRB R0,[R1,#8] ;將記憶體位址為R1+8的位元組資料讀入暫存器R0,並將R0的高24位清除。 P-26/67

3.3.5 載入/存回指令 STR指令 STR指令範例: STR指令的格式為: STR{條件} 來源暫存器,<記憶體位址> 3.3.5 載入/存回指令 STR指令 STR指令的格式為: STR{條件} 來源暫存器,<記憶體位址> STR指令用於從來源暫存器中將一個32位元的字元組資料傳送到記憶體中。該指令在程式設計中比較常用,且定址方式靈活多樣,使用方式可參考指令LDR。 STR指令範例: STR R0,[R1],#8 ;將R0中的字元組資料寫入以R1為位址的記憶體中,並將新位址R1+8寫入R1。 STR R0,[R1,#8] ;將R0中的字元組資料寫入以R1+8為位址的記憶體中。 P-27/67

3.3.5 載入/存回指令 STRB指令 STRB指令範例: STRB指令的格式為: 3.3.5 載入/存回指令 STRB指令 STRB指令的格式為: STR{條件}B 來源暫存器,<記憶體位址> STRB指令用於從來源暫存器中將一個8位元的位元組資料傳送到記憶體中。該位元組資料為來源暫存器中的較低8-bit。 STRB指令範例: STRB R0,[R1] ;將暫存器R0中的位元組資料寫入以R1為位址的記憶體中。 STRB R0,[R1,#8] ;將暫存器R0中的位元組資料寫入以R1+8為位址的記憶體中。 P-28/67

3.3.6 多重資料載入/存回指令 定址模式 這些指令的傳輸位址是由基底暫存器(Rn),之前/之後位元(bBit-24,P)與向上/向下生長位元(Bit-23,U)的內容所決定的。 暫存器傳輸的順序是從最低到最高,所以R15(如果有列在欄位中的話)將總會是最後傳輸的。如此,最低的暫存器也會傳輸至最低的記憶體位址,或是從最低的記憶體位址傳輸回來。 例:考慮R1,R5與R7的傳輸,且Rn = 0x1000,以及寫回並修改基底位址是被設定的 (W = 1)。顯示了暫存器傳輸的步驟,其所使用的位址,以及指令結束後的Rn值。在所有的情形下,所修改的基底值無需寫回(W = 0),Rn應會維持其啟始值,0x1000。而除非它也是在載入多重暫存器指令的傳輸列表中,那麼它將會以所載入的數值被覆寫過去。 P-29/67

3.3.7 資料交換指令 SWP指令 SWP指令範例: SWP指令的格式為: SWP{條件} 目的暫存器,來源暫存器1,[來源暫存器2] 3.3.7 資料交換指令 SWP指令 SWP指令的格式為: SWP{條件} 目的暫存器,來源暫存器1,[來源暫存器2] SWP指令用於將來源暫存器2所指向的記憶體中的字元組資料傳送到目的暫存器中,同時將來源暫存器1中的字元組資料傳送到來源暫存器2所指向的記憶體中。顯然,當來源暫存器1和目的暫存器為同一個暫存器時,指令交換該暫存器和記憶體的內容。 SWP指令範例: SWP R0,R1,[R2] ;將R2所指向的記憶體中的字元組資料傳送到R0,同時將R1中的字元組資料傳送到R2所指向的存儲單元。 SWP R0,R0,[R1] ;該指令完成將R1所指向的記憶體中的字元組資料與R0中的字元組資料交換。 SWPEQ R0,R0,[R1] ; 有條件地交換由R1所指向的記憶體中的字元組資料與R0中的字元組資料交換。 P-30/67

3.3.8 移位指令 LSL(或ASL)操作 LSL指令範例: LSL(或ASL)操作的格式為: 通用暫存器Rm,LSL(或ASL) 運算元 3.3.8 移位指令 LSL(或ASL)操作 LSL(或ASL)操作的格式為: 通用暫存器Rm,LSL(或ASL) 運算元 LSL(或ASL)可完成對通用暫存器中的內容進行邏輯(或算術)的左移操作,且按運算元所指定的數量向左移位,而低位元則用0值來加以填入。其中,運算元可以是通用暫存器,也可以是立即數值(0~31)。 LSL指令範例: MOV R0, R1, LSL#2 ;將R1中的內容左移兩位元後傳送到R0中。 P-31/67

3.3.8 移位指令 LSR操作 LSR指令範例: LSR操作的格式為: 通用暫存器Rm,LSR 運算元 3.3.8 移位指令 LSR操作 LSR操作的格式為: 通用暫存器Rm,LSR 運算元 LSR可完成對通用暫存器中的內容進行右移的操作,按運算元所指定的數量向右移位,左端用零來填充。其中,運算元可以是通用暫存器,也可以是立即數(0~31)。 LSR指令範例: MOV R0, R1, LSR#2 ;將R1中的內容右移兩位元後傳送到R0中,左端用0值來填充。 P-32/67

3.3.9 協同處理器指令 ARM協同處理器指令包括以下5條: CDP 協同處理器操作指令 LDC 協同處理器資料載入指令 3.3.9 協同處理器指令 ARM協同處理器指令包括以下5條: CDP 協同處理器操作指令 LDC 協同處理器資料載入指令 STC 協同處理器資料存回指令 MCR ARM處理器暫存器到協同處理器暫存器的 資料傳送指令 MRC 協同處理器暫存器到ARM處理器暫存器的資 料傳送指令 P-33/67

3.3.10 例外事件產生指令 SWI指令 程式範例: SWI指令的格式為:SWI{條件} 24位元的立即數值 3.3.10 例外事件產生指令 SWI指令 SWI指令的格式為:SWI{條件} 24位元的立即數值 SWI指令用於產生軟體中斷,以便使用者程式能呼叫作業系統的系統常式。作業系統在SWI的例外事件處理程式中提供相應的系統服務,指令中24位元的立即數值指定使用者程式呼叫系統常式的類型,相關參數通過通用暫存器傳遞。當指令中24位元的立即數值被忽略時,使用者程式呼叫系統常式的類型由通用暫存器R0的內容決定,同時,參數通過其他通用暫存器來加以傳遞。 程式範例: SWI 0x02 ;該指令呼叫作業系統編號位元02的系統常式。 P-34/67

3.3.10 例外事件產生指令 BKPT指令 BKPT指令的格式為: BKPT 16位的立即數 3.3.10 例外事件產生指令 BKPT指令 BKPT指令的格式為: BKPT 16位的立即數 BKPT指令產生軟體中斷點中斷,可用於程式的調試。 P-35/67

大綱 3.1 ARM微處理器的指令集概述 3.2 ARM指令的定址方式 3.3 ARM指令集 3.4 Thumb指令及應用 3.5 討論 3.5 討論 P-36/67

3.4 Thumb指令及應用 為相容資料匯流排寬度為16位元的應用系統,ARM系列架構除了支援執行效率很高的32位元ARM指令集以外,同時支援16位元的Thumb指令集。 Thumb指令集是ARM指令集的一個子集,允許指令編碼為16位元的長度。與等價的32位元代碼相比較,Thumb指令集在保留32代碼優勢的同時,大大的節省了系統的記憶體空間。 所有的Thumb指令都有對應的ARM指令,而且Thumb的程式設計模型也對應於ARM的程式設計模型。 在應用程式的編寫過程中,只要遵循一定呼叫的規則,Thumb副程式和ARM副程式就可以互相呼叫。當處理器在執行ARM程式段時,稱ARM處理器處於ARM工作狀態,當處理器在執行Thumb程式段時,稱ARM處理器處於Thumb工作狀態。 P-37/67

大綱 3.1 ARM微處理器的指令集概述 3.2 ARM指令的定址方式 3.3 ARM指令集 3.4 Thumb指令及應用 3.5 討論 3.5 討論 P-38/67

3.5 討論 本章系統的介紹了ARM指令集中的基本指令,以及各指令的應用場合及方法,由基本指令還可以派生出一些新的指令,但使用方法與基本指令類似。與常見的如X86體系結構的彙編指令相比較,ARM指令系統無論是從指令集本身,還是從定址方式上,都相對複雜一些。 Thumb指令集作為ARM指令集的一個子集,其使用方法與ARM指令集類似,在此未作詳細的描述,但這並不意味著Thumb指令集不如ARM指令集重要,事實上,他們各自有其自己的應用場合。 P-39/67