20.11.2018, 17:44 [+3 UTC]
в нашей команде: 3 125 чел. | участники онлайн: 6 (рекорд: 19)

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

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

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

:: правила

:: новости

:: участники

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

:: форум

:: блоги

:: поиск

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

:: наш журнал

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

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

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

:: поддержка

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

Версия системы:
7.55 (06.11.2018)

Общие новости:
24.09.2018, 16:49

Форум:
20.11.2018, 17:07

Последний вопрос:
20.11.2018, 15:30

Последний ответ:
20.11.2018, 15:57

Последняя рассылка:
20.11.2018, 11:15

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

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

Наша кнопка:

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

Отзывы о нас:
22.01.2012, 20:04 »
Даровко Антон Владимирович
Я посмотрел Ваше решение задачи и оценил его на отлично. [вопрос № 185237, ответ № 269660]

РАЗДЕЛ • Assembler

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

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

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

Зенченко Константин Николаевич
Статус: Модератор
Рейтинг: 700
Лысков Игорь Витальевич
Статус: Старший модератор
Рейтинг: 117
Evgen aka Chuma
Статус: 6-й класс
Рейтинг: 14

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

Консультация онлайн # 193254
Раздел: • Assembler
Автор вопроса: Easr_Alex (1-й класс)
Отправлена: 13.05.2018, 23:36
Поступило ответов: 0

Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:

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

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

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

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

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

Исправление дублирования.
--------

• Отредактировал: Зенченко Константин Николаевич (Модератор)
• Дата редактирования: 14.05.2018, 09:29

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

Oтветов пока не поступило.

Мини-форум консультации № 193254

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

ID: 7438

# 1

= общий = | 14.05.2018, 10:44 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Easr_Alex:

Сказали много, но не сказали главного: Compmodel. Так ведь? smile
"Модель учебной ЭВМ" может быть все, что угодно...
Даже если говорите "Не могу разобраться" постарайтесь сначала самостоятельно, да и теорию почитайте...
И приведите хоть какой-то код, даже если он Вам кажется бредом... smile
Пока я занят (кроме меня Вам, полагаю, никто не поможет smile ), так что используйте время для самостоятельной работы...
Если есть конкретные вопросы, задавайте. Постараюсь ответить сразу же...

=====
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен

• Отредактировал: Лысков Игорь Витальевич (Старший модератор)
• Дата редактирования: 14.05.2018, 10:48

Easr_Alex
1-й класс

ID: 402055

# 2

= общий = | 14.05.2018, 17:04 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

© Цитата: Лысков Игорь Витальевич
Да, CompModel
Я пока только просто ввод с клавиатуры могу сделать больше ничего( Как получиться, если поможете буду очень рад)

• Отредактировал: Easr_Alex (1-й класс)
• Дата редактирования: 15.05.2018, 00:21

Easr_Alex
1-й класс

ID: 402055

# 3

= общий = | 15.05.2018, 00:35 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Всё что нашёл пока что. Может понадобиться) описание работы Таблица ASCII (кодировка Windows-1251)

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

ID: 7438

# 4

= общий = | 15.05.2018, 10:55 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Easr_Alex:

Хорошо. Почитайте. Попробуйте написать код, который вводит с клавиатуры. Ведь можете? smile

=====
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен

Easr_Alex
1-й класс

ID: 402055

# 5

= общий = | 15.05.2018, 13:47 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

© Цитата: Лысков Игорь Витальевич
Вот что пока сделал

Нашел ваши наработки, сделал 15 сек очистки дисплея. Проверьте так или нет)) Вот только не понял где так очистка клавиатуры после 48 символов как сделать?
Код (Assembler) :: выделить код
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

Написал небольшой цикл для ввода заглавной буквы, только не знаю так нет. Мне ведь надо чтобы заглавные буквы выводить "в двух экземплярах". Как это сделать пока не нашёл способа.
Код (Assembler) :: выделить код
INPUT:
   IN 0                       ;получим из буфера код последней клавиши
   JZ INPUT                   ;если буфер пуст, то далее по циклу
 
   WR R0                      ;сохранение символа
   
;отсев
   SUB #192
   JS INPUT                   ;если меньше - прием след клавиши
   SUB #32
   JNS INPUT                  ;если больше или равно - приём след клавиши
   
;после отсева остаются только ЗАГЛАВНЫЕ РУССКИЕ
   RD R0                      ;восстанавливаем символ
   OUT 10                     ;выводим его на экран

Это как я понял с прерываниями? Как тогда должно быть в режиме программного контроля?

• Отредактировал: Easr_Alex (1-й класс)
• Дата редактирования: 15.05.2018, 13:49

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

ID: 7438

# 6

= общий = | 15.05.2018, 13:58 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Easr_Alex:

Хорошо, посмотрю вечером.

=====
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен

Easr_Alex
1-й класс

ID: 402055

# 7

= общий = | 15.05.2018, 23:39 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Очистка буфера клавиатуры после ввода 48 символов вроде так:

Код (Assembler) :: выделить код
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   ;по бесконечному циклу

• Отредактировал: Easr_Alex (1-й класс)
• Дата редактирования: 15.05.2018, 23:39

Easr_Alex
1-й класс

ID: 402055

# 8

= общий = | 16.05.2018, 20:51 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

© Цитата: Лысков Игорь Витальевич
здравствуйте, когда сможете посмотреть?

• Отредактировал: Easr_Alex (1-й класс)
• Дата редактирования: 16.05.2018, 20:52

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

ID: 7438

# 9

= общий = | 16.05.2018, 20:59 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Easr_Alex:

Вчера было не до этого... Постараюсь сегодня smile

=====
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен

Easr_Alex
1-й класс

ID: 402055

# 10

= общий = | 17.05.2018, 00:24 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Лысков Игорь Витальевич:

Хорошо)

Easr_Alex
1-й класс

ID: 402055

# 11

= общий = | 21.05.2018, 02:26 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Никак не могу сделать((

 

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

Яндекс Rambler's Top100

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

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

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