проблема с переходом в реальный режим
Я пишу загрузчик. При загрузке ядра нужно переключиться в защищенный режим для копирования в память > 1 МБ, а потом обратно. Но после перехода обратно в реальный режим все ломается.
loadloop: *настройка для чтения с int 13h* *тут происходит копирование и переход в pm* mov eax, cr0 btr eax, 0 mov cr0, eax jmp 0:rm bits 16 rm: xor eax,eax mov ds, ax mov es, ax mov fs, ax mov gs, ax mov ss, ax mov sp, 0x7BFF sti sub ecx, SECTORS_PER_LOAD jz done %if TOTAL_SECTORS % SECTORS_PER_LOAD cmp ecx, SECTORS_PER_LOAD jb last %endif jmp 0:loadloop %if TOTAL_SECTORS % SECTORS_PER_LOAD Вот что было на первой итерации: 1: x/i $pc => 0x7e21: mov ah,0x42 2: $ecx = 255 (gdb) ni 0x00007e23 in ?? () 1: x/i $pc => 0x7e23: mov esi,0x168a7f6e 2: $ecx = 255 (gdb) ni 0x00007e26 in ?? () 1: x/i $pc => 0x7e26: mov dl,BYTE PTR [esi] 2: $ecx = 255 (gdb) ni 0x00007e2a in ?? () 1: x/i $pc => 0x7e2a: int 0x13 2: $ecx = 255 , а вот что на второй: 1: x/i $pc => 0x7e21: mov ah,0x42 2: $ecx = 128 (gdb) ni 0x00007e22 in ?? () 1: x/i $pc => 0x7e22: inc edx 2: $ecx = 128 (gdb) ni 0x00007e23 in ?? () 1: x/i $pc => 0x7e23: mov esi,0x168a7f6e 2: $ecx = 128 (gdb) ni 0x00007e24 in ?? () 1: x/i $pc => 0x7e24: outs dx,BYTE PTR ds:[esi] 2: $ecx = 128 (gdb) ni 0x00007e25 in ?? () 1: x/i $pc => 0x7e25: jg 0x7db1 2: $ecx = 128 (gdb) ni 0x00007e26 in ?? () 1: x/i $pc => 0x7e26: mov dl,BYTE PTR [esi] 2: $ecx = 128 (gdb) ni 0x00007e27 in ?? () 1: x/i $pc => 0x7e27: push ss 2: $ecx = 128 (gdb) ni 0x00007e28 in ?? () 1: x/i $pc => 0x7e28: std 2: $ecx = 128 (gdb) ni 0x00007e29 in ?? () 1: x/i $pc => 0x7e29: jge 0x7df8 2: $ecx = 128 (gdb) ni 0x00007e2a in ?? () 1: x/i $pc => 0x7e2a: int 0x13 2: $ecx = 128 После прерывания программа просто зависает и EIP становится странный. Я сравнивал дампы этой области памяти до и после переключения в реальный режим, они были одинаковые. Подскажите, что делать?
Источник: ru.stackoverflow.com — ru.stackoverflow.com/questions/1616349/%D0%BF%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D0%B0-%D1%81-%D0%BF%D0%B5%D1%80%D0%B5%D1%85%D0%BE%D0%B4%D0%BE%D0%BC-%D0%B2-%D1%80%D0%B5%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9-%D1%80%D0%B5%D0%B6%D0%B8%D0%BC