hallo,
ich mache gerade meine speicherverwaltung im FRM (flat real mode) und bin dabei, dass mit banks zu machen. die erste bank ist ab 0x120000 linear, und jede bank ist 0x80000 bytes lang. alle banks sind hintereinander. ich habe jetzt funktionen geschrieben, um diese banks zu mappen, bzw. dismappen:
mappen:
dismappen:
allerdings verstehe ich nicht, warum das nicht funktioniert... ich hoffe mir kann jemand helfen, danke!
ich mache gerade meine speicherverwaltung im FRM (flat real mode) und bin dabei, dass mit banks zu machen. die erste bank ist ab 0x120000 linear, und jede bank ist 0x80000 bytes lang. alle banks sind hintereinander. ich habe jetzt funktionen geschrieben, um diese banks zu mappen, bzw. dismappen:
mappen:
Code: [Auswählen]
pusha
push ds
push es
[BITS 32]
mov eax,0x00
[BITS 16]
mov ax,cx ;offset berechnen, indem man die page in CX mit der länge
mov bx,0x08 ;multipliziert
mul bx
add ax,0x04 ;dann noch 0x04 dazuaddieren, wg. start bei 0x120000
[BITS 32]
shl eax,0x20 ;um 5 stellen nach links verschieben
mov ds,eax ;leseregister stellen
mov eax,0x1000 ;schreiberegister auf framebase stellen
mov es,eax
xor si,si
xor di,di
mov ecx,0x40000 ;0x80000 bytes = 0x40000 words lesen
rep movsw
[BITS 16]
pop es
pop ds
popa
dismappen:
Code: [Auswählen]
pusha ;kommentare wie beim mappen, außer es und ds
push ds ;beim kopieren vertauscht, um vom frame in die page zu
push es ;schreiben
[BITS 32]
mov eax,0x00
[BITS 16]
mov ax,cx
mov bx,0x08
mul bx
add ax,0x04
[BITS 32]
shl eax,0x20
mov es,eax
mov eax,0x1000
mov ds,eax
xor si,si
xor di,di
mov ecx,0x40000
rep movsw
[BITS 16]
pop es
pop ds
popa
allerdings verstehe ich nicht, warum das nicht funktioniert... ich hoffe mir kann jemand helfen, danke!

Übersicht
Wiki
Hilfe
Suche
Einloggen
Registrieren
Drucken


Gespeichert
) mit einem offset. in ds und es kommen nur selektoren. in esi und edi kommen die offsets.