WMmail.ru - сервис почтовых рассылок

понедельник, 26 декабря 2011 г.

RFpro.ru: Ассемблер? Это просто! Учимся программировать

 
Если выпуск не отображается, вы можете прочесть его на сайте Отказаться от рекламы
  
  
Мы знаем, что хочет женщина. Модные бренды со скидкой!
  
  
  

  Мои подписки      Мои группы      Мои новости     
        Автор 
Калашников О.А.
      
  
Компьютеры и интернет   →   Софт   →   Программирование   →   RFpro.ru: Ассемблер? Это просто! Учимся программировать
  
RFpro.ru: Ассемблер? Это просто! Учимся программировать
 
 

Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Коцюрбенко Алексей aka Жерар
Статус: Профессор
Рейтинг: 3383
• повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2581
• повысить рейтинг »
Абаянцев Юрий Леонидович aka Ayl
Статус: Профессионал
Рейтинг: 2052
• повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Assembler (Ассемблер)

Номер выпуска:1501
Дата выхода:26.12.2011, 21:00
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:181 / 63
Вопросов / ответов:1 / 1

Консультация # 184907: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Задание. Разработать программу переопределения прерывания 05h (клавиша PrintScreen). Замечания: 1. перед загрузкой нового вектора прерывания необходимо сохра-нить старый вектор (функция 35h прерывания 21h); 2. для проверки, новая процедура обработки прерывания 05h...


