
- •Дагестанкий государтвенный технический университет
- •Махачкала 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
3.1. Директивы equ, label, команды сложения и вычитания
3.1.1. Директивы equ
Эта директива определяет значение, которое можно использовать для подстановки в других командах. Директива не определяет элемент данных, она назначает имя какому-либо числу. Пусть в сегменте данных записана директива: TIME EQU 20
Теперь в какой бы команде или директиве не использовалось бы слово TIME, ассемблер вместо него подставит значение 20. Например, директиву
FIELD DB TIME DUP (?)
Ассемблер преобразует в директиву
FIELD DB 20 DUP (?)
Другой пример:
CON EQU 70
…
MOV CX, CON
Это равносильно записи
MOV CX, 70
3.1.2. Директива label
Директива LABEL может создавать имена для любых ячеек памяти независимо от содержимого и предполагаемого использования. Она содержит информацию о типе определяемого имени, а тип однозначно указывает допустимое определение имени. Директива LABEL имеет следующий формат:
<имя> LABLE <тип>
В качестве типа фигурируют одно из ключевых слов: BYTE, WORD, DWORD, NEAR, FAR.
Пример:
BUFFER LABLE WORD
BUF DB 200 DUP(?)
Директива LABEL обычно применяется для присваивания второго имени некоторой ячейке памяти, с тем, чтобы к ней можно было бы обращаться командами, оперирующими различными типами данных. Если, например, одну и ту же область памяти в одном случае необходимо считать массивом байт, а в другом – массивом слов, то команда
MOV AL, BUF ; передает в аккумулятор AL первый байт массива,
MOV AХ,BUFFER; передает в аккумулятор AХ первое слово массива.
Если бы директивы LABLE не было, для передачи в АХ первого слова массива потребовались бы более громоздкая команда.
3.2. Команды сложения и вычитания
По команде сложения второй операнд прибавляется к первому, и результат помещается в первый операнд. Например:
ADD AL, DL
Здесь содержимое регистра DL прибавляется к содержимому регистра AL и полученная сумма помещается в AL.
ADD AL, 3; содержимое регистра AL увеличивается на 3.
ADD AL, CATS; к содержимому регистра AL добавляется содержимое ; байта памяти с адресом CATS.
ADD DX, [SI]; к содержимому регистра DX прибавляется ;содержимое слова памяти, адрес которого содержится в регистре SI.
ADD [SI], AL; содержимое байта памяти, адресуемое регистром SI, ; увеличивается на значение, хранящееся в регистре AL.
По команде вычитания SUB процессор вычитает второй операнд из первого и результат помещает в первый операнд. Например:
SUB AL, CATS
SUB DX, [SI]
SUB CATS+2, AH
Пример.
Пусть в сегменте данных зарезервировано 5 слов со значениями: F501, 7136, 2122, 5711, 1246. Кроме того, зарезервировано 10 байт без инициализации. Необходимо получить сумму 2, 5 и 8 байтов указанной последовательности слов. Младший байт результата нужно записать в третий байт. Затем из первого слова последовательности слов вычесть третье и результат записать в пятое слова последовательности байт.
DATA SEGMENT
L1 LABLE BYTE
L2 DW 0F501h, 7136h, 2122h, 5711h, 1246h
L3 LABLE WORD
L4 DB 10 DUP(?)
DATA ENDS
ASSUME CS:CODE, DS:DATA
CODE SEGMENT
START: MOV AX, DATA; инициализации сегментного
MOV DS, AX; регистра
MOV AX, 0;обнуление регистров: в AX накапливается
MOVCX, 0; сумма: CX
;для представления считываемого байта как слова
MOV AL, L1+1; в рег. AL второй байт последов. слов
MOV CL, L1+4; в рег. CL пятый байт последов. слов
ADD AX, CX; в AX сумма 2-го и 5-го байтов
MOV CL, L1+7; в CL 8-ой байт последов. слов
ADD AX, CX; в AX сумма 2-го, 5-го и 8-го байтов
MOV L4+2, AL; младший байт рез-та заносится в 3-ий
; байт последовательности L4
MOV AX, L2; в AX заносится значение F501 – первое
;слово последовательности L2
SUB AX, L2+4; из первого слова последовательности
; вычитается третье. Результат заносится в AX
MOV L6+8, AX; результат вычитания записывается в
;пятое слово последовательности слов
RET
CODE ENDS
END START