Официальный сайт студ.городка НГТУ
Программирование и БД » Ассемблер. Проблема с резидентом 

#1  12.03.10 14:49

Ассемблер. Проблема с резидентом

Соббсно такая проблема.
Исходная задача - написать резидент под DOS ...
Все вроде нормально, но обеспечивать резидентность нужно при помощи мультиплексорного прерывания 2FH. И вот тут и возникает проблема - при выгрузке резидента не восстанавливаются старые вектора прерываний. И резидент не выгружается.
З.Ы. На основе мультиплексорного прерывания 2DH все работает.
З.З.Ы. Запускаю прогу под DosBox'ом

Offline

#2  12.03.10 14:57

Re: Ассемблер. Проблема с резидентом

это случайно не РГЗ по урам?

Offline

#3  12.03.10 14:59

Re: Ассемблер. Проблема с резидентом

KoshMar'ka, нет. Уже не тот курс. На ур я как раз делал через 2DH. Оно лучше, по AMIS-спецификации... А вот с 2FH возникли проблемы... Или я чего-то конкретно не понимаю.

Offline

#4  12.03.10 23:56

$up
Профиль

Re: Ассемблер. Проблема с резидентом

Revenger написал(а):

не восстанавливаются старые вектора прерываний. И резидент не выгружается.

магия какая-то.
Дебажить пробовал?
http://vogons.zetafleet.com/viewtopic.php?t=7323

у DosBox своеобразный метод эмуляции прерываний, хотя всё должно работать.

Offline

#5  13.03.10 00:18

Re: Ассемблер. Проблема с резидентом

$up написал(а):

магия какая-то.

Да я сам в шоке. Уже хз что делать.
Вот кусок кода по выгрузке резидента(кусок нового хендлера прерывания 2FH)

Код::

Proc	new_2Fh			; мультиплексное прерывание
.....
uninstall:
	push ds
	push es
	push dx
	
	mov ax,251Ch		; Восстановим вектор 1Ch
	lds dx,[cs:old_1Ch]
	int 21h

	mov ax,252Fh		; Восстановим вектор 2Fh
	lds dx,[cs:old_2Fh]
	int 21h

	mov ax,2509h		; Восстановим вектор 09h
	lds dx,[cs:old_09h]	
	int 21h
	
				; Получим из PSP адрес собственного окружения и выгрузим его
	mov es,[cs:2Ch]		; es <- сегментный адрес окружения программы
	mov ah,49h		; Функция освобождения блока памяти
	int 21h
				; Выгрузим теперь программу из памяти вместе с PSP
	push cs
	pop es			; es снова указывает на начало PSP
	mov ah,49h		; Функция освобождения блока памяти
	int 21h

	pop dx
	pop es
	pop ds
	iret
Endp	new_2Fh

Offline

#6  02.04.10 14:43

Re: Ассемблер. Проблема с резидентом

Revenger написал(а):

Соббсно такая проблема.
Исходная задача - написать резидент под DOS ...
Все вроде нормально, но обеспечивать резидентность нужно при помощи мультиплексорного прерывания 2FH. И вот тут и возникает проблема - при выгрузке резидента не восстанавливаются старые вектора прерываний. И резидент не выгружается.
З.Ы. На основе мультиплексорного прерывания 2DH все работает.
З.З.Ы. Запускаю прогу под DosBox'ом

А если восстанавливать старые вектора напрямую,
а не через дос?

Offline

Программирование и БД » Ассемблер. Проблема с резидентом 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.713 сек.
Выполнено 14 запросов.