
- •Лабораторная работа №1
- •Знакомство с Assembler
- •Регистры процессора i8086
- •Представление данных
- •Представление команд
- •Метка: Мнемокод Операнды Комментарий
- •Адресация памяти
- •Запуск программы
- •Структура программы
- •Последовательность создания исполняемого файла
- •Отладка программы
- •Практические задания
- •Вопросы к защите
Структура программы
Исходя из вышесказанного, целесообразно записывать данные и команды в листинге программы раздельно.
Большинство программ, написанных на Ассемблере, состоит из пяти основных частей: заголовок, сегмент данных, сегмент кода и заключение:
-
заголовок
; my first program
model small
stack 100h
сегмент данных
.data
number db 10
address dw 0800h
сегмент
кода
.code
start:
mov ax, @data ; стандартное
mov ds, ax ; начало программы
mov al, number ; al10
mov bx, address ; bx0800h
jmp exit ; переход к метке exit
mov number,11 ; выполняться не будет
exit:
mov ax,4c00h ; стандартное
int 21h ; завершение программы
end start ; заключение
Рассмотрим эти части более подробно.
Заголовок содержит установочную информацию о том, как сгенерировать исполняемый файл. В первой строчке в виде комментария обычно указывают назначение программы.
Turbo Assembler, в котором мы будем работать, имеет два режима – синтаксических стандарта – ideal и masm. Первый режим более эффективен, второй – проще. Мы будем работать в режиме masm.
Как видно из приведенной структуры программы, Ассемблер разделяет сегмент кода и сегмент данных и отводит под команды и под переменные отдельные участки памяти. Если программа короткая и оперирует небольшим количеством переменных, то эти сегменты можно объединить в один. Бывает, что код программы объемный, а переменных совсем немного или, наоборот, небольшая программа служит для обработки большого объема данных. Другими словами, в первом случае нам потребуется маленькая область памяти для кода и большая – для данных, а во втором случае – наоборот. Такое разделение памяти называют моделью памяти. Существует несколько типов моделей памяти – tiny, small, medium и т.д. Для большинства программ на ассемблере подходит модель small, именно ее мы и будем использовать ниже.
Далее указывается размер стека. Причем сделать это необходимо независимо от того, будет программа использовать его или нет. Стек – это специальный сегмент памяти, обслуживаемый по принципу «последний пришел первый ушел». Директива stack 256 резервирует под стек 256 байт.
Сегмент данных. Здесь определяются переменные, которые будут храниться в памяти. Сегмент данных начинается с директивы.data.
Сегмент кода содержит код программы. Сегмент кода начинается с директивы.code.
В рассмотренном выше примере имеется две метки start и exit. Следующие за ними две строчки являются стандартными, и рассматриваться нами не будут.
|
Следует различать директивы (указания компилятору) и команды (инструкции языка Ассемблер). Директивы не переводятся в машинные инструкции, а управляют работой компилятора. |
Заключение информирует о завершении программы и содержит всего одну директиву end метка, причем здесь должна быть указана та метка, с какой вы хотите начать программу, например,
end start
Весь текст ниже этой строки игнорируется.