Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_2011.doc
Скачиваний:
65
Добавлен:
09.12.2018
Размер:
1.15 Mб
Скачать
  1. Модели памяти

Модель памяти определяет набор сегментов программы, размеры сегментов данных и кода, способ связывания сегментов и сегментных регистров. Транслятору необходимо указать модель памяти с помощью директивы Model:

MODEL <модель памяти> [, <язык>]

Типы моделей памяти:

TINY – для программ имеющих всего один сегмент (имеют расширение .com).

SMALL – по этой директиве создается программа с одним сегментом кода, а данные объединены в одну группу.

MEDIUM – несколько сегментов кода (по одному на каждый модуль в объединенной группе), а данные - в одной группе.

COMPACT – код в одном сегменте, данные – в одной группе. Обращение к данным по ссылке far.

LARGE – код в нескольких сегментах (по одному на каждый модуль).

Для простых программ, содержащих по одному сегменту кода, данных, стека можно воспользоваться упрощенными директивами сегментации:

.code [имя] – начало или продолжение сегмента кода.

.data – начало или продолжение инициализированных данных.

.const – начало или продолжение сегмента констант.

.data? – начало или продолжение сегмента неинициализированных данных.

.stack [размер] - начало или продолжение сегмента стека.

.fardata - начало или продолжение сегмента инициализированных данных типа far.

.fardata? - начало или продолжение сегмента неинициализированных данных типа far.

            1. Идентификаторы, создаваемые директивой Model:

@data – физический адрес сегмента данных (ближний адрес).

@code - физический адрес сегмента кода, назначенный CS.

@fardata - физический адрес сегмента данных (дальний адрес).

@stack – сегментный адрес сегмента стека.

Любой из этих адресов загружается в соответствующий сегментный регистр (не напрямую, а через промежуточный регистр).

Пример программы, которая использует упрощенные директивы сегментации:

masm

model small

.stack 256h ; начало и размер стека 256 байт

.data ; начало сегмента данных

mes db “Введите данные, $”

.code ; начало сегмента кода

main:

mov ax, @data ; в ax загружается адрес сегмента данных

mov ds, ax ; ds загружен адресом сегмента данных

mov ah, 9h ; вызывается функция 9

mov ax, offset mes ; в dx загружается адрес строки

int 21h ; вывод строки на экран

:

mov ax, 4c00h ;вызываем функцию 4c00h

int 21h ; возврат в ОС

end main

  1. Этапы создания программы на ассемблере

  1. Ввод исходного текста программы

  2. Создание объектного модуля

  3. Создание загрузочного модуля

  4. Отладка программы

Текстовый prog.asm

редактор

Трансляция prog .obj

программы prog .lst

TASM.EXE prog .xrf

Компоновка prog .map

программы prog .exe

TLINK.EXE prog .lib

Отладка

программы

TD.EXE

1. На 1-ом этапе можно воспользоваться текстовым редактором из Turbo Pascal или редактором из оболочки Far Manager. Необходимо создать свою папку и скопировать в нее TASM.EXE, TLINK.EXE и TD.EXE

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]