Irgendwie habe ich den Eindruck, wir reden aneinander vorbei.
nur der Linker muss wissen, wohin der Code letztendlich soll.
Eben. Einer muß es wissen. Dabei ist es egal, wo diese Angabe steht: in der Assemblerdatei oder der Linkerdatei. Nur bei einer Linkerdatei muß man eben noch eine zusätzliche Datei erzeugen. Für meinen Geschmack nicht einfacher, sondern umständlicher.
Ich will es aber in der Regel nicht für jedes einzelne Modul wissen!
Solltest Du aber. Denn nur dadurch weißt Du am Ende, welchen Platz Dein Programm im Speicher belegt, kannst danach den Speicher besser ausnutzen und beim Debuggen im Monitor Dein Programm verfolgen. Natürlich heißt das nicht, daß Du für jedes Modul getrennt angeben mußt, wo es hinkommen soll, denn die Module werden ja einfach aneinandergehängt. und da reicht zunächst (sofern keine große Speicherfragmentierung vorliegt) eine einmalige Angabe der Ladeadresse zu Beginn des Codes.
Klar könnte ich hingehen und allen Code per .include schon vor dem Assemblieren zusammenbauen
Ganz genau. Darum geht es. Und was die Segmente anbelangt, so sind diese keine primäre Eigenschaft des Linkers, sondern des Assemblers. Natürlich wird man auch ohne Linker ein Programm in einzelne Segmente zerlegen, z. B. für die Zeropage oder den nicht-initialisierten Datenbereich. Ein Linker wird dafür nicht benötigt.
es macht auch alles global, also müssen z.B. Labels über verschiedene Module eindeutig sein
Da es hier ja um Style geht: In einem Assemblerprogramm sollten alle Label stets eindeutig sein. Daher ist es üblich, globale Labels nur für Module (Bibliotheken/Klassen...) zu verwenden und für Unterroutinen, Variablen etc lokale Labels. Für Sprungmarken innerhalb von Unterroutinen bieten sich je nach Assembler entweder Mikes Methode (".label_02"), anonyme Labels (-, +) oder drittlevel-Bezeichner ("?01", "!01" usw.) an. Sollte jemals ein Label mit einem anderen kollidieren, hat man einen Fehler im Programm.
ich kann leicht aus Versehen in den privaten Daten eines anderen Moduls herumpfuschen.
Aus Versehen sicherlich nicht. Kann ich mir bei Dir nicht ernsthaft vorstellen. Dafür hast Du zuviel Programmiererfahrung. Das Herumpfuschen in fremden Modulen ist bekanntlich mehr als schlechter Stil. Assembler ist eine Sprache für Leute, die wissen, was sie tun, und dazu gehört auch ausreichende Selbstdisziplin, ansonsten bekommt man früher oder später Probleme, so oder so.
Wenn ich das jetzt richtig verstanden habe, ist das einzige Argument, das für den Einsatz eines Linkers spricht, die Kapselung von Bezeichnern, die man als Assemblerprogrammierer aber ohnehin vornehmen sollte auch ganz ohne Zwang. Als nachteilig für den Einsatz eines Linkers sehe ich hingegen das Fehlen eines kompletten Assemblerlistings, d. h. vollständiger Code mit Adreßangabe sowie tabellarische Auflistung aller Variablen und Adressen, damit man beim Debuggen sich schnell orientieren und Programm und Werte vergleichen kann. Für mich persönlich kann ich daher keinen Vorteil in der Verwendung eines Linkers erkennen, eher Nachteile: zusätzliche Konfigurationsdateien, mehr Aufwand beim Buildprozeß und kein vollständiges Listing zur Kontrolle.