Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Заглавные буквы, Резидент 
:(
    Опции темы
Гость_Prophet
Дата 3.12.2004, 21:50 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Написал обработчик прерывания для преобразования всех вводимых русских букв в заглавные, но при конвертации букв р-я в Р-Я функциональные клавиши (стрелки, insert, delete и др.) также преобразуются, хотя их ascii коды не попадают в диапазон e0h - efh. Подскажите, как избавиться от глюка.

Код

mov cx,16
kbufer: lodsw      
cmp al,0a0h
jb skipchange
cmp al,0afh
ja r_ya
and        al,11011111b
jmp    skipchange
r_ya: cmp al,0e0h
jb skipchange
cmp al,0efh
ja skipchange
and        al,10011111b
or    al,00010000b
skipchange:
stosw
loop kbufer

  Вверх
Chingachguk
Дата 4.12.2004, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: 11
Всего: 18



Да вроде работает - уточни, что именно не так:

Код

var
 letter_old, letter: string[3];
begin

 asm
 mov  si,offset letter+1
 mov  di,si
 push ds
 pop  es
 mov  cx,1
 cld

 xor  ah,ah
 int  16h
 mov  [si],ax
 mov  byte ptr [si-1],1
 mov  word ptr letter_old+1,ax
 mov  byte ptr letter_old,1

@@kbufer:

 lodsw
 cmp  al,0a0h
 jb   @@skipchange
 cmp  al,0afh
 ja   @@r_ya
 and  al,11011111b
 jmp  @@skipchange

@@r_ya:

 cmp  al,0e0h
 jb   @@skipchange
 cmp  al,0efh
 ja   @@skipchange
 and  al,10011111b
 or   al,00010000b

@@skipchange:

 stosw
 loop @@kbufer

end;

 writeln('Old letter/Letter=',letter_old,'/',letter);
end.



--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
Гость_Prophet
Дата 4.12.2004, 13:07 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Вопрос решился. Проблема заключалась в том, что резидент, которому было необходимо перехватывать нажатия русских букв и их конвертацию в заглавные перед выводом, превращал функциональные клавиши в заглавную букву Р из-за того, что они генерируют код e0 в буфер клавиатуры после вызова INT09h.

Понимаю, что надо было привести полный код программы, иначе не ясно в чем была проблема.

smile
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0417 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.