GNU彙編中 word偽指令的理解

2021-07-29 17:33:31 字數 1182 閱讀 8980

在u-boot中遇到_armboot_start、_bss_start等這些變數,這些偽指令的用法涉及以下知識

在start.s中

_text_base: 

.word text_base /*uboot映像在sdram中的重定位位址,我設定為0x33e00000 */ 

.globl _armboot_start 

_armboot_start: 

.word _start /*_start是程式入口,鏈結完 畢它的值是0x33e00000 =text_base*/ 

在u-boot.s中找到以下語句

33e00000 <_start>:

33e00000: ea000013 b 33e00054

_start的值是33e00000,這個位址上儲存的指令是b reset

_armboot_start:

.word _start

對應反彙編結果

33e00048 <_armboot_start>:

46 33e00048: 33e00000 .word 0x33e0000047

這句話的意思是在_armboot_start標號處,儲存了

ldr r1, _armboot_start

ldr r2, _start

r1是33e00048,r2是0x33e00000---彙編中對標號的引用,是絕對引用,就是標號的位址本身

.globl _bss_start

_bss_start:

.word __bss_start

按照上面的理解,__bss_start是uboot 的bss段起始位址,那麼u-boot映像的大小就是__bss_start - _start;在relocate**段中計算u-boot的大小時,也體現了這一點。 

monitor_flash_len = _bss_start - _armboot_start

這句話中對_armboot_star的引用,實際上是把它用作了指標值,即0x33e00000,monitor_flash_len就得到u-boot的長度(包括**段,資料段)

簡單的可理解為

_armboot_start---c語言中引用的值是0x33e00000

_armboot_start---彙編中引用得到的值是b reset

0

給主人留下些什麼吧!~~

gnu下的arm彙編偽指令 word說明

說說這個.word的作用。word expression 就是在當前位置放乙個 word 型的值,這個值就是 expression 舉例來說,rwtcon word 0x15300000 就是在當前位址,即 rwtcon 處放乙個值 0x15300000 翻譯成intel 的彙編語句就是 rwtco...

GNU ARM中的彙編指令 word

gnu arm中的彙編 指令.word 彙編中的標號通常情況下是用來標明程式段的起始位址的,如 start b reset ldr pc,undefined instruction ldr pc,software interrupt ldr pc,prefetch abort ldr pc,data...

ARM彙編中LDR偽指令和LDR指令

arm是risc結構,資料從記憶體到cpu之間的移動只能通過l s指令來完成,也就是ldr str指令。比如想把資料從記憶體中某處讀取到暫存器中,只能使用ldr比如 ldr r0,0x12345678 就是把0x12345678這個位址中的值存放到r0中。而mov不能實現這個功能,mov只能在暫存器...