Разработка программ на языке Ассемблера для семейства компьютеров совместных с IBM PC

Страницы работы

Фрагмент текста работы

Указание: сначала прочесть весь текст, иметь представление о содержимом, а затем выполнить задание.  На все это - две пары занятий.

РАЗРАБОТА ПРОГРАММ НА ЯЗЫКЕ АССЕМБЛЕРА ДЛЯ СЕМЕЙСТВА

КОМПЬЮТЕРОВ СОВМЕСТНЫХ С IBM PC.

ЦЕЛЬ:   показать  основные  требования  к  программам  на языке ассемблера, модели памяти  и  структуры программ, этапы ассемблирования, компоновки и выполнения программы.

1. Введение.

Язык  ассемблера  является  довольно  необычным и  сложным, это объясняется  сегментной   организацией  памяти   и одновременной адресацией четырех   сегментов. В   языке имеется  более

100  базовых  символических  команд,  в соответствии с которыми ассемблер генерирует более 3800 машинных команд. Кроме    того, в распоряжении программиста имеется около 20 директив, предназначенных  для  определения  памяти,  инициализации переменных и т.д. Учитывая, что в любой программе имеется множество   данных и  адресов, то  разработка  ассемблерных программ  превращается в кропотливый труд и требующий много усилий.

Тем не менее затраченное  время и усилия на  изучение языка ассемблер вознаградится.  Ассемблерные программы  обычно эффективнее  (занимает меньший  объем памяти и выполняются  быстрее)

эквивалентных  программ,  транслируемых с  тех или иных  языков высокого уровня.

2. Структура и образ памяти программы .EXE.

Совокупность команд и директив, представляемая как функциональная единица для обработки ассемблером, называется  исходным модулем. Небольшая программа  может состоять из  одного модуля, а сложная из десятков. Рассмотрим минимум синтаксических правил языка ассемблера, необходимых для написания простой программы.

1) Первой строкой  программы на языке  ассемблера является директива  NAME  (наименовать),  которое присваивает внутреннее имя объектному модулю, генерируемому ассемблеру:

NAME     имя_модуля  ; Почти неиспользуемая

Иначе, в первой строке можно использовать директиву  TITLE

(заголовок) с именем программы.

2) Программа  пишется в  виде одного  сегмента кодов.  Для этого второй строкой программы должно быть предложение,  состоящее из имени программы  и директивы SEGMENT (сегмент).   Число пробелов  между  словами  (именем  и  директивой  )  может быть любым.  После  этой  директивы  должно  быть записана директива

ASSUME  (считать,  предположить),  которая  устанавливает   для ассемблера  соответствие  между  конкретными  сегментами и сегментными  регистрами.  При  использовании  данных, обозначаемые обычно латинскими буквами, может  быть точно также указан  и DS

(сегмент данных)  и SS(сегмент  стека).   Заканчивается сегмент директивой ENDS.


имя_программы   SEGMENT

ASSUME  CS:имя_программы

.  .  .

имя_программы   ENDS

3) Сегмент кодов обычно содержит основную программу и несколько подпрограмм, и для каждой из них записывается  название, после названия  в начале  подпрограммы пишется  директива PROC, а в конце - ENDP.

имя_программы   PROC

.

.

.

имя_программы   ENDP

4) Запись  ВХ означает,  что данные  размещены в  регистре

ВХ; запись  [BX] означает,  что данные  расположены по  адресу, находящемуся в  регистре ВХ.  Это косвенная  адресация, которая реализуется только с помощью  регистров BX, BP, SI,  DI. Другие регистры для этой цели использовать нельзя.

5) Для инициализации ассемблерной EXE - программы  система

DOS имеет четыре требования:

1. Указать  ассемблеру, какие  сегментные регистры  должны соответствовать сегментам (используется директива  ASSUME);

2. Сохранить  в стеке  адрес, находящийся  в регистре  DS, когда программа начнет выполнение (команда PUSH заносит  значение в стек);

3. Записать в стек нулевой адрес (точнее, смещение);

4.  Загрузить  в  регистр  DS  адрес сегмента данных, т.к.

загрузчик DOS устанавливает правильные адреса стека в  регистре

SS и сегмента кодов в регистре CS, а регистр DS использует  для других целей, поэтому его необходимо инициализаровать.

6) Начало комментария к программе отмечается точкой с  запятой. Действие  комметария прекращаетсся  в конце  строки. Поскольку комментарии в ассемблере в процессе трансляции  игнорируются, после точки с запятой можно записать любые замечания.

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

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

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

Каждый логический сегмент в ассемблерной программе опреде

Похожие материалы

Информация о работе

Тип:
Методические указания и пособия
Размер файла:
117 Kb
Скачали:
0