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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2014, 20:19   #1
sanya839
Новичок
Джуниор
 
Регистрация: 25.04.2012
Сообщений: 2
По умолчанию Действия на разные кнопки

Есть программа которая бы по нажатию кнопки 0 выводила бы А, по нажатию 1 выводила бы BB, по нажатию 2 выводила бы CCC и так далее до 9.
Собственно код:
Код:
.model small              ;орпеделить модель вычислений
.stack 100h               ;определяем сегмент стека и задаём его, задаём размер
.data                     ;определяем сегмент данных
                                     
message1 db 'A', 0dh, 0ah, '$'  ;0-0Bh,1-02h,2-03h,9-0Ah
 
.code                     ;определяем сегмент кода
      mov ax,@data        ;инициализируем сегмент данных
      mov ds,ax           ;в DS заносим адрес начала сегмента данных
if_char:                  ;закр. метка
      mov ah,0h           ;вызов обработки клавиши
      int 16h             ;вызываем 16 прерывание функции 0h
      cmp al,0h
 
      cmp ah,0Bh          ;код клавиши '0'
jne strv                  ;метка: если нет то переходим по метке
      mov dx,offset message1  ;первая строка
      mov ah,9h               ;вывод строки на экран
      int 21h                 ;вызываем 21 прерывание
jmp if_char               ;метка: возврат
 
strv:                     ;закр. метка
      cmp al,4dh          ;код клавиши M
jne if_char               ;метка: если нет то переходим по метке
      mov ah,4ch          ;выход из программы
      int 21h             ;вызываем 21 прерывание
end                       ;конец
Сообственно написал программу которая бы просто по нажатию выводила на кнопку 0 буквы, а вот как сделать чтобы она по нажатию 1 выводила дургое сообщение?

Последний раз редактировалось Stilet; 26.02.2014 в 20:35.
sanya839 вне форума Ответить с цитированием
Старый 26.02.2014, 21:21   #2
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

Код:
.model small
.stack 100h
.code
start:

input:
xor ax,ax
int 16h
cmp al,1bh
je exit
cmp al,'0'
jb input
cmp al,'9'
ja input

xor cx,cx
add al,17
mov cl,al
sub cl,'@'

@@:
int 29h
loop @b
mov al,0ah
int 29h
jmp input

exit:
mov ax,4c00h
int 21h
end start
vadimych вне форума Ответить с цитированием
Старый 27.02.2014, 18:44   #3
sanya839
Новичок
Джуниор
 
Регистрация: 25.04.2012
Сообщений: 2
По умолчанию

Цитата:
Сообщение от vadimych Посмотреть сообщение
Код:
.model small
.stack 100h
.code
start:

input:
xor ax,ax
int 16h
cmp al,1bh
je exit
cmp al,'0'
jb input
cmp al,'9'
ja input

xor cx,cx
add al,17
mov cl,al
sub cl,'@'

@@:
int 29h
loop @b
mov al,0ah
int 29h
jmp input

exit:
mov ax,4c00h
int 21h
end start
Спасибо большое, но до того как я увидел ваш ответ я уже написал программу. но преподаватель сказал не пойдет через int 16, сказал по заданию надо : Написать обработчик прерываний от клавиатуры.
Не подскажете как тогда программа будет выглядеть?
Вот код мой
Код:
.model small      ;1 сегмента кода и 1 сегмента данных, тип near
.stack 100h       ;определяем сегмент стека и задаём его, задаём размер
.data             ;определяем сегмент данных                               
text_0 db 'A', 0dh, 0ah, '$'  ;
text_1 db 'BB', 0dh, 0ah, '$'  ;
text_2 db 'CCC', 0dh, 0ah, '$'  ;
text_3 db 'DDDD', 0dh, 0ah, '$'  ;
text_4 db 'EEEEE', 0dh, 0ah, '$'  ;
text_5 db 'FFFFFF', 0dh, 0ah, '$'  ;
text_6 db 'GGGGGGG', 0dh, 0ah, '$'  ;
text_7 db 'HHHHHHHH', 0dh, 0ah, '$'  ;
text_8 db 'IIIIIIIIII', 0dh, 0ah, '$'  ;
text_9 db 'KKKKKKKKKKK', 0dh, 0ah, '$'  ;
.code                     ;определяем сегмент кода
      mov ax,@data        ;инициализируем сегмент данных
      mov ds,ax           ;в DS заносим адрес начала сегмента данных
inkey:
mov ah, 0
    int 16h
    mov dx, offset text_0
    cmp al, '0'
je print ;если равно
    mov dx, offset text_1
    cmp al, '1'
je print
    mov dx, offset text_2
    cmp al, '2'
je print
    mov dx, offset text_3
    cmp al, '3'
je print
    mov dx, offset text_4
    cmp al, '4'
je print
    mov dx, offset text_5
    cmp al, '5'
je print
    mov dx, offset text_6
    cmp al, '6'
je print
    mov dx, offset text_7
    cmp al, '7'
je print
    mov dx, offset text_8
    cmp al, '8'
je print
    mov dx, offset text_9
    cmp al, '9'
jne strv
 
print:
mov ah, 9
int 21h
strv:                     ;закр. метка
      cmp al,4dh          ;код клавиши M
jne inkey               ;метка: если нет то переходим по метке
      mov ah,4ch          ;выход из программы
      int 21h             ;вызываем 21 прерывание
end                       ;конец
sanya839 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
действия после нажатия кнопки, select ubun JavaScript, Ajax 4 04.01.2012 00:45
Разные пароли на разные диапазоны zenner Microsoft Office Excel 22 27.11.2010 01:25
Разные компиляторы - разные результаты Кипящий чайник Общие вопросы C/C++ 3 16.07.2010 14:54
действия на кнопки клавиатуры в Delphi TaYgA Помощь студентам 10 14.07.2010 19:04
Выбор действия кнопки Micha Компоненты Delphi 3 07.10.2007 11:17