Speichergröße ermitteln
-
Ich habe diesen Code hier getestet:
http://www.jay-code.de/scripts/htmlgenerator.php?page=getmemsize&directory=asm_codeglobal _GetMemSize _GetMemSize: push ebp mov ebp, esp push eax push edx mov eax, 0 ;EAX ist Zähler für die MBs mov edx, 0x1EFFFC ;EDX auf 3 Bytes vor die 2 MB Grenze setzen .1: inc eax mov DWORD [edx], 0xAAAAAAAA ;0xAAAAAAAA an die Speicherstelle schreiben mov ebx, [edx] ;Speicherstelle wieder lesen add edx, 0x100000 ;Adresse um 1 MB erhöhen cmp ebx, 0xAAAAAAAA ;Stimmt gelesener Wert mit dem geschriebenen überein? je .1 pop edx pop eax mov esp, ebp pop ebp ret
und mit
printformat("Physikalischer Speicher: %d MB \n", GetMemSize() );
(PrettyOS) aufgerufen. Da kam bei mir auf einer 2 GB Maschine
Physikalischer Speicher: 41616 MB
heraus, was über 40 GB entsprechen würde. Wo liegt der Fehler?
-
Vielleicht weil du eax wieder vom Stack popst, zum Ende hin?
-
Mit
pop edx ;pop eax mov esp, ebp pop ebp ret
kommen nur noch 32 MB heraus.
-
Erhard Henkes schrieb:
Mit
pop edx ;pop eax mov esp, ebp pop ebp ret
kommen nur noch 32 MB heraus.
Na, is doch schon wesentlich realistischer!
-
Waere es nicht einfacher und sicherer, das BIOS nach der Speichergroesse zu befragen? (zB. die beruehmt-beruechtigte e820-map: http://www.google.de/search?q=BIOS+memory+map)
-
Ich wollte das im Protected Mode abfragen.
Na, is doch schon wesentlich realistischer!
Toll.
-
solange du die data area des bios nicht überschrieben hast mit bootloader oder kernel, kannst du auch sie noch im pm abrufen...
ist sicherlich der berste weg das ganze zu machen, und sicherlich auch der zuverlässigste