Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методичка1-4.doc
Скачиваний:
19
Добавлен:
01.09.2019
Размер:
306.18 Кб
Скачать

Лабораторная работа №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