Okay, jetzt wird der Code ausgefuehrt, macht aber ein paar Zicken, sobald ich in den RM springe.
Hier ist mal der Code:
.code16gcc
int_e820:
xor %ebx, %ebx
xor %bp, %bp
mov $0x8004, %eax
mov %eax, %edi
mov $0x0534D4150, %edx
mov $0xe820, %eax
mov $24, %ecx
int $0x15
jc exit
cmp %eax, %edx
jnz exit
cmp %ebx, 0x0
jz exit
jmp check
loop:
mov $0x1, %eax
mov %eax, 0x14(%edi)
mov $24, %ecx
int $0x15
jc exit
mov $0x0534D4150, %edx
check:
jcxz bad_entry
cmp %cl, 20
jbe check_length
mov 20(%edi), %ecx
test $0x1, %ecx
je bad_entry
check_length:
mov 0xc(%edi), %ecx
or 0x8(%edi), %ecx
jz bad_entry
inc %bp
add 24, %edi
bad_entry:
test %ebx, %ebx
jne loop
exit:
mov %bp, (0x8000)
clc
mov %cr0, %eax
or 0x1, %eax
mov %eax, %cr0
push $0x8
push $goback
retf
In den RM springe ich, indem ich einfach das PM-Bit loesche.
Sollte doch funktionieren, oder?