Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.08.2010, 21:12   #1
Syn-McJ
Пользователь
 
Регистрация: 14.05.2010
Сообщений: 11
По умолчанию Обработка прерываний

В прерываниях я не силён, наваял нечто, основанное на данных из различных учебников. Суть в том, что из программы, которая строит некоторое изображение (возможно с анимацией, пока просто точка) требуется выход по нажатию клавиши Esc (другие варианты и сочетания не катят). Интересно то, что при прогонке её через дебаггер вроде как все условия выполняются, и происходит передача управления операционной системе. При обычном запуске программы этого не наблюдается.
Код:
masm
model	small
.stack	256
.data
old_09h	dd	?		;для хранения старого сегмента и смещения
old_gr	dw	?
debug	equ	1

.code
off_09h	equ	09h*4	;смещение вектора 09h

main proc
	mov		ax,@data
	mov		ds,ax
	xor		ax,ax
	
	cli				
	mov		ax,0
	mov		es,ax
	
;сохранить старый вектор
	mov		ax,es:[off_09h]	
	mov		word ptr old_09h,ax	;сохранение смещения
	mov		ax,es:[off_09h+2]		
	mov		word ptr old_09h+2,ax	;сохранение сегмента

;записать новый вектор в таблицу векторов прерываний
	mov		ax,offset new_09h		
	mov		es:off_09h,ax
	push	cs
	pop		ax						
	mov		es:off_09h+2,ax			
	sti								
	
	xor		ax,ax
	mov		ah,0Fh					
	int		10h
	mov		old_gr,ax
	
	mov		ax,013h					
	int		10h
	mov		ax,0A00h				
	mov		es,ax
	
	if		debug			;выводим зелёную точку
	mov		ah,0Ch
	mov		al,2
	mov		cx,320
	mov		dx,240
	int		10h
	endif
	
main endp

new_09h proc

	pushf
	call	old_09h
	xor		ax,ax
	mov		ah,08h
	int		21h
	
	cmp		al,01Bh
	jne		exit_proc
	mov		ax,4c00h
	int		21h
	
exit_proc:
iret
new_09h endp

end main
Пока мне требуется обрабатывать только Esc, поэтому не стал заморачиваться с восстановлением вектора прерываний.
Syn-McJ вне форума Ответить с цитированием
Старый 24.08.2010, 00:53   #2
andrewz
Новичок
Джуниор
 
Регистрация: 24.08.2010
Сообщений: 1
Радость loop

не профи и давно не занимался асмом, но.. похоже просто после завершения основного цикла программы ... вывод точек int10h она продолжает выполняться дальше после main endp и красиво входит в обработчик прерывания
andrewz вне форума Ответить с цитированием
Старый 21.09.2010, 13:47   #3
svbezm
Форумчанин
 
Регистрация: 02.04.2010
Сообщений: 104
По умолчанию

Заморочтесь с восстановлением векторов прерываний! ... и все станет на свои места...
svbezm вне форума Ответить с цитированием
Старый 21.09.2010, 15:07   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а где у вас выход из приложения в конце?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.09.2010, 07:15   #5
Syn-McJ
Пользователь
 
Регистрация: 14.05.2010
Сообщений: 11
По умолчанию

Всем спасибо, я проблему решил, правда несколько иным способом. Но с прерываниями тоже разобрался, так что одним балбесом в этой области меньше)
Syn-McJ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Система прерываний Funker Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 10.05.2010 03:15
Паралельная обработка прерываний JoulupukkiI Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 9 23.01.2010 01:03
Обработка прерываний Журенова Катя Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 11.05.2009 01:55
Контроллер прерываний smileman Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 16.11.2008 14:23