Es ist mir gelungen, separate Stack-, Daten-und Code-Segmente unter TASM mit der SEGMENT
Direktive zu erstellen, aber etwas stört mich noch. Wenn der folgende Code mit Turbo Assembler 2.0 assembliert wird, erzeugt TLINK eine Binärdatei, deren Größe in der Nähe von 90 KB liegt.Zuordnung von Stack und Daten in einem Real-Modus MZ .exe unter Turbo Assembler 2.0
.286
myStack segment para stack 'stack'
db 0FFFFh dup (?)
ends myStack
myData segment para 'data'
msg db 'Memes!$'
db 7FFFh dup (?)
ends myData
myCode segment para 'code'
assume cs:myCode
assume ss:myStack
start:
mov ax,myData
mov ds,ax
push offset msg
call write
add sp,2
mov ah,4ch
int 21h
write:
push bp
mov bp,sp
mov dx,[bp+4]
mov ah,9h
int 21h
pop bp
ret
ends myCode
end start
Nun scheint es mir, dass das MZ-Dateiformat eine Exe ermöglichen sollte festlegen, dass es Speicherzuweisung über erfordert, was in dem binären Bild tatsächlich enthalten ist (über die min/max Absätze Speicher zusätzlich zugewiesen zu dem Code-Größeneintrag ich rate).
Also meine Frage ist: wie koaxiert man den Assembler/Linker in eine .exe mit der entsprechenden Kopfzeile für die Zuweisung von Speicher zu generieren, ohne direkt Platzhalter Werte in das Binärbild aufzunehmen?
Das funktionierte. Lustig ist, dass ich es vor ein paar Stunden selbst ausprobiert habe und der Assembler sich über unbekannte Symbole für die Segmentnamen beschwert hat! Ich schwöre, es war genau das gleiche wie Ihres, aber selbst mit dem/m2 Multipass-Schalter würde es nicht zusammenbauen. Seltsam. – chili
@chili Möglicherweise haben Sie die Segmente ** nach ** 'Endstart' verschoben anstatt vorher? –
Ich denke du magst Recht haben, o Danke, Mann! – chili