isams » 02 ноя 2013, 14:25
Добрый день уважаемые форумчане. Попытаюсь объяснить суть проблемы:
Задача: нужно записать данные на диск.
Использую прерывание 13h и функцию 03h и никаких проблем нет когда вызываю его из реального режима.
Проблема появляется при переходе из защищенного режима в реальный - устанавливаю сегментные регистры в 0, но вот после вызова прерывания переходит на выполнение команды jmp FAAE0. В этом месте при вызове без перехода из защищенного джампает по адресу AAE0, а вот при переходе прыгает по адресу 1AAE0. непонятно почему так происходит. Код привожу:
pusha
mov eax, cr0
and al, 0FEh
call $+5
pop ecx
add ecx, 0Bh
push 0
push ecx
mov cr0, eax
retf
mov ax, 700h
mov es, ax
mov ax, 0301h
mov cx, 12
mov dx, 0080h
mov bx, 0С00h
sti
int 13h; вот тут проблема при переходе из защищенного в реальный режим.
Подскажите пожалуйста в чем может быть проблема. Я с ассемблером недавно начал знакомиться, скажите хотя бы куда копать.
Добрый день уважаемые форумчане. Попытаюсь объяснить суть проблемы:
Задача: нужно записать данные на диск.
Использую прерывание 13h и функцию 03h и никаких проблем нет когда вызываю его из реального режима.
Проблема появляется при переходе из защищенного режима в реальный - устанавливаю сегментные регистры в 0, но вот после вызова прерывания переходит на выполнение команды jmp FAAE0. В этом месте при вызове без перехода из защищенного джампает по адресу AAE0, а вот при переходе прыгает по адресу 1AAE0. непонятно почему так происходит. Код привожу:
pusha
mov eax, cr0
and al, 0FEh
call $+5
pop ecx
add ecx, 0Bh
push 0
push ecx
mov cr0, eax
retf
mov ax, 700h
mov es, ax
mov ax, 0301h
mov cx, 12
mov dx, 0080h
mov bx, 0С00h
sti
int 13h; вот тут проблема при переходе из защищенного в реальный режим.
Подскажите пожалуйста в чем может быть проблема. Я с ассемблером недавно начал знакомиться, скажите хотя бы куда копать.