adr,adrl和ldr指令的用法比較

2021-04-26 13:27:30 字數 1041 閱讀 4460

adr

這是一條小範圍的位址讀取偽指令,它將基於pc的相對偏移的位址值讀到目標暫存器中。

使用的格式:adr register,exper。

在編譯源程式時,彙編器首先計算出當前pc到exper的偏移值#offset_to_exper,然後會用一條add或者sub指令來替換這條偽指令,例如:add register,pc,#offset_to_exper。

注意,標號exper與指令必須在同一**段。

adrl:

這是一條中等範圍的位址讀取偽指令,它將基於pc的相對偏移的位址值讀到目標暫存器中。

使用的格式:adrl register,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...