Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Ассемблер? Это просто! Учимся программировать


РАССЫЛКИ ПОРТАЛА RFPRO.RU

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

Коцюрбенко Алексей aka Жерар
Статус: Мастер-Эксперт
Рейтинг: 608
∙ повысить рейтинг »
Evgen aka Chuma
Статус: 6-й класс
Рейтинг: 52
∙ повысить рейтинг »
quirck
Статус: 1-й класс
Рейтинг: 0
∙ повысить рейтинг »

∙ Assembler

Номер выпуска:1684
Дата выхода:18.01.2018, 15:15
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:53 / 18
Вопросов / ответов:1 / 1

Консультация # 192342: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Имеется программа Comp Model. Необходимо выполнить следующее задание: Ввод десятиразрядных чисел в ячейки ОЗУ. Пояснения: программа должна обеспечивать ввод последовательности ASCII-кодов (символов) десятичных цифр (не длиннее десяти), перекодировку в “842...

Консультация # 192342:

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

Имеется программа Comp Model. Необходимо выполнить следующее задание:
Ввод десятиразрядных чисел в ячейки ОЗУ.
Пояснения: программа должна обеспечивать ввод
последовательности ASCII-кодов (символов) десятичных
цифр (не длиннее десяти), перекодировку в “8421”, упаковку
в десятичное число (первый введенный символ – старшая
цифра) и размещение в ячейке ОЗУ. ASCII-коды (символы)
не-цифр игнорировать.

Заранее благодарен. С а\уважением, Дмитрий.

Дата отправки: 08.01.2018, 14:50
Вопрос задал: baker48 (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


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

Здравствуйте, Дмитрий!
Программа делает следующее:
1) клавиатура настраивается на ввод всей строки целиком. ввод завершается нажатием на "конец ввода"
2) любой символ-нецифра прерывает ввод числа из строки, также, как и "конец ввода" и превышение 5 цифр
3) введенное число сохраняем в ячейке 80
4) двоичное представление каждого введенного разряда сохраняем в памяти в обратном порядке! Разряды сохраняем в виде строки символов-цифр '0','1' (48,49). Адрес строки 8421-кода - 90
Обратный порядок вывода, т.к. последовательно определяем биты, начиная с младшего. Строка завершается нулем.

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

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

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

GET:IN 0 ; считываем код с клавиатуры
jz SAVE ; конец строки по "Завершить ввод"

sbi #48 ; <'0' ;проверим на цифру
js SAVE ; по любой нецифре заканчиваем ввод
sbi #10 ; >'9'
jns SAVE
adi #10 ;восстановим число 0-9
wr r2 ; сохраним

rd r8 ; наше число
mul #10 ; умножаем на 10
add r2 ; добавляем введенный разряд
wr r8 ; и на сохранение

call c8421 ;віведем 8421 цифры в r2 по адресу в r0

jrnz r5,GET ; на анализ следующего знака (ждем максимум 5 цифр)

SAVE:rdi #0
wr @r0

rd #80 ;адрес ячейки, куда запишем результат
wr r0 ; будем адресовать через R0
rd r8 ; введенное число
wr @r0 ; сохраняем в памяти

hlt ; останов

;выведем цифру в виде двоичного кода
c8421:
rdi #4 ;4 бита
wr r7 ;счетчик бит
rd r2 ;наше число

bin_loop: ;цикл по формированию цифр-бит числа
div #2 ;делим на 2
wr r6 ;сохраним частное для дальнейшего расчета
mul #2 ;и умножим на 2, тем самым обнулим младший бит!
sub r2 ;и сравним с изначальным
jz digit0 ;если равны, то младший бит - 0
;неравны, младший бит - '1'
rdi #49 ;код символа-цифры '1'
jmp save_digit ;на сохранение
digit0: ;равны
rdi #48 ;код символа-цифры '0'
save_digit:
wr -@r0 ;сохраняем в памяти в обратном порядке, перед сохранением уменьшаем указатель r0 на 1
rd r6 ;остальные биты числа
wr r2 ;сохраним для анализа на четность
jrnz r7,bin_loop ;пока не выведем все биты
rd r0 ;сдвинем указатель в конец средующей группы бит
adi #8
wr r0
ret

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

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


В избранное