ARM组合语言程式设计.ppt
《ARM组合语言程式设计.ppt》由会员分享,可在线阅读,更多相关《ARM组合语言程式设计.ppt(102页珍藏版)》请在三一办公上搜索。
1、1,ARM組合語言程式設計,2,ARM微處理器指令優點,小晶片的面積低功耗ARM架構還採用了一些特別的技術,在性能的前提下儘量縮小晶片的面積,並降低功耗。條件式指令所有的指令都可根據前面的執行結果決定是否被執行,從而提高指令的執行效率。連續存取資料可用載入/存儲指令連續傳輸資料,以提高資料的傳輸效率。同時完成邏輯處理和移位元可在一條資料處理指令中同時完成邏輯處理和移位處理。自動增減迴圈在迴圈處理中使用位址的自動增減來提高執行效率。,3,ARM微處理器的指令,ARM兩種指令集ARM指令為32位元的長度,Thumb指令為16位元長度。Thumb指令集為ARM指令集的功能子集,但與等價的ARM程式碼
2、相比較,可節省30%40%以上的存儲空間。,4,ARM處理器模式,ARM架構支援7種處理器模式。模式改變在軟體控制下可以改變模式外部中斷或例外處理也可以引起模式發生改變。大多數應用程式在使用者模式下執行。當處理器工作在使用者模式時,正在執行的程式不能存取某些被保護的系統資源,也不能改變模式,除非例外(exception)發生。,5,ARM支援的7種工作模式,6,ARM微處理器的暫存器結構,ARM處理器共有37個暫存器,被分為若干個組(BANK),這些暫存器包括:31個通用暫存器。包括程式計數器(PC指標)。6個程式狀態暫存器用以標識CPU的工作狀態及程式的執行狀態,均為32位元,目前只使用了其
3、中的一部分。ARM處理器有7種不同的處理器模式在每一種處理器模式下均有一組相應的暫存器與之對應。,7,ARM暫存器,1)不分組暫存器R0R7R0R7是不分組暫存器。這意味著在所有處理器模式下,它們每一個都存取一樣的32位元暫存器。它們是真正的通用暫存器,沒有架構所隱含的特殊用途。2)分組暫存器R8R14R8R14是分組暫存器。它們每一個存取的實體暫存器取決於當前的處理器模式。若要存取特定的實體暫存器而不依賴當前的處理器模式,則要使用規定的各字。暫存器R8R12各有兩組實體暫存器:一組為FIQ模式,另一組為除了FIQ以外的所有模式。暫存器R8R12沒有任何指定的特殊用途。只是使用R8R14來簡單
4、地處理中斷。暫存器R13,R14各有6個分組的實體暫存器。1個用於使用者模式和系統模式,其他5個分別用於5種例外模式。暫存器R13通常用做堆疊指標,稱為SP(Stack Pointer),每種例外模式都有自己的R13。暫存器R14用作副程式鏈結暫存器,也稱為LR(。3)程式計數器R15暫存器R15用做程式計數器(PC)。,8,ARM暫存器,9,程式狀態暫存器(Program Status Register),有一個Current Program Status Register(CPSR)在所有處理器模式下都可以存取當前的程式狀態暫存器CPSR。CPSR包含條件碼旗標,中斷禁止位元,當前處理器模
5、式以及其他狀態和控制資訊。有五個Saved Program Status Registers(SPSRs)每種例外模式都有一個程式狀態保存暫存器SPSR。SPSR用於保留CPSR的狀態。,10,程式狀態暫存器,條件碼旗標:N,Z,C,V 大多數指令可以測試這些條件碼旗標以決定程式指令如何執行控制位元:最低8位元 I,F,T和M位元用做控制位元。當例外出現時改變控制位元。當處理器在特權模式下也可以由軟體改變。中斷禁止位元:I 置1則禁止IRQ中斷。F置1則禁止FIQ中斷。T位元:T=0 指示ARM執行。T=1指示Thumb執行。在這些架構系統中,可自由地使用能在ARM和Thumb狀態之間切換的指
6、令。模式位元:M0,M1,M2,M3和M4(M4:0)是模式位元.這些位元決定處理器的工作模式。,11,PSR Mode位元與可使用暫存器,12,ARM和Thumb之間狀態的切換,ARM處理器可在兩種工作狀態之間切換。在Thumb狀態下,程式計數器PC使用位元1選擇另一個半字。ARM和Thumb之間狀態的切換不影響處理器的模式或暫存器的內容。進入Thumb狀態。當運算元暫存器的狀態位元0為1時,執行BX指令進入Thumb狀態。如果處理器在Thumb狀態進入例外,則當例外處理(IRQ,FIQ,Undef,Abort和SWI)返回時,自動切換到Thumb狀態。當運算元暫存器的狀態位元0為0時,執行
7、BX指令進入ARM狀態。處理器進行例外處理(IRQ,FIQ,Undef,Abort和SWI),從例外向量位址開始執行也可以進入ARM狀態。,13,Thumb指令及應用,Thumb指令集是ARM指令集的一個子集,允許指令編碼為16位元的長度。Thumb指令集在保留32程式碼優勢的同時,大大的節省了系統的存儲空間。大多數的Thumb指令是無條件執行的。大多數的Thumb資料處理指令的目的暫存器與其中一個來原暫存器相同。Thumb指令與ARM指令的時間效率和空間效率關係為:Thumb程式碼所需的存儲空間約為ARM程式碼的6070Thumb程式碼使用的指令數比ARM程式碼多約3040若使用32位的記憶
8、體,ARM程式碼比Thumb程式碼快約40若使用16位的記憶體,Thumb程式碼比ARM程式碼快約4050與ARM程式碼相比較,使用Thumb程式碼,記憶體的功耗會降低約30若對系統的性能有較高要求,應使用32位元的存儲系統和ARM指令集。若對系統的成本及功耗有較高要求,則應使用16位元的存儲系統和Thumb指令集。,14,Thumb與ARM和暫存器的比較,15,Thumb狀態的暫存器集,Thumb狀態下的暫存器集是ARM狀態下暫存器集的子集。程式師可以直接存取8個通用的暫存器(R0R7),PC,SP,LR和CPSP。每一種特權模式都有一組SP,LR和SPSR。Thumb狀態的R0R7與ARM
9、狀態的R0R7是一致的。Thumb狀態的CPSR和SPSR與ARM狀態的CPSR和SPSR是一致的。Thumb狀態的SP映射到ARM狀態的R13。Thumb狀態的LR映射到ARM狀態的R14。Thumb狀態的PC映射到ARM狀態的PC(R15)。,16,Thumb暫存器,17,ARM記憶體格式,BIG-ENDIANLITTLE-ENDIAN,18,ARM 指令格式(Instruction Format)及種類,19,ARM指令及功能描述,20,ARM指令及功能描述,21,指令的條件碼,22,ARM指令的定址方式,立即定址(Immediate Addressing)暫存器定址(Register
10、Addressing)暫存器間接定址(Register Indirect Addressing)基址變址定址(Index Addressing)多暫存器定址(Multiple Register Addressing)堆疊定址(Stack Addressing),23,ARM指令的定址方式-立即定址,立即定址也叫立即數定址,這是一種特殊的定址方式,運算元本身就在指令中給出,只要取出指令也就取到了運算元。這個運算元被稱為立即數,對應的定址方式也就叫做立即定址。例如以下指令:在以上兩條指令中,第二個源運算元即為立即數,要求以“”為首碼,對於以十六進位表示的立即數,還要求在“”後加上“0 x”或“&”
11、。,ADDR0,R0,1;R0R01ADDR0,R0,0 x3f;R0R00 x3f,24,ARM指令的定址方式-暫存器定址,暫存器定址就是利用暫存器中的數值作為運算元,這種定址方式是各類微處理器經常採用的一種方式,也是一種執行效率較高的定址方式。以下指令:該指令的執行效果是將暫存器R1和R2的內容相加,其結果存放在暫存器R0中。,ADDR0,R1,R2;R0R1R2,25,ARM指令的定址方式-暫存器間接定址,暫存器間接定址就是以暫存器中的值作為運算元的位址,而運算元本身存放在記憶體中。例如以下指令:第一條指令將以R1的值為位址的記憶體中的資料般移到R0中。第二條指令將R0的值般移到以R1的
12、值為位址的記憶體中。,LDRR0,R1;R0R1STRR0,R1;R1R0,26,ARM指令的定址方式-基址變址定址,基址變址定址就是將暫存器(該暫存器一般稱作基址暫存器)的內容與指令中給出的位址偏移量相加,從而得到一個運算元的有效位址。變址定址方式常用於存取某基底位址附近的位址單元。採用變址定址方式的指令常見有以下幾種形式,如下所示:在第一條指令中,將暫存器R1的內容加上4形成運算元的有效位址,從而取得運算元存入暫存器R0中。在第二條指令中,將暫存器R1的內容加上4形成運算元的有效位址,從而取得運算元存入暫存器R0中,然後,R1的內容自增4個位元組。在第三條指令中,以暫存器R1的內容作為運算
13、元的有效位址,從而取得運算元存入暫存器R0中,然後,R1的內容自增4個位元組。在第四條指令中,將暫存器R1的內容加上暫存器R2的內容形成運算元的有效位址,從而取得運算元存入暫存器R0中。,LDR R0,R1,4;R0R14LDR R0,R1,4!;R0R14、R1R14LDR R0,R1,4;R0R1、R1R14LDR R0,R1,R2;R0R1R2,27,ARM指令的定址方式-多暫存器定址,採用多暫存器定址方式,一條指令可以完成多個暫存器值的般移。這種定址方式可以用一條指令完成般移最多16個通用暫存器的值。以下指令:該指令的尾碼IA表示在每次執行完載入/存儲操作後,R0按字長度增加,因此,指
14、令可將連續存儲單元的值般移到R1R4。,LDMIA R0,R1,R2,R3,R4;R1R0;R2R04;R3R08;R4R012,28,ARM指令的定址方式-相對定址,與基址變址定址方式相類似,相對定址以程式計數器PC的當前值為基底位址,指令中的位址標號作為偏移量,將兩者相加之後得到運算元的有效位址。以下程式段完成副程式的使用和返回,跳移指令BL採用了相對定址方式:,BLNEXT;跳移到副程式NEXT處執行NEXTMOVPC,LR;從副程式返回,29,ARM指令的定址方式-堆疊定址,堆疊是一種資料結構,按先進後出(First In Last Out,FILO)的方式工作,使用一個稱作堆疊指標的
15、專用暫存器指示當前的操作位置,堆疊指標總(SP,Stack Pointer)是指向堆疊頂。當堆疊指標指向最後壓入堆疊的資料時,稱為滿堆疊(Full Stack),而當堆疊指標指向下一個將要放入資料的空位置時,稱為空堆疊(Empty Stack)。同時,根據堆疊的生成方式,又可以分為遞增堆疊(Ascending Stack)和遞減堆疊(Descending Stack),當堆疊由低位址向高位址生成時,稱為遞增堆疊,當堆疊由高位址向低位址生成時,稱為遞減堆疊。,30,ARM支援四種堆疊工作方式,滿遞增堆疊堆疊指標指向最後壓入的資料,且由低位址向高位址生成。滿遞減堆疊堆疊指標指向最後壓入的資料,且由
16、高位址向低位址生成。空遞增堆疊堆疊指標指向下一個將要放入資料的空位置,且由低位址向高地址生成。空遞減堆疊堆疊指標指向下一個將要放入資料的空位置,且由高位址向低地址生成。,31,ARM指令集-跳移指令,跳移指令用於實現程式流程的跳移,在ARM程式中有兩種方法可以實現程式流程的跳移:使用專門的跳移指令。直接向程式計數器PC寫入跳移位址值。通過向程式計數器PC寫入跳移位址值,可以實現在4GB的位址空間中的任意跳移,在跳移之前結合使用。MOVLR,PC等類似指令,可以保存將來的返回位址值,從而實現在4GB連續的線性位址空間的副程式使用。ARM指令集中的跳移指令可以完成從當前指令向前或向後的32MB的位
17、址空間的跳移,包括以下4條指令:B跳移指令。BL帶返回的跳移指令。BLX帶返回和狀態切換的跳移指令。BX帶狀態切換的跳移指令。,32,ARM指令集-跳移指令-B指令,B指令的語法為:B條件目標位址B指令是最簡單的跳移指令。一旦遇到一個 B 指令,ARM 處理器將立即跳移到給定的目標位址,從那裏繼續執行。注意存儲在跳移指令中的實際值是相對當前PC值的一個偏移量,而不是一個絕對位址,它的值由彙編器來計算(參考定址方式中的相對定址)。它是 24 位元有符號數,左移兩位元後有符號擴充為 32 位,表示的有效偏移為 26 位(前後32MB的位址空間)。以下指令:,BLabel;程式無條件跳移到標號Lab
18、el處執行CMPR1,0;當CPSR暫存器中的Z條件碼置位元時,程式跳移到標號Label處執行BEQLabel,33,ARM指令集-跳移指令-BL指令,BL指令的語法為:BL條件 目標位址BL 是另一個跳移指令,但跳移之前,會在暫存器R14中保存PC的當前內容,因此,可以通過將R14 的內容重新載入到PC中,來返回到跳移指令之後的那個指令處執行。該指令是實現副程式使用的一個基本但常用的手段。以下指令:,BLLabel;當程式無條件跳移到標號Label處執行時,同時將當前的PC值保存到R14中,34,ARM指令集-跳移指令-BLX指令,BLX指令的語法為:BLX 目標位址BLX指令從ARM指令集
19、跳移到指令中所指定的目標位址,並將處理器的工作狀態有ARM狀態切換到Thumb狀態,該指令同時將PC的當前內容保存到暫存器R14中。因此,當副程式使用Thumb指令集,而使用者使用ARM指令集時,可以通過BLX指令實現副程式的使用和處理器工作狀態的切換。同時,副程式的返回可以通過將暫存器R14值複製到PC中來完成。,35,ARM指令集-跳移指令-BX指令,BX指令的語法為:BX條件 目標位址BX指令跳移到指令中所指定的目標位址,目標位址處的指令既可以是ARM指令,也可以是Thumb指令。,36,ARM指令集-跳移指令-資料處理指令,資料處理指令可分為資料般移指令資料般移指令用於在暫存器和記憶體
20、之間進行資料的雙向傳輸。算術邏輯運算指令算術邏輯運算指令完成常用的算術與邏輯的運算,該類指令不但將運算結果保存在目的暫存器中,同時更新CPSR中的相應條件旗標位元。比較指令比較指令不保存運算結果,只更新CPSR中相應的條件旗標位元。,37,資料處理指令總表,MOV資料般移指令MVN資料取反般移指令CMP比較指令CMN反值比較指令TST位元測試指令TEQ相等測試指令ADD加法指令ADC帶進位元加法指令SUB減法指令SBC帶借位減法指令RSB逆向減法指令RSC帶借位的逆向減法指令AND邏輯與指令ORR邏輯或指令EOR邏輯互斥指令BIC位元清除指令,38,ARM指令集-資料處理指令-MOV指令,MO
21、V指令的語法為:MOV條件S目的暫存器,來源運算元MOV指令可完成從另一個暫存器、被移位的暫存器或將一個立即數載入到目的暫存器。其中S選項決定指令的操作是否影響CPSR中條件旗標位元的值,當沒有S時指令不更新CPSR中條件旗標位元的值。指令範例:,MOVR1,R0;將暫存器R0的值般移到暫存器R1MOVPC,R14;將暫存器R14的值般移到PC,常用於副程式返回MOVR1,R0,LSL3;將暫存器R0的值左移3位後般移到R1,39,ARM指令集-資料處理指令-MVN指令,MVN指令的語法為:MVN條件S目的暫存器,來源運算元MVN指令可完成從另一個暫存器、被移位的暫存器、或將一個立即數載入到目
22、的暫存器。與MOV指令不同之處是在般移之前按位被取反了,即把一個被取反的值般移到目的暫存器中。其中S決定指令的操作是否影響CPSR中條件旗標位元的值,當沒有S時指令不更新CPSR中條件旗標位元的值。指令範例:,MVNR0,0;將立即數0取反般移到暫存器R0中,完成後R0=-1,40,ARM指令集-資料處理指令-CMP指令,CMP指令的語法為:CMP條件 運算元1,運算元2CMP指令用於把一個暫存器的內容和另一個暫存器的內容或立即數進行比較,同時更新CPSR中條件旗標位元的值。該指令進行一次減法運算,但不存儲結果,只更改條件旗標位元。旗標位元表示的是運算元1與運算元2的關係(大、小、相等),例如
23、,當運算元1大於操作運算元2,則此後的有GT 尾碼的指令將可以執行。指令範例:,CMP R1,R0;將暫存器R1的值與暫存器R0的值相減,並根據結果設定CPSR的旗標位元CMP R1,100;將暫存器R1的值與立即數100相減,並根據結果設定CPSR的旗標位元,41,ARM指令集-資料處理指令-CMN指令,CMN指令的語法為:CMN條件 運算元1,運算元2CMN指令用於把一個暫存器的內容和另一個暫存器的內容或立即數取反後進行比較,同時更新CPSR中條件旗標位元的值。該指令實際完成運算元1和運算元2相加,並根據結果更改條件旗標位元。指令範例:,CMNR1,R0;將暫存器R1的值與暫存器R0的值相
24、加,並根據結果設定CPSR的旗標位元CMNR1,100;將暫存器R1的值與立即數100相加,並根據結果設定CPSR的旗標位元,42,ARM指令集-資料處理指令-TST指令,TST指令的語法為:TST條件 運算元1,運算元2TST指令用於把一個暫存器的內容和另一個暫存器的內容或立即數進行按位的與運算,並根據運算結果更新CPSR中條件旗標位元的值。運算元1是要測試的資料,而運算元2是一個位遮罩,該指令一般用來測試是否設定了特定的位。指令範例:,TSTR1,1;用於測試在暫存器R1中是否設定了最低位(表示二進位數字)TSTR1,0 xffe;將暫存器R1的值與立即數0 xffe按位元與,並根據結果設
25、定CPSR的旗標位元,43,ARM指令集-資料處理指令-TEQ指令,TEQ指令的語法為:TEQ 條件 運算元1,運算元2TEQ指令用於把一個暫存器的內容和另一個暫存器的內容或立即數進行按位的互斥運算,並根據運算結果更新CPSR中條件旗標位元的值。該指令通常用於比較運算元1和運算元2是否相等。指令範例:,TEQR1,R2;將暫存器R1的值與暫存器R2的值按位元互斥,並根據結果設定CPSR的旗標位元,44,ARM指令集-資料處理指令-ADD指令,ADD指令的語法為:ADD 條件S 目的暫存器,運算元1,運算元2ADD指令用於把兩個運算元相加,並將結果存放到目的暫存器中。運算元1應是一個暫存器,運算
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ARM 组合 语言 程式 设计
链接地址:https://www.31ppt.com/p-5415701.html