У меня получилась такая процедура:
Скрытый текст
Код:mvi a, 0Fh ;Преобразуемое число ;Программа lxi b, seg add c mov e, a mov a, b adc a mov d, a ldax d ;Вывод результата out ..... ;Таблица seg: db 3Fh, 06h, 5Bh, 4Fh, 66h, 6Dh, 7Dh, 07h db 7Fh, 6Fh, 77h, 7Ch, 39h, 5Eh, 79h, 71h[свернуть]
Не знаю, на сколько она корректна. По результатам
насилия симулятора, промахов мимо таблицы не случалось,
независимо от состояния флага переноса.
Это я о подводном камне из вложения
На момент готовности своего варианта процедуры "перекодировки"
я еще не видел других вложений с кодом.
С ними так же буду пробовать разобраться.
Update:
Посмотрев другие вложения, составил новый код процедуры.
Предыдущий код оказывал влияние на флаг переноса С,
и пришлось делать извращение, что бы его учесть.
Новый код никак не влияет на состояние флага С, и
при этом корректно формирует адрес обращения к
таблице "перекодировки".
Скрытый текст
Код:mvi a, 0Fh ;Преобразуемое число ;Программа lxi h, 0000h add l mov l, a lxi d, seg dad d xchg ldax d ;Вывод результата out ..... ;Таблица seg: db 3Fh, 06h, 5Bh, 4Fh, 66h, 6Dh, 7Dh, 07h db 7Fh, 6Fh, 77h, 7Ch, 39h, 5Eh, 79h, 71h[свернуть]
В любом случае, не ручаюсь за корректность, т.к. сильно начинающий
в программировании и оба этих примера родились исключительно благодаря
помощи от уважаемого Vladimir_S
И да, эти состряпанные мной процедуры никак не учитывают, что
1. Выводится на индикаторы, обычно, результат каких-то действий,
представляющий собой 8 бит в аккумуляторе, а это значит что вывод
нужно делать на два индикатора - по полубайту на каждый.
2. Для вывода я использовал OUT, имея ввиду что индикаторы это порты В/В.
Однако, возможно использование STAX, и это даже сократило бы код.




Ответить с цитированием