處理器寄存器和匯編指令系統(tǒng)_第1頁
處理器寄存器和匯編指令系統(tǒng)_第2頁
處理器寄存器和匯編指令系統(tǒng)_第3頁
處理器寄存器和匯編指令系統(tǒng)_第4頁
處理器寄存器和匯編指令系統(tǒng)_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、ARM處理器寄存器和匯編指令系統(tǒng) 1.ARM的處理器模式 北京白癜風醫(yī)院 整理分享ARM體系結(jié)構(gòu)支持7種處理器模式,分別是:用戶、FIQ、IRQ、管理、中止(abort)、未定義和系統(tǒng)模式。除了用戶模式外,其余都稱之為特權(quán)模式。除了用戶和系統(tǒng)模式外,其余都稱之為異常模式。 2.ARM的存儲器組織ARM處理器總共有37個寄存器:包括31個通用寄存器、包括程序計數(shù)器(PC)、和6個狀態(tài)寄存器。這些寄存器在不同模式下,不能被同時看到,有些名稱是重疊的。分為三類:不分組寄存器,分組寄存器和程序計數(shù)器1)不分組寄存器R0R7所有的處理模式下、它們都是訪問同一個寄存器,因此只有8個不分組寄存器。

2、2)分組寄存器R8R14每一個訪問的物理寄存器取決于當前的處理器模式,有些是共用的,而有些事分離的。具體可以查詢相關(guān)資料。R13就是堆棧寄存器SP,而R14就是鏈接寄存器LR3)程序計數(shù)器R15在ARM狀態(tài)PC的位1:0為0,而在Thumb狀態(tài),位0為0.4)程序狀態(tài)寄存器CPSR和程序狀態(tài)保存寄存器SPSRCPSR只有一個,代表了當前的程序狀態(tài)。而每個異常模式都有獨立的一個SPSR,用于保存CPSR的狀態(tài)。131  30  29  28        &

3、#160;                        8  7  6  5    4    3   2   1   0 2 N 

4、;  Z  C    V           DNM(RAZ)              I  F  T   M4 M3  M2 M1 M0 3.AR

5、M的常用匯編指令1)基本尋址方式包括有寄存器尋址、立即尋址、寄存器移位尋址、寄存器間尋址、變址尋址、多寄存器尋址、堆棧尋址、塊復制尋址和相對尋址2)條件執(zhí)行幾乎所有的ARM指令都可以包含一個可選的條件碼,句法中以cond來標識??捎玫臈l件碼如下面所示。幾乎所有的ARM數(shù)據(jù)處理指令均可以根據(jù)執(zhí)行結(jié)果來選擇是否更新條件碼標志,即在指令中包含后綴S。 1操作碼31:28      助記符后綴   標 志       

6、60;          含義 20000                 EQ             Z置位         

7、        相等 30001                 NE             Z清零           

8、60;     不等 40010                 CS/HS        C置位                 大于或等于(無符號>=

9、) 50011                 CC/LO        C清零                 小于(無符號<) 60100   

10、60;             MI             N置位                  負 70101      

11、           PL             N清零                  正或零 80110       &#

12、160;         VS            V置位                  溢出 90111          

13、;       VC            V清零                  未溢出101000             

14、    HI            C置位且Z清零        大于(無符號>)111001                 LS       

15、;     C清零或Z置位        小于或等于(無符號<=)121010                GE             N和V相同    

16、60;        帶符號>=131011                LT             N和V不同           

17、60;  帶符號<141100                GT            Z清零且N和V相同     帶符號>151101          

18、      LE             Z置位或N和V不同     帶符號<=161110                AL        

19、     任何                     總是(通常省略)  3)存儲器訪問指令3.1)LDR和STR(字與無符號字節(jié))語法如下1op cond B T Rd, Rn2op cond B Rd, Rn, Flexoffset&

20、#160;!  /前索引偏移3op cond B Rd, label4op cond B T Rd, Rn, Flexoffset /后索引偏移其中:op 是操作碼即指令LDR或STR。cond 就是上面所說的條件碼,因此指令可以變成LDREQ或STRNE類似的名稱,表示滿足某些條件時該條指令才會執(zhí)行。B 可選后綴,表示傳送Rd的最低有效字節(jié),就是所謂的無符號字節(jié)傳送,字節(jié)加載的時候是用'0'來擴展到32位的。T 可選后綴,即使處理器是在特權(quán)模式下,存儲系統(tǒng)也將訪問看成

