2017-07-29 135 views
3

我正在查看地址分配。代碼令人困惑的.align地址排列

00010004 <arr>: 10004: 10080402 .word 0x10080402 10008: 20 .byte 0x20 
00010009 <eoa>: 10009: 00 .byte 0x00 ... 
0001000c <start>: ... 

大會部分:

.section .text.ResetISR 
.align 
.global ResetISR 
.type ResetISR, %function 

ResetISR: 
    b start 

arr: 
    .byte 2, 4, 8, 16, 32 

eoa: 
    .align 

start: ... 

爲什麼在00010009做的EOA起始地址。它應該從0001000d開始,對吧?
爲什麼開始0001000c尋址內存而不是從0001000d

回答

3

EOA標籤將由.align指令填充開始
這意味着eoa標籤本身簡單地遵循以00010009h結束的5字節數組。

填充然後插入3空字節,將開始標籤3個字節進一步在0001000Ch。


應該從 「0001000d」 首發權?

我想你認爲.align指令在代碼(00010005h + 8 = 0001000Dh)中插入了固定數量的字節。
但是它所做的是將填充字節的計算數量以使代碼處的處於對齊的地址。

+0

直指點! :) –