- •Дагестанкий государтвенный технический университет
- •Махачкала 1997 г.
- •Лабораторная работа №1
- •1.1.Создание выполнимого файла, работа в отладчике, изучение оператора пересылки mov.
- •1.2. Оператор mov.
- •1.3. Основные команды отладчика afd.
- •1.4. Индивидуальные задания.
- •2.1. Сегментация памяти, директивы ассемблера
- •2.2. Прямая адресация
- •2.3. Косвенная адресация
- •2.4. Директива assume
- •2.5. Индивидуальные задания
- •Лабораторная работа №3
- •3.1. Директивы equ, label, команды сложения и вычитания
- •3.1.1. Директивы equ
- •3.1.2. Директива label
- •3.2. Команды сложения и вычитания
- •3.3. Индивидуальные задания Вариант 1.
- •Вариант 2.
- •Вариант 3.
- •Вариант 4.
- •Вариант 5.
- •Вариант 6.
- •Вариант 7.
- •Вариант 8.
- •Вариант 9.
- •Вариант 10.
- •Вариант 11.
- •Вариант 12.
- •3.4. Примечание
- •Лабораторная работа №4
- •4.1. Изучение операторов обмена xchg и xlat
- •. Индивидуальные задания Вариант 1.
- •Вариант 2.
- •Вариант 3.
- •Вариант 4.
- •Вариант 5.
- •Вариант 6.
- •Вариант 7.
- •Вариант 8.
- •Вариант 9.
- •Вариант 10.
- •Вариант 11.
- •Вариант 12.
- •4.3. Приложение
- •Литература
- •Оглавление
- •Хачумов Вячbслав Михайлович Исмаилов Шейх-Магомед Абдулаевич Лагиева Марият Тагировна
3.4. Примечание
В случае косвенной адресации адрес слова (байт) находится в одном из регистров: BX, SI, DI. Например,
MOV AX, [BX]; в AX заносится слово, адрес которого содержится в ;регистре BX.
MOV AX, 2[BX]; равносильно MOV AX, [BX+2], в AX заносится слово, ; адрес которого на 2 байта больше адреса, содержащегося в регистре BX.
ADD AX, 3[BX]; добавить к содержимому AX слово, адрес которого ;на 3 байта больше адреса, содержащегося в регистре BX.
SUB AX, 4[BX]; вычесть из AX слово, адрес которого на 4 байта ;больше адреса, содержащегося в регистре BX.
Лабораторная работа №4
4.1. Изучение операторов обмена xchg и xlat
Команда обмена XCHG позволяет обменивать содержимое любого общего регистра и ячейки памяти, а также любой пары общих регистров. Пример:
XCHG AL, SEMA; обмен содержимого байта памяти и регистра AL
XCHG CX, [BP]; обмен содержимого слова памяти и регистра CX
XCHG AH, DL; обмен байтами регистр-регистр
XCHG AX, CX; обмен словами регистр-регистр
В команде XCHG нельзя использовать сегментные регистры.
Команда XLAT заменяет содержимое аккумулятора AL на байт из 256 байтов таблицы, начальный адрес которой находится в регистре BX (см.рисунок).
А
XX
(YY)
лгоритм
выполнения команды XLAT
BX
состоит
из двух шагов:
а) прибавить содержимое регистра AL к
содержимому регистра BX;
б) использовать результат как смещение
в сегменте данных (относительно DS)
XX
поместить адресуемый
байт из памяти
Y Y в регистр AL.
память
Команда XLAT обычно применяется для быстрого преобразования символов из одного символьного кода в другой. Команда XLAT транслирует содержимое одного байта в другое предопределенное значение. При передачи данных между персональными компьютерами и большими ЭВМ с помощью команды XLAT можно выполнять перекодировку данных между форматами ASCII и EBCDIC.
В следующем примере происходит преобразование цифр от 1 до 9 из кода ASCII в код EBCDIC – как шестнадцатеричные F0…F9. Для команды XLAT необходимо определить таблицу перекодировки. Команда XLAT предполагает адрес таблицы в регистре BX, а транслируемый байт (напр. поля ASCNO) – в регистре AL. Следующие команды выполняют подготовку и трансляцию байта:
MOV BX, offset XLTBL
MOV AL, ASCNO
XLAT
Команда XLAT использует значение в регистре AL в качестве относительного адреса в таблице, т.е. складывает адрес в BX и смещение в AL. Если, например, 32Н, то адрес соответствующего байта, а таблице будет XLTBL+50. Этот байт содержит значение 0F2H (2 в коде EBCDIC), которое команда XLAT загружается в регистр AL.
Пример использования в программе оператора XLAT.
В данном примере производится преобразования шести значений из таблицы ASCNO (код ASCII) в код XLTАL. Результат заносится в область с начальным адресом ЕВCNO.
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; инициализация сегментного
MOV DS,AX; регистра DS
MOV DI, OFFSET EBCNO; адрес таблицы перекодируемых
;элементов заносится в регистр DI
MOV SI, OFFSET ASCNO; адрес таблицы куда заносится рез-т
MOV BX, OFFSET XLTAB; адрес таблицы, с помощью которой
;производится преобразование, заносится в регистр BX
MOV CX, 6; инициализация счетчика числа перекодируемых
;элементов
А20: MOV AL, [SI]; в AL очередной перекодируемый байт
SUB AL, 30H; преобразование ASCII кода в число
XLAT; преобразование содержимого AL в код EBCDIC
MOV [DI], AL; запись преобразованного значения в память
INC DI; смещение указателя адреса памяти на след-й байт
INC SI; смещение указателя адреса памяти на след-й байт
LOOP F20; если CX<>0, переходит на метку А20
RET
PREOB ENDS
END START
