2017-07-29 2 views
3

Ich schaute auf die Adresszuordnungen.Confusing .align Adressenanordnung

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

Assembly Teil des Codes:

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

ResetISR: 
    b start 

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

eoa: 
    .align 

start: ... 

Warum die Adresse eoa Start bei 00010009. Es sollte bei 0001000d beginnen, richtig?
Warum beginnt Adresse den Speicher von 0001000c und nicht von 0001000d?

Antwort

3

Am eoa Label wird die Polsterung durch die .align Richtlinie starten.
Das bedeutet, dass die eoa Bezeichnung selbst einfach dem 5-Byte-Array folgt, das bei 00010009h endete.

Das Padding fügt dann 3 Nullbytes ein und setzt das Start Label 3 Bytes weiter auf 0001000Ch.


Es sollte von "0001000d" rechts beginnend werden?

Ich glaube, Sie glauben, dass die .align Richtlinie eine feste Menge an Bytes im Code einfügt (00010005h + 8 = 0001000Dh).
Was es jedoch tut ist Einfügen eine berechnete Anzahl von Füllbytes zu haben folgenden Code bei einer ausgerichteten Adresse.

+0

Auf den Punkt! :) –