當前位置:編程學習大全網 - 編程語言 - ARM中LDR載入指令

ARM中LDR載入指令

ARM中LDR載入指令

LDR偽指令的形式是“LDR Rn,=expr”。作用是裝在壹個32bit常數和壹個地址到暫存器。

舉例:

COUNT EQU 0x56000054

LDR R1,=COUNT

MOV R0,#0

STR R0,[R1]

COUNT是我們定義的壹個變數,地址為0x56000054。

LDR R1,=COUNT 是將COUNT這個變數的地址,也就是0x56000054放到R1中。

MOV R0,#0是將立即數0放到R0中。

STR R0,[R1] 是壹個典型的儲存指令,將R0中的值放到以R1中的值為地址的儲存單元去。

實際就是將0放到地址為0x56000054的儲存單元中去。

可見這三條指令是為了完成對變數COUNT賦值。

x86中沒有ldr這種指令,因為x86的mov指令可以將資料從記憶體中移動到暫存器中。

MOV是從壹個暫存器或者移位的暫存器或者立即數的值傳遞到另外壹個暫存器。

從本質上是暫存器到暫存器的傳遞,為什麽會有立即數,其實也是有限制的立即數,不是所有立即數都可以傳遞的。

這個立即數要符合壹個8位數回圈右移偶數位的取值。

原因,MOV本身就是壹條32bit指令,除了指令碼本身,它不可能再帶壹個可以表示32bit的數字,所以用了其中的12bit來表示立即數,其中4bit表示移位的位數(回圈右移,且數值x2),8bit用來表示要移位的壹個基數。

另外還有壹個ldr偽指令,ldr偽指令和ARM的ldr指令很像,但作用不太壹樣。ldr偽指令可在立即數前加上=,以表示把壹個地址寫到某暫存器中,比如:

ldr r0, =0x12345678,把0x12345678這個地址寫到r0中了。所以,ldr偽指令和mov是比較相似,mov指令限制了立即數的長度為8位,是不能超過512。ldr偽指令沒有這個限制。如使用ldr偽指令時,後面跟的立即數沒有超過8位,在實際匯編的時候該ldr偽指令是被轉換為 mov指令。

arm中mov指令和ldr指令有何區別?

MOV和LDR的區別,資料從記憶體到CPU之間的移動只能通過LDR/STR指令來完成,MOV只能在暫存器之間移動資料,或者把立即數移動到暫存器中。

LDR偽指令與LDR載入指令的功能和應用有何區別

ARM指令集中,LDR通常都是作載入指令的,但是它也可以作偽指令。

LDR偽指令的形式是“LDR Rn,=expr”。下面舉壹個例子來說明它的用法。

COUNT EQU 0x40003100

……

LDR R1,=COUNT

MOV R0,#0

STR R0,[R1]

COUNT是我們定義的壹個變數,地址為0x40003100。這中定義方法在組合語言中是很常見的,如果使用過微控制器的話,應該都熟悉這種用法。

LDR R1,=COUNT是將COUNT這個變數的地址,也就是0x40003100放到R1中。

MOV R0,#0是將立即數0放到R0中。最後壹句STR R0,[R1]是壹個典型的儲存指令,將R0中的值放到以R1中的值為地址的儲存單元去。實際就是將0放到地址為0x40003100的儲存單元中去。可見這三條指令是為了完成對變數COUNT賦值。用三條指令來完成對壹個變數的賦值,看起來有點不太舒服。這可能跟ARM的采用RISC有關。

下面還有壹個例子:將COUNT的值賦給R0

LDR R1,=COUNT ;這條偽指令,是將COUNT的地址賦給R1

LDR R0,[R1] ;將COUNT的值賦給R0

ARM是RISC結構,資料從記憶體到CPU之間的移動只能通過LDR/STR指令來完成。 比如想把資料從記憶體中某處讀取到暫存器中,只能使用LDR,比如: ldr r0, 0x12345678 ;就是把0x12345678這個地址中的值存放到r0中。而mov不能幹這個活,mov只能在暫存器之間移動資料,或者把立即數移動到暫存器中,這個和x86這種CISC架構的晶片區別最大的地方。

x86中沒有ldr這種指令,因為x86的mov指令可以將資料從記憶體中移動到暫存器中。

MOV是從壹個暫存器或者移位的暫存器或者立即數的值傳遞到另外壹個暫存器。

從本質上是暫存器到暫存器的傳遞,為什麽會有立即數,其實也是有限制的立即數,不是所有立即數都可以傳遞的這個立即數要符合壹個8位數回圈右移偶數位的取值。原因是,MOV本身就是壹條32bit指令,除了指令碼本身,它不可能再帶壹個可以表示32bit的數字,所以用了其中的12bit來表示立即數,其中4bit表示移位的位數(回圈右移,且數值x2),8bit用來表示要移位的壹個基數。

