рефераты
рефераты
Поиск
Расширенный поиск
рефераты
рефераты
рефераты
рефераты
МЕНЮ
рефераты
рефераты Главная
рефераты
рефераты Астрономия и космонавтика
рефераты
рефераты Биология и естествознание
рефераты
рефераты Бухгалтерский учет и аудит
рефераты
рефераты Военное дело и гражданская оборона
рефераты
рефераты Государство и право
рефераты
рефераты Журналистика издательское дело и СМИ
рефераты
рефераты Краеведение и этнография
рефераты
рефераты Производство и технологии
рефераты
рефераты Религия и мифология
рефераты
рефераты Сельское лесное хозяйство и землепользование
рефераты
рефераты Социальная работа
рефераты
рефераты Социология и обществознание
рефераты
рефераты Спорт и туризм
рефераты
рефераты Строительство и архитектура
рефераты
рефераты Таможенная система
рефераты
рефераты Транспорт
рефераты
рефераты Делопроизводство
рефераты
рефераты Деньги и кредит
рефераты
рефераты Инвестиции
рефераты
рефераты Иностранные языки
рефераты
рефераты Информатика
рефераты
рефераты Искусство и культура
рефераты
рефераты Исторические личности
рефераты
рефераты История
рефераты
рефераты Литература
рефераты
рефераты Литература зарубежная
рефераты
рефераты Литература русская
рефераты
рефераты Авиация и космонавтика
рефераты
рефераты Автомобильное хозяйство
рефераты
рефераты Автотранспорт
рефераты
рефераты Английский
рефераты
рефераты Антикризисный менеджмент
рефераты
рефераты Адвокатура
рефераты
рефераты Банковское дело и кредитование
рефераты
рефераты Банковское право
рефераты
рефераты Безопасность жизнедеятельности
рефераты
рефераты Биографии
рефераты
рефераты Маркетинг реклама и торговля
рефераты
рефераты Математика
рефераты
рефераты Медицина
рефераты
рефераты Международные отношения и мировая экономика
рефераты
рефераты Менеджмент и трудовые отношения
рефераты
рефераты Музыка
рефераты
рефераты Кибернетика
рефераты
рефераты Коммуникации и связь
рефераты
рефераты Косметология
рефераты
рефераты Криминалистика
рефераты
рефераты Криминология
рефераты
рефераты Криптология
рефераты
рефераты Кулинария
рефераты
рефераты Культурология
рефераты
рефераты Налоги
рефераты
рефераты Начертательная геометрия
рефераты
рефераты Оккультизм и уфология
рефераты
рефераты Педагогика
рефераты
рефераты Полиграфия
рефераты
рефераты Политология
рефераты
рефераты Право
рефераты
рефераты Предпринимательство
рефераты
рефераты Программирование и комп-ры
рефераты
рефераты Психология
рефераты
рефераты Радиоэлектроника
рефераты
РЕКЛАМА
рефераты
 
рефераты

рефераты
рефераты
Взаимосвязь языков C и ассемблера

Взаимосвязь языков C и ассемблера

Раздел 1: Регистры и параметры

1.1 Использование регистров

В создаваемых ассемблерных программах можно использовать все регистры

процессора. Но чтобы предотвратить путаницу с функциями С и С++, необходимо

восстанавливать bp, cs, sp и ss, которые они имели до запуска созданной

подпрограммы. Тогда можно быть совершенно уверенным, что обращение к другим

функциям не изменит эти регистры. Также нельзя забывать, что С использует

регистры si и di для регистровых переменных, поэтому при использовании

встроенного ассемблера замедляется общая работа программы.

К регистрам ax, bx, cx, dx и es можно обращаться свободно и не нужно

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

других функций, поэтому надо помнить, что эти регистры изменяться, если

вызываются функции С и С++ из ассемблерных подпрограмм.

1.2 Ассемблерные операторы Inline

Ассемблерные операторы inline начинаются словом asm, за которым

следует инструкция и ее операнды. Например, чтобы синхронизировать

программу с внешним сигналом прерывания, можно написать:

/* ожидание прерывания*/

asm sti

asm hlt

printf(“Прерывание получено\n”)

Когда ранние версии Turbo C компилируют программу со встроенными

командами asm, компилятор сперва создает ассемблерный текст для всей

программы, вставляя в текст наши ассемблерные инструкции вместе с

откомпилированным кодом для остальных операторов С. Затем компилятор

вызывает Turbo Assembler и Linker (компоновщик), чтобы провести

ассемблирование и подключить программу к конечному файлу кода. Более

поздние версии Turbo и Borland C++ могут компилировать операторы asm без

вызова TASM. Полный синтаксис asm:

asm[метка] мнемоника/директива операнды [;] [/*С комментарий*/]

Точки с запятыми в конце строк asm и комментарии С, расположенные

между /*и*/ удаляются из текста перед ассемблированием, поэтому их можно

опускать в тексте программы.

1.3 Размещение данных и операторов в тексте программы

Каждая строка текста программы С и С++ находится либо внутри, либо

снаружи функции, и операторы asm могут вставляться как в одном, так и в

другом месте. Конкретное положение оператора asm влияет на то, куда

ассемблируется код или директива. Если оператор asm появляется снаружи

функции, то он ассемблируется в сегмент данных программы, если внутри

функции - в кодовый сегмент. Обычно, чтобы создать переменные, операторы

asm вставляются снаружи функций; для создания кода их следует вставлять

внутрь функций. Например:

asm count db ?

int main()

{

asm shl [count], 1/*умножение count на 4*/

asm shl [count], 1

return 0;

}

Переменная count объявляется в сегменте данных программы

(относительно ds). Операторы внутри функции main умножают count на 4,

используя вместо mul быстрые инструкции сдвига shl. Если объявлять

переменные внутри функции, данные ассемблируются в кодовый сегмент, требуя

особого обхождения:

int main()

{

asm jmp OverThere

asm count db ?

OverThere:

asm shl [count], 1 /* умножение count на 4*/

asm shl [count], 1

return 0;

}

Поскольку теперь переменная count находится в кодовом сегменте,

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

count в качестве машинного кода и его исполнения.

     



рефераты
рефераты
© 2011 Все права защищены