Консультация № 193254
13.05.2018, 23:36
0.00 руб.
14.05.2018, 09:29
0 11 0
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:

Выполнить программу двумя способами на Модель учебной ЭВМ — сначала в режиме программного контроля, далее модифицировать программу таким образом, чтобы события обрабатывались в режиме прерывания про­граммы. Поскольку "фоновая" (основная) задача для этого случая в заданиях отсутствует, роль ее может сыграть "пустой цикл" типа:
М: NOP
NOP
JМР М

Программа должна выводить на дисплей каждый введенный с клавиатуры символ, при­чем заглавную русскую букву выводить "в двух экземплярах"

Используемые ВУ: Клавиатура, дисплей, таймер

Пояснения: очистка буфера клавиатуры после вво­да 48 символов, очистка экрана каждые 15с

Помогите пожалуйста не могу разобраться.

Обсуждение

давно
Посетитель
7438
7205
14.05.2018, 10:44
общий
14.05.2018, 10:48
Адресаты:
Сказали много, но не сказали главного: Compmodel. Так ведь?
"Модель учебной ЭВМ" может быть все, что угодно...
Даже если говорите "Не могу разобраться" постарайтесь сначала самостоятельно, да и теорию почитайте...
И приведите хоть какой-то код, даже если он Вам кажется бредом...
Пока я занят (кроме меня Вам, полагаю, никто не поможет ), так что используйте время для самостоятельной работы...
Если есть конкретные вопросы, задавайте. Постараюсь ответить сразу же...
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
402055
10
14.05.2018, 17:04
общий
15.05.2018, 00:21
Цитата: Лысков Игорь Витальевич
Да, CompModel
Я пока только просто ввод с клавиатуры могу сделать больше ничего( Как получиться, если поможете буду очень рад)
давно
Посетитель
402055
10
15.05.2018, 00:35
общий
Всё что нашёл пока что. Может понадобиться) описание работы Таблица ASCII (кодировка Windows-1251)
давно
Посетитель
7438
7205
15.05.2018, 10:55
общий
Адресаты:
Хорошо. Почитайте. Попробуйте написать код, который вводит с клавиатуры. Ведь можете?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
402055
10
15.05.2018, 13:47
общий
15.05.2018, 13:49
Цитата: Лысков Игорь Витальевич
Вот что пока сделал

Нашел ваши наработки, сделал 15 сек очистки дисплея. Проверьте так или нет)) Вот только не понял где так очистка клавиатуры после 48 символов как сделать?
[code lang=asm]RDI #42 ;задаем адрес отработки прерывания клавиатуры
WR 100 ;фиксированный адрес ячейки 0 прерывания (клавиатуры)
RDI #47 ;задаем адрес отработки прерывания таймера
WR 102 ;фиксированный адрес ячейки 2 прерывания (таймера)
;При необходимости изменить, берем адреса из окна "Программа"!

RDI #101 ;команда сброса
OUT 11 ;для дисплея
OUT 1 ;и клавиатуры
RDI #11 ;режимы
OUT 11 ;для дисплея - разрешение и автоинкемент адреса
OUT 1 ;для клавиатуры - разрешение и работу по прерыванию
RDI #103 ;для клавиатуры - посимвольный режим
OUT 1

RDI #1000 ;останов
OUT 22 ;таймера 1
RDI #1500 ;15 сек
OUT 21 ;для таймера 1
RDI #1111 ;каждые 1 мс, декремент, по прерыванию, начало счета
OUT 22 ;работаем с таймером 1
RDI #101 ;сброс флага переполнения 1 таймера
OUT 20

EI ;разрешаем прерывания

LOOP: ;основной цикл
IN 2 ;состояние колавиатуры
JZ LOOP ;пусто - на основной цикл
SBI #10 ;есть код в буфере
JZ LOOP ;на основной цикл
RDI #101 ;ошибка переполнения - сбрасываем клавиатуру
OUT 1
RDI #103 ;восстанавливаем посимвольный режим
OUT 1
JMP LOOP ;на основной цикл

;Т.к. у нас основной цикл непустой,
;в анализе переполнения буфера клавиатуры используется аккумулятор
;то в прерываниях необходимо сохранить аккумулятор
KEYBOARD: ;прерывание от клавиатуры
WR R0 ;сохраним аккумулятор в регистре
IN 0 ;читаем код
OUT 10 ;на экран
RD R0 ;восстанавливаем аккумулятор
IRET ;возврат из прерывания

TIMER: ;прерывание от таймера
WR r1 ;сохраним аккумулятор
RDI #101 ;сброс флага переполнения 1 таймера
OUT 20
RDI #1500 ;устанавливаем таймер 1 на 10 сек
OUT 21
RDI #101 ;сброс дисплея
OUT 11
RDI #103 ;восстанавливаем посимвольный режим
OUT 1
RD R1 ;восстанавливаем аккумулятор
IRET
[/code]
Написал небольшой цикл для ввода заглавной буквы, только не знаю так нет. Мне ведь надо чтобы заглавные буквы выводить "в двух экземплярах". Как это сделать пока не нашёл способа.
[code lang=asm]INPUT:
IN 0 ;получим из буфера код последней клавиши
JZ INPUT ;если буфер пуст, то далее по циклу

WR R0 ;сохранение символа

;отсев
SUB #192
JS INPUT ;если меньше - прием след клавиши
SUB #32
JNS INPUT ;если больше или равно - приём след клавиши

;после отсева остаются только ЗАГЛАВНЫЕ РУССКИЕ
RD R0 ;восстанавливаем символ
OUT 10 ;выводим его на экран[/code]
Это как я понял с прерываниями? Как тогда должно быть в режиме программного контроля?
давно
Посетитель
7438
7205
15.05.2018, 13:58
общий
Адресаты:
Хорошо, посмотрю вечером.
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
402055
10
15.05.2018, 23:39
общий
15.05.2018, 23:39
Очистка буфера клавиатуры после ввода 48 символов вроде так:
[code lang=asm]INPUT:
IN 0 ;получим из буфера код последней клавиши
JZ INPUT ;если буфер пуст, то далее по циклу

OUT 10 ;на экран последнюю клавишу
RD R1 ;здесь, получение индекса ячейки
ADD #1 ;увеличим на 1
WR R1 ;сохраним в R1
OUT 13 ;в порт новое значение

RD R0 ;в R0 храним кол-во введ символов
ADD #1 ;увеличим на 1
WR R0 ;сохраним
SBI 48 ;------------------------проверим, достигло ли оно разрешённого кол-ва(48)
JNZ INPUT ;если нет то по циклу
RD #0 ;иначе обнулим
WR R0
RDI #101 ;и очистим буфер
OUT 1
JMP INPUT ;по бесконечному циклу[/code]
давно
Посетитель
402055
10
16.05.2018, 20:51
общий
16.05.2018, 20:52
Цитата: Лысков Игорь Витальевич
здравствуйте, когда сможете посмотреть?
давно
Посетитель
7438
7205
16.05.2018, 20:59
общий
Адресаты:
Вчера было не до этого... Постараюсь сегодня
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
402055
10
17.05.2018, 00:24
общий
Адресаты:
Хорошо)
давно
Посетитель
402055
10
21.05.2018, 02:26
общий
Никак не могу сделать((
Форма ответа