23.01.2018, 01:06 [+3 UTC]
в нашей команде: 2 493 чел. | участники онлайн: 3 (рекорд: 21)

:: РЕГИСТРАЦИЯ

:: консультации

:: задать вопрос

:: все разделы

:: правила

:: новости

:: участники

:: доска почёта

:: форум

:: блоги

:: поиск

:: статистика

:: наш журнал

:: наши встречи

:: наша галерея

:: отзывы о нас

:: поддержка

:: руководство

Версия системы:
7.42 (30.12.2017)

Общие новости:
02.01.2018, 09:46

Форум:
12.01.2018, 10:25

Последний вопрос:
22.01.2018, 21:44

Последний ответ:
22.01.2018, 23:40

Последняя рассылка:
22.01.2018, 22:45

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
18.04.2012, 13:48 »
Arman Muratuly
Очень профессионально, ещё и помогли с переводом. Спасибо. [вопрос № 185844, ответ № 270562]
09.12.2015, 14:33 »
ksenya241
то, что не проходили не понятно до конца, а так все отлично [вопрос № 188391, ответ № 273039]

РАЗДЕЛ • Assembler

Создание программ на языке Assembler.

[администратор рассылки: Лысков Игорь Витальевич (Старший модератор)]

Лучшие эксперты в этом разделе

Коцюрбенко Алексей aka Жерар
Статус: Мастер-Эксперт
Рейтинг: 605
Зенченко Константин Николаевич
Статус: Модератор
Рейтинг: 379
Лысков Игорь Витальевич
Статус: Старший модератор
Рейтинг: 370

Перейти к консультации №:
 

Консультация онлайн # 192350
Раздел: • Assembler
Автор вопроса: baker48 (Посетитель)
Отправлена: 09.01.2018, 17:48
Поступило ответов: 1

Уважаемые эксперты! Пожалуйста, ответьте на вопрос:

Необходимо написать программу для CompModel (ассемблер).
Задание: вывод на дисплей одного из двух текстовых сообщений, хранящихся в памяти, в зависимости от нажатой клавиши.
Пояснения: <4> - вывод на дисплей первого текстового сообщения, <5> - вывод на дисплей второго текстового сообщения, остальные символы – нет реакции.
На вашем форуме нашел подобное решение для трех текстовых сообщений: (<1>,<2>,<3>): представлено ниже. Дополнительный вопрос: как записать в память тексты, чтобы при нажатии нужных клавиш, текст выводился на монитор в программе compmodel. (в данный момент при нажатии клавиш 1, 2 или 3 происходит просто вывод цифр на монитор).

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 ; останов

Так же ссылку на саму консультацию: http://rfpro.ru/question/190944

Состояние: Консультация закрыта

Ответ # 276058 от Лысков Игорь Витальевич (Старший модератор)

Здравствуйте, baker48!
Держите программу...
Выводимые строки необходимо после компиляции программы вручную записать по адресам 60 и 80 (в окне "Память")
Используются символы в кодировке ANSI, в десятичном представлении.
Сообщение "Сообщение 1" будет выглядеть, как последовательность (начиная с адреса 60)
209,238,238,225,249,229,237,232,229,32,49,0 ( 0- признак конца строки)
Второе сообщение "Сообщение 2" (начиная с адреса 80):
209,238,238,225,249,229,237,232,229,32,50,0
При желании, можете прописать любые строки...

Код (Assembler) :: выделить код
RDI #101 ;команда очистки буфера
out 1 ; для клавиатуры
RDI #102 ; команда сброса ошибки
out 1 ; для клавиатуры
RDI #10 ; команда разрешения МВУ
OUT 1 ; для клавиатуры без прерываний (по опросу)
RDI #103 ; команда установки посимвольного ввода
out 1 ; для клавиатуры

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

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

IN 0 ; считываем код с клавиатуры
jnz CONTINUE

hlt ; было просто нажатие на "Завершить ввод", то завершаем программу

CONTINUE:
sbi #52 ; проверим на клавишу '4'
js RESET ; <'4' - игнорируем, на сброс клавиатуры
jz MESS_1 ; '4'
sbi #1
jz MESS_2 ;'5'

;все другие игнорируем и просто сбрасываем клавиатуру
RESET:RDI #101 ; команда сброса
out 1 ; в клавиатуру
RDI #103 ; команда установки посимвольного ввода (сбрасывается при сбросе)
out 1 ; в клавиатуру
jmp LOOP ; на чтение состояния клавиатуры

;подпрограммы вывода сообщений
MESS_1: RDI #60;адрес в памяти первого сообщения "Сообщение 1"
jmp PRINT

MESS_2: RDI #80 ;адрес в памяти второго сообщения "Сообщение 2"

PRINT: ;общая подпрограмма вывода
WR r0 ;адресуем строку символов при помощи r0

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

MESS_LOOP: ;цикл вывода
RD @r0+ ;читаем очередной символ с автоинкрементом адреса r0
jz RESET ;код 0 - признак конца строки
OUT 10 ;символ на экран
jmp MESS_LOOP ;на повтор


Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 19.01.2018, 16:11

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

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

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.13390 сек.

© 2001-2018, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.42 от 30.12.2017