21.09.2018, 09:59 [+3 UTC]
в нашей команде: 2 971 чел. | участники онлайн: 3 (рекорд: 21)

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

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

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

:: правила

:: новости

:: участники

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

:: форум

:: блоги

:: поиск

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

:: наш журнал

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

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

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

:: поддержка

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

Версия системы:
7.50 (13.09.2018)

Общие новости:
13.04.2018, 10:33

Форум:
18.09.2018, 08:51

Последний вопрос:
20.09.2018, 17:55

Последний ответ:
20.09.2018, 18:34

Последняя рассылка:
20.09.2018, 20:45

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

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

Наша кнопка:

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

Отзывы о нас:
22.01.2012, 20:03 »
Даровко Антон Владимирович
Я посмотрел Ваше решение задачи и оценил его на отлично. [вопрос № 185237, ответ № 269661]
25.05.2010, 22:00 »
EMV
Спасибо, программа конвертирует AVC в AVI. [вопрос № 178628, ответ № 261645]

РАЗДЕЛ • Assembler

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

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

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

Зенченко Константин Николаевич
Статус: Модератор
Рейтинг: 332
Лысков Игорь Витальевич
Статус: Старший модератор
Рейтинг: 94
Kdsfofwe21
Статус: 1-й класс
Рейтинг: 49

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

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

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

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

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

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

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

Здравствуйте, Дмитрий!
Программа делает следующее:
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

[подробно]

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

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

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

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

ID: 7438

# 1

= общий = | 08.01.2018, 15:12 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
baker48:

Самостоятельно решить не пробовали?
Попутно ответьте на несколько вопросов:
1) Числа в CompModel имеют не более 5 разрядов. Как и куда Вы предполагаете ввод десяти цифр?
2) Что понимается под перекодировкой в “8421”?
3) В каком режиме используется клавиатура?
4) Настоятельно рекомендуется предоставление своей версии решения задачи...

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

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

ID: 7438

# 2

= общий = | 08.01.2018, 15:57 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
baker48:

Имейте в виду, без активного сотрудничества с Вами, программу Вы не получите.
Хотите программу, давайте работать вместе. smile

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

baker48
Посетитель

ID: 401683

# 3

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

1) с замечанием согласен, преподаватель выдал некорректное задание. таким образом пусть максимальное число для данного задания будет =5.
2) прикрепляю картинку ниже. ( 8421 - это одна из разновидностей двоичного кода). таким образом: 2^3=8, 2^2=4, 2^1=2, 2^0=1 (отсюда получается 8421).
3) на данный вопрос ответ дать пока что не могу. пусть будет любой режим ,который позволяет программе корректно работать.
4) мой вариант без перекодировки в 8421:

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 ; на чтение состояния клавиатуры

-----
 Прикрепленный файл (кликните по картинке для увеличения):

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

ID: 7438

# 4

= общий = | 08.01.2018, 19:14 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
baker48:

Все равно, до конца не понял, что требуется... Итак, по пунктам:
1) программа должна обеспечивать ввод последовательности
ASCII-кодов (символов) десятичных цифр (не длиннее десяти)
Т.е. вводим коды '0'-'9'. Договорились, что до 5 цифр.

2) перекодировка в “8421”
Так понимаю, надо получить двоичное представление каждой введенной цифры,
предварительно приведенной к виду 0-9. Правильно?
И где хранить это двоичное представление? Начиная с какого-то адреса в памяти? Или как?
Непонятно, при чем тут 8421-кодировка? Просто, чтобы сделать?

3) упаковку в десятичное число (первый введенный символ – старшая
цифра) и размещение в ячейке ОЗУ
Типа получение из последовательности цифр числа, например, ввели "123" - получаем число 123
Так?

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

baker48
Посетитель

ID: 401683

# 5

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

1) по первому пункту до 5
2) да нужно получить двоичное представление каждой введенной цифры. хранить с адреса в памяти. кодировка 8421 нужно просто чтобы сделать, как вы и сказали.
3) именно так да.

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

ID: 7438

# 6

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

Ок, сделаю завтра. Сегодня некогда. Заодно проверю Ваш код...

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

baker48
Посетитель

ID: 401683

# 7

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

Заранее спасибо.
P.S. Не забывайте что мой код без перекодировки в 8421.

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

ID: 7438

# 8

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

Голубчик, это не Ваш код. Это - мой код. smile Из вопроса 190277
Один в один... Без зазрения совести назвали своим кодом... Даже помогать расхотелось...

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

baker48
Посетитель

ID: 401683

# 9

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

Нехорошо получилось. Данный код мне предоставил один товарищ, которого я так же попросил помочь мне и выходит, что выдал его за свой... smile
Я дико извиняюсь перед Вами... Но может все таки возможно возобновить наше сотрудничество. Очень неудобно перед Вами. Еще раз прошу прощения, что я проглядел(

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

ID: 7438

# 10

= общий = | 09.01.2018, 21:56 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
baker48:

Что значит "проглядел"? Даже, если код взят у товарища, уже не Ваш...
Впрочем, может и ошибаюсь... Может вариант в вопросе и не мой... Давненько было. smile В любом случае - не Ваш... smile
Но уж больно комменты на мои похожи... smile

Ладно, сделаю, но уже не сегодня...

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

baker48
Посетитель

ID: 401683

# 11

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

Огромное спасибо.

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

ID: 7438

# 12

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

Обратите внимание: внес изменения в код...

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

 

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

Яндекс Rambler's Top100

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

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

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