Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник по Микропроцессорам_МИА.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.67 Mб
Скачать

Лабораторная работа № 4 Изучение операторов обмена xchg и xlat

Команда  обмена XCHG позволяет обменивать содержимое любого общего регистра и ячейки памяти, а также любой пары общих регистров. Примеры:

XCHG AL, SEMA ;обмен содержимого байта памяти и регистра AL

XCHG CX,[BP] ;обмен содержимого слова памяти и регистра CX

XCHG AH,DL ;обмен байтами регистр- регистр

XCHG AX,CX ;обмен словами регистр-регистр

В команде XCHG нельзя использовать сегментные регистры.

Команда XLAT заменяет содержимое аккумулятора AL на байт из 256 байтной таблицы, начальный адрес которой находится в регистре BX (см. рисунок).

Алгоритм выполнения команды XLAT состоит из двух шагов:

a) прибавить содержимое регистра AL к содержимому регистра BX;

б) использовать результат как смещение в сегменте данных (относительно DS) и поместить адресуемый байт из памяти в регистр AL.

Команда XLAT обычно применяется для быстрого преобразования символов из одного символьного кода в другой. Команда XLAT транслирует содержимое одного байта в другое предопределенное значение. При передаче данных между персональными компьютерами и большими ЭВМ с помощью команда XLAT можно выполнять перекодировку данных между форматами ASCII и EBCDIC.

В следующем примере происходит преобразование цифр от 0 до 9 из кода ASCII в код EBCDIC. Представление цифр в ASCII выглядит как шестнадцатеричные 30...39, а в EBCDIC -как шестнадцатеричные F0...F9. Для команды XLAT необходимо определять таблицу перекодировки. Команда XLAT предполагает адрес таблицы в регистре BX, а транслируемый байт (например: поля ASCNO)- в регистре AL.

Следующие команды выполняют подготовку и трансляцию байта:

MOV bx, offset XLTBL

MOV AL,ASCNO

XLAT

Команда XLAT использует значение в регистре AL в качестве относительного адреса в таблице, т.е. складывает адрес в BX и смещение в AL. Если, например, AL содержит 32h, то адрес соответствующего байта в таблице будет XLTBL+50. Этот байт содержит значение 0F2h (2 в коде EBCDIC), которое команда XLAT загружает в регистр AL.

Пример использования в программе оператора XLAT.

В данном примере производится преобразование шести значений из таблицы ASCNO (код ASCII) в код XLTAB. Результат заносится в область памяти с начальным адресом EBCNO.

Assume cs:preob, ds:tabl

tabl segment

ascno db 33h, 35h, 32h, 35h, 37h, 33h

xltab db 0f0h, 0f1h, 0f2h, 0f3h, 0f4h

db 0f5h, 0f6h, 0f7h, 0f8h, 0f9h

ebcno db 6 dup(?)

tabl ends

Preob segment

start:

mov ax, tabl

;инициализация сегментного регистра ds

mov ds, ax

mov di, offset ebcno

;адрес таблицы перекодируемых элементов заносится в регистр di

mov si, offset ascno

; адрес таблицы куда заносится результат

mov bx,offset xltab

;адрес таблицы, с помощью которой производится преобразование, заносится в регистр bx

mov cx, 6

;инициализация счетчика числа перекодируемых элементов A20: очередной перекодируемый байт

mov al, [si] ; в al

sub al,30h

;преобразование ascii кода в число

xlat

; преобразование содержимого al в код ebcdic

mov [di], al

;запись преобразованного значения в память

inc di

;смещение указателя адреса памяти на следующий байт

inc si

;смещение указателя адреса памяти на следующий байт

loop a20

;если cx <>0, переход на метку а20

ret

Preob ends

End start