Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить

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

Пт дек 22, 2017 19:51:51

Понадобились две необычные функции. Преобразовать 16-ричное значение байта, в ASCII эквивалент его 16-ричного значения. Короче, превратить байт, скажем 0xCD в два ASCII символа, - "C" и "D". а так-же, подпрограмму, делающую тоже самое, только наоборот. Поскрипев мозгами, решил что это нужно делать по таблице, и и быстро и решительно написал решение для первой задачи. Получилось хорошо. Со второй можно сказать, тоже получилось, но не так как хотел. Получилось объемно, с обилием меток и странных действий, а главное - очень тормознуто, т.к последовательно два раза подряд перебирается вся таблица, (обратную таблицу составить не сумел, приходится подбирать), плюс, нужен дополнительный байт памяти. Вылизал подпрограмму как сумел, но не смог особо уменьшить размер, и сократить количество переменных.
Наверное, существуют какие-то другие способы решения такой задачи, т.к прежде не делал такого, или хотя-бы способ улучшить хотя-бы то, что есть?
Есть вот такой черновик этих подпрограмм, для вышагивания в эмуляторе.
Вложения
handwrite.asm
(1.04 KiB) Скачиваний: 393

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

Пт дек 22, 2017 20:06:58

А разве у 8051 нет команд двоично-десятичного преобразования? da или как-то так называлась вроде бы. Не помню.

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

Пт дек 22, 2017 20:22:00

А разве у 8051 нет команд двоично-десятичного преобразования? da или как-то так называлась вроде бы. Не помню.

DA A - это десятичная коррекция после операции сложения, т.к когда 16-рично складываются две десятичные числа, и результат - не десятичный. У 8051 вообще нет инструкций для преобразования чего либо.

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

Пт дек 22, 2017 22:28:15

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

Но если учесть, что в ASCII коды десятичных идут последовательно от 20h 29h ,а коды букв от A до F соотв. от 31h до 36h
,то каждый ниббл можно по очереди засылать в Acc ,дополнять старшими нулями и после проверки диапазона {0..9} , {A..F} прибавлять 20h или 31h соотв. ,после чего отправлять в область отображения.

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

Сб дек 23, 2017 06:20:34

Полная таблица или таки представление HEX - файла в исполняемый код для загрузки в память программ?
:roll:
За полную не скажу(там все же или таблица или последовательное сравнение необходимо), а вот для бутлоадера, использующего *.hex файл есть заготовки в исходнике этого проекта
viewtopic.php?p=3167597#p3167597
download/file.php?id=291160
:beer:

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

Сб дек 23, 2017 09:40:17

А разве у 8051 нет команд двоично-десятичного преобразования? da или как-то так называлась вроде бы. Не помню.

DA A - это десятичная коррекция после операции сложения, т.к когда 16-рично складываются две десятичные числа, и результат - не десятичный. У 8051 вообще нет инструкций для преобразования чего либо.

в 580-м процессоре была процедура перевода двоичного числа от 0 до F в ASCII код:
Код:
        ANI   0FH     ; маскируем лишнее
        ADI   90H
        DAA
        ACI   40H
        DAA
Ответить