21、是處理器在用戶模式下。不能和前索引偏移一起使用。Rd 用于加載或存儲的ARM寄存器Rn 存儲器的基址寄存器。若指令是帶寫回的前索引或后索引(后索引都是寫回的),則Rd和Rn不能相同F(xiàn)lexoffset 加到Rn上的靈活的偏移量label 程序相對偏移表達式。label必須是當前指令的+-4KB范圍內(nèi)! 可選后綴,前索引寫回標志,若Rn是R15,則不能用后綴!Flexoffset的句法包括下面兩種 1#expr 2- Rm , shift      - 是可選符號,表示從Rn中減去偏移量

22、,否則是加   expr 表達式,取值范圍-4095+4095的整數(shù)   Rm 內(nèi)含偏移量的寄存器。Rm不允許是R15   shift Rm的可選移位方法,可以是下列形式的任何一種       ASR n算術(shù)右移n位(1<=n<=32)       LSL n邏輯左移n位(0<=n<=31)     &#

23、160; LSR n邏輯右移n位(1<=n<=32)       ROR n循環(huán)右移n位(1<=n<=31)       RRX 循環(huán)右移1位,帶擴展 3.2)LDR和STR(半字和帶符號字節(jié))語法如下:1op cond type Rd, Rn2op cond type Rd, Rn, offset !3

24、op cond type Rd, label4op cond type Rd, Rn, offset其中:type 必須是以下所列其中之一    SH 對帶符號半字(僅LDR)    H 對無符號半字    SB 對帶符號字節(jié)(僅LDR)label 程序相對偏移表達式。必須是當前指令+-255字節(jié)范圍offset 加在Rn上的偏移量,可以是以下兩種形式之一     #expr&

25、#160;  /值為+-255范圍內(nèi)的整數(shù)。     - Rm 3.3)LDR和STR(雙字)加載兩個相鄰的存儲器和存儲兩個相鄰的寄存器,語法如下:1op cond D Rd, Rn2op cond D Rd, Rn, offset !3op cond D Rd, label4op cond D Rd, Rn, offset其中:Rd 加載或存儲寄

26、存器其中一個,另一個是R(d+1)。但Rd必須是偶數(shù)寄存器,且不能是R14。Rn 除非指令為零偏移,或不帶寫回的前索引,否則Rn不允許與Rd和R(d+1)相同offset 加在Rn上的偏移量label 程序相對偏移表達式。必須是當前指令+-255字節(jié)范圍 3.4)LDM和STM 加載多個寄存器或存儲多個寄存器,可以傳送R0R15的任何組合1op cond mode Rn!, reglist其中:mode是下列情況中之一:    IA 每次傳送后地址加1    IB 每次傳送前地址加1&

27、#160;   DA 每次傳送后地址減1    DB 每次傳送前地址減1    FD 滿遞減堆棧    ED 空遞減堆棧    FA 滿遞增堆棧    EA 空遞增堆棧Rn 基址寄存器,傳送數(shù)據(jù)的初始地址。不允許是R15! 可選后綴。若有!,則最后的地址寫回Rnreglist 加載或存儲的寄存器列表 可以寫出如下形式      R0, R2, R9  

28、60;   R3-R6, R11, R12      R0, R4-R7, LR 3.4) SWP 在寄存器和存儲器之間進行數(shù)據(jù)交換。1SWP cond B Rd, Rm, Rn其中:B 可選后綴。若有B,則是交換字節(jié),否則交換字Rd 數(shù)據(jù)從存儲器加載到RdRm Rm的內(nèi)容存儲到存儲器。如果Rm和Rd的相同,則是交換寄存器和存儲器的內(nèi)容Rn Rn的內(nèi)容指定要進行數(shù)據(jù)交換的存儲器的地址。 Rn必須和Rm和Rd不同 4)ARM數(shù)據(jù)處理指令4.1)靈活

29、的第二操作數(shù),在數(shù)據(jù)處理指令中會經(jīng)常出現(xiàn)第二操作數(shù),即Operand2,它有如下的兩種可能形式。1# immed_8r2Rm, shift其中:immed_8r 取值為數(shù)字常量的表達式。常量必須對應8位位圖在32位字中被循環(huán)移位偶數(shù)位(0,2,4,6,.,28,30)后的值              合法的常量有:0xFF,0x104,0xFF0,0xFF000,0xF0000000F等     

30、         非法的常量有:0x101,0x102,0xFF1,0xFF04等Rm   存儲第二操作數(shù)數(shù)據(jù)的寄存器,可以用各種方法對寄存器中的位圖進行移位或循環(huán)移位,操作結(jié)果用于Operand2       但Rm本身不改變。shift  對Rm的可選移位方法,可以是以下方法的任何一種       ASR n算術(shù)右移n位(1<=n<=32)&

