Nachdem ich schon lange in der tiefsten Softwareebene rumbuddeln wollte, habe ich nach längeren Übungen mit C und einigen Lektüren über Assembler beschlossen, ans Eingemachte zu gehen.
Laut versch. Dokumentationen soll die BIOS-Funktion INT 15h, AX=E820 von jedem neueren Computer unterstützt werden. Ich bekomme aber immer nach dem Aufruf ein gesetztes Carry-Flag.
Bochs scheint es noch nicht zu unterstützen (so schreibt er's zumindest immer in sein Log), ein älteres Board mit P4 und ein ganz neues mit Dual Core spucken das gleiche Ergebnis aus.
Wo ist der Fehler?
P.S.: Ich lade dieses kleine Programm direkt als Bootsektor von der Diskette...
[BITS 16]
[ORG 0]
mov ax, 7C0h
mov ds, ax
mov ax, 500h
mov es, ax
xor di, di
mov eax, 0E820h
xor ebx, ebx
mov ecx, 20
mov edx, 'SMAP'
int 15h
jc failed
mov edx, 'WIN '
jmp short weita
failed:
mov edx, 'FAIL'
weita:
call printEdx
ende:
xor ah, ah
int 0x16
int 0x19
printEdx:
push ebx
push eax
mov ah, 0Eh
mov bx, 07h
mov al, dl
int 10h
mov al, dh
int 10h
shr edx, 16
mov al, dl
int 10h
mov al, dh
int 10h
pop eax
pop ebx
ret
TIMES 510-($-$$) db 0x00
dw 0xAA55