Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как посмотреть вектор 21-го прерывания? 
:(
    Опции темы
GQU
Дата 25.12.2014, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 13.2.2011

Репутация: нет
Всего: нет



Как в отладчике debug посмотреть вектор 21-го прерывания?
И после того, как программа его изменит функцией 35h, увидеть в debug изменения?

Таблица векторов прерываний занимает первый килобайт оперативной памяти - адреса от 0000:0000 до 0000:03FF
Прерыванию с номером 0 соответствует адрес 0000:0000, прерыванию с номером 1 - 0000:0004
Значит прерывание с номером 21, по адресу 54h(4d*21d)=84d=54h
Пишу в debug:
d 0:54
Запускаю программу perehvat.com, которая меняет вектор 21го прерывания
Опять пишу
d 0:54
Никаких изменений
Почему?

почему функция 35h прерывания 21h выдает в
es-086c
bx-42b7

Хотя должна
es-0000
bx-0054

PS: программа работает правильно, прерывание перехватывает, строка выводится другая
tmp.com
Код

CSEG segment
assume cs:CSEG, ds:CSEG, es:CSEG, ss:CSEG
org 100h
Start:
jmp Init
 
Int_21h_proc    proc
cmp ah,9
je  Ok_09
jmp dword ptr cs:[Int_21h_vect]
 
Ok_09:
push    ds
push    dx
 
push    cs
pop ds
 
 
mov dx,offset My_string
pushf
call    dword ptr cs:[Int_21h_vect]
 
pop dx
pop ds
iret
 
Int_21h_vect    dd ?
My_string   db 'My string$'
Int_21h_proc    endp
 
 
Init:
mov ah,35h
mov al,21h
int 21h
 
mov word ptr Int_21h_vect,bx
mov word ptr Int_21h_vect+2,es
 
mov ax,2521h
mov dx,offset Int_21h_proc
int 21h
 
mov dx,offset Init
int 27h
 
 
CSEG ends
end Start


Это сообщение отредактировал(а) GQU - 25.12.2014, 22:30
PM MAIL   Вверх
ФедосеевПавел
Дата 26.12.2014, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 7.2.2009

Репутация: 4
Всего: 10



Прерывание 21h. Адрес 21h*4h=84h.
По адресу 0000:0084 хранится адрес процедуры обработчика прерывания, который тебе и возвращается, т.е. тебе возвращается (как и положено) не 0000:0084, а другой адрес. Ведь какой смысл передавать тебе то, что и так легко считается?
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.1156 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.