T
Original erstellt von pAngel:
1. Wo sind die "h"s, wie bei "mov ah, 4CH**" oder "int 21h"?
**
Ich tippe mal Debug nimmt einfach ALLES als Hex-zahlen an (ohne Garantie)
**
2. Ich werde aus folgender Erklärung nicht schlau:
Der Sprungbefehl mit Adresse benötigt 2 Byte im Speicher. Überspringen wollen wir den String "Hallo Welt!", "$". Dafür brauchen wir noch einmal 13 Byte. Der Befehl MOV AH, 09H könnte erst im 14 Byte abgespeichert werden. Da müssen wir mit dem JMP Befehl hinspringen.
Eigentlich ist das alles was mich etwas verwirrt.**
Naja, du hast alles in einem Segment, also musst du ja auch die Daten irgendwo lassen. Da du die Daten ja nicht als Code ausführen lassen willst, musst du dir was überlegen, die Daten zu überspringen, ein jmp ist da sichelrich hilfreich. Weiterhin fängt der code in COM-Dateien immer bei 0x0100 an. Jetzt musst du nur einen Sprung konstruieren, der Exakt ihnter deinen String geht.
Adresse
0100 jmp xxxx
aaaa "Hallo, Welt!$"
xxxx mov AH, 9
Jetzt musst du nur herausfinden, welche Adresse xxxx ist, da mit du da hinspringen kannst. Der relative Sprungbefehl ist 2 Bytes lang, also können wir einfügen:
Adresse
0100 jmp xxxx
0102 "Hallo, Welt!$"
xxxx mov AH, 9
Wenn du jetzt nachzählst, ist der String 13 Zeichen lang. Also weiter:
Adresse
0100 jmp 010F
0102 "Hallo, Welt!$"
010F mov AH, 9
und siehe da, fertig
Das Problem ist halt, dass debug keine Labels etc. unterstützt und man die ganze Adressberechnung selber machen muss.