Изучение основных требований к программам на языке ассемблера, моделей памяти и структуры программ, этапов ассемблирования, компоновки и выполнения программ

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

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

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

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

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

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

1. Введение.

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

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

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

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

2. Организация программного обеспечения.

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

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

Для  этого  используется  близкий  к  машинному  языку  -  язык ассемблера,  в  котором  программист  пользуется символическими мнемокодами вместо машинных команд и описательными именами  для полей данных и адресов памяти.

При программировании на языке ассемблера первое,что должно быть известно об  аппаратном обеспечении микрокомпьютера,   это какие регистры он имеет  и как они используются  при выполнении машинных команд,  а  также  какие существуют  способы адресации при выборке   команд   и   данных из   основной памяти   и т.д.

Указанные вопросы рассматриваются на  процессоре  8086/88   как типичного и описывается механизм сегментации памяти, являющейся реализацией одной из современных идей организации памяти.

В процессоре 8086/88 основная (оперативная) память  разделена на участки  по 1 байту (8 бит) каждый  (рис.1,a)), которые различаются номерами 0, 1, 2, 3 и т.д.


1 байт

┌┬┬┬┬┬┬┬┬┬┐

номер   0├┴┴┴┴┴┴┴┴┴┤

байта   1├─────────┤

2├─────────┤

3├────.────┤

.│    .    │

.│    .    │

.└─────────┘     a)

ширина

1 байт номер байта ┌─────────────┐сегмент

SP    ┌──────────┐    ┌─────>┤1 стек       │стека

BP───>┤    SS    ├────┘      ├─────────────┤

├──────────┤    ┌─────>┤2 область    │сегмент исполнительный────>┤    DS    ├────┘      │  данных     │данных адрес и            ├──────────┤           ├─────────────┤

регистры      ────>┤    ES    ├──────────>┤3 допол. обл.│дополн.

├──────────┤           │  данных     │сегмент

IP───>┤    CS    ├────┐      ├─────────────┤

└──────────┘    └─────>┤4 область    │сегмент

│  программ   │кодов

└─────────────┘

б)

Рис. 1

Это позваляет  выбрать, например,  команду длиной  1 байт, занимающей   участок   памяти   под   номером   0,   или  выбор данного,  имеющего  длину   4   байта   и   занимающего область памяти, включающую участки с номерами 1, 2, 3, 4.

Возможен и  другой способ  адресации основной  памяти, при котором память  разделяется на  области, называемые  сегментами

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

Оказалось, что  оперировать сегментом  очень удобно,  поскольку сегмент  может  быть  выбран  в  любом  месте основной памяти и размер его также может быть любым.

На рис.1, в качестве примера, память раcпределена следующим образом: в 1-м сегменте - область стека, во 2-м - область  данных, в  3-м -  дополнительная область  данных, в  4-м - область программ (кодов).  Сегментные регистры CS, SS, DS, ES  указывают, с какого адреса начинается область памяти, занимаемая  каждым из перечисленных выше сегментов основной памяти. В частности, регистр  CS (сегмент  кодов), используется  для указания, в каком  сегменте  находится   программа.   IP  (указатель адреса оче-  редного  кода  программы),  SP  (указатель   стека),   BP

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

Для вычисления исполнительного адреса данных необходимо   знать

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

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

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