Textsegment

enthält Sprünge, die noch nicht ausgefüllt werden können, da Adresse von count()/print() nicht bekannt (Platzhalter: 0)

Stringtabelle:

enthält alle „sichtbaren“ Symbole (Namen von exportierten/importierten Prozeduren bzw. Datenstrukturen)

  • jeweils durch Nullbytes abgeschlossen
  • ermöglicht feste Länge von Symboltabelleneinträgen trotz variabler Stringlänge

Symboltabelle:

enthält Eintrag für jedes „sichtbare“ Symbol, bestehend aus:

  • Name des Symbols durch Verweis auf Startbyte in Stringtabelle
  • Typ (+Adresse):
    • Text (Im Textsegment an angegebener Adresse definiert; hier: 0)
    • Data (Im Datensegment an angegebener Adresse definiert)
    • UNDEFINED (Extern definiert, muss noch dazu gebunden werden; hier: count/print)

Text/Data Relocation Tabelle:

enthält Relocation-Information für den Linker

  • Eintrag im Text-/Daten-Segment, der noch mit richtiger Adresse versehen werden muss
    (hier: Instruktionen an Adressen 12 und 16 ⇒ call count/print)

  • Angabe des zu ersetzenden Symbols über Verweis auf entsprechenden Symboltabelleneintrag
    (hier: count ⇒ 1, print ⇒ 2)

  • Angabe eines „Modus“, wie nachfolgende Adressinfo umgesetzt werden soll
    (hier: „WDISP30“ ⇒ spezielle Form der pc-relativen Adressierung)

  • Angabe eines „Adressmodifizierers“
    (hier: pc befindet sich auf Adresse 12 bzw. 16, wenn Sprung erfolgt)
    ⇒ Adresse = Adr(count) – Adr(main) – 12
    *(Bei Instruktion „call count“ einzutragende pc-relative Sprungadresse zu count ⇒ muss der Linker ausrechnen)