Консультация # 184907:

Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:
Задание. Разработать программу переопределения прерывания 05h (клавиша PrintScreen).
Замечания:
1. перед загрузкой нового вектора прерывания необходимо сохра-нить старый вектор (функция 35h прерывания 21h);
2. для проверки, новая процедура обработки прерывания 05h должна выполнять действия в соответствии с вариантом задания. В основной программе необходимо организовать большой цикл, в течении которого можно будет проверить работы прерывания (прерывание 21h в этом цикле использовать нельзя, если оно будет использоваться в подпрограмме обработки прерывания;
3. вывод на экран в из подпрограммы обработки прерывания, можно выполнять, используя функции прерывания 21h, но лучше непо-средственно оперируя с видеопамятью;
4. перед выгрузкой программы из памяти восстановить старый вектор прерывания (функция 25h прерывания 21h).
Таблица. Варианты заданий
Подпрограмма обработки прерыван ия должны выводить на экран свой адрес в шестнадцатеричной системе счисления в форме «сегмент:смещение». (Эти данные можно прочитать из 5 ячейки таблицы векторов прерывания).
Ассемблер-Tasm.exe Исполняемый файл в формате EXE.

Дата отправки: 21.12.2011, 20:45
Вопрос задал: Дмитрий (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Лысков Игорь Витальевич (Старший модератор):

Здравствуйте, Дмитрий!
Вот Вам программа, которая устанавливает на время своей работы свой обработчик вектора 5
Для вывода на экран использовал прерывание БИОС-а.
Это лучше, чем прерывание ДОС-а, которое крайне нежелательно использовать в прерывании.
Да и проще варианта с прямой записью в память. smile

Обратите внимание, что если ее просто так запустить под ХР, то программа не будет работать, как надо!!!
Это связано с тем, что система некоторые комбинации клавиш и просто клавиши, в том числе PrintScreen,
считает служебными и не желает отдавать их программам.
Но клавишу PrintScreen можно попросить у системы, если создать PIF-файл для EXE-программы.
И там, в свойствах, на вкладке "Разное" выключить checkbox "PrtSc".
Запускать программу надо будет с помощью PIF-файла.

Код :
 	.model	small  assume	cs:code, ds:data, ss:Stk  Stk	segment stack 	dw	1024 dup (?) Stk	ends  data	segment sPress	db	0dh,0ah,'Press ESC for exit...$' Off_05	dw	?		;указатель на старый обработчик вектора 05h Seg_05	dw	? data	ends  code	segment main	proc 	mov	ax, data 	mov	ds, ax		;ds = data  	mov	ax, 3505h 	int	21h		;узнаем вектор 05h в es:bx  	mov	Off_05, bx	;сохраним старый адрес в сегменте данных 	mov	Seg_05, es  	push	ds 	lea	dx, new_05	;установим новый адрес 	push	cs		;обработчика прерывания 05h 	pop	ds		;ds:dx 	mov	ax, 2505h 	int	21h 	pop	ds  	lea	dx, sPress	;выведем приглашение нажать ESC 	mov	ah, 9 	int	21h  wait_ESC: 	mov	ah, 0		;ждем 	int	16h 	cmp	al, 1bh		;выходим по ESC 	jne	wait_ESC  				;воcстановим старый обработчик вектора 05h 	push	ds		;ds 	lds	dx, dword ptr Off_05	;ds:dx - адрес старого вектора 	mov	ax, 2505h 	int	21h		;восстановим! 	pop	ds 		;ds = data 	sti  	mov	ax, 4c00h 	int	21h		;выход в ДОС main	endp  new_05	proc	far		;подпрограмма отработки 05h 	push	ax 	push	ds 	mov	al, 0dh		;на новую строку 	int	10h 	mov	al, 0ah 	int	10h 	xor	ax, ax 	mov	ds, ax		;сегмент векторов 	mov	ax, ds:[5*4+2]	;сегмент вектора 5 	call	PrintHex	;в hex 	mov	al, ':' 	int	10h 	mov	ax, ds:[5*4]	;смещение вектора 5 	call	PrintHex	;в hex 	pop	ds 	pop	ax		;восстановим регистры 	iret			;возврат из прерывания new_05	endp  PrintHex	proc		;вывод ax в hex 	push	ax 	mov	al, ah		;старший байт 	call	PutHexByte 	pop	ax		;младший байт PutHexByte: 	push	ax 	shr	al, 4		;старшая тетрада 	call	PutHexDigit 	pop	ax 	and	al,0fh		;младшая PutHexDigit:			;вывод hex-цифры 	add	al,90h 	daa 	adc	al,040h 	daa 	mov	ah, 0eh		;ф-я вывода al на экран БИОС-а 	int	10h 	ret PrintHex	endp  code	ends  	end	main 

Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 21.12.2011, 23:22
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


 
 
Комментировать выпуск
     В избранное

Прошлые выпуски
RFpro.ru: Ассемблер? Это просто! Учимся программировать    25 декабря 2011, 16:04
RFpro.ru: Ассемблер? Это просто! Учимся программировать    22 декабря 2011, 15:03
RFpro.ru: Ассемблер? Это просто! Учимся программировать    16 декабря 2011, 20:32

Все выпуски рассылки

27 декабря 2011 отмечают:
День спасателя в России
День сотрудника паспортно-визовой службы Кыргызстана
День апостола и евангелиста Иоанна

Именины: Иларион, Николай
 
 

Subscribe рекомендует
 
Компьютеры и интернет  →   рассылки   и   группы
  
Учимся работать в компьютерных программах
ВНИМАНИЮ СПАМЕРОВ - НЕ НАПРЯГАЙТЕСЬ, В ГРУППЕ ЕСТЬ ПРЕДМОДЕРАЦИЯ Правила группы Запрещено: -флудить, т.е писать малоинформативные сообщения, комментарии...
Темы: 2218   Участники: 18520
  Свободный микрофон
Вы готовы брать ответственность за каждую свою мысль, каждое своё слово и действие? Тогда, ДОБРО ПОЖАЛОВАТЬ в группу, в которой приветствуется: желание ...
Темы: 2092   Участники: 1263
  Работа и хобби для милых женщин!
Как хочется иногда отвлечься от работы и домашнего хозяйства, и заняться чем нибудь интересным, получить новые впечатления или сотворить что-то своими р...
Темы: 6163   Участники: 9184
 
 
 
Подписан адрес: admin10383.deep@blogger.com
Код этой рассылки: comp.prog.assembler
Архив рассылки
Отписаться:  На сайте  Почтой
Поддержка подписчиков
Убрать рекламу
Другие рассылки этой тематики
Другие рассылки этого автора
 
Рассылка производится: Subscribe.Ru / ЗАО «Интернет-Проекты» / О компании / Политика конфиденциальности

Комментариев нет:

Отправить комментарий