當前位置:聚美館>智慧生活>心理>

arm中mov和mov32的區別

心理 閱讀(2.27W)
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位