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

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

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





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



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