2. Программа на ассемблере представляет собой
совокупность блоков памяти, называемых сегментами
памяти.
Программа может состоять из одного или нескольких
таких блоков-сегментов.
Каждый сегмент содержит совокупность
предложений языка, каждое из которых занимает
отдельную строку кода программы.
3. Предложения ассемблера бывают четырех типов:
• команды или инструкции, представляющие собой
символические аналоги машинных команд. В
процессе трансляции инструкции ассемблера
преобразуются в соответствующие команды
системы команд микропроцессора;
• макрокоманды — оформляемые определенным
образом предложения текста программы,
замещаемые во время трансляции другими
предложениями;
4. • директивы, являющиеся указанием транслятору
ассемблера на выполнение некоторых действий. У
директив нет аналогов в машинном представлении;
• строки комментариев, содержащие любые
символы, в том числе и буквы русского алфавита.
Комментарии игнорируются транслятором.
5. Упрощенные директивы сегментации
Программный модуль может иметь только
определенные типы сегментов, которые определяются
упрощенными директивами описания сегментов.
Для простых программ, содержащих по одному
сегменту кода, данных и стека, используют упрощенные
директивы сегментации MODEL.
Формат директи-
вы
Назначение
.CODE [имя] Начало или продолжение сегмента кода
.DATA Начало или продолжение сегмента иници-
ализированных данных.
.STACK [размер] Начало или продолжение сегмента стека
модуля. Параметр [размер] задает размер
стека
6. Обязательным параметром директивы MODEL
является модель памяти, которая определяет набор
сегментов и их размеры, способ связывания
сегментов и сегментных регистров.
Модель памяти имеет значения TINY, SMALL,
MEDIUM, COMPACT или LARGE.
Модель small выделяет по 64 Кбайт под сегменты
кода и данных и позволяет создавать программы
размером до 128 Кбайт.
Ее используют для большинства программ на
ассемблере. Сегменты могут пересекаться.
7. Директива MODEL SMALL автоматически связывает
сегменты с предопределенными именамипредопределенными именами (.code, .stack)
с сегментными регистрами CS и SS, явно связывать
нужно только сегмент данных .data с регистром DS.
8. Директивы определения данных позволяют
определить переменные в памяти различного размера:
DB - 1 байт
DW - 2 байта = 1 слово
DD - 4 байта = 1 двойное слово
DQ - 8 байт = 1 четвертное слово
DT - 10 байт
9. Первая программа
.Model Small ;Модель памяти ближнего типа
.Stack 100h ;Определяет стек размером 100h
.Data ;Начало сегмента данных
Hello DB 'Лабораторная работа №2 !$' ;Зарезервировали память
;для переменной HELLO
.Code ;Начало сегмента кода
Start:
mov ax,@DATA ;Формирование адреса сегмента
mov ds,ax ;данных
lea DX,Hello ;Установить в DX адрес переменной HELLO
mov ah,09h ;Функция DOS вывода строки
int 21h ;Вывод строки на экран
mov ax,4C00h ;Функция DOS завершения
int 21h ;программы
END start ;конец программы
10. КОМАНДЫ ПЕРЕСЫЛКИ (КОПИРОВАНИЯ)
Алгоритм: на место первого операнда пересылается
(копируется) значение второго: ор1:=ор2. Флаги не
меняются.
Допустимые комбинации операндов:Допустимые комбинации операндов:
Im – непосредственный операнд,
reg – регистр,
mem – память,
Размеры операндов должны быть одинаковы.
MOV op1, op2
ор1 ор2
Reg (кроме IP, CS) Im, reg, mem
Mem Im, reg
11. Запрещены пересылки:
1) из одной ячейки памяти в другую,
2) из одного сегментного регистра в другой,
3) непосредственного операнда в сегментный регистр
4) адреса в сегментный регистр
Обойти запреты можно, использовав промежуточный
регистр.
12. ПРИМЕРЫ
Скопировать слово из переменной var1 в var2 ( запрет 1):
MOV АХ, var1
MOV var2, AX
Переслать данные из регистра DS в ES ( запрет 2):
MOV АХ, DS
MOV ES, AX
Записать число 100 в сегментный регистр DS ( запрет 3):
MOV АХ, 100
MOV ES, AX ; ES:=100