
- •Основы алгоритмизации и программирования
- •29 Декабря 2011, протокол № 4
- •Введение
- •Этапы развития эвм
- •Поколения эвм
- •Машинно-ориентированные языки программирования
- •Архитектура эвм
- •Микропроцессоры intel
- •Набор регистров
- •Регистры общего назначения
- •Сегментные регистры
- •Регистры состояния и управления
- •Организация памяти
- •Сегментная организация памяти
- •Типы данных
- •Символы
- •Целые числа
- •Указатель на память
- •Цепочки
- •Вещественые числа
- •Двоично-десятичные числа (bcd)
- •Формат команд
- •Обработка прерываний
- •Int тип_прерывания
- •Синтаксис ассемблера
- •Алфавит ассемблера
- •Директивы сегментации
- •Упрощённые директивы сегментации
- •Директивы резервирования и инициализации данных
- •Операнды
- •Способы задания операндов Прямая адресация
- •Косвенная адресация
- •Косвенная базовая адресация
- •Косвенная базовая адресация со смещением
- •Косвенная индексная адресация со смещением
- •Косвенная базовая индексная адресация
- •Косвенная базовая индексная адресация со смещением
- •Операторы
- •Функциональная классификация машинных команд
- •Команды пересылки данных Команды общего назначения
- •Работа с адресами и указателями
- •Преобразование данных
- •Xlat [адрес_таблицы_перекодировки]
- •Ввод из порта и вывод в порт
- •Работа со стеком
- •Арифметические команды Форматы арифметических данных
- •Арифметические операции над целыми двоичными числами
- •Логические команды
- •Команды передачи управления
- •Команда безусловного перехода
- •Условные переходы
- •Организация циклов
- •Основы алгоритмизации и программирования
Упрощённые директивы сегментации
Для простых программ, содержащих по одному сегменту для кода, данных и стека описание упрощено. Для этого в трансляторы MASM и TASM введена возможность использования упрощенных директив сегментации. Совместно с упрощенными директивами сегментации используют директиву указания модели памяти MODEL. Эта директива связывает сегменты, которые, в случае использования упрощенных директив сегментации, имеют предопределенные имена с сегментными регистрами (хотя явно инициализировать DS все равно необходимо).
Обязательным параметром директивы MODEL является модель памяти.
Таблица 2. – Модели памяти
Модель |
Тип кода |
Тип данных |
Назначение модели |
TINY |
near |
near |
Код и данные объединены в одну группу с именем DGROUP. Используется для создания программ формата .сом. |
SMALL |
near |
near |
Код занимает один сегмент, данные объединены в одну группу с именем DGROUP. Эту модель обычно используют для большинства программ на ассемблере. |
MEDIUM |
far |
near |
Код занимает несколько сегментов, по одному на каждый объединяемый программный модуль. Все ссылки на передачу управления - типа far. Данные объединены в одной группе, все ссылки на них - типа near. |
COMPACT |
near |
far |
Код в одном сегменте, ссылка на данные - типа far. |
LARGE |
far |
far |
Код в нескольких сегментах, по одному на каждый объединяемый программный модуль. |
FLAT |
near |
near |
Код и данные в одном 32-битном сегменте (плоская модель ОП). |
Таблица 3. – Упрощенные директивы определения сегмента
Формат директивы |
Назначение |
.CODE[имя] |
Начало или продолжение сегмента кода |
.DATA |
Начало или продолжение сегмента инициализированных данных. Используется также для определения данных типа near |
.CONST |
Начало или продолжение сегмента постоянных данных (констант) модуля |
.DATA? |
Начало или продолжение сегмента неинициализированных данных. Используется также для определения данных типа near |
.STACK [размер] |
Начало или продолжение сегмента стека модуля. Параметр [размер] задает размер стека |
.FARDATA [имя] |
Начало или продолжение сегмента инициализированных данных типа far |
.FARDAТА? [имя] |
Начало или продолжение сегмента неинициализированных данных типа far |
При использовании директивы MODEL транслятор делает доступными несколько идентификаторов, к которым можно обращаться во время работы программы.
Операнды директивы MODEL используются для задания модели памяти, которая определяет набор сегментов программы, размеры сегментов данных и кода, способ связывания сегментов и сегментных регистров. В следующей таблице приведены некоторые значения параметров модели памяти директивы MODEL.
Таблица 4. – Идентификаторы, создаваемые директивой MODEL
Имя идентификатора |
Значение переменной |
@code |
Физический адрес сегмента кода |
@data |
Физический адрес сегмента данных типа near |
@fardata |
Физический адрес сегмента данных типа far |
@fardata? |
Физический адрес сегмента инициализированных данных типа far |
@curseg |
Физический адрес сегмента неинициализированных данных типа far |
@stack |
Физический адрес сегмента стека |
Для сравнения приведем три листинга с программами на ассемблере. Функционально они одинаковы и выводят на консоль сообщение: «Hello World!».
Листинг 1 содержит программу со стандартными директивами сегментации, а листинг 2, соответственно, — с упрощенными, листинг 3 содержит программу типа .com.
Листинг 1. Использование стандартных директив сегментации.
data segment para public 'data'
message db 'Hello World! $' ;сегмент данных
data ends
stk segment stack ;сегмент стека
db 256 dup ('?')
stk ends
code segment para public 'code' ;начало сегмента кода
start: ;точка входа в программу
assume cs:code,ds:data,ss:stk
mov ax,data ;адрес сегмента данных
mov ds,ax ; в регистр ах
mov ah,9h ;загрузка номера функции
mov dx,offset message ;загрузка смещения строки
int 21h ;вывод сообщения на экран
mov ax,4c00h ;функция завершения
int 21h
code ends ;конец сегмента кода
end start ;конец программы с точкой входа start
Листинг 2. Использование упрощенных директив сегментации.
masm ;режим работы для TASM
.model small ;модель памяти
.data ;сегмент данных
message db 'Hello World$’
.stack 256 ;сегмент стека 256 байт
.code ; сегмент кода
start:
mov ax,@data
mov ds,ax
mov ah,9h
mov dx,offset message
int 21h
mov ax,4c00h
int 21h
end start
Листинг 3. Создание программы типа .com.
.model small
.code
org 100h ;смещение на 100h от начала сегмента
begin:
jmp start ;переход на метку start
message db 'Hello World$’
start:
mov ah,9h
mov dx,offset message
int 21h
mov ax,4c00h
int 21h
end begin