ARM指令集2

來源:互聯網
上載者:User

標籤:

ARM指令集2

ARM微處理器支援載入/儲存指令用於在寄存器和儲存空間之間傳送資料,載入指令用於將儲存空間中的資料傳送到寄存器,儲存指令則完成相反的操作。

LDR指令(與MOV有區別,MOV只能操作通用寄存器)

LDR指令格式為:

LDR{條件}目的寄存器,<儲存空間地址>

LDR指令用於從儲存空間中將一個32位的字資料傳送到目的寄存器中。該指令通常用於從儲存空間中讀取32位的字資料到通用寄存器,然後對資料進行處理。

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。並將新地址R1+R2寫入R1。

LDR  R0, [R1, #8]!

將儲存空間地址為R1+8的字資料讀入寄存器R0,並將新地址R1+8寫入R1。

LDR  R0, [R1],R2

將儲存空間地址為R1的字資料讀入寄存器R0。並將新地址R1+R2寫入R1。

LDR  R0, [R1,R2,LSL#2]!

將儲存空間地址為R1+R2*4的字資料讀入寄存器R0。並將新地址R1+R2*4寫入R1。

LDR  R0, [R1],R2,LSL#2

將儲存空間地址為R1的字資料讀入寄存器R0。並將新地址R1+R2*4寫入R1。

 

LDRB指令

LDRB指令格式為:

LDR{條件}B目的寄存器,<儲存寄存器>

LDRB指令用於從寄存器中將一個低8位的位元組資料傳送到目的寄存器中,同時將寄存器的高24位清零。該指令通常用於從儲存空間中讀取8位的位元組數到通用寄存器,然後對資料進行處理。

指令樣本:

LDRB  R0,[R1];將儲存空間地址為R1的位元組數讀入寄存器R0,並將R0的高24位清零。

LDRB    R0,[R1,#8];將儲存空間地址為R1+8的位元組資料讀入寄存器R0,並將R0的高24位清零。

 

LDRH指令

LDRH指令格式為:

LDR{條件}H目的寄存器,<儲存寄存器>

LDRH指令用於從寄存器中將一個低16位的半位元組資料傳送到目的寄存器中,同時將寄存器的高16位清零。該指令通常用於從儲存空間中讀取16位的半位元組數到通用寄存器,然後對資料進行處理。

指令樣本:

LDRB  R0,[R1];將儲存空間地址為R1的半位元組數讀入寄存器R0,並將R0的高16位清零。

LDRB    R0,[R1,R2];將儲存空間地址為R1+R2的半位元組資料讀入寄存器R0,並將R0的高16位清零。

 

STR指令

STR指令的格式為:

STR{條件}源寄存器,<儲存空間地址>

       STR指令用於從源寄存器中將一個32位的字資料傳送到儲存空間中。

指令樣本:

STR R0,[R1],#8;將R0中的字資料寫入以R1為地址的儲存空間中,並將新地址R1+8寫入R1。

STR R0,[R1,#8];將R0中的字資料寫入以R1+8為地址的儲存空間中。

 

批量載入/儲存指令

ARM微處理器所支援的批量資料載入/儲存指令可以一次在一片連續的儲存單元和多個寄存器之間傳送資料,批量載入指令用於將一片連續的儲存空間中的資料傳送到多個寄存器,批量資料存放區指令則完成相反的操作。常用的載入儲存指令如下:

LDM             批量資料載入指令

STM              批量資料存放區指令

 

LDM指令

LDM指令格式為:

LDM{條件}{類型}指令用於從由基底位址暫存器{! },寄存器列表{}

       LDM(或STM)指令用於從基底位址暫存器所指示的一片連續的儲存空間到儲存空間所指示的多個寄存器之間傳送資料,該指令的常見用途是將多個寄存器的內容入棧或出棧。其中,{類型}為以下幾種情況:

                       

{! }為可選尾碼,若選用該尾碼,則當資料傳送完畢之後,將最後的地址寫入基底位址暫存器,否則基底位址暫存器的內容不變。基底位址暫存器不允許為R15,寄存器列表可以為R0~R15的任意組合。

寄存器列表{}為可選尾碼,當指令為LDM且寄存器列表中包含R15,選用該尾碼時表示:除了正常的資料傳送之外,還將SPSR複製到CPSR。

指令樣本:

STMFD         R13!,{R0,R4-R12,LR}

將寄存器列表中的寄存器(R0,R4到R12,LR)存入堆棧。

LDMFD    R13!,{R0,R4-R12,PC}

       將堆棧內容恢複到寄存器(R0,R4到R12,LR)。

 

資料交換指令

ARM微處理器所支援資料交換指令能在儲存空間和寄存器之間交換資料。資料交換指令有如下兩條:

SWP    字資料交換指令

SWPB    位元組資料交換指令

 

SWP指令

SWP指令格式為:

SWP{條件}目的寄存器,源寄存器1,[源寄存器2] or LDR 和 STR 兩個指令也能實現SWP指令。

SWP指令用於將源寄存器2所指向的儲存空間中的字資料傳送到目的寄存器中,同時將源寄存器1中的字資料傳送到源寄存器2所指向的儲存空間中。顯然,當元寄存器1和目的寄存器為同一個寄存器時,指令交換該寄存器和儲存空間的內容。

指令樣本:

SWP  R0,R1,[R2];將R2所指向的儲存空間中的字資料傳送到R0,同時將R1中的字資料傳送到R2所指向的儲存單元。

SWP       R0, R0, [R1];該指令完成將R1所指向的儲存空間中的字資料與R0中的字資料交換。

 

移位指令

ARM微處理器支援資料的移位操作,移位操作在ARM指令集中不作為單獨的指令使用,它只能作為指令格式中是一個欄位,在組合語言中表示為指令中的選項。移位操作包括如下幾種類型,ASL和LSL是等價的,可以自由互換:

LSL        邏輯左移

ASL              算術左移

LSR       邏輯右移

ASR              算術右移

ROR       迴圈右移

異常產生指令

ARM微處理器所支援的異常指令有如下兩條:

SWI       軟體中斷指令

BKPT     斷點中斷指令     

SWI指令格式為:

SWI{條件}24位的立即數

       SWI指令用於產生軟體中斷,以便使用者程式能叫用作業系統的系統API。作業系統在SWI的例外處理常式中提供相應的系統服務,指令中24位的立即數指定使用者程式調用的API類型。

指令樣本:

SWI       0x02

該指令叫用作業系統編號位02的系統常式。

 

ARM指令集2

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.