另外還有壹個就是ldr偽指令,雖然ldr偽指令和ARM的ldr指令很像,但是作用不太壹樣。ldr偽指令可以在立即數前加上=,以表示把壹個地址寫到某暫存器中,比如:

ldr r0, =0x12345678

這樣,就把0x12345678這個地址寫到r0中了。所以,ldr偽指令和mov是比較相似的。只不過mov指令限制了立即數的長度為8位,也就是不能超過512。而ldr偽指令沒有這個限制。如果使用ldr偽指令時,後面跟的立即數沒有超過8位,那麽在實際匯編的時候該ldr偽指令是被轉換為 mov指令的。

總結:偽指令LDR{cond} register, ={expr|label-expr}

expr為32為常量。編譯器根據expr的取值情況來處理這條偽指令:

1、當expr表示的地址沒有超過mov或mvn指令中地址的取值範圍時,編譯器用合適的mov指令或mvn指令代替該LDR偽指令。

2、當expr表示的地址超過了mov或mvn指令中地址的取值範圍時,編譯器將該常數放在緩沖區中,同時用壹條基於PC的LDR指令讀取該常數。

簡答:請說明MOV指令與LDR載入指令的區別和用途

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、MOV指令

MOV 資料傳送指令格式:MOV{<cond>}{S} <Rd>,<op1>;

功能:Rd=op1

op1可以是暫存器、被移位的暫存器或立即數。

例如:

MOV R0,#5 ;R0=5

MOV R0,R1 ;R0=R1

MOV R0,R1,LSL#5 ;R0=R1左移5位

arm指令中mov和ldr有什麽區別?, LDR偽指令和LDR指令及MOV指令的區別

ARM是RISC結構,資料從記憶體到CPU之間的移動只能通過L/S指令來完成,也就是ldr/str指令。

比如想把資料從記憶體中某處讀取到暫存器中,只能使用ldr

比如:

ldr r0, 0x12345678

就是把0x12345678這個地址中的值存放到r0中。

而mov不能幹這個活,mov只能在暫存器之間移動資料,或者把立即數移動到暫存器中,這個和x86這種CISC架構的晶片區別最大的地方。

x86中沒有ldr這種指令,因為x86的mov指令可以將資料從記憶體中移動到暫存器中。

另外還有壹個就是ldr偽指令,雖然ldr偽指令和ARM的ldr指令很像,但是作用不太壹樣。ldr偽指令可以在立即數前加上=,以表示把壹個地址寫到某暫存器中,比如:

ldr r0, =0x12345678

這樣,就把0x12345678這個地址寫到r0中了。所以,ldr偽指令和mov是比較相似的。只不過mov指令限制了立即數的長度為8位,也就是不能超過512。而ldr偽指令沒有這個限制。如果使用ldr偽指令時,後面跟的立即數沒有超過8位,那麽在實際匯編的時候該ldr偽指令是被轉換為mov指令的。

ldr偽指令和ldr指令不是壹個同東西。

ARM匯編中B跳轉指令和LDR跳轉的區別

說B指令能跳4G的,那實在是扯淡,B指令的編碼格式中bit[23:0],在匯編時會左移兩位擴充套件為26位有符號數,是表示要跳轉的地址相對於PC的偏移值,表示範圍為-2^25~2^25,也就是只能跳到相對於當前PC值偏移-32MB~+32MB的位置去,與地址絕對位置無關

javascript中如何載入freemark指令

freemarker執行在伺服器上,javascript執行在客戶端瀏覽器上。

freemarker的模板、巨集、函式指令等等都在伺服器上。等到javascript在客戶電腦的瀏覽器中解釋執行時,之前在伺服器上的freemarker早處理完了(伺服器處理完成才有response響應包括javascript指令碼程式碼本身發回到瀏覽器去)。

所以妳說javascript怎麽載入freemarker指令?就像用javascript可以呼叫EL表示式函式嗎?

ARM 指令

ARM7、ARM9核心都支援有ARM指令集和Thumb指令集,目前的ARM-Cortex M3核心是Thumb-2指令集。

對ARM核心而言相同的指令集是壹樣的,但是每個型號的ARM核心支援的指令集中的指令條數不壹樣,雖然是相同指令集,ARM9支援的指令可能比ARM7多,妳說的ST 三星什麽的是具體的晶片了,是半導體公司買了ARM IP核開發的具有他們公司特色的外設,核心支援的指令集是ARM公司定的而不是他們定的,所以只要是同系列的核心,指令是壹樣的

arm匯編中的偽指令是什麽意思?LDR、ADR之類的··

偽指令就是指不會被編譯成機器語言的命令,本身不會產生任何程式碼,但可以決定哪些程式碼會被該怎麽編譯,只是為了方便人與編譯器溝通的東西.

  • 上一篇:青島市即墨區高級技工學校都有什麽專業
  • 下一篇:如何用UG分模?
  • copyright 2024編程學習大全網