12_ARM彙編自學筆記指令系統之加載存儲指令

加載/存儲指令

ARM 微處理器支持加載/存儲指令用於在寄存器和存儲器之間傳送數據,加載指令用於將存儲器中的數據傳送到寄存器,存儲指令則完成相反的操作。常用的加載存儲指令如下:

— LDR 字數據加載指令

— LDRB  字節數據加載指令

— LDRH  半字數據加載指令

— STR 字數據存儲指令

— STRB  字節數據存儲指令

— STRH  半字數據存儲指令

1、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,並將新地址 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。

2、LDRB指令

LDRB指令的格式爲:LDR{條件}B 目的寄存器,<存儲器地址>

LDRB 指令用於從存儲器中將一個 8 位的字節數據傳送到目的寄存器中,同時將寄存器的高 24位清零。該指令通常用於從存儲器中讀取 8位的字節數據到通用寄存器,然後對數據進行處理。當程序計數器 PC 作爲目的寄存器時,指令從存儲器中讀取的字數據被當作目的地址,從而可以實現程序流程的跳轉。指令示例:

LDRB R0,[R1] ;將存儲器地址爲 R1 的字節數據讀入寄存器 R0,並將 R0 的高 24 位清零。

LDRB R0,[R1,#8] ;將存儲器地址爲 R1+8 的字節數據讀入寄存器 R0,並將 R0 的高 24 位清零。

3、LDRH指令

LDRH指令的格式爲:LDR{條件}H 目的寄存器,<存儲器地址>

LDRH指令用於從存儲器中將一個 16 位的半字數據傳送到目的寄存器中,同時將寄存器的高 16位清零。該指令通常用於從存儲器中讀取 16 位的半字數據到通用寄存器,然後對數據進行處理。當程序計數器 PC 作爲目的寄存器時,指令從存儲器中讀取的字數據被當作目的地址,從而可以實現程序流程的跳轉。指令示例:

LDRH R0,[R1] ;將存儲器地址爲 R1 的半字數據讀入寄存器 R0,並將 R0 的高 16 位清零。

LDRH R0,[R1,#8] ;將存儲器地址爲 R1+8 的半字數據讀入寄存器 R0,並將 R0 的高 16 位清零。

LDRH R0,[R1,R2] ;將存儲器地址爲 R1+R2 的半字數據讀入寄存器 R0,並將 R0 的高 16 位清零。

4、STR指令

STR指令的格式爲:STR{條件} 源寄存器,<存儲器地址>

STR指令用於從源寄存器中將一個 32位的字數據傳送到存儲器中。該指令在程序設計中比較常用,且尋址方式靈活多樣,使用方式可參考指令 LDR。指令示例:

STR  R0,[R1],#8  ;將 R0 中的字數據寫入以 R1 爲地址的存儲器中,並將新地址 R1+8 寫入 R1。

STR  R0,[R1,#8]  ;將 R0 中的字數據寫入以 R1+8 爲地址的存儲器中。

5、STRB指令

STRB指令的格式爲:STR{條件}B 源寄存器,<存儲器地址>

STRB指令用於從源寄存器中將一個 8 位的字節數據傳送到存儲器中。該字節數據爲源寄存器中的低 8位。指令示例:

STRB R0,[R1] ;將寄存器 R0 中的字節數據寫入以 R1 爲地址的存儲器中。

STRB R0,[R1,#8] ;將寄存器 R0 中的字節數據寫入以 R1+8 爲地址的存儲器中。

6、STRH指令

STRH指令的格式爲:STR{條件}H 源寄存器,<存儲器地址>

STRH指令用於從源寄存器中將一個 16位的半字數據傳送到存儲器中。該半字數據爲源寄存器中的低 16位。指令示例:

STRH R0,[R1] ;將寄存器 R0 中的半字數據寫入以 R1 爲地址的存儲器中。

STRH R0,[R1,#8] ;將寄存器 R0 中的半字數據寫入以 R1+8 爲地址的存儲器中。

 

發佈了64 篇原創文章 · 獲贊 48 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章