|
0 / 0 / 0
Регистрация: 23.06.2016
Сообщений: 29
|
||||||
TASM Перехватить прерывание ah=09h int 21h - изменить регистр символов11.12.2016, 16:59. Показов 7246. Ответов 30
Метки нет (Все метки)
Задача: Перекрыть девятую функцию прерывания 21h таким образом, чтобы в выводимой строке маленькие буквы заменялись большими, а большие на маленькие. Не могу понять в чём у меня ошибка, да и толковой информации по обработке прерываний так и не нашёл. Пожалуйста, посмотрите следующий код, может хоть вы найдёте ошибку( Да и если не трудно, напишите где можно доходчиво почитать про обработку прерываний в ассемблере. Заранее спасибо за внимание!
0
|
||||||
| 11.12.2016, 16:59 | |
|
Ответы с готовыми решениями:
30
Вывод строки на экран. Прерывание 21H функция 09H Резидентный обработчик функции ah=09h int 21h - в выводимой строке изменять регистр символов
|
|
Эксперт Hardware
|
||||||
| 11.12.2016, 19:55 | ||||||
|
Lici,
1. Если перехватываешь INT-9h, то после обработки, нужно отдавать управление старому вектору. А в идеале, для перехвата клавы подменяют не INT-9h, а INT-15h/4F. Структура обработчика будет проще. 2. Нет такой инструкции lods/stos string. Есть 'stosb' (/w/d), которая пишет AL по адресу DI. Соответственно, 'lodsb' читает из SI. Замени строки 15 и 31.. 3. Проверки после метки 'AGAIN' вообще туши-свет. И это - внутри обработчика.. Зачем 4 штуки 'cmp', когда можно обойтись одной? Диапазон ASCII-кодов всей латиницы лежит в пределах: 41h..7Ah, т.е. всего 39h подряд идущих кодов. Достаточно отнять от AL 41h, и проверить результат на 'меньше 40h'. Если результат больше, значит в AL лежит всё-что-угодно, только не латиница. Заглавная от прописной отличается только пятым битом, поэтому достаточно его инверсии, для чего можно применить 'xor al,20h' (20h=00100000b):
2
|
||||||
|
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
|
|||
| 11.12.2016, 20:07 | |||
|
Добавлено через 3 минуты string db 255 dup(?), '$' метка string типа байт, то ассемблер сообразит, что речь идет о lodsb. В некоторых учебниках используется именно такой стиль, так-что то, что написал ТС вполне допустимо. Добавлено через 1 минуту З.Ы. Ассемблеры различают retn и retf ведь тоже из контекста. Это ведь тебе привычно писать просто ret . С lods stos movs scas та же история.
2
|
|||
|
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
|
|
| 11.12.2016, 20:07 | |
|
Эммм...а что, разве можно перекрыть отдельную функцию прерывания???
1
|
|
|
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
|
|||
| 11.12.2016, 20:10 | |||
|
Добавлено через 38 секунд
2
|
|||
|
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
|
|||||||||||||||||||||
| 11.12.2016, 20:51 | |||||||||||||||||||||
|
Да так никто не делает (обычно сразу пишут lodsb), но те кто учатся по книгам начинают делать потому-что в каком-то учебнике так увидели.
Добавлено через 2 минуты Можно даже так писать :
Добавлено через 8 минут Можно даже так :
Но ассемблер вообще-то тупой, так-что можно и так :
у источника. Остальное ему фиолетово. [bx] [bp] [si] [di] ему без разницы.
1
|
|||||||||||||||||||||
|
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
|
|
| 11.12.2016, 21:01 | |
|
Я говорил про синтаксис MASM и по наследству TASM. В MASM зачем-то была добавлена типизация. У операнда есть тип. Отсюда и все. По типу операнда определяем какой lods. А FASM - это бегство от синтаксиса MASM, ибо достал.
Зря и проверял. Я же дважды выше писал MASM и TASM. И TS на них писал.
1
|
|
|
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
|
|||
| 11.12.2016, 21:21 | |||
|
Вот смотри, что я имею ввиду
BLABLA LABEL BYTE тип у метки в MASM. Мне лень смотреть сохранилось ли такое дело в FASM, но в ассемблерах других архитектур метка - это всегда только адрес и ничего кроме адреса. Вот это и была исключительно дурная идея принести абстрактные типы туда, где они никому даром не нужны. Отсюда все эти lods операнд_некоторого_типа Добавлено через 1 минуту
2
|
|||
|
0 / 0 / 0
Регистрация: 23.06.2016
Сообщений: 29
|
|||
| 11.12.2016, 22:25 [ТС] | |||
|
Спасибо за ответ.
0
|
|||
|
0 / 0 / 0
Регистрация: 23.06.2016
Сообщений: 29
|
||
| 11.12.2016, 22:54 [ТС] | ||
|
0
|
||
|
Эксперт Hardware
|
||||||
| 11.12.2016, 23:12 | ||||||
Сообщение было отмечено Lici как решение
Решение
2
|
||||||
|
0 / 0 / 0
Регистрация: 23.06.2016
Сообщений: 29
|
|
| 11.12.2016, 23:12 [ТС] | |
|
0
|
|
|
Эксперт Hardware
|
|
| 11.12.2016, 23:32 | |
|
..по-второму кругу начинать объяснять что-ли? Вроде уже всё разжевали..
Попробуй собрать сам, что не получится - спросишь.. Добавлено через 3 минуты pusha / popa можешь выкинуть из моего кода. Они там не нужны
1
|
|
|
0 / 0 / 0
Регистрация: 23.06.2016
Сообщений: 29
|
||
| 11.12.2016, 23:45 [ТС] | ||
|
0
|
||
|
Эксперт Hardware
|
|
| 11.12.2016, 23:56 | |
|
1
|
|
| 11.12.2016, 23:56 | |
|
Помогаю со студенческими работами здесь
20
Резидентный обработчик функции ah=09h int 21h - вывод строки "My String" Будет ли прерывание int 21h работать в защищенном режиме Не работает функция 09h прерывания 21h Перехват прерывания клавиатуры (int 09h) для замены нескольких символов
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет
значение производной при заданном х
Логарифм записывается как: (x-2)log(x^2+2) -. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|