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位