在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只能在暫存器...