also, dieser code soll den speicher außerhalb des 1MB-Rahmens des RM messen:
er soll also jedes byte schreiben, wieder lesen, schauen ob das ergebniss gleich dem geschriebenen ist, und fortfahren, solange, bis er was falsches (warsch. 0) zurückbekommt, d.h. den speicher nichtmehr ansprechen kann. dann soll er esi dekrementieren, weil das ja schon eine zelle weiter ist, und da das falsche gefunden hat, und es dann in eax schieben. eax wird dann mithilfe von ebx durch 0x100000 geteilt, um die MB zu erhalten. am ende werden die register wieder richtig gestellt, um das dann in die variable "ram" zu kopieren.
jetzt zu meinem problem: der code geht nicht (was ein wunder
)
bei BOCHS kommt immer: RIP > CS.limit
kennt sich da jemand aus? danke!
Code: [Auswählen]
mov eax,0x100000
mov ds,eax
mov es,eax
xor esi,esi
xor edi,edi
check_ram_loop:
mov al,0x80
stosb
xor al,al
lodsb
cmp al,0x80
je check_ram_loop
dec esi
mov eax,esi
mov ebx,0x100000
div ebx
mov eax,0x50
mov ds,eax
mov es,eax
add [ram],eax
er soll also jedes byte schreiben, wieder lesen, schauen ob das ergebniss gleich dem geschriebenen ist, und fortfahren, solange, bis er was falsches (warsch. 0) zurückbekommt, d.h. den speicher nichtmehr ansprechen kann. dann soll er esi dekrementieren, weil das ja schon eine zelle weiter ist, und da das falsche gefunden hat, und es dann in eax schieben. eax wird dann mithilfe von ebx durch 0x100000 geteilt, um die MB zu erhalten. am ende werden die register wieder richtig gestellt, um das dann in die variable "ram" zu kopieren.
jetzt zu meinem problem: der code geht nicht (was ein wunder
)bei BOCHS kommt immer: RIP > CS.limit
kennt sich da jemand aus? danke!

Übersicht
Wiki
Hilfe
Suche
Einloggen
Registrieren
Drucken


Gespeichert