Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
01юьб тж.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.62 Mб
Скачать

Структура программы

Исходя из вышесказанного, целесообразно записывать данные и команды в листинге программы раздельно.

Большинство программ, написанных на Ассемблере, состоит из пяти основных частей: заголовок, сегмент данных, сегмент кода и заключение:

заголовок

; 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 ; al10

mov bx, address ; bx0800h

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

Весь текст ниже этой строки игнорируется.