Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

ASSUME CS: CODE, DS: DATA



DATA SEGMENT

PAIR DB 13

DATA ENDS

CODE SEGMENT

START: MOV AX, DATA

MOV DS, AX

MOV AX, [WORD PTR PAIR]; см. п. 3.2.6.

CODE ENDS

DATA SEGMENT

DB 4CH

DATA ENDS

CODE SEGMENT

INT 21H

CODE ENDS

STACK_SEGMENT STACK

DB 100H DUP (?)

STACK_ENDS

END START

После выполнения данной ассемблерной программы в регистре АL окажется число 13 и по завершении программы произойдет передача управления системному отладчику

(используется системное прерывание DOS – 21h, с содержимым регистра AH = 4Ch).

3.2.5.4 Директивы внешних ссылок PUBLIC, EXTRN

Использование этих директив позволяет осуществлять передачу между модулями программы меток констант, переменных и команд. Эта связь осуществляется таким образом, что в модуле, экспортирующем метку, используется директива PUBLIC, а в модуле, импортирующем метку - директива EXTRN.

Директива PUBLIC имеет вид:

PUBLIC symbol, symbol..... symbol,

где symbol является экспортируемой меткой.

Директива EXTRN имеет вид:

EXTRN define, define,... define.

где каждый define представляется одной из форм:

symbol: type,

где symbol – импортируемая метка,

type – тип импортируемой метки, который может быть:

ABS – имя константы;

BYTE – имя байтовой переменной;

WORD – имя переменной типа WORD (2 байта);

DWORD – имя переменной типа DWORD (4 байта);

QWORD – имя переменной типа QWORD (8 байт);

NEAR – имя близкой процедуры или команды;

FAR – имя далёкой процедуры или команды;

3.2.5.5. Описание процедур

Процедура является частью программы, реализующей отдельный фрагмент алгоритма. Она сконструирована так, чтобы могла вызываться из различных мест программы и после ее выполнения могло бы произойти возвращение в место ее вызова.

Вызов процедуры происходит с помощью команды CALL. Ее выполнение имеет тот же результат, что и выполнение команды JMP, с той лишь разницей, что происходит дополнительная пересылка в стек места возврата из процедуры, т.е. ближнего или дальнего адреса того байта памяти, который стоит после команды CALL. Ближний адрес состоит только из смещения в данном сегменте, дальний - из базового адреса сегмента и смещения. В случае дальнего адреса сначала заносится в стек базовый адрес сегмента, а затем смещение.

Возврат из вызванной процедуры по ближнему адресу происходит с помощью команды retn, а по дальнему с помощью команды retf.

Описание процедуры имеет вид:

name PROC type

..........

name ENDP,

где name – имя процедуры;

type – тип процедуры: NEAR – близкая, FAR – далекая.

3.2.5.6 Упрощенные директивы

Для упрощения записи программ используются специальные директивы .MODEL,.CODE,.DATA,.STACK и др.

Использование директивы .MODEL предваряет введение других упрощенных директив.

Эта директива для программ, написанных на ТУРБО АССЕМБЛЕРЕ, имеет вид:

.MODEL model,

где model – тип модели памяти.

Модели памяти могут быть: TINY, SMALL, MEDIUM, COMPACT, LARGE.

Модель Назначение модели
TINY Код и данные объединены в одну группу с именем DGROUP. Используется для создания программ формата.COM
SMALL Код занимает один сегмент, данные объединены в одну группу с именем DGROUP. Используется для большинства программ на ассемблере.
MEDIUM Код занимает несколько сегментов по одному на каждый объединенный программный модуль. Все ссылки на передачу управления – типа FAR. Данные объединены в одну группу, все ссылки на них типа NEAR.
COMPACT Код в одном сегменте, ссылки на данные – типа FAR.
LARGE Код в нескольких сегментах, по одному на каждый объединенный программный модуль.

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

_DATA SEGMENT WORD PUBLIC ‘DATA’

(текст сегмента);

_DATA ENDS

упрощенной директивой

.DATA

(текст сегмента);

_TEXT SEGMENT WORD PUBLIC ‘CODE’

(текст сегмента);

_TEXT ENDS

на упрощенную директиву

. CODE

(текст сегмента);

_STACK SEGMENT PARA STACK ‘STACK’

(текст сегмента);

_STACK ENDS

на упрощенную

. STACK

(текст сегмента).

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

@DATA – имя сегмента, определяемого директивой.DATA;

@CODE - имя сегмента, определяемого директивой.CODE;

@FileName – имя компилируемого файла;

@CurSeg – имя текущего компилируемого целого сегмента;

??DATA – дата компиляции;

??Time – время компиляции.

Кроме того, предполагается действие директивы GROUP, имеющей вид:

DGROUP GROUP _DATA, _STACK и

директивы ASSUME, где регистр CS связан с именем, определенным директивой.CODE, а DS и SS связан с группой DGROUP.

Пример программы с упрощенными директивами:

. MODEL SMOLL

. DATA

FIX DB 13

. CODE

START: MOV AX, @DATA

MOV DS, AX

MOV AL, [FIX]

MOV AH, 4CH

INT 21H

