數(shù)據(jù)傳送指令之:單寄存器的Load/Store指令
5.3 單寄存器的Load/Store指令
Load/Store內(nèi)存訪問指令在ARM寄存器和存儲器之間傳送數(shù)據(jù)。ARM指令中有3種基本的數(shù)據(jù)傳送指令。
① 單寄存器Load/Store指令(Single Register)
這些指令在ARM寄存器和存儲器之間提供更靈活的單數(shù)據(jù)項傳送方式。數(shù)據(jù)項可以是字節(jié)、16位半字或32位字。
② 多寄存器Load/Store內(nèi)存訪問指令
這些指令的靈活性比單寄存器傳送指令差,但可以使大量的數(shù)據(jù)更有效地傳送。它們用于進程的進入和退出、保存和恢復(fù)工作寄存器以及拷貝存儲器中的一塊數(shù)據(jù)。
③ 單寄存器交換指令(Single Register Swap)
這些指令允許寄存器和存儲器中的數(shù)值進行交換,在一條指令中有效地完成Load/Store操作。它們在用戶級編程中很少用到。它的主要用途是在多處理器系統(tǒng)中實現(xiàn)信號量(Semaphores)的操作,以保證不會同時訪問公用的數(shù)據(jù)結(jié)構(gòu)。
5.3.1 字數(shù)據(jù)傳送指令
這種指令用于把單一的數(shù)據(jù)傳入或者傳出一個寄存器。支持的數(shù)據(jù)類型有字節(jié)(8位)、半字(16位)和字(32位)。
表5.1總結(jié)了所有單寄存器的Load/Store指令。
表5.1 單寄存器Load/Store指令
指 令 | 作 用 | 操 作 |
LDR | 把一個字裝入一個寄存器 | Rd←mem32[address] |
STR | 將存儲器中的字保存到寄存器 | Rd→mem32[address] |
LDRB | 把一個字節(jié)裝入一個寄存器 | Rd←mem8[address] |
STRB | 將寄存器中的低8位字節(jié)保存到存儲器 | Rd→mem8[address] |
LDRH | 把一個半字裝入一個寄存器 | Rd←mem16[address] |
STRH | 將寄存器中的低16位半字保存到存儲器 | Rd→mem16[address] |
LDRBT | 用戶模式下將一個字節(jié)裝入寄存器 | Rd←mem8[address] under user mode |
STRBT | 用戶模式下將寄存器中的低8位字節(jié)保存到存儲器 | Rd→mem8[address] under user mode |
LDRT | 用戶模式下把一個字裝入一個寄存器 | Rd←mem32[address]under user mode |
STRT | 用戶模式下將存儲器中的字保存到寄存器 | Rd→mem32[address] ]under user mode |
LDRSB | 把一個有符號字節(jié)裝入一個寄存器 | Rd←sign{mem8[address]} |
LDRSH | 把一個有符號半字裝入一個寄存器 | Rd←sign{mem16[address]} |
1.LDR指令
(1)指令編碼格式
LDR指令用于從內(nèi)存中將一個32位的字讀取到目標(biāo)寄存器。
指令的編碼格式如圖5.3所示。
圖5.3 LDR指令編碼格式
存儲器相關(guān)文章:存儲器原理
評論