Страница 38 из 56
значение для любого определенного макроса равно 1.
_TINY_ Опция выбора крохотной модели памяти
_SMALL_ Опция выбора малой модели памяти
_MEDIUM_ Опция выбора средней модели памяти
_COMPACT_ Опция выбора компактной модели памяти
_LARGE_ Опция выбора большой модели памяти
_HUGE_ Опция выбора огромной модели памяти
Анахронизмы (K&R 17)
-----------------------------------------------------------------
Никаких из упомянутых в K&R анахронизмов в Турбо Си не су-
ществует.
- 311,312 -
Г Л А В А 12
-------------
УГЛУБЛЕННЫЙ КУРС ПО ТУРБО СИ
-----------------------------------------------------------------
Рады видеть вас здесь.
Эта глава охватывает три основные темы. Во-первых, рассказы-
вает о моделях памяти - от крохотной до огромной. Далее - о выбо-
ре нужной модели, исходя из конкретной задачи. Затем - о возмож-
ности смешивания языков программирования. Вы с этим уже частично
знакомы по Главе 10, которая объясняет связь Турбо Си с Турбо
Прологом. Здесь же рассматривается смешивание с другими языками,
включая Паскаль и ассемблер. После чего предлагается три аспекта
низкоуровневого программирования на Турбо Си: встроенный код ас-
семблера, псевдопеременные и обработка прерываний. В заключение
рассмотрены особенности работы с числами с плавающей точкой.
Итак, начнем.
Модели памяти
-----------------------------------------------------------------
Что такое модели памяти, почему вас должен беспокоить этот
вопрос? Для того чтобы ответить на него, вы должны разобраться,
на какой вычислительной установке работаете. Ее основной вычисли-
тельной единицей должен быть микропроцессор (CPU), принадлежащий
к семейству Intel iAPX86, т.е. 8086, 8088, 80186, 80286. Далее мы
будем рассматривать 8086.
Регистры микропроцессора 8086.
-----------------------------------------------------------------
Регистры общего назначения
ЙНННННННННЛННННННННН»
AX є AH є AL є Аккумулятор
МНННННННННОННННННННН№
BX є BH є BL є База
МНННННННННОННННННННН№
- 313,314 -
CX є CH є CL є Счетчик
МНННННННННОННННННННН№
DX є DH є DL є Данные
ИНННННННННКНННННННННј
Сегментные адресные регистры
ЙННННННННННННННННННН»
CS є є Сегмент кода
МННННННННННННННННННН№
DS є є Сегмент данных
МННННННННННННННННННН№
SS є є Сегмент стека
МННННННННННННННННННН№
ES є є Дополнительный сегмент
ИНННННННННННННННННННј (данных)
Cпециальные регистры
ЙННННННННННННННННННН»
SP є є Указатель стека
МННННННННННННННННННН№
BP є є Указатель базы
МННННННННННННННННННН№
SI є є Индекс источника
МННННННННННННННННННН№
DI є є Индекс получателя
- 315,316 -
ИНННННННННННННННННННј
Рис. 12.1. Регистры 8086.
На рис.12.1 показаны регистры микропроцессора 8086 с крат-
ким описанием назначения каждого из них. Есть еще 2 регистра: IP
(программный счетчик) и регистр флажков, но Турбо Си не имеет к
ним доступа, поэтому они здесь не показаны.
Регистры общего назначения.
-----------------------------------------------------------------
Регистры общего назначения чаще всего используют для хране-
ния и обработки данных. Каждый из них имеет некоторые специальные
функции, которые выполняет только он. Например:
- многие математические операции могут быть выполнены только
с использованием AX;
- BX может быть использован для хранения смещения в удален-
ном указателе (far-указателе);
- CX используется в некоторых командах цикла микропроцессо-
ра 8086 (LOOP-командах);
- DX используется определенными командами для хранения дан-
ных.
Но имеется много операций, в которых участвуют все эти ре-
гистры; в этих случаях вы можете свободно выбирать любой из них.
- 317,318 -
Сегментные регистры.
-----------------------------------------------------------------
Cегментные регистры содержат начальный адрес каждого из 4
сегментов. Как описано в следующем разделе, для того чтобы полу-
чить правильный 20-битный адрес этого сегмента, 16-битная величи-
на в сегментном регистре сдвигается влево на 4 бита (умножается
на 16).
Регистры специального назначения.
-----------------------------------------------------------------
Микропроцессор 8086 также имеет несколько регистров специ-
ального назначения: