прерывание int 13h не отрабатывает - переходит по неправильному адресу

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: прерывание int 13h не отрабатывает - переходит по неправильному адресу

Re: прерывание int 13h не отрабатывает - переходит по неправильному адресу

somewhere » 03 ноя 2013, 20:40

что значит "проверить"? Программу кто писал?

Re: прерывание int 13h не отрабатывает - переходит по неправильному адресу

isams » 03 ноя 2013, 20:37

somewhere писал(а):IDTR и IDT как выглядят? как инициализировали?

Вот про это я и хотел просить: как мне это можно проверить?

Re: прерывание int 13h не отрабатывает - переходит по неправильному адресу

somewhere » 03 ноя 2013, 20:33

IDTR и IDT как выглядят? как инициализировали?

Re: прерывание int 13h не отрабатывает - переходит по неправильному адресу

isams » 03 ноя 2013, 20:27

isams писал(а):Сегментные регистры равны 0000, кроме ES - он равен 700 т.к. буфер задается для int 13.

Ну вернее я их сам зануляю:
xor eax,eax
mov ds,ax
... и т.д. со всеми регистрами.

Re: прерывание int 13h не отрабатывает - переходит по неправильному адресу

isams » 03 ноя 2013, 20:19

Еще читал про таблицу векторов прерывания, может ли быть ситуация, что адрес обработчика был изменен для прерывания int 13? Если да, то как это можно проверить?

Re: прерывание int 13h не отрабатывает - переходит по неправильному адресу

isams » 03 ноя 2013, 20:14

Сегментные регистры равны 0000, кроме ES - он равен 700 т.к. буфер задается для int 13.

Re: прерывание int 13h не отрабатывает - переходит по неправильному адресу

somewhere » 03 ноя 2013, 19:02

Содержимое сегментных регистров перед вызовом Int 13 приведите

прерывание int 13h не отрабатывает - переходит по неправильному адресу

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; вот тут проблема при переходе из защищенного в реальный режим.

Подскажите пожалуйста в чем может быть проблема. Я с ассемблером недавно начал знакомиться, скажите хотя бы куда копать.

Вернуться к началу