1 / 130

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

第 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 討論. P- 3 /67. 本章將介紹 ARM 指令集以及各類指令對應的定址方式。而對於 Thumb 指令集我們稍微地加以介紹。通過對本章的閱讀,希望讀者能瞭解 ARM 微處理器所支援的指令集及具體的使用方法。

libby
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

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

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

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

  6. 3.1.1 ARM微處理器的指令的分類與格式 P-6/67

  7. 3.1.1 ARM微處理器的指令的分類與格式 P-7/67

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

  9. 3.1.2 指令的條件區域 圖1、指令程式碼所顯示的條件碼欄位示意圖 P-9/67

  10. 其中,顯示每一個ARM指令中包含4-bits的條件碼,且位於指令的最高4-bits [31:28]。條件碼共有16種,每種條件碼可用兩個字元符號來加以表示,這兩個字元可以添加在指令附加字尾後面與指令同時使用。例如,跳躍指令B可以加上附加字尾EQ變為BEQ,表示了“相等則跳躍”,即當CPSR中的Z旗標位元被設定時則發生跳躍。 在16種條件旗標碼中,只有15種可以使用,如表3.2所示,第16種(1111)為系統保留之用,所以暫時不能使用。 3.1.2 指令的條件區域 P-10/67

  11. 3.1.2 指令的條件區域 P-11/67

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

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

  14. 所謂的定址方式就是微處理器根據指令中所給予的位址訊息來尋找出實體位址的方式。所謂的定址方式就是微處理器根據指令中所給予的位址訊息來尋找出實體位址的方式。 目前ARM指令系統支援如下幾種常見的定址方式: 立即定址 暫存器間接定址 基底定址 相對定址 多暫存器定址 堆疊定址 3.2 ARM指令的定址方式 P-14/67

  15. 立即定址,這是一種特殊的定址方式,運算元本身就在指令中直接加以設定,只要取出指令也就取到了運算元。這個運算元被稱為立即數值,因此其對應的定址方式也就叫做立即定址。例如,以下所示的指令:立即定址,這是一種特殊的定址方式,運算元本身就在指令中直接加以設定,只要取出指令也就取到了運算元。這個運算元被稱為立即數值,因此其對應的定址方式也就叫做立即定址。例如,以下所示的指令: 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中。 3.2.1 立即定位 P-15/67

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

  17. 暫存器間接定址就是以暫存器中的值作為運算元的位址,而運算元本身是存放在記憶體中。例如,以下所列的指令:暫存器間接定址就是以暫存器中的值作為運算元的位址,而運算元本身是存放在記憶體中。例如,以下所列的指令: ADD R0,R1,[R2] ;R0←R1+[R2] LDR R0,[R1] ;R0←[R1] STR R0,[R1] ;[R1]←R0 在第一個指令中,以暫存器R2的值作為運算元的位址,在記憶體中取得一個運算元後與R1相加,結果存入暫存器R0中。第二個指令是載入指令,將以R1的數值作為位址的記憶體中的資料,然後傳送到R0中。而第三個指令是存回指令,將R0的值傳送到以R1的數值為位址的記憶體中。 3.2.2 暫存器間接定址 P-17/67

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

  19. 透過基底定址的方式,除了找到基底定址所指向的記憶體資料外,還可順便改變這基底暫存器。例如,以下所列的指令:透過基底定址的方式,除了找到基底定址所指向的記憶體資料外,還可順便改變這基底暫存器。例如,以下所列的指令: LDR R0,[R1,#4]! ;R0←[R1+4],R1←R1+4 這可改變基底暫存器來指向下一個傳送的位址,這對多筆資料傳送是很有用的。這是一種包含了自動索引的前索引定址方式。其中,”!”符號是表示了,指令在完成資料傳送後,應該也要更新基底暫存器。而ARM微處理器對這種自動索引的方式,是不消耗額外的週期時間。 3.2.3 基底定址 P-19/67

  20. 後索引定址,是一種基底不包含偏移量來作為傳送的位址,再傳送後,自動加上索引的方式。例如,以下所列的指令:後索引定址,是一種基底不包含偏移量來作為傳送的位址,再傳送後,自動加上索引的方式。例如,以下所列的指令: LDR R0,[R1] ,#4 ;R0←[R1],R1←R1+4 這裡沒有使用”!”符號,只運用了立即數值的偏移來作為基底暫存器的變化量。 基底加上索引定址的方式是在指令中指定一個暫存器,然後再指定另一個暫存器(作為索引之用),而後面的數值可作為位移到基底位址上以形成一個記憶體位址。例如,以下所列的指令: LDR R0,[R1,R2] ;R0←[R1+R2] 這個指令是將R1與R2的內容相加所得到的運算元位址,再將此位址所指定的記憶體的內容傳送至R0。而上述的這4個指令都是屬於存回的指令。 3.2.3 基底定址 P-20/67

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

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

  23. 堆疊是一種資料結構,按先進後出(First In Last Out,FILO)的方式工作,使用一個之為堆疊指標的專用暫存器來指示目前的操作位置,堆疊指標總是指向堆疊的頂端。 當堆疊指標指向最後所填入堆疊的資料時,稱為滿堆疊(Full Stack),而當堆疊指標指向下一個將要放入資料的空位置時,稱為空堆疊(Empty Stack)。 3.2.6 堆疊定址 P-23/67

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

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

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

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

  28. B指令 B指令的格式為:B {條件} 目標位址 B指令是最簡單的跳躍指令。一旦遇到一個B指令,ARM 處理器將立即跳躍到所設定的目的位址,並從那裏繼續執行。 儲存在跳躍指令中的實際值是相對目前PC值的一個偏移量,而並不是一個絕對位址。這個值可由組譯器計算出來(參考定址方式中的相對定址)。 儲存在PC中的偏移量是 24 位元的有號數,在左移兩位元後,有號數擴展為 32 位元,且增加至PC值上。因此,這個指令可以設定32MB的定址空間的跳躍範圍。 跳躍的偏移值必須考慮到預先抓取的操作,所以PC值必須是在目前指令的前兩個字元組(8個位元組)。若要超過這範圍的話,可以使用BX或是LDR指令來直接改變程式計數暫存器PC的值。 3.3.1 跳躍指令 P-28/67

  29. 以下為數個B指令的範例: B Label1;程式將無條件跳躍到Label1處執行 CMP R1,#0;若Z旗標欄位被設定的話,則程式跳躍到Label1處執行 BEQ Label1 BCS Label2;若C進位旗標欄位被設定的話,則跳躍至Label2處執行 3.3.1 跳躍指令 P-29/67

  30. 整個ARM微處理器的暫存器架構中,共有37個32位元暫存器,其中31個為通用暫存器,6個為程式狀態暫存器。整個ARM微處理器的暫存器架構中,共有37個32位元暫存器,其中31個為通用暫存器,6個為程式狀態暫存器。 暫存器是不能被同時被存取,哪些暫存器是可編程存取的取決於微處理器的工作狀態以及目前的執行模式。 在任何時刻,通用暫存器R0~R14、程式計數器PC、一個或兩個程式狀態暫存器都是可存取的。 3.3.1 跳躍指令

  31. BL指令 BL指令的格式為: BL {條件} 目的位址 BL 是另一個跳躍指令,但跳躍之前,會在暫存器R14,鏈結暫存器(LR)中保存PC的目前內容,因此,可以通過將R14 的內容重新載入到PC中,來返回到跳躍指令之後的那個指令處執行。 BL令是實現副程式跳躍的一個基本常用的方式。而副程式距離程式計數器PC的範圍與指令B是一樣的,也在32MB範圍內。 以下為BL指令範例: BL Label;當程式無條件跳躍到Label處執行時,同時將目前的PC值保存到R14中 SUB1;副程式進入點 MOV PC,LR;返回原程式 3.3.1 跳躍指令 P-31/67

  32. 3.3.1 跳躍指令 圖2、跳躍指令(B與BL)的編碼格式 P-32/67

  33. BX指令 BX指令的格式為: BX {條件} 目的位址 BX指令跳躍到指令中所指定的目的位址,目的位址處的指令既可以是ARM指令,也可以是Thumb指令。 BX指令除了將暫存器<Rm>的數值複製到程式計數器PC中以達成轉換程式控制權,以實現跳躍至副程式來執行外,同時也根據暫存器<Rm>的最低位元(bit-0,Rm[0])來變更指令集的狀態。若Rm[0]為1的話,則變更為Thumb指令集狀態,反之,若為0的話,則變更為ARM指令集狀態。 BX指令可以將PC跳躍至4GB絕對位址中的任一位址上。 3.3.1 跳躍指令 P-33/67

  34. 3.3.1 跳躍指令 圖3、跳躍與交換指令(BX)的編碼格式 P-34/67

  35. BLX指令 BLX指令的格式為: BLX 目的位址 BLX指令從ARM指令集跳躍到指令中所指定的目的位址,並將處理器的工作狀態有ARM狀態切換到Thumb狀態,該指令同時將PC的目前內容保存到暫存器R14中。 當副程式使用Thumb指令集,而呼叫使用ARM指令集時,可以通過BLX指令實現副程式的呼叫和處理器工作狀態的切換。同時,副程式的返回可以通過將暫存器R14值複製到PC中來加以完成。 3.3.1 跳躍指令 P-35/67

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

  37. 3.3.2 資料處理指令 圖4(a)、跳躍與交換指令(BX)的編碼格式 P-37/67

  38. 3.3.2 資料處理指令 圖4(b)、跳躍與交換指令(BX)的編碼格式 P-38/67

  39. 這些指令會因執行一個或是兩個運算碼的特定算術或是邏輯操作來產生一個結果值出來。這些指令會因執行一個或是兩個運算碼的特定算術或是邏輯操作來產生一個結果值出來。 第一個運算元總是為暫存器(Rn),第二個運算元是根據bit-25,L來決定是移位暫存器(Rm)或是被旋轉的8-bit立即值(Imm)。 根據指令的S位元,在執行這些指令後CPSR中的條件碼可以被保留或是加以更新。 某些運算(TST,TEQ,CMP與CMN)並不會將結果寫到目的暫存器(Rd)。這些指令是用來作為測試,以及去設定這結果的條件碼,並且總會保有S位元的設定。 3.3.2 資料處理指令 P-39/67

  40. 算術運算指令會將每一個運算元都視為32位元的整數 (不論是無號數或是2補數有號數,這兩個是相等的)。 例: (SUB,RSB,ADD,ADC,SBC,RSC,CMP與CMN) 如果S位元被設定(以及Rd不是R15)的話,在運算結果的bit-31位元發生溢位時,CPSR中的V旗標將會被設定。 3.3.2 資料處理指令 P-40/67

  41. C旗標將會根據ALU所執行的bit-31位元來加以設定。C旗標將會根據ALU所執行的bit-31位元來加以設定。 當結果都是0時Z旗標將會被設定,且N旗標將會根據結果的bit-31位元來加以設定(表示了如果運算元是考慮成2進制補數符號時,所產生的負值結果)。 3.3.2 資料處理指令 P-41/67

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

  43. MOV指令 MOV指令的格式為: MOV {條件} {S} 目的暫存器,來源運算元 MOV指令可完成從另一個暫存器、被移位的暫存器或將一個立即數載入到目的暫存器。其中S選項決定指令的操作是否影響CPSR中條件旗標位元的值,當沒有S時指令不更新CPSR中條件旗標位元的值。 MOV指令範例: MOV R1,R0 ;將暫存器R0的值傳送到暫存器R1 MOV PC,R14 ;將暫存器R14的值傳送到PC,常用於副程式返回 MOV R1,R0,LSL#3 ;將暫存器R0的值左移3位後傳送到R1 3.3.2 資料處理指令 P-43/67

  44. MVN指令 MVN指令的格式為: MVN {條件} {S} 目的暫存器,來源運算元 MVN指令可完成從另一個暫存器、被移位的暫存器、或將一個立即數載入到目的暫存器。與MOV指令不同之處是在傳送之前被加以反相了,即把一個被取反相的數值傳送到目的暫存器中。其中S決定指令的操作是否影響CPSR中條件旗標位元的值。當沒有S時,指令不更新CPSR中條件旗標位元的值。 MVN指令範例: MVN R0,#0 ;將立即數0取反傳送到暫存器R0中,完成後R0=-1 3.3.2 資料處理指令 P-44/67

  45. CMP指令 CMP指令的格式為: CMP {條件} 運算元1,運算元2 CMP指令用於把一個暫存器的內容和另一個暫存器的內容或立即數進行比較,同時更新CPSR中條件旗標位元的值。該指令進行一次減法運算,但不儲存結果,只更改條件旗標位元。旗標位元表示的是運算元1與運算元2的關係(大於、小於、或是等於),例如,當運算元1大於操作運算元2,則此後的有GT 尾碼的指令將可以執行。 CMP指令範例: CMP R1,R0 ;將暫存器R1的值與暫存器R0的值相減,並根據結果設置CPSR的旗標位元 CMP R1,#100 ;將暫存器R1的值與立即數100相減,並根據結果設置CPSR的旗標位元 3.3.2 資料處理指令 P-45/67

  46. CMN指令 CMN指令的格式為: CMN {條件} 運算元1,運算元2 CMN指令用於把一個暫存器的內容和另一個暫存器的內容或立即數取反相後進行比較,同時更新CPSR中條件旗標位元的值。該指令實際完成運算元1和運算元2相加,並根據結果更改條件旗標位元。 CMN指令範例: CMN R1,R0 ;將暫存器R1的值與暫存器R0的值相加,並根據結果設置CPSR的旗標位元 CMN R1,#100 ;將暫存器R1的值與立即數100相加,並根據結果設置CPSR的旗標位元 3.3.2 資料處理指令 P-46/67

  47. TST指令 TST指令的格式為: TST {條件} 運算元1,運算元2 TST指令用於把一個暫存器的內容和另一個暫存器的內容或立即數進行按位的與運算,並根據運算結果更新CPSR中條件旗標位元的值。運算元1是要測試的資料,而運算元2是一個位元遮罩,該指令一般用來檢測是否設定了特殊的位元。 TST指令範例: TST R1,#%1 ;用於測試在暫存器R1中是否設置了最低位(%表示二進位數字) TST R1,#0xffe ;將暫存器R1的值與立即數0xffe按位元與,並根據結果設置CPSR的旗標位元 3.3.2 資料處理指令 P-47/67

  48. TEQ指令 TEQ指令的格式為: TEQ{條件} 運算元1,運算元2 TEQ指令用於把一個暫存器的內容和另一個暫存器的內容或立即數值進行每一位元的XOR運算,並根據運算結果更新CPSR中條件旗標位元的值。該指令通常用於比較運算元1和運算元2是否相等。 TEQ程式範例: TEQ R1,R2 ;將暫存器R1的值與暫存器R2的值按位元異或,並根據結果設置CPSR的旗標位元 3.3.2 資料處理指令 P-48/67

  49. ADD指令 ADD指令的格式為: ADD{條件}{S} 目的暫存器,運算元1,運算元2 ADD指令用於把兩個運算元相加,並將結果存放到目的暫存器中。運算元1應是一個暫存器,運算元2可以是一個暫存器,被移位的暫存器,或一個立即數值。 ADD指令範例: ADD R0,R1,R2 ; R0 = R1 + R2 ADD R0,R1,#256 ; R0 = R1 + 256 ADD R0,R2,R3,LSL#1 ; R0 = R2 + (R3 << 1) 3.3.2 資料處理指令 P-49/67

  50. ADC指令 ADC指令的格式為: ADC{條件}{S} 目的暫存器,運算元1,運算元2 ADC指令用於把兩個運算元相加,再加上CPSR中的C條件旗標位元的值,並將結果存放到目的暫存器中。它使用一個進位元旗標位元,這樣就可以做比32位元大的數值的加法。請讀者注意到,不要忘記設定S尾碼來更改進位元旗標。運算元1應是一個暫存器,運算元2可以是一個暫存器,被移位的暫存器,或一個立即數值。 ADC指令範例: ADDS R0,R4,R8 ; 加低端的字元組 ADCS R1,R5,R9 ; 加第二個字元組,帶進位 ADCS R2,R6,R10 ; 加第三個字元組,帶進位 ADC R3,R7,R11 ; 加第四個字元組,帶進位 3.3.2 資料處理指令 P-50/67

More Related