. STACK 100H

END START

Равнозначная программа с расширенными директивами:

DGROUP GROUP _DATA, _STACK

ASSUME CS: _TEXT, DS: DGROUP, SS: DGROUP

_DATA SEGMENT WORD PUBLIC ‘DATA’

FIX DB 13

_DATA ENDS

_TEXT SEGMENT WORD PUBLIC ‘CODE’

START: MOV AX, _DATA

MOV DS, AX

MOV AL, [FIX]

MOV AH, 4CH

INT 21H

_TEXT ENDS

_STACK SEGMENT PARA STACK ‘STACK’

DB 100H DUP (?)

_STACK ENDS

END START

3.2.5.7 Директивы управления трансляцией

Директива END имеет формат:

END label.

где label – метка точки входа в программу (первого исполняемого оператора).

Директива END обозначает конец программного модуля. Если программа содержит более одного модуля, то точку входа может определить только одна из них. Этот модуль называется основным. Если пользователь забыл указать точку входа, то правильная инициализация его программы может оказаться невозможной.

3.2.6 Операторы языка ассемблера

Существует пять видов операторов (табл.8): арифметические, логические, отношения, а также операторы, возвращающие значения, и операторы присвоения атрибута.

Таблица 7

Операторы языка ассемблера

Операции Функция
Арифметические Формат: значение1+ значение2 Складывает значение1 и значение2 Формат: значение1- значение2 Вычитает значение2 из значение1
+
-
* Формат: значение1 х значение2 Умножает значение1 на значени2
/ Формат: значение1 / значение2 Делит нацело значение1 на значение2 и возвращает частное
MOD Формат: значение1 mod значение2 Делит нацело значение1 на значение2 и возвращает остаток.
SHL Формат: значение SHL выражение Сдвигает значение влево на число битов, равное значению выражения.
SHR Формат: значение SHR выражение Сдвигает значение вправо на число битов, равное значению выражение.
Логические Формат: значение1 AND значение2 Выполняет логическую операцию & над операндами значение1 и значение2.
AND
OR Формат: значение1 OR значение2 Выполняет логическую операцию или над операндами значение1 и значение2.
XOR Формат: значение1 XOR значение2 Выполняет логическую операцию, исключающее или над операндами значение1 и значение2.
NOT Формат: NOT значение1 Обращает каждый бит в операнде значение1, иначе говоря, осуществляет дополнение до единицы.
Отношения Формат: операнд1 EQ операнд2. Истинно, если значения операндов совпадают.
EQ
NE Формат: операнд1 NE операнд2 Истинно, если значения операндов не совпадают
LT Формат: операнд1 LT операнд2 Истинно, если операнд1 меньше операнда2.
GT Формат: операнд1 GT операнд2 Истинно, если операнд1 больше операнда2.
LE Формат: операнд1 LE операнд2 Истинно, если операнд1 меньше операнда2 или равен ему.
GE Формат: операнд1 GE операнд2 Истинно, если операнд1 больше операнда2 или равен ему.
Возвращающие значения Формат: $ Возвращает значение счетчика текущей ячейки.
$
SEG Формат: SEG переменная или SEG метка. Возвращает сегментный адрес переменной или метки.
OFFSET Формат: OFFSET переменная или OFFSET метка. Возвращает смещение адреса переменной или метки.
LENGTH Формат: LENGTH переменная. Возвращает длину в единицах определения переменной (в байтах или словах), при определении которой был использован оператор DUP
TYPE Формат: TYPE переменная или TYPE метка. Для переменной TYPE возвращает 1- если она имеет тип BYTE, 2- если имеет тип WORD, 4- если двойное слово; 1, если метка имеет атрибут NEAR или 2 (атрибут FAR).
SIZE Формат: SIZE переменная Возвращает размер переменной в байтах т.е. произведение результатов выполнения операций LENGTH и TYPE..
Присваивание атрибута Формат: тип PTR выражение. Изменяет атрибут типа переменной (BYTE или WORD) или атрибут метки перехода (NEAR или FAR) адресного операнда. Здесь тип – новый атрибут, а выражение – идентификатор, чей атрибут должен быть изменен.
PTR
DS: ES: SS: CS: Формат: сегм. рег: адресное выражение или сегм. рег.: метка или сегм. рег.: переменные. Изменяет атрибут сегмента метки, переменной или адресного выражения.
SHORT Формат: JMP SHORT метка. Изменяет атрибут NEAR метки оператора перехода JMP и указывает, что переход осуществляется на расстоянии не более +127 байт или –128 байт от следующей команды.
THIS Формат: THIS атрибут или THIS выражение. Создаёт адресный операнд либо с атрибутом дистанции (NEAR или FAR), либо с атрибутом типа (BYTE или WORD) со смещением, равным текущему значению адреса, и атрибутом текущего сегмента.
HIGH Формат: HIGH значение или HIGH выражение. Возвращает старший байт 16-битового числового значения или адресного выражения.
LOW Формат: LOW значение или LOW выражение. Возвращает младший байт 16-битового числового значения или адресного выражения.




Дата публикования: 2015-11-01; Прочитано: 1432 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2025 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...