Liebe Leute,
das folgende Minimalbeispielprogramm soll mein Problem mit DOS und COM
Dateien zeigen.
Es soll in **label0** das Code Segment mit 0x10 multipliziert werden um
dann mit einem **retf** angepasst zu werden,
sodass der Offset von 0x100 der COM Datei zu 0 wird. Leider funktioniert
das nicht, warum?
1 | jmp label0
|
2 | label1:
|
3 | mov ax, cs
|
4 | mov es, ax
|
5 | mov ss, ax
|
6 | mov ds, ax
|
7 | xor sp, sp
|
8 | mov ax, 0xE40
|
9 | xor bx, bx
|
10 | int 0x10
|
11 | jmp $
|
12 | label0:
|
13 | mov ax, cs
|
14 | mov ss, ax
|
15 | xor sp, sp
|
16 | mov cl, 0x4
|
17 | shl ax, cl
|
18 | ;mov ax, 0x7C0
|
19 | push ax
|
20 | mov ax, label1
|
21 | push ax
|
22 | times 0x1fe-$+$$ db 0
|
23 | dw 0xaa55
|
**label1** gibt ein @ aus um den Erfolg zu zeigen.
Der Kommentar macht die Datei mit **qemu** bootbar.
Getestet habe ich mit **nasm** und **dosbox**.
Vielen lieben Dank