Меню сайта

Урок 49. Перекодировка

Команда перекодировки XLAT преобразуетинформацию из одного
— — — представления в другое. — Команда XLAT преобразует значение в
— — — регистре AL в другое значение, выбираемоеиз таблицы, на которую
— — — указывает регистр BX. — На Фиг.4.4 схематически показано, как
— — — работает эта команда. — Регистр BX вместе с выбранным сегментным
— — — регистром определяет точку начала таблицыперекодировки в памяти.
— — — К этому адресу таблицы команда прибавляетсодержимое регистра AL,
— — — значение между 0 и 255. — Данные, расположенные по этому адресу,
— — — команда XLAT пересылает в регистр AL. — Команда XLAT выполняет
— — — операцию просмотра таблицы.

— — — — — Команду XLAT хорошо использовать прикодировании и
— — — декодировании текстовых данных. С помощьюэтой команды программа
— — — может организовать простую замену кодовсимволов. В следующем
— — — примере десять символов кода ASCII от 0 до9 перекодируются в целях
— — — передачи. Этот метод может использоватьсяв системе для
— — — перекодировки информации, передаваемой изодной машины в другую.
— — — Когда данные принимаются, другая программавозвращает
— — — закодированные символы к ихпервоначальному виду. На Фиг. 4.5
— — — демонстрируется кодировка и декодировка.

— — — — — На Фиг.4.5 изображены две таблицыперекодировки, одна для
— — — передачи, а другая для приема. Чтобыпередать значение 5, программа
— — — находит значение 5 в таблице передачи (а),из которой извлекает
— — — значение 6, которое передает. Когда этозначение принимается,
— — — программа декодирования ищет 6 в таблицеприема (b), чтобы
— — — перекодировать его в истинное значение 5.

— — — — — На Фиг. 4.6 показана подпрограмма, котораяпроизводит это
— — — декодирование. Подпрограммаперекодирования читает начальное
— — — значение из порта ввода=вывода, ивозвращает кодированное или
— — — декодированное значение в вызывающуюпрограмму через регистр AL.
— — — Одна и та же программа выполняет каккодирова- ние, так и
— — — декодирование, меняя таблицы кодировки.

— — — — — Сначала подпрограмма читает данные извводного порта 40H в
— — — регистр AL. Затем она вычитает значение»0″ в коде ASCII из
— — — значения данных, чтобы получить цифровоезначение. Это означает,
— — — что символ «0» дает значение 0 врегистре AL, символ «1» дает 1, и
— — — т.д. Команда LDS загружает указательнужной таблицы в пару
— — — регистров DS:BX. Загружая этот указательиз ячейки памяти — в
— — — — — — — — — -Microsoft (R) Macro Assembler Version 5.00 — — — — — — — — — — — — 1/1/80 04:00:38
— — — — — — — — — -Фиг. 4.6 Пример перекодировки — — — — — — — — — — — — — — — — — — — Page — — — — — — — 1-1


— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — PAGE — — -,132
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — TITLE — -Фиг. 4.6 Пример перекодировки
— — — — — — — — — — -0000 — — — — — — — — — — — — — — — — — CODE — — -SEGMENT
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — ASSUME -CS:CODE, DS:CODE

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -Эта программа вводит значение из порта 040H и
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -декодирует его, используя таблицу перекодировки.
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -Так как одна и та же программа используется как для
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -кодировки, так и декодировки, указатель TABLE_POINTER
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -указывает на соответсвующую таблицу перекодировки.
— — — — — — — — — — — -&nbs
p- — — — — — — — — — — — — — — — — — — — — — — — — — — — -Вызывая подпрограмму, необходимо установить
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -этот указатель на соответствующую таблицу.

— — — — — — — — — — -0000 — — — — — — — — — — — — — — — — — TRANSLATE — — — — — — PROC — — — NEAR — — — — — — -Подпрограмма TRANSLATE

