Хостинг портала RFpro.ru: Московский хостер Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64 РАССЫЛКИ ПОРТАЛА RFPRO.RU Лучшие эксперты данной рассылки Номер выпуска: | 1395 | Дата выхода: | 10.12.2010, 10:30 | Администратор рассылки: | Лысков Игорь Витальевич (Старший модератор) | Подписчиков / экспертов: | 223 / 66 | Вопросов / ответов: | 1 / 1 | Вопрос № 181103: Здравствуйте, уважаемые эксперты! Прошу Вас помочь в решении следующей задачи: Очистить экран. Вывести несколько строк произвольного текста (ат- рибут 14). Перехватив прерывание печати экрана Print Screen (Int 5h), ме- нять атрибуты всех... Вопрос № 181103: Здравствуйте, уважаемые эксперты! Прошу Вас помочь в решении следующей задачи: Очистить экран. Вывести несколько строк произвольного текста (ат- рибут 14). Перехватив прерывание печати экрана Print Screen (Int 5h), ме- нять атрибуты всех строк экрана циклически от 1 до 15. Каждое нажатие клавиши Print Screen вызывает изменение атрибута. Для решения использовать Tasm, операционная система ДОС. Задача взята из "Программирование на Ассемблере для персональных компьютеров: учебно-методическое пособие"http://window.edu.ru/window_catalog/redir?id=45305&file=dstu08.pdf (стр. 79, вар. 24). Спасибо. Отправлен: 04.12.2010, 17:08 Вопрос задал: Ivan Afonin (Посетитель) Всего ответов: 1 Страница вопроса » Отвечает Лысков Игорь Витальевич (Старший модератор) : Здравствуйте, Ivan Afonin! Вот Вам программа в формате COM.
Код: .model tiny .code .startup
mov ax,0003h ;1)необходимо для прямой записи в память под ХР int 10h ;2)очистим экран
mov cx, 2000h ;скроем курсор mov ah, 1 int 10h
;заполним экран текстом mov ax, 0b800h ;сегмент видео mov es, ax xor di,di ;с начала 0 страницы экрана
mov al, 'A' ;в каждой строке свой символ mov ah, attr ;атрибут начинаем с 0eh mov cx, 25 ;25 строк PrintLoop: push cx mov cx, 80 ;в строке 80 символов rep stosw ;пишем pop cx inc al ;инкремент символа loop PrintLoop ;по всем строкам
mov ax, 3505h ;прочитаем адрес вектора 05 int 21h mov seg_05, es ;сохраним сегмент mov off_05, bx ;смещение
lea dx, new_05 ;установим новый вектор 05 в ds:dx mov ax, 2505h int 21h wait_esc: mov ah, 0 ;ждем клавишу int 16h cmp ah, 37h ;PrintScreen? je wait_esc ;все кроме PrintScreen - выход
lds dx, old_05 ;восстановим старый вектор 05 mov ax, 2505h int 21h .exit 0
new_05: ;PrintScreen push ds cx di ;сохраним используемые регистры mov cx, 0b800h mov ds, cx ;будем использовать видеосегмент mov di, 1 ;смещение атрибута первого символа
mov cx, 25*80 ;число симаолов на экране
mov al, cs:attr ;атрибут inc al ;инкремент and al, 0fh ;attr должен быть <= 15 jnz SaveAttr ; и не равен 0 inc al ;если = 0, то 1 SaveAttr: mov cs:attr, al ;сохраним атрибут IncAttrLoop: ;пропишем новый атрибут по всем позициям mov [di], al i nc di inc di loop IncAttrLoop pop di cx ds iret
.data old_05 label dword ;адрес вектора для использования в lds off_05 dw ? ;смещение seg_05 dw ? ;сегмент attr db 0eh ;атрибут
end
Под чистым ДОС-ом будет работать на ура А вот под XP не сработает... Дело в том, что ОС перехватывает некоторые клавиши и сочетания клавиш и до программы под ДОС они просто не доходят. Но не все потеряно... Есть выход! Необходимо создать в папке с COM-программой PIF-файл! Надеюсь, Вы знаете, как это делать... А вот в свойствах этого PIF-файла на вкладке "Разное" (см. изображение) необходимо убрать "птичку" около PrtSc, Т.о., кнопка PrintScreen станет доступной в нашей программе
----- Люби своего ближнего, как самого себя Ответ отправил: Лысков Игорь Витальевич (Старший модератор) Ответ отправлен: 05.12.2010, 16:25 Номер ответа: 264533 Украина, Кировоград Тел.: +380957525051 ICQ # 234137952 Mail.ru-агент: igorlyskov@mail.ru
Оценка ответа: 5 Комментарий к оценке: Спасибо! =) Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"? | Отправить SMS #thank 264533 на номер 1151 (Россия) | Еще номера » | Оценить выпуск » Нам очень важно Ваше мнение об этом выпуске рассылки! Скажите "спасибо" эксперту, который помог Вам! Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА на короткий номер 1151 (Россия) Номер ответа и конкретный текст СМС указан внизу каждого ответа. Полный список номеров » * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов) ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются. *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании. |
Комментариев нет:
Отправить комментарий