8051 ASM: Как нибудь улучшить код

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Голимый
Встал на лапы
Сообщения: 117
Зарегистрирован: Пн дек 08, 2014 19:45:24
Откуда: Воронеж

8051 ASM: Как нибудь улучшить код

Сообщение Голимый »

Понадобились две необычные функции. Преобразовать 16-ричное значение байта, в ASCII эквивалент его 16-ричного значения. Короче, превратить байт, скажем 0xCD в два ASCII символа, - "C" и "D". а так-же, подпрограмму, делающую тоже самое, только наоборот. Поскрипев мозгами, решил что это нужно делать по таблице, и и быстро и решительно написал решение для первой задачи. Получилось хорошо. Со второй можно сказать, тоже получилось, но не так как хотел. Получилось объемно, с обилием меток и странных действий, а главное - очень тормознуто, т.к последовательно два раза подряд перебирается вся таблица, (обратную таблицу составить не сумел, приходится подбирать), плюс, нужен дополнительный байт памяти. Вылизал подпрограмму как сумел, но не смог особо уменьшить размер, и сократить количество переменных.
Наверное, существуют какие-то другие способы решения такой задачи, т.к прежде не делал такого, или хотя-бы способ улучшить хотя-бы то, что есть?
Есть вот такой черновик этих подпрограмм, для вышагивания в эмуляторе.
Вложения
handwrite.asm
(1.04 КБ) 411 скачиваний
Трудное детство, стальные игрушки.
Реклама
Аватара пользователя
da-nie
Говорящий с текстолитом
Сообщения: 1590
Зарегистрирован: Вс июн 24, 2012 16:07:00
Откуда: Лен.Обл.
Контактная информация:

Re: 8051 ASM: Как нибудь улучшить код

Сообщение da-nie »

А разве у 8051 нет команд двоично-десятичного преобразования? da или как-то так называлась вроде бы. Не помню.
И день и ночь в пути...
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos
Реклама
Голимый
Встал на лапы
Сообщения: 117
Зарегистрирован: Пн дек 08, 2014 19:45:24
Откуда: Воронеж

Re: 8051 ASM: Как нибудь улучшить код

Сообщение Голимый »

[uquote="da-nie",url="/forum/viewtopic.php?p=3266319#p3266319"]А разве у 8051 нет команд двоично-десятичного преобразования? da или как-то так называлась вроде бы. Не помню.[/uquote]
DA A - это десятичная коррекция после операции сложения, т.к когда 16-рично складываются две десятичные числа, и результат - не десятичный. У 8051 вообще нет инструкций для преобразования чего либо.
Трудное детство, стальные игрушки.
petrenko
Друг Кота
Сообщения: 5326
Зарегистрирован: Вт фев 21, 2012 13:51:55
Откуда: Начинающий
Контактная информация:

Re: 8051 ASM: Как нибудь улучшить код

Сообщение petrenko »

Таблично это конечно универсально.

Но если учесть, что в ASCII коды десятичных идут последовательно от 20h 29h ,а коды букв от A до F соотв. от 31h до 36h
,то каждый ниббл можно по очереди засылать в Acc ,дополнять старшими нулями и после проверки диапазона {0..9} , {A..F} прибавлять 20h или 31h соотв. ,после чего отправлять в область отображения.
< виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15575
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: 8051 ASM: Как нибудь улучшить код

Сообщение BOB51 »

Полная таблица или таки представление HEX - файла в исполняемый код для загрузки в память программ?
:roll:
За полную не скажу(там все же или таблица или последовательное сравнение необходимо), а вот для бутлоадера, использующего *.hex файл есть заготовки в исходнике этого проекта
http://radiokot.ru/forum/viewtopic.php? ... 7#p3167597
http://radiokot.ru/forum/download/file.php?id=291160
:beer:
Реклама
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7360
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: 8051 ASM: Как нибудь улучшить код

Сообщение uldemir »

[uquote="Голимый",url="/forum/viewtopic.php?p=3266324#p3266324"][uquote="da-nie",url="/forum/viewtopic.php?p=3266319#p3266319"]А разве у 8051 нет команд двоично-десятичного преобразования? da или как-то так называлась вроде бы. Не помню.[/uquote]
DA A - это десятичная коррекция после операции сложения, т.к когда 16-рично складываются две десятичные числа, и результат - не десятичный. У 8051 вообще нет инструкций для преобразования чего либо.[/uquote]
в 580-м процессоре была процедура перевода двоичного числа от 0 до F в ASCII код:

Код: Выделить всё

        ANI	0FH     ; маскируем лишнее
        ADI	90H
        DAA
        ACI	40H
        DAA
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Реклама
Ответить

Вернуться в «Разные вопросы по МК»