欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    ARM组合语言程式设计.ppt

    • 资源ID:5415701       资源大小:842KB        全文页数:102页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    ARM组合语言程式设计.ppt

    1,ARM組合語言程式設計,2,ARM微處理器指令優點,小晶片的面積低功耗ARM架構還採用了一些特別的技術,在性能的前提下儘量縮小晶片的面積,並降低功耗。條件式指令所有的指令都可根據前面的執行結果決定是否被執行,從而提高指令的執行效率。連續存取資料可用載入/存儲指令連續傳輸資料,以提高資料的傳輸效率。同時完成邏輯處理和移位元可在一條資料處理指令中同時完成邏輯處理和移位處理。自動增減迴圈在迴圈處理中使用位址的自動增減來提高執行效率。,3,ARM微處理器的指令,ARM兩種指令集ARM指令為32位元的長度,Thumb指令為16位元長度。Thumb指令集為ARM指令集的功能子集,但與等價的ARM程式碼相比較,可節省30%40%以上的存儲空間。,4,ARM處理器模式,ARM架構支援7種處理器模式。模式改變在軟體控制下可以改變模式外部中斷或例外處理也可以引起模式發生改變。大多數應用程式在使用者模式下執行。當處理器工作在使用者模式時,正在執行的程式不能存取某些被保護的系統資源,也不能改變模式,除非例外(exception)發生。,5,ARM支援的7種工作模式,6,ARM微處理器的暫存器結構,ARM處理器共有37個暫存器,被分為若干個組(BANK),這些暫存器包括:31個通用暫存器。包括程式計數器(PC指標)。6個程式狀態暫存器用以標識CPU的工作狀態及程式的執行狀態,均為32位元,目前只使用了其中的一部分。ARM處理器有7種不同的處理器模式在每一種處理器模式下均有一組相應的暫存器與之對應。,7,ARM暫存器,1)不分組暫存器R0R7R0R7是不分組暫存器。這意味著在所有處理器模式下,它們每一個都存取一樣的32位元暫存器。它們是真正的通用暫存器,沒有架構所隱含的特殊用途。2)分組暫存器R8R14R8R14是分組暫存器。它們每一個存取的實體暫存器取決於當前的處理器模式。若要存取特定的實體暫存器而不依賴當前的處理器模式,則要使用規定的各字。暫存器R8R12各有兩組實體暫存器:一組為FIQ模式,另一組為除了FIQ以外的所有模式。暫存器R8R12沒有任何指定的特殊用途。只是使用R8R14來簡單地處理中斷。暫存器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包含條件碼旗標,中斷禁止位元,當前處理器模式以及其他狀態和控制資訊。有五個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狀態之間切換的指令。模式位元: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時,執行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位的記憶體,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狀態的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 Addressing)暫存器間接定址(Register Indirect Addressing)基址變址定址(Index Addressing)多暫存器定址(Multiple Register Addressing)堆疊定址(Stack Addressing),23,ARM指令的定址方式-立即定址,立即定址也叫立即數定址,這是一種特殊的定址方式,運算元本身就在指令中給出,只要取出指令也就取到了運算元。這個運算元被稱為立即數,對應的定址方式也就叫做立即定址。例如以下指令:在以上兩條指令中,第二個源運算元即為立即數,要求以“”為首碼,對於以十六進位表示的立即數,還要求在“”後加上“0 x”或“&”。,ADDR0,R0,1;R0R01ADDR0,R0,0 x3f;R0R00 x3f,24,ARM指令的定址方式-暫存器定址,暫存器定址就是利用暫存器中的數值作為運算元,這種定址方式是各類微處理器經常採用的一種方式,也是一種執行效率較高的定址方式。以下指令:該指令的執行效果是將暫存器R1和R2的內容相加,其結果存放在暫存器R0中。,ADDR0,R1,R2;R0R1R2,25,ARM指令的定址方式-暫存器間接定址,暫存器間接定址就是以暫存器中的值作為運算元的位址,而運算元本身存放在記憶體中。例如以下指令:第一條指令將以R1的值為位址的記憶體中的資料般移到R0中。第二條指令將R0的值般移到以R1的值為位址的記憶體中。,LDRR0,R1;R0R1STRR0,R1;R1R0,26,ARM指令的定址方式-基址變址定址,基址變址定址就是將暫存器(該暫存器一般稱作基址暫存器)的內容與指令中給出的位址偏移量相加,從而得到一個運算元的有效位址。變址定址方式常用於存取某基底位址附近的位址單元。採用變址定址方式的指令常見有以下幾種形式,如下所示:在第一條指令中,將暫存器R1的內容加上4形成運算元的有效位址,從而取得運算元存入暫存器R0中。在第二條指令中,將暫存器R1的內容加上4形成運算元的有效位址,從而取得運算元存入暫存器R0中,然後,R1的內容自增4個位元組。在第三條指令中,以暫存器R1的內容作為運算元的有效位址,從而取得運算元存入暫存器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按字長度增加,因此,指令可將連續存儲單元的值般移到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)的方式工作,使用一個稱作堆疊指標的專用暫存器指示當前的操作位置,堆疊指標總(SP,Stack Pointer)是指向堆疊頂。當堆疊指標指向最後壓入堆疊的資料時,稱為滿堆疊(Full Stack),而當堆疊指標指向下一個將要放入資料的空位置時,稱為空堆疊(Empty Stack)。同時,根據堆疊的生成方式,又可以分為遞增堆疊(Ascending Stack)和遞減堆疊(Descending Stack),當堆疊由低位址向高位址生成時,稱為遞增堆疊,當堆疊由高位址向低位址生成時,稱為遞減堆疊。,30,ARM支援四種堆疊工作方式,滿遞增堆疊堆疊指標指向最後壓入的資料,且由低位址向高位址生成。滿遞減堆疊堆疊指標指向最後壓入的資料,且由高位址向低位址生成。空遞增堆疊堆疊指標指向下一個將要放入資料的空位置,且由低位址向高地址生成。空遞減堆疊堆疊指標指向下一個將要放入資料的空位置,且由高位址向低地址生成。,31,ARM指令集-跳移指令,跳移指令用於實現程式流程的跳移,在ARM程式中有兩種方法可以實現程式流程的跳移:使用專門的跳移指令。直接向程式計數器PC寫入跳移位址值。通過向程式計數器PC寫入跳移位址值,可以實現在4GB的位址空間中的任意跳移,在跳移之前結合使用。MOVLR,PC等類似指令,可以保存將來的返回位址值,從而實現在4GB連續的線性位址空間的副程式使用。ARM指令集中的跳移指令可以完成從當前指令向前或向後的32MB的位址空間的跳移,包括以下4條指令:B跳移指令。BL帶返回的跳移指令。BLX帶返回和狀態切換的跳移指令。BX帶狀態切換的跳移指令。,32,ARM指令集-跳移指令-B指令,B指令的語法為:B條件目標位址B指令是最簡單的跳移指令。一旦遇到一個 B 指令,ARM 處理器將立即跳移到給定的目標位址,從那裏繼續執行。注意存儲在跳移指令中的實際值是相對當前PC值的一個偏移量,而不是一個絕對位址,它的值由彙編器來計算(參考定址方式中的相對定址)。它是 24 位元有符號數,左移兩位元後有符號擴充為 32 位,表示的有效偏移為 26 位(前後32MB的位址空間)。以下指令:,BLabel;程式無條件跳移到標號Label處執行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指令集跳移到指令中所指定的目標位址,並將處理器的工作狀態有ARM狀態切換到Thumb狀態,該指令同時將PC的當前內容保存到暫存器R14中。因此,當副程式使用Thumb指令集,而使用者使用ARM指令集時,可以通過BLX指令實現副程式的使用和處理器工作狀態的切換。同時,副程式的返回可以通過將暫存器R14值複製到PC中來完成。,35,ARM指令集-跳移指令-BX指令,BX指令的語法為:BX條件 目標位址BX指令跳移到指令中所指定的目標位址,目標位址處的指令既可以是ARM指令,也可以是Thumb指令。,36,ARM指令集-跳移指令-資料處理指令,資料處理指令可分為資料般移指令資料般移指令用於在暫存器和記憶體之間進行資料的雙向傳輸。算術邏輯運算指令算術邏輯運算指令完成常用的算術與邏輯的運算,該類指令不但將運算結果保存在目的暫存器中,同時更新CPSR中的相應條件旗標位元。比較指令比較指令不保存運算結果,只更新CPSR中相應的條件旗標位元。,37,資料處理指令總表,MOV資料般移指令MVN資料取反般移指令CMP比較指令CMN反值比較指令TST位元測試指令TEQ相等測試指令ADD加法指令ADC帶進位元加法指令SUB減法指令SBC帶借位減法指令RSB逆向減法指令RSC帶借位的逆向減法指令AND邏輯與指令ORR邏輯或指令EOR邏輯互斥指令BIC位元清除指令,38,ARM指令集-資料處理指令-MOV指令,MOV指令的語法為: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指令可完成從另一個暫存器、被移位的暫存器、或將一個立即數載入到目的暫存器。與MOV指令不同之處是在般移之前按位被取反了,即把一個被取反的值般移到目的暫存器中。其中S決定指令的操作是否影響CPSR中條件旗標位元的值,當沒有S時指令不更新CPSR中條件旗標位元的值。指令範例:,MVNR0,0;將立即數0取反般移到暫存器R0中,完成後R0=-1,40,ARM指令集-資料處理指令-CMP指令,CMP指令的語法為:CMP條件 運算元1,運算元2CMP指令用於把一個暫存器的內容和另一個暫存器的內容或立即數進行比較,同時更新CPSR中條件旗標位元的值。該指令進行一次減法運算,但不存儲結果,只更改條件旗標位元。旗標位元表示的是運算元1與運算元2的關係(大、小、相等),例如,當運算元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的值相加,並根據結果設定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按位元與,並根據結果設定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應是一個暫存器,運算元2可以是一個暫存器,被移位的暫存器,或一個立即數。指令範例:,ADD R0,R1,R2;R0=R1+R2ADD R0,R1,#256;R0=R1+256ADD R0,R2,R3,LSL#1;R0=R2+(R3 1),45,ARM指令集-資料處理指令-ADC指令,ADC指令的語法為:ADC 條件S 目的暫存器,運算元1,運算元2ADC指令用於把兩個運算元相加,再加上CPSR中的C條件旗標位元的值,並將結果存放到目的暫存器中。它使用一個進位元旗標位元,這樣就可以做比32位大的數的加法,注意不要忘記設定S尾碼來更改進位元旗標。運算元1應是一個暫存器,運算元2可以是一個暫存器,被移位的暫存器,或一個立即數。以下指令序列完成兩個128位數的加法,第一個數由高到低存放在暫存器R7R4,第二個數由高到低存放在暫存器R11R8,運算結果由高到低存放在暫存器R3R0:,ADDS R0,R4,R8;加低端的字ADCS R1,R5,R9;加第二個字,帶進位ADCS R2,R6,R10;加第三個字,帶進位ADC R3,R7,R11;加第四個字,帶進位,46,ARM指令集-資料處理指令-SUB指令,SUB指令的語法為:SUB 條件S 目的暫存器,運算元1,運算元2SUB指令用於把運算元1減去運算元2,並將結果存放到目的暫存器中。運算元1應是一個暫存器,運算元2可以是一個暫存器,被移位的暫存器,或一個立即數。該指令可用於有符號數或無符號數的減法運算。指令範例:,SUB R0,R1,R2;R0=R1-R2SUB R0,R1,#256;R0=R1-256SUB R0,R2,R3,LSL#1;R0=R2-(R3 1),47,ARM指令集-資料處理指令-SBC指令,SBC指令的語法為:SBC 條件S 目的暫存器,運算元1,運算元2SBC指令用於把運算元1減去運算元2,再減去CPSR中的C條件旗標位元的反碼,並將結果存放到目的暫存器中。運算元1應是一個暫存器,運算元2可以是一個暫存器,被移位的暫存器,或一個立即數。該指令使用進位元旗標來表示借位,這樣就可以做大於32位的減法,注意不要忘記設定S尾碼來更改進位元旗標。該指令可用於有符號數或無符號數的減法運算。指令範例:,SUBS R0,R1,R2;R0=R1-R2-!C,並根據結果設定CPSR的進位元旗標位元,48,ARM指令集-資料處理指令-RSB指令,RSB指令的語法為:RSB條件S 目的暫存器,運算元1,運算元2RSB指令稱為逆向減法指令,用於把運算元2減去運算元1,並將結果存放到目的暫存器中。運算元1應是一個暫存器,運算元2可以是一個暫存器,被移位的暫存器,或一個立即數。該指令可用於有符號數或無符號數的減法運算。指令範例:,RSB R0,R1,R2;R0=R2 R1RSB R0,R1,#256;R0=256 R1RSB R0,R2,R3,LSL#1;R0=(R3 1)-R2,49,ARM指令集-資料處理指令-RSC指令,RSC指令的語法為:RSC 條件S 目的暫存器,運算元1,運算元2RSC指令用於把運算元2減去運算元1,再減去CPSR中的C條件旗標位元的反碼,並將結果存放到目的暫存器中。運算元1應是一個暫存器,運算元2可以是一個暫存器,被移位的暫存器,或一個立即數。該指令使用進位元旗標來表示借位,這樣就可以做大於32位的減法,注意不要忘記設定S尾碼來更改進位元旗標。該指令可用於有符號數或無符號數的減法運算。指令範例:,RSC R0,R1,R2;R0=R2 R1-!C,50,ARM指令集-資料處理指令-AND指令,AND指令的語法為:AND 條件S 目的暫存器,運算元1,運算元2AND指令用於在兩個運算元上進行邏輯與運算,並把結果放置到目的暫存器中。運算元1應是一個暫存器,運算元2可以是一個暫存器,被移位的暫存器,或一個立即數。該指令常用於遮罩運算元1的某些位。指令範例:,AND R0,R0,3;該指令保持R0的0、1位,其餘位清零。,51,ARM指令集-資料處理指令-ORR指令,ORR指令的語法為:ORR 條件S 目的暫存器,運算元1,運算元2ORR指令用於在兩個運算元上進行邏輯或運算,並把結果放置到目的暫存器中。運算元1應是一個暫存器,運算元2可以是一個暫存器,被移位的暫存器,或一個立即數。該指令常用於設定運算元1的某些位。指令範例:,ORR R0,R0,3;該指令設定R0的0、1位,其餘位保持不變。,52,ARM指令集-資料處理指令-EOR指令,EOR指令的語法為:EOR條件S 目的暫存器,運算元1,運算元2EOR指令用於在兩個運算元上進行邏輯互斥運算,並把結果放置到目的暫存器中。運算元1應是一個暫存器,運算元2可以是一個暫存器,被移位的暫存器,或一個立即數。該指令常用於反轉運算元1的某些位。指令範例:,EOR R0,R0,3;該指令反轉R0的0、1位,其餘位保持不變。,53,ARM指令集-資料處理指令-BIC指令,BIC指令的語法為:BIC 條件S 目的暫存器,運算元1,運算元2BIC指令用於清除運算元1的某些位,並把結果放置到目的暫存器中。運算元1應是一個暫存器,運算元2可以是一個暫存器,被移位的暫存器,或一個立即數。運算元2為32位的遮罩,如果在遮罩中設定了某一位,則清除這一位。未設定的遮罩位保持不變。指令範例:,BIC R0,R0,1011;該指令清除 R0 中的位 0、1、和 3,其餘的位保持不變。,54,ARM指令集-乘法指令與乘加指令,ARM微處理器支援的乘法指令與乘加指令共有6條,可分為運算結果為32位和運算結果為64位兩類,與前面的資料處理指令不同,指令中的所有運算元、目的暫存器必須為通用暫存器,不能對運算元使用立即數或被移位的暫存器,同時,目的暫存器和運算元1必須是不同的暫存器。乘法指令與乘加指令共有以下6條:MUL32位元乘法指令MLA32位元乘加指令SMULL64位元有符號數乘法指令SMLAL64位元有符號數乘加指令UMULL64位元無符號數乘法指令UMLAL64位元無符號數乘加指令,55,ARM指令集-乘法指令與乘加指令-MUL指令,MUL指令的語法為:MUL條件S目的暫存器,運算元1,運算元2MUL指令完成將運算元1與運算元2的乘法運算,並把結果放置到目的暫存器中,同時可以根據運算結果設定CPSR中相應的條件旗標位元。其中,運算元1和運算元2均為32位元的有符號數或無符號數。指令範例:,MULR0,R1,R2;R0=R1 R2MULSR0,R1,R2;R0=R1 R2,同時設定CPSR中的相關條件旗標位元,56,ARM指令集-乘法指令與乘加指令-MLA指令,MLA指令的語法為:MLA條件S目的暫存器,運算元1,運算元2,運算元3MLA指令完成將運算元1與運算元2的乘法運算,再將乘積加上運算元3,並把結果放置到目的暫存器中,同時可以根據運算結果設定CPSR中相應的條件旗標位元。其中,運算元1和運算元2均為32位元的有符號數或無符號數。指令範例:,MLAR0,R1,R2,R3;R0=R1 R2+R3MLASR0,R1,R2,R3;R0=R1 R2+R3,同時設定CPSR中的相關條件旗標位元,57,ARM指令集-乘法指令與乘加指令-SMULL指令,SMULL指令的語法為:SMULL條件S目的暫存器Low,目的暫存器低High,運算元1,運算元2SMULL指令完成將運算元1與運算元2的乘法運算,並把結果的低32位元放置到目的暫存器Low中,結果的高32位元放置到目的暫存器High中,同時可以根據運算結果設定CPSR中相應的條件旗標位元。其中,運算元1和運算元2均為32位元的有符號數。指令範例:,SMULLR0,R1,R2,R3;R0=(R2 R3)的低32位;R1=(R2 R3)的高32位,58,ARM指令集-乘法指令與乘加指令-SMLAL指令,SMLAL指令的語法為:SMLAL條件S目的暫存器Low,目的暫存器低High,運算元1,運算元2SMLAL指令完成將運算元1與運算元2的乘法運算,並把結果的低32位元同目的暫存器Low中的值相加後又放置到目的暫存器Low中,結果的高32位元同目的暫存器High中的值相加後又放置到目的暫存器High中,同時可以根據運算結果設定CPSR中相應的條件旗標位元。其中,運算元1和運算元2均為32位元的有符號數。對於目的暫存器Low,在指令執行前存放64位元加數的低32位元,指令執行後存放結果的低32位。對於目的暫存器High,在指令執行前存放64位元加數的高32位元,指令執行後存放結果的高32位。指令範例:,SMLALR0,R1,R2,R3;R0=(R2 R3)的低32位 R0;R1=(R2 R3)的高32位 R1,59,ARM指令集-乘法指令與乘加指令-UMULL指令,UMULL指令的語法為:UMULL條件S目的暫存器Low,目的暫存器低High,運算元1,運算元2UMULL指令完成將運算元1與運算元2的乘法運算,並把結果的低32位元放置到目的暫存器Low中,結果的高32位元放置到目的暫存器High中,同時可以根據運算結果設定CPSR中相應的條件旗標位元。其中,運算元1和運算元2均為32位元的無符號數。指令範例:,UMULLR0,R1,R2,R3;R0=(R2 R3)的低32位;R1=(R2 R3)的高32位,60,ARM指令集-乘法指令與乘加指令-UMLAL指令,UMLAL指令的語法為:UMLAL條件S目的暫存器Low,目的暫存器低High,運算元1,運算元2UMLAL指令完成將運算元1與運算元2的乘法運算,並把結果的低32位元同目的暫存器Low中的值相加後又放置到目的暫存器Low中,結果的高32位元同目的暫存器High中的值相加後又放置到目的暫存器High中,同時可以根據運算結果設定CPSR中相應的條件旗標位元。其中,運算元1和運算元2均為32位元的無符號數。對於目的暫存器Low,在指令執行前存放64位元加數的低32位元,指令執行後存放結果的低32位。對於目的暫存器High,在指令執行前存放64位元加數的高32位元,指令執行後存放結果的高32位。指令範例:,UMLALR0,R1,R2,R3;R0=(R2 R3)的低32位 R0;R1=(R2 R3)的高32位 R1,61,ARM指令集-程式狀態暫存器存取指令,ARM微處理器支援程式狀態暫存器存取指令,用於在程式狀態暫存器和通用暫存器之間般移資料,程式狀態暫存器存取指令包括以下兩條:MRS程式狀態暫存器到通用暫存器的資料般移指令。MSR通用暫存器到程式狀態暫存器的資料般移指令。,62,ARM指令集-程式狀態暫存器存取指令-MRS指令,MRS指令的語法為:MRS條件通用暫存器,程式狀態暫存器(CPSR或SPSR)MRS指令用於將程式狀態暫存器的內容般移到通用暫存器中。該指令一般用在以下幾種情況:當需要改變程式狀態暫存器的內容時,可用MRS將程式狀態暫存器的內容讀入通用暫存器,修改後再寫回程式狀態暫存器。當在例外處理或進程切換時,需要保存程式狀態暫存器的值,可先用該指令讀出程式狀態暫存器的值,然後保存。指令範例:,MRSR0,CPSR;般移CPSR的內容到R0MRSR0,SPSR;般移SPSR的內容到R0,63,ARM指令集-程式狀態暫存器存取指令-MSR指令,MSR指令的語法為:MSR條件程式狀態暫存器(CPSR或SPSR)_,運算元MSR指令用於將運算元的內容般移到程式狀態暫存器的特定域中。其中,運算元可以為通用暫存器或立即數。用於設定程式狀態暫存器中需要操作的位元,32位元的程式狀態暫存器可分為4個域:位31:24為條件旗標位元域,用f表示;位23:16為狀態位元域,用s表示;位15:8為擴充位域,用x表示;位7:0為控制位域,用c表示;該指令通常用於恢復或改變程式狀態暫存器的內容,在使用時,一般要在MSR指令中指明將要操作的域。指令範例:,MSRCPSR,R0;般移R0的內容到CPSRMSRSPSR,R0;般移R0的內容到SPSRMSRCPSR_c,R0;般移R0的內容到SPSR,但僅僅修改CPSR中的控制位域,64,ARM指令集-載入/存儲指令,ARM微處理器支援載入/存儲指令用於在暫存器和記憶體之間般移資料,載入指令用於將記憶體中的資料般移到暫存器,存儲指令則完成相反的操作。常用的載入存儲指令如下:LDR字資料載入指令LDRB位元組資料載入指令LDRH半字資料載入指令STR字資料存儲指令STRB位元組資料存儲指令STRH半字資料存儲指令,65,ARM指令集-載入/存儲指令-LDR指令,LDR指令的語法為:LDR條件 目的暫存器,LDR指令用於從記憶體中將一個32位元的字資料般移到目的暫存器中。該指令通常用於從記憶體中讀取32位元的字資料到通用暫存器,然後對資料進行處理。當程式計數器PC作為目的暫存器時,指令從記憶體中讀取的字資料被當作目的地址,從而可以實現程式流程的跳移。該指令在程式設計中比較常用,且定址方式靈活多樣,請讀者認真掌握。指令範例:,LDR R0,R1;將記憶體位址為R1的字資料讀入暫存器R0。LDR R0,R1,R2;將記憶體位址為R1+R2的字資料讀入暫存器R0。LDR R0,R1,8;將記憶體位址為R1+8的字資料讀入暫存器R0。LDR R0,R1,R2!;將記憶體位址為R1+R2的字資料讀入暫存器R0,並將新位址R1R2寫入R1。LDR R0,R1,8!;將記憶體位址為R1+8的字資料讀入暫存器R0,並將新位址R18寫入R1。LDR R0,R1,R2;將記憶體位址為R1的字資料讀入暫存器R0,並將新位址R1R2寫入R1。LDR R0,R1,R2,LSL2!;將記憶體位址為R1R24的字資料讀入暫存器R0,並將新位址R1R24寫入R1。LDR R0,R1,R2,LSL2;將記憶體位址為R1的字資料讀入暫存器R0,並將新位址R1R24寫入R1。,66,ARM指令集-載入/存儲指令-LDRB指令,LDRB指令的語法為:LDR條件B 目的暫存器,LDRB指令用於從記憶體中將一個8位元的位元組資料般移到目的暫存器中,同時將暫存器的高24位清零。該指令通常用於從記憶體中讀取8位元的位元組資料到通用暫存器,然後對資料進行處理。當程式計數器PC作為目的暫存器時,指令從記憶體中讀取的字資料被當作目的地址,從而可以實現程式流程的跳移。指令範例:,LDRB R0,R1;將記憶體位址為R1的位元組資料讀入暫存器R0,並將R0的高24位清零。LDRB R0,R1,8;將記憶體位址為R18的位元組資料讀入暫存器R0,並將R0的高24位清零。,67,ARM指令集-載入/存儲指令-LDRH指令,LDRH指令的語法為:LDR條件H 目的暫存器,LDRH指令用於從記憶體中將一個16位元的半字資料般移到目的暫存器中,同時將暫存器的高16位清零。該指令通常用於從記憶體中讀取16位元的半字資料到通用暫存器,然後對資料進行處理。當程式計數器PC作為目的暫存器時,指令從記憶體中讀取的字資料被當作目的地址,從而可以實現程式流程的跳移。指令範例:,LDRH R0,R1;將記憶體位址為R1的半字資料讀入暫存器R0,並將R0的高16位清零。LDRH R0,R1,8;將記憶體位址為R18的半字資料讀入暫存器R0,並將R0的高16位清零。LDRH R0,R1,R2;將記憶體位址為R1R2的半字資料讀入暫存器R0,並將R0的高16位清零。,68,ARM指令集-載入/存儲指令-STR指令,STR指令的語法為:STR條件 來源暫存器,STR指令用於從來源暫存器中將一個32位元的字資料般移到記憶體中。該指令在程式設計中比較常用,且定址方式靈活多樣,使用方式可參考指令LDR。指令範例:,STRR0,R1,8;將R0中的字資料寫入以R1為位址的記憶體中,並將新位址R18寫入R1。STRR0,R1,8;將R0中的字資料寫入以R18為位址的記憶體中。,69,ARM指令集-載入/存儲指令-STRB指令,STRB指令的語法為:STR條件B 來源暫存器,STRB指令用於從來源暫存器中將一個8位元的位元組資料般移到記憶體中。該位元組資料為來源暫存器中的低8位。指令範例:,STRB R0,R1;將暫存器R0中的位元組資料寫入以R1為位址的記憶體中。STRB R0,R1,8;將暫存器R0中的位元組資料寫入以R18為位址的記憶體中。,70,ARM指令集-載入/存儲指令-STRH指令,STRH指令的語法為:STR條件H 來源暫存器,STRH指令用於從來源暫存器中將一個16位元的半字資料般移到記憶體中。該半字資料為來源暫存器中的低16位。指令範例:,STRH R0,R1;將暫存器R0中的半字資料寫入以R1為位址的記憶體中。STRH R0,R1,8;將暫存器R0中的半字資料寫入以R18為位址的記憶體中。,71,ARM指令集-連續資料載入/存儲指令,ARM微處理器所支援連續資料載入/存儲指令可以一次在一片連續的記憶體單元和多個暫存器之間般移資料,連續載入指令用於將一片連續的記憶體中的資料般移到多個暫存器,連續資料存儲指令則完成相反的操作。常用的載入存儲指令如下:LDM連續資料載入指令STM連續資料存儲指令,72,ARM指令集-連續資料載入/存儲指令,LDM(或STM)指令的語法為:LDM(或STM)條件類型 基址暫存器!,暫存器列表LDM(或STM)指令用於從由基址暫存器所指示的一片連續記憶體到暫存器列表所指示的多個暫存器之間般移資料該指令的常見用途是將多個暫存器的內容入堆疊或出堆疊。類型為非堆疊型定址或堆疊型定址,73,非堆疊型定址,IA(Increment After)基底暫存器在存取後才增加IB(Increment Before)基底暫存器在存取前即增加DA(decrement After)基底暫存器在存取後才減少DB(decrement Before)基底暫存器在存取前即減少,74,ARM指令集-連續資料載入/存儲指令,堆疊型定址(應用於程式堆疊資料結構上)FD(Full Descending),滿遞減FA(Full Ascending)

    注意事项

    本文(ARM组合语言程式设计.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开