Консультация № 190944
04.05.2017, 16:37
0.00 руб.
0 3 1
Уважаемые эксперты! Пожалуйста, помогите написать программу на учебной модели Жмакина.(прикрепляю программу к сообщению) Вывести на дисплей одно из трёх текстовых сообщений, в зависимости от нажатой клавиши. 1 - вывод первого сообщения, 2 - вывод второго сообщения, 3 - третьего, остальные символы - нет реакции. Используемые ВУ: клавиатура, дисплей.
скачать файл CompModel.exe [500.0 кб]

Обсуждение

давно
Посетитель
7438
7205
04.05.2017, 16:48
общий
Адресаты:
Здравствуйте!
Вы самостоятельно пытались написать? Покажите, если не трудно.
Подправим, добавим. Если надо, то и заново напишем. Но хотелось бы увидеть Ваши усилия в данном вопросе.
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
04.05.2017, 16:54
общий
Адресаты:
Вопросик: с клавиатурой работаем по опросу или по прерыванию?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
04.05.2017, 17:31
общий
это ответ
Здравствуйте, annka98!
Программа работает с клавиатурой по опросу
Выводит один символ, можете вывести любое сообщение, последовательно отправляя в порт соответствующие коды необходимых символов
[code lang=asm h=200]RDI #101 ;команда очистки буфера
out 1 ; для клавиатуры
RDI #102 ; команда сброса ошибки
out 1 ; для клавиатуры
RDI #10 ; команда разрешения МВУ
OUT 1 ; для клавиатуры без прерываний (по опросу)
RDI #103 ; команда установки посимвольного ввода
out 1 ; для клавиатуры

RD #101 ;команда очистки дисплея
OUT 11 ;в регистр CR
RD #11 ;разрешаем дисплей с автоинкрементом адреса
OUT 11 ;в регистр CR

LOOP:IN 2 ; читаем регистр состояния клавиатуры
SBI #10 ; если состояние 10, то есть код, отняв 10, проверим на 0
JNZ LOOP ; если исходное состояние не 10, то нет кода в буфере, идем на цикл

IN 0 ; считываем код с клавиатуры
jz EXIT ; было просто нажатие на "Завершить ввод", то завершаем программу
sbi #49 ; проверим на клавиши 1-3
js RESET ; <'1' - игнорируем, на сброс клавиатуры
jz MESS_1 ; '1'
sbi #1
jz MESS_2 ;'2'
sbi #1
jz MESS_3 ;'3'
;все другие игнорируем и просто сбрасываем клавиатуру
RESET:RDI #101 ; команда сброса
out 1 ; в клавиатуру
RDI #103 ; команда установки посимвольного ввода (сбрасывается при сбросе)
out 1 ; в клавиатуру
jmp LOOP ; на чтение состояния клавиатуры

;подпрограммы вывода сообщений
;просто выводим цифру '1'-'3'
MESS_1:RD #101 ;команда очистки дисплея
OUT 11 ;в регистр CR
RDI #49 ;'1'
OUT 10 ;на экран
jmp RESET

MESS_2:RD #101 ;команда очистки дисплея
OUT 11 ;в регистр CR
RDI #50 ;'2'
OUT 10 ;на экран
jmp RESET

MESS_3:RD #101 ;команда очистки дисплея
OUT 11 ;в регистр CR
RDI #51 ;'3'
OUT 10 ;на экран
jmp RESET

EXIT:hlt ; останов
[/code]
5
Спасибо огромное! К сожалению, я совсем не поняла эту тему, теперь попробую разобраться
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа