Страница 50 из 56
лера. Что поможет вам в этом случае? Турбо Си дает ответ на этот
вопрос (фактически три ответа): псевдопеременные, встроенный ас-
семблер и функции прерывания. Прочтите эту главу, и вы поймете,
как каждый из них поможет выполнить вашу работу.
Псевдопеременные
-----------------------------------------------------------------
Процессор в вашей ЭВМ (8088/8086/80186/80286) имеет опреде-
ленное число регистров (или специальных элементов хранения), ко-
торые он использует для манипулирования величинами. В каждом ре-
гистре 16 разрядов (2 байта); некоторые из них выполняют
специальные функции, хотя часть из них может быть использована и
в качестве регистров общего назначения. Вспомните "Модели памя-
ти", рассмотренные в начале этой главы, для подробного рассмотре-
ния этих регистов процессора.
Иногда (в низкоуровневом программировании) вам может понадо-
биться обращение непосредственно к этим регистрам из Си-программы
для:
- загрузки в них значений перед вызовом системных подпрог-
рамм;
- просмотра значений, содержащихся в них в настоящее время.
Турбо Си очень просто позволит вам обратиться к этим регист-
рам через псевдопеременные. Псевдопеременные - это просто иденти-
фикаторы, которые соответствуют данным регистрам. Их можно ис-
пользовать по аналогии с переменными типа unsigned int или
unsigned char.
В таблице 12.6 приведен полный список псевдопеременных, ко-
торые можно использовать, их типы, регистры, которым они соот-
ветствуют, и для чего эти регистры обычно используются.
- 411,412 -
ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
Псевдо - Назначение
переменные Тип Регистр регистра
ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
_AX unsigned int AX РОН / аккумулятор
_AL unsigned char AL младший байт AX
_AH unsigned char AH старший байт AX
_BX unsigned int BX РОН / индексный
_BL unsigned char BL младший байт BX
_BH unsigned char BH старший байт BX
_CX unsigned int CX РОН/счетчик,счетчик
цикла
_CL unsigned char CL младший байт CX
_CH unsigned char CH старший байт CX
_DX unsigned int DX РОН / содержащий данные
_DL unsigned char DL младший байт DX
_DH unsigned char DH старший байт DX
_CS unsigned int CS сегмент кода
_DS unsigned int DS сегмент данных
_SS unsigned int SS сегмент стека
_ES unsigned int ES дополнительный сегмент
_SP unsigned int SP указатель стека
(смещение относительно SS)
_BP unsigned int BP указатель базы
(смещение относительно SS)
_DI unsigned int DI Используется для
регистровых переменных
_SI unsigned int SI Используется для
регистровых переменных
ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
Таблица 12.6. Псевдопеременные Турбо Си
Для чего же вам может понадобиться прямое обращение к этим
переменным из Турбо Си ?
- 413,414 -
Для занесения в регистр некоторого значения перед вызовом
низкоуровневой подпрограммы. Например, можно вызвать определенную
подпрограмму из ПЗУ, используя INT (прерывание), но обязательно с
предварительным занесением необходимой информации в определенные
регистры, например так:
void readchar (unsigned char page, unsigned char *ch,
unsigned char *attr);
(
- точка с запятой или новая
строка, указывающие на окончание оператора asm.