Beiträge anzeigen

Diese Sektion erlaubt es dir alle Beiträge dieses Mitglieds zu sehen. Beachte, dass du nur solche Beiträge sehen kannst, zu denen du auch Zugriffsrechte hast.


Nachrichten - gäppeldonger

Seiten: [1]
1
Lowlevel-Coding / Re: Problem mit E820h
« am: 28. June 2009, 17:32 »
Ich kann mir nicht vorstellen, dass NASM da was falsch macht. :-D

Vorallem, hatte ich dieses Problem erst bei dieser Funktion, während ich z.B. bei VBE ("VESA"), BIOS32 Service Directory ("_32_") und PCI ("$PCI") dieses Problem nicht hatte.
Alle drei Signaturen sind so gespeichert, sodass das erste Char im niederstwertigen Byte und das letzte Char im höchstwertigen Byte sitzt. Sprich, die Signaturen werden als 32-bit Integer behandelt, nicht als 8-bit String (wie bei "SMAP")...
2
Lowlevel-Coding / Re: Problem mit E820h
« am: 26. June 2009, 03:08 »
Oh, auf den Gedanken bin ich garnicht gekommen, obwohl ich mit dem Endian-Problem bereits zuvor mit meiner Prozedur zur Ausgabe des Registerinhalts zutun hatte.

SMAP durch PAMS ersetzt und siehe da, es steht WIN... Vielen Dank! :mrgreen:

Aber warum werden in vielen Beschreibungen die ASCII-Strings benutzt, wenn in x86 doch wieder alles verkehrt rum interpretiert wird - und diese BIOS-Funktionen werden obendrein nur in x86 benutzt?
3
Lowlevel-Coding / Problem mit E820h
« am: 26. June 2009, 00:14 »
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
Seiten: [1]

Einloggen