sorry, aber ich kapiere das irgendwie nicht!!! hier ist nochmal mein code:
;INT 0x67-0x06
_int0x67_ser0x06:
pusha
push ds
push es
mov eax,0x00
mov ax,cx
shl ax,3
add ax,0x12
shl eax,0x20
mov esi,eax
mov eax,0x10000
mov edi,eax
xor ax,ax
mov es,ax
mov ds,ax
mov ecx,0x40000
rep movsw
pop es
pop ds
popa
jmp _int0x67_end
;INT 0x67-0x07
_int0x67_ser0x07:
pusha
push ds
push es
mov eax,0x00
mov ax,cx
shl ax,3
add ax,0x12
shl eax,0x20
mov edi,eax
mov eax,0x10000
mov esi,eax
xor ax,ax
mov es,ax
mov ds,ax
mov ecx,0x40000
rep movsw
pop es
pop ds
popa
jmp _int0x67_end
diesmal in API-Fassung. das erste ist wieder mappen und das zweite dismappen. ich habe das mit dem registersparen eingebaut. ich habe die segmente auf 0x00 gestellt und die offsets mit den lineare adressen geladen. und ratet mal: ES geht WIEDER nicht... ich kapier das alles nicht. pork: hast du ICQ? da könntest du es mir vielleicht erklären. ich habe im moment eine GDT und zwar:
cseg: dd 0x0000FFFF, 0x00CF9800 ; code segment, 32-bit, 0 to 4GB
dseg: dd 0x0000FFFF, 0x00CF9200 ; data segment, 32-bit, 0 to 4GB
cs16: dd 0x0000FFFF, 0x00009800 ; code segment, 16-bit, 0 to 64KB
ds16: dd 0x0000FFFF, 0x00009200 ; data segment, 16-bit, 0 to 64KB
davon sind die 1. 2 für den adressraum über 1 MB und die 2. 2 für den 1 MB-Raum. in dem teil, das ich gelesen habe stand aber, dass man dem assembler mitteilen muss, wenn man 32 bit benutzt...
mfg
jN!