adr:
這是一條小範圍的位址讀取偽指令,它將基於pc的相對偏移的位址值讀到目標暫存器中。
使用的格式:adr register,exper。
在編譯源程式時,彙編器首先計算出當前pc到exper的偏移值#offset_to_exper,然後會用一條add或者
sub指令來替換這條偽指令,例如:add register,pc,#offset_to_exper。
注意,標號exper與指令必須在同一**段。
在編譯源程式時,彙編器會用兩條合適的指令來替換這條偽指令。
例如:
add register,pc,offset1
add register,register,offset2
與adr相比,它能讀取更大範圍的位址。
注意,標號exper與指令必須在同一**段。
ldr:
第一種情況:
當ldr用做arm指令時,它將基於pc的相對偏移位址處儲存的值讀到目標暫存器中。
應用格式:ldr register,[expr]
第二種情況:
當ldr用做arm偽指令時,它用於大範圍的位址讀取。
其實說它用於大範圍的讀取,還不如說它用於大範圍的位址賦值。我們來看一下這條偽指令的應
用格式:ldr register,=expr/label_expr ,顯然,我們可以直觀的看出,指令的目的就是要將expr或label_expr賦值(=)給register.所以在編譯時,當expr或label_expr的值沒有超出mov和mvn的範圍時,採用mov或mvn指令來代替這條偽指令就顯得理所當然了。當expr或label_expr的值超出mov和mvn的範圍時,彙編器將expr或label_expr放入文字池中,並使用一條程式相對偏移指令ldr從文字池讀出常量。例如:ldr register,[pc,#offset to literal pool]。 adr,adrl和ldr指令的用法比較
adr 這是一條小範圍的位址讀取偽指令,它將基於pc的相對偏移的位址值讀到目標暫存器中。使用的格式 adr register,exper。在編譯源程式時,彙編器首先計算出當前pc到exper的偏移值 offset to exper,然後會用一條add或者sub指令來替換這條偽指令,例如 add re...
LDR指令和LDR偽指令
arm指令集中,ldr通常都是作載入指令,但是它也可以作偽指令。初學者一般不會注意到它們的區別,其實在嵌入式開發過程中,這兩條指令時非常常用的!我們應該了解他們的區別。ldr偽指令的形式是 ldr rn,expr 作用是裝在乙個32bit常數和乙個位址到暫存器。下面舉乙個例子來說明它的用法。coun...
LDR指令和LDR偽指令的區別
arm指令集中,ldr通常都是作載入指令,但是它也可以作偽指令。初學者一般不會注意到它們的區別,其實在嵌入式開發過程中,這兩條指令時非常常用的!我們應該了解他們的區別。ldr偽指令的形式是 ldr rn,expr 作用是裝在乙個32bit常數和乙個位址到暫存器。下面舉乙個例子來說明它的用法。coun...