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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2009, 13:21   #1
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию Обработка прерывания и рисование окна

Ребят помогите пожалуйста, нужно при нажатии ctrl+a вывести окно в нем запросить ввести слово затем выдать его перевод, слова хранятся в файлах. Я написала пока вывод окна, но окно не рисует Помогите пожалуйста. Вот мой код
Код:
.model tiny
.386
.code
org 100h
start:
;================================================================
;		работа с таблицей векторов
;================================================================
	push es
	xor ax,ax
	mov es,ax
	
;поиск 9 прерывания и сохраниние в old_handler
	mov ax,word ptr es:[09h*4]
	mov word ptr old_handler,ax
	mov ax,word ptr es:[09h*4+2]
	mov word ptr old_handler+2,ax
	
;замена вектора 9 прерывания
	mov ax,cs
	mov word ptr es:[09h*4+2],ax
	mov ax,offset handler
	mov word ptr es:[09h*4],ax
	
;===============================================================
;	оставление программы резедентно
;===============================================================	
	pop es
	mov bx,offset last_byte
	int 27h	
	
;===============================================================
;	собственный обработчик
;===============================================================
handler:	
	pusha
	xor ax,ax
	mov ah,02h
	int 16h
	test al,00000100b
	jz standart_handler
	;cli
	in al,60h
	cmp al,1eh	;если нажата ctrl+a вызываем процедуру обработки иначе проверяем нажатие ctrl+s
	jne ctrl
	;sti
	call ctrl_a 
	mov al,20h      ;яюёырть ёшуэры "ъюэхц яЁхЁытрэшя"
     	out 20h,al  ; ъюэтЁюыыхЁу яЁхЁытрэшщ
      popa
	iret
ctrl:
	cmp al,1fh	;если нажата ctrl+s вызываем процедуру обработки иначе переходим на стандартынй обработчик
	jne standart_handler
	;sti
	;call far ctrl_s
	iret
	
;===============================================================
;	стандартный обработчик
;===============================================================
standart_handler:
	;sti
	popa
      jmp dword ptr cs:old_handler
	iret

;===============================================================
;	процедура ctrl_a
;===============================================================
ctrl_a proc near
;===========================================================
;			очистим экран и зададим атрибуты символов
;============================================================
	mov ah,05h 
	mov al,1
	int 10h
	mov ah,06h	;функция инициализации окна
	mov al,0	;окно без прокрутки
	mov bh,31h	;бирюзовый фон, синие симоволы
	mov ch,0	;y левый верхний
	mov cl,0	;x левый верхний
	mov dh,10 	;y правый нижний
	mov dl,60	;y правый нижний
	int 10h
	
;===============================================================
;		вывод собщения
;===============================================================
	mov ah,09h	;функцифя позиционирования курсора
	mov bh,1	;страница 1
	mov dh,1	;сторка
	mov dl,0	;столбец
	int 10h 
	
;================================================================
;	вывод сообщения
;================================================================
	mov ah,09h
	mov dx,offset mes
	int 21h
	
	mov ah,0ah
	mov dx,offset buff ; адрес буфера
	int 21h
	
	mov ah,2h	;функцифя позиционирования курсора
	mov bh,1	;страница 1
	mov dh,3	;сторка
	mov dl,0	;столбец
	int 10h 

	mov ah,05h 
	mov al,0
	int 10h
	ret
	
ctrl_a endp

;===============================================================
;	раздел описания переменных
;===============================================================
	old_handler dd ?
	mes db 'введите слово',0ah,0dh,'$'	
	buff db 30
last_byte:
end start
Пожалуйста исправте
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 16.12.2009, 13:45   #2
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Уже который раз говорю про использование int 21h в резиденте. Выводите все строки с помощью int 10h.

Для чего эти 2 фрагмента ?
Код:
	mov ah,05h 
	mov al,1
	int 10h
.......
	mov ah,05h 
	mov al,0
	int 10h
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 16.12.2009, 13:56   #3
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

это для установки станицы видео-памяти. По одиночке все работало, окошки рисовались но вот когда объединила с обработкой все опять не работает. А прерывания для работы с файлами будут работать? А можно все таки как-то использовать 21 прерывание? можно ли как-то резедентно оставить не весь код , а только часть которая перехватывает прерывание, тогда ведь получается можно будет использовать 21? и еще вопрос как сделать так чтобы использовались дальние вызовы, call far ctrl_a выдает ошибку, причем я в описании процедуры указала заместо near far
Единственное, что ограничивает полет мысли программиста-компилятор

Последний раз редактировалось Sparky; 16.12.2009 в 13:59.
Sparky вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка прерывания таймера Temi4 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 01.06.2009 19:56
Прерывания Kn793 Общие вопросы Delphi 3 10.01.2009 18:43
Прерывания DOS odi_noki Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 26 14.11.2008 13:51
прерывания sergei64_89 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 22.04.2008 13:37
Обработка события закрытия окна в С# Kriziun Общие вопросы .NET 2 14.04.2008 14:06