31、#160;      LSL n邏輯左移n位(0<=n<=31)       LSR n邏輯右移n位(1<=n<=32)       ROR n循環(huán)右移n位(1<=n<=31)       RRX 循環(huán)右移1位,帶擴展      &#

32、160;  type Rs 其中type為上面ASR、LSL、LSR、ROR中的一種;Rs為提供移位量的寄存器,僅使用最低有效字節(jié)4.2)ADD、SUB、RSB、ADC、SBC和RSC1op cond S Rd, Rn, Operand2其中:op    是上面眾多指令中的一個S      可選后綴,會根據(jù)結(jié)果來更新條件碼標志Rd     結(jié)果寄存器Rn     保存第一操作數(shù)

33、的寄存器Operand2   第二操作數(shù) ADD 表示Rn加Operand2的值存到RdSUB 表示Rn減去Operand2RSB 表示Operand2減去RnADC 將Rn和Operand2相加后再加上進位標志SBC 從Rn的值中減去Operand2的值,若進位標志是清零的,則結(jié)果減去1RSC 從Operand2中減去Rn的值,若進位是清零的,則結(jié)果減去14.3)AND、ORR、EOR和BIC1op cond S Rd, Rn, Operand2其中:AND是與、ORR是或、EOR是異或和BIC是位清零都是Rn和

34、Operand2中的值做處理,然后結(jié)果保存在Rd中BIC 用于將Rn中的位于Operand2中相應位的反碼,進行與操作。4.3)MOV和MVN 傳送與傳送非1MOV cond S Rd,Operand22MVN cond S Rd,Operand2MOV將Operand2中的值拷貝到Rd中而MVN將Operand2的值進行按位邏輯非之后再傳送到Rd4.4)CMP和CMN 比較與比較反值1CMP cond Rn, Operand22CMN cond Rn, Operand2CM

35、P比較大小,從Rn中減去Operand2的值,但丟棄結(jié)果,更新標志位,指令的主要目的是更新標志位CMN是將Rn和Operand2相加,丟棄結(jié)果再更新標志位。4.5)TST和TEQ 測試和測試相等1TST cond Rn, Operand22TEQ cond Rn, Operand2TST對Rn和Operand2的值進行按位與操作,更新標志位,丟棄結(jié)果TEQ對Rn和Operand2的值進行異或操作,更新標志位,丟棄結(jié)果4.6)CLZ 前導零計數(shù)1CLZ cond Rd, RmRd 結(jié)果寄存器,不允許是R15

36、Rm 操作數(shù)寄存器。CLZ對Rm中的前導零的個數(shù)進行計數(shù),結(jié)果放在Rd中,若Rm全為0,則結(jié)果為32     若位31是1,則結(jié)果為04.7)MUL和MLA 乘法和乘加運算1MUL cond S Rd,Rm,Rs2MLA cond S Rd,Rm,Rs,Rn其中:Rd    結(jié)果寄存器,不能使R15Rm,Rs,Rn  操作寄存器,不能是R15,Rd不能和Rm相同MUL   將Rm和Rs相乘,并將最低有效32位結(jié)果放在Rd中MLA

37、0;  將Rm和Rs相乘,再加上Rn的值,將最低有效32位結(jié)果放在Rd中4.8)UMULL、UMLAL、SMULL和SMLAL 無符號和帶符號長整數(shù)乘法和乘加,結(jié)果是64位1op condS RdLo,RdHi,Rm,Rs其中:RdLo和RdHi  是結(jié)果寄存器Rm和Rs  是操作數(shù)寄存器UMULL 將Rm和Rs中的值解釋為無符號整數(shù)。將兩數(shù)相乘,并將結(jié)果的最低32位放RdLo中,高32位放RdHi中UMLAL 將Rm和Rs中的值解釋為無符號整數(shù)。將兩數(shù)相乘,并將結(jié)果加回到RdLo和RdHi的64位無符號整數(shù)上。SMULL 將Rm和Rs中的值解釋為有符號補碼整數(shù)。將兩數(shù)相乘,并將結(jié)果的最低32位放RdLo中,高32位放RdHi中SMLAL 將Rm和Rs中的值解釋為有符號補碼整數(shù)。并將結(jié)果加回到RdLo和RdHi的64位無符號整數(shù)上。 5)ARM轉(zhuǎn)移指令5.1)B和BL 跳轉(zhuǎn)指令1B cond label2BL cond label其中:label  是程序相對偏移表達式。兩條指令都會令程序轉(zhuǎn)移到label上,而BL還會將原來的下一條指令地址保存在R14上&

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論