arm中mov和mov32的區別
1、兩者含義不同
Mov只能在寄存器之間移動數據,或將立即數移到寄存器中。x86中沒有LDR指令,因為x86的MOV指令可以將數據從內存移動到寄存器,但也有LDR偽指令。
儘管LDR偽指令與arm的LDR指令非常相似,但它們具有不同的功能,LDR偽指令可以在immediate之前加=來指示地址已寫入寄存器。
2、兩者功能不同
Mov為寄存器分配立即數,但需要立即數範圍,它只能是8位連續有效位通過偶數移位得到的數。如果立即數超出此範圍,則無法使用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位