— — — — — — — — — — -0000 — E4 40 — — — — — — — — — — — — — — — — — — — — — — IN — — — — — AL,040H — — — — — — — — — — — — — Ввод значения из порта
— — — — — — — — — — -0002 — 2C 30 — — — — — — — — — — — — — — — — — — — — — — SUB — — — -AL,»0″ — — — — — — — — — — — — — — — — — Значение относительно символа «0»,
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — т.е. относительно начала таблицы
— — — — — — — — — — -0004 — C5 1E 000A R — — — — — — — — — — — — — — -LDS — — — — BX,TABLE_POINTER — — — — — — — — — — (DS,BX) указывает на таблицу
— — — — — — — — — — -0008 — D7 — — — — — — — — — — — — — — — — — — -XLAT — — — XMIT_TABLE — — — — — — — — — — — Перекодировка числа
— — — — — — — — — — -0009 — C3 — — — — — — — — — — — — — — — — — — -RET

— — — — — — — — — — -000A — 000E —- R — — — — — — — — — -TABLE_POINTER — — DD — — — — — XMIT_TABLE
— — — — — — — — — — -000E — 35 37 39 31 33 36 38 — — — — XMIT_TABLE — — — — — DB — — — — — ‘5791368024’
— — — — — — — — — — — — — — -30 32 34
— — — — — — — — — — -0018 — 37 33 38 34 39 30 35 — — — — RECV_TABLE — — — — — DB — — — — — ‘7384905162’
— — — — — — — — — — — — — — -31 36 32

— — — — — — — — — — -0022 — — — — — — — — — — — — — — — — — TRANSLATE — — — — — — ENDP
— — — — — — — — — — -0022 — — — — — — — — — — — — — — — — — CODE — — -ENDS
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — END

— — — — — — — — — — — Фиг. 4.6 Пример перекодировки

— — — примере TABLE_POINTER — подпрограмма можетиспользовать любую
— — — таблицу перекодировки. В этой программеимеются две табдицы, одна
— — — из них для передачи, названная XMIT_TABLE,которая соответствует
— — — Фиг.4.5(а), другая — таблица приема,названная RECV_TABLE, —
— — — соответствует Фиг.4.5(б). Перед вызовомподпрограммы головная
— — — программа должна записать нужный адресныйуказатель в переменную
— — — TABLE_POINTER. Если головная программапринимает коды, она должна
— — — поместить адрес таблицы RECV_TABLE впеременную TABLE_POINTER.
— — — Заметим, что эта подпрограмма можетпроделать любую перекодировку,
— — — поскольку таблицу перекодировки назначаетвызывающая программа.

— — — — — Команда XLAT выполняет перекодировку потаблице, на которую
— — — указывает пара регистров DS:BX. В регистреAL находится значение
— — — между 0 и 9. Команда XLAT складывает этозначение с содержимым
— — — указателя и загружает перекодированноезначение в регистр AL.
— — — Команда RET возвращает управление ввызывающую программу.
— — — — — Другим обычным случаем использованиякоманды XLAT является
— — — смена кода представления символов в одноймашине на код
— — — представления в другой машине. IBM PC,работает в коде ASCII, а
— — — большинство машин фирмы IBM используют кодEBCDIC (Extended
— — — Binary=Coded=Decimal Interchange Code -расширенный
— — — двоично=кодированный десятичный код обменаинформации). Чтобы
— — — связываться с такими машинами, в программенадо перекодировать
— — — символы, и команда XLAT естественнымобразом подходит для этой
— — — функции.

— — — — — Итак, команда XLAT является весьма мощнымсредством
— — — перекодировки байтовой или символьнойинформации. Мощность этой
— — — команды делает ее редко используемой, таккак возможность
— -&nb
sp- использовать ее преимущества возникает нечасто. Однако помните об
— — — этой команде на тот случай, когда онаокажется полностью
— — — оправданной.

Категория: Программирование на Ассемблере | Дата: 11.02.13

Меню раздела
Блок