Ассемблер Intel 8086 Определение идентификаторов

Содержание

Слайд 2

Ассемблер Intel 8086 Определение идентификаторов 2. = – директива, предназначенная для

Ассемблер Intel 8086

Определение идентификаторов

2. = – директива, предназначенная для присваивания символического

имени только числовым выражениям.
Пример:
TEMP = 10
DW TEMP ; DW 10
TEMP = TEMP + 10
DW TEMP ; DW 20
Слайд 3

Ассемблер Intel 8086 Определение идентификаторов Между директивами EQU и = есть

Ассемблер Intel 8086

Определение идентификаторов

Между директивами EQU и = есть важное отличие:
EQU

определяет символьное имя, которое не может быть переопределено в программе;
директива = предназначена только для числовых выражений, но символьные имена, созданные с помощью этой директивы могут переопределяться в программе.
Пример:
TEMP = 10
DW TEMP ; DW 10
TEMP = TEMP + 10
DW TEMP ; DW 20
Слайд 4

Ассемблер Intel 8086 Многомодульные программы Реальный проект состоит из нескольких модулей.

Ассемблер Intel 8086

Многомодульные программы

Реальный проект состоит из нескольких модулей. Для согласования

модулей между собой используются следующие директивы:
PUBLIC – указывает на метки текущего модуля, к которым могут иметь доступ другие модули проекта:
PUBLIC <метка> [, <метка>]
EXTRN – объявление меток из других модулей, которые необходимы для работы данного модуля:
EXTRN <объявление> [, <объявление>]
где <объявление> - запись вида <метка>:<тип>
GLOBAL – директива, которая интерпретируется как PUBLIC, если объект определён в данном модуле, и как EXTRN, если определение объекта в данном модуле отсутствует:
GLOBAL <объявление> [, <объявление>]
где <объявление> - запись вида <метка>:<тип>, по формату совпадающая с такой записью в директиве EXTRN
INCLUDE – включение содержимого указанного файла в текущий файл:
INCLUDE <имя файла>
Слайд 5

Ассемблер Intel 8086 Многомодульные программы В качестве типа принимаемого объекта могут

Ассемблер Intel 8086

Многомодульные программы

В качестве типа принимаемого объекта могут указываться следующие:
ABS

– имя постоянной величины;
BYTE – имя переменной величины байтового типа (1 байт);
WORD – имя переменной величины типа WORD (2 байта);
DWORD – имя переменной величины типа DWORD (4 байта);
FWORD – имя переменной величины типа FWORD (6 байтов);
QWORD – имя переменной величины типа QWORD (8 байтов);
TWORD – имя переменной величины типа TWORD (10 байтов);
NEAR – имя ближней процедуры или команды;
FAR – имя дальней процедуры или команды.
Слайд 6

Ассемблер Intel 8086 Многомодульные программы: пример ;первый модуль .Data PUBLIC MemVar,

Ассемблер Intel 8086

Многомодульные программы: пример

;первый модуль
.Data
PUBLIC MemVar, Array1, Array_Length
Array_Length EQU 100
MemVar

DW 10
Array1 DB Array_Length DUP(?)
. . .
.Code
PUBLIC NearProc, FarProc
NearProc PROC Near
. . .
NearProc ENDP
FarProc PROC Far
. . .
FarProc ENDP

;второй модуль
.Data
EXTRN MemVar: WORD, Array1: BYTE, Array_Length: ABS
. . .
.Code
EXTRN NearProc: NEAR, FarProc: FAR
. . .
mov ax, [MemVar]
mov bx, OFFSET Array1
moc cx, Array_Length
. . .
call NearProc
. . .
call FarProc

Слайд 7

Ассемблер Intel 8086 Сегментные директивы Программа может быть написана с использованием

Ассемблер Intel 8086

Сегментные директивы

Программа может быть написана с использованием определений каждого

сегмента в явном виде. Для этого предусмотрены сегментные директивы:
SEGMENT – указывает начало и атрибуты каждого сегмента программы. Это структурная директива, имеющая следующий вид:
label SEGMENT align combine class
label ENDS
где label – имя сегмента;
align – тип выравнивания сегмента (BYTE, WORD, DWORD, PARA, PAGE);
combine – способ объединения нескольких сегментов (PRIVATE, PUBLIC, COMMON, STACK, MEMORY, AT exp);
class – имя класса, к которому будет отнесён данный сегмент (заключается в апострофы или кавычки).
Слайд 8

Ассемблер Intel 8086 Сегментные директивы Программа может быть написана с использованием

Ассемблер Intel 8086

Сегментные директивы

Программа может быть написана с использованием определений каждого

сегмента в явном виде. Для этого предусмотрены сегментные директивы:
GROUP – директива, предназначенная для объединения различных сегментов таким образом, чтобы была возможной адресация внутри этих сегментов с помощью одного сегментного регистра, т.е. объединённый сегмент будет занимать не более 64 Кбайт памяти. Директива имеет следующий вид:
name GROUP [, ]
где name – имя объединённого сегмента;
segname – имена сегментов, которые будут объединены.
3) ASSUME – описание назначения сегментных регистров. Вид директивы:
ASSUME : [, : ]
ASSUME : NOTHING
ASSUME NOTHING
где reg – имя сегментного регистра;
name – имя сегмента или группы сегментов.