31.03.2017, 01:29 [+3 UTC]
в нашей команде: 1 873 чел. | участники онлайн: 3 (рекорд: 21)

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

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

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

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

:: правила

:: новости

:: участники

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

:: форум

:: блоги

:: поиск

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

:: наш журнал

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

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

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

:: поддержка

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

Версия системы:
7.41 (25.02.2017)

Общие новости:
23.02.2017, 09:51

Форум:
26.03.2017, 18:27

Последний вопрос:
30.03.2017, 21:09

Последний ответ:
30.03.2017, 16:27

Последняя рассылка:
30.03.2017, 19:45

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

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

Наша кнопка:

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

Отзывы о нас:
26.01.2010, 22:23 »
Dimon4ik
Да! Это действительно удобное свойство, особенно мне для меня оно как раз то, что нужно! Очень хороший компонент. Легко понял как им пользоваться, там и понимать нечего. Вы ответили на вторую часть вопроса, так как на первую часть вопроса отлично ответил Selax, поэтому вы вместе мне очень помогли. Отлично! [вопрос № 176317, ответ № 258974]
28.01.2016, 17:17 »
svrvsvrv
Большое спасибо. А есть другие способы вычисления? [вопрос № 188721, ответ № 273299]
21.02.2010, 22:59 »
Бабич Илья Александрович
Спасибо большое,понял где ошибся когда сам делал [вопрос № 176834, ответ № 259644]

РАЗДЕЛ • Assembler

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

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

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

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

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

Консультация онлайн # 190277
Раздел: • Assembler
Автор вопроса: misha.ya.ndex (Посетитель)
Отправлена: 11.12.2016, 19:37
Поступило ответов: 1

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

програмку нужно переделать в режим прерывания. написано у compmodel

RD #0 ;сначала будет 0 
wr R1 ;здесь будем накапливать наше число 
RD #5 ;максимум 5 цифр 
wr R5 ;сохраним 
RDI #101 ;команда очистки буфера 
out 1 ; для клавиатуры 
RDI #102 ; команда сброса ошибки 
out 1 ; для клавиатуры 
RDI #10 ; команда разрешения МВУ 
OUT 1 ; для клавиатуры без прерываний (по опросу) 
RDI #103 ; команда установки посимвольного ввода 
out 1 ; для клавиатуры 
LOOP:IN 2 ; читаем регистр состояния клавиатуры 
DIV #10 ; делим на 10, чтобы второй разряд готовности стал в первом разряде 
WR R3 ; сохраним 
DIV #2 ; разделим на 2 
MUL #2 ; умножим на 2 
SUB R3 ; отнимем сохранное 
JZ LOOP ; если четное, то нет кода в буфере, идем на цикл 
IN 0 ; считываем код с клавиатуры 
wr R2 ; сохраним 
jz SAVE ; было просто нажатие на "Завершить ввод" 
sbi #48 ; <\'0\' ;проверим на цифру 
js RESET ; игнорируем, на сброс клавиатуры 
sbi #10 ; >\'9\' 
jns RESET ; игнорируем, на сброс клавиатуры 
adi #10 ;восстановим число 0-9 
wr r2 ; сохраним 
rd r1 ; наше число 
mul #10 ; умножаем на 10 
add r2 ; добавляем введенный символ 
wr r1 ; и на сохранение 
jrnz r5,RESET ; ждем максимум 5 цифр 
SAVE:rd #100 ;адрес ячейки, куда запишем результат 
wr r0 ; будем адресовать через R0 
rd r1 ; введенное число 
wr @r0 ; сохраняем в памяти 
hlt ; останов 
RESET:RDI #101 ; команда сброса 
out 1 ; в клавиатуру 
RDI #103 ; команда установки посимвольного ввода (сбрасывается при сбросе) 
out 1 ; в клавиатуру 
jmp LOOP ; на чтение состояния клавиатуры 

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

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

Здравствуйте, misha.ya.ndex!
Где-то так:

Код (Assembler) :: выделить код
RD #0 ;сначала будет 0 
wr R1 ;здесь будем накапливать наше число 
RD #5 ;максимум 5 цифр 
wr R5 ;сохраним 

;настроим клавиатуру
RDI #24 ;задаем адрес отработки прерывания клавиатуры
;точный адрес можно посмотреть в окне "программа"
WR 100 ;фиксированный адрес ячейки 0 прерывания (клавиатуры) 
RDI #101 ;команда сброса
OUT 1
RDI #11 ;разрешение и работа по прерыванию
OUT 1
RDI #103 ;посимвольный режим
OUT 1

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

LOOP: ;основной цикл
rd r5 ;циклим, пока в регистре r5 не 0
jnz LOOP
;заканчиваем работу
rd #80 ;адрес ячейки, куда запишем результат 
wr r0 ; будем адресовать через R0 
rd r1 ; введенное число 
wr @r0 ; сохраняем в памяти 
hlt ; останов 

;Т.к. у нас основной цикл непустой,
;в анализе переполнения буфера клавиатуры используется аккумулятор
;то в прерывании необходимо сохранить аккумулятор
KEYBOARD: ;прерывание от клавиатуры
WR R9 ;сохраним аккумулятор в регистре
IN 0 ;читаем код
wr R2 ; сохраним 
jz FINISH ; было просто нажатие на "Завершить ввод" - завершаем работу
sbi #48 ; <\'0\' ;проверим на цифру 
js RESET ; игнорируем, на сброс клавиатуры 
sbi #10 ; >\'9\' 
jns RESET ; игнорируем, на сброс клавиатуры 
adi #10 ;восстановим число 0-9 
wr r2 ; сохраним 
rd r1 ; наше число 
mul #10 ; умножаем на 10 
add r2 ; добавляем введенный символ 
wr r1 ; и на сохранение 
jrnz r5,RESET ; ждем максимум 5 цифр 
;ввели все 5 разрядов, R5=0 - автоматом завершится и основной цикл
RD R9 ;восстанавливаем аккумулятор
IRET ;возврат из прерывания

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

FINISH:RDI #0 ;обнулим счетчик разрядов, чтобы завершился основной цикл!
wr r5
rd r9 ;восстановим аккумулятор
IRET ;возврат из прерывания


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

5
нет комментария
-----
Дата оценки: 12.12.2016, 22:36

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

0

[подробно]

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

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

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

Яндекс Rambler's Top100

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

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

© 2001-2017, Портал RFPRO.RU, Россия
Авторское право: ООО "Мастер-Эксперт Про"
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.41 от 25.02.2017
Бесплатные консультации онлайн