symbol-Tabelle und-Standortwechsel-Tabelle im Objekt-Datei
Was ich verstehen, die Anweisungen und Daten in einer Objekt-Datei, in der alle Adressen enthalten. Ersten Datenelement beginnen bei Adresse 0 und der ersten Anweisung beginnen bei Adresse 0.
Den Standortwechsel-Tabelle enthält Informationen über Anweisungen, die aktualisiert werden müssen, wenn die Adressen in der Datei ändern, zum Beispiel, wenn die Datei verknüpft ist, zusammen mit einem anderen. Die Linie A, im Beispiel unten, wäre in der relocation Tabelle. Ich glaube nicht, dass B wäre in der relocation Tabelle, da die Adresse des label "gleich" ist relativ zu B, und Sind diese die richtigen Annahmen?
Ich weiß, das symbol Tabelle anzeigen die Etiketten der Datei haben und auch labels, die noch nicht gelöst worden. Aber was bedeutet das symbol Tabelle enthalten?
Auch, wenn der assembler übersetzt die Anweisungen, um binäre, was ist gelegt, in denen die Anweisungen die nicht aufgelösten Referenzen?. B in diesem Beispiel.
.data
TEXT: .asciiz "Foo"
.text
.global main
main:
li t0, 1
beq t0, 1, equal #B
equal:
la a0, TEXT
jal printf #A
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, deine Annahmen sind korrekt. Es gibt verschiedene Arten von Umzügen, was die assembler-strahlt in den Unterricht hängt von dem Typ. In der Regel ist es ein offset Hinzugefügt werden. Sie können
objdump -dr
zu sehen, Umzüge. Für eine bessere Veranschaulichung habe ich geändert, dein code ein wenig:Ausgabe von objdump:
Als Sie sagte, es ist kein Umzug für die
beq
da, das ist eine relative Adresse innerhalb dieser Objekt-Datei.Den
bne
ich Hinzugefügt (Zeile, gekennzeichnet mitC
) verweist auf ein externes symbol, so dass, obwohl die Adresse ist relativ zu einer Verlagerung Eintrag benötigt. Es wird der TypR_MIPS_PC16
zu produzieren, ein 16 bit signed word offset-symbolfoo
. Die Anleitung Kodierung erfordert den Versatz von dem nächsten Wort und nicht die aktuellePC
, dass der Umzug verwendet,1
abgezogen, und das ist codiert als 2 ergänzenffff
in der Instruktion selbst.Den
la
pseudoinstruction übersetzt worden ist, durch den assembler in einenlui
/addiu
pair (letzteres im delay slot desjal
). Für dielui
eineR_MIPS_HI16
Umzug ist gegen die.data
Abschnitt die füllen in die oberen 16 bits. Da das symbolTEXT
ist unter der Adresse4
im.data
Abschnitt, den oberen 16 bit der offset sind0
. Dies bedeutet, dass die Anweisung enthält0
offset. Auch für die niedrigen 16 bits, es sei denn, die Anweisung enthält einen offset von4
.Schließlich die
jal printf
ist die Verwendung noch eine andere Art von Umzug, der zugeschnitten ist für die Kodierung, die vom Befehl benötigt. Der offset ist gleich null, weil der Sprung direkt auf das referenzierte symbol. Beachten Sie, dass objdump versucht, hilfsbereit zu sein mit der Entschlüsselung, aber es nicht verarbeiten, der Umzug, so die<main>
es gibt ist natürlich Unsinn.TEXT
hat die Adresse 4.main
ist global, das sollte das exportiert nur den Eintrag in der Symboltabelle mit Adresse0
im.text
Abschnitt. Die Tabelle listet auch die 2 externen Symboleprintf
undfoo
, plus all die einheimischen, wenn Sie nicht ausgezogen. Die Adressen sollten offensichtlich sein, aus der Liste I vorgesehen.