Ассемблер и программирование для IBM PC



       

ГЛАВА 14. Обработка таблиц - часть 7


------------------------------------------------------------ ------------------------------------------------------------ Рис.14.4. Преобразование ASCII в EBCDIC.

В программе на рис.14.4 добавлено преобразование десятичной точки (2E) и знака минус (2D) из кода ASCII в код EBCDIC (4B и 60 соответственно). В программе организован цикл для обработки шестибайтового поля. Поле ASCNO в начале выполнения программы содержит значение 31.5 с последующим пробелом, или шест.2D33312E3520. В конце выполнения програм мы в поле EBCNO должно быть шест. 60F3F14BF540.

ПРОГРАММА: ОТОБРАЖЕНИЕ ШЕСТ. И ASCII-КОДОВ ------------------------------------------------------------

Программа, приведенная на рис.14.5, отображает на экране почти все ASCII-символы, а также их шест.значения. Например, ASCII-символ для шест.53 - это буква S, эти данные программа выводит в виде 53 S. Полное изображение на экране выглядит в виде матрицы 16х16:

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF

------------------------------------------------------------

Ассемблер для IBM PC. Глава 14 31

------------------------------------------------------------ Рис.14.5. Отображение шест. и ASCII-кодов

Как было показано еще на рис.8.1, отображение ASCII- символов, oсобых проблем не вызывает. Что же касается отображения шест.значений в символах ASCII, то этот процесс более сложный. Например, для вывода на экран в коде ASCII шест. 00, 01 и т.д. необходимо преобразовать шест.00 в шест. 3030, шест.01 в шест.3031 и т.д. В программе начальное значение поля HEXCTR равно 00. Это значение последовательно увеличивается на 1. Процедура C10HEX расщепляет байт HEXCTR на две щест.цифры. Предположим, что байт HEXCTR содержит шест. 4F. Процедура сначала выделяет шест.цифру 4 и использует это значение для перекодировки по таблице XLATAB. В регистре AL устанавливает ся в результате значение шест.34. Затем процедура выделяет вторую шест.цифру F и перекодирует ее в шест.46. В результате oбработки получается шест.3446, что отображается на экране как 4F. Так как функция DOS для вывода на экран (шест.40) рассматривает шест.1A как конец файла, то в программе это значение заменяется на пробел. Программа, использующая для вывода на экран функцию DOS (шест.09), дожна заменять символ ограничитель '$' на пробел. Существует много различных способов преобразования шест.цифр в ASCII-символы. Можно поэкспериментировать с операциями сдвига и сравнения.




Содержание  Назад  Вперед