БОЛЬШАЯ НАУЧНАЯ БИБЛИОТЕКА  
рефераты
Добро пожаловать на сайт Большой Научной Библиотеки! рефераты
рефераты
Меню
Главная
Налоги
Начертательная геометрия
Оккультизм и уфология
Педагогика
Полиграфия
Политология
Право
Предпринимательство
Программирование и комп-ры
Радиоэлектроника
Региональная экономика
Режущий инструмент
Реклама и PR
Ресторанно-гостиничный бизнес бытовое обслуживан
Римское право
Русский язык культура речи
РЦБ ценные бумаги
САПР
Сексология
Семейное право
Социология
Страховое право
Строительство архитектура
Таможенное право
Теория государства и права
Технология
Таможенная система
Транспорт
Физика и энергетика
Философия
Финансы деньги и налоги
Физкультура и спорт
Фотография
Химия
Хозяйственное право
Цифровые устройства
Экологическое право
Экология
Экономика
Экономико-математическое моделирование
Экономическая география
Экономическая теория
Эргономика
Этика и эстетика
Сочинения по литературе и русскому языку
Рефераты по теории государства и права
Рефераты по теории организации
Рефераты по теплотехнике
Рефераты по товароведению
Рефераты по трудовому праву
Рефераты по туризму
Рефераты по уголовному праву и процессу
Рефераты по управлению
Рефераты по менеджменту
Рефераты по металлургии
Рефераты по муниципальному праву
Биографии
Рефераты по психологии
Рефераты по риторике
Рефераты по статистике
Рефераты по страхованию
Рефераты по схемотехнике
Рефераты по науке и технике
Рефераты по кулинарии
Рефераты по культурологии
Рефераты по зарубежной литературе
Рефераты по логике
Рефераты по логистике
Рефераты по маркетингу
Рефераты по международному публичному праву
Рефераты по международному частному праву
Рефераты по международным отношениям
Рефераты по культуре и искусству
Рефераты по кредитованию
Рефераты по естествознанию
Рефераты по истории техники
Рефераты по журналистике
Рефераты по зоологии
Рефераты по инвестициям
Рефераты по информатике
Исторические личности
Рефераты по кибернетике
Рефераты по коммуникации и связи
Рефераты по косметологии
Рефераты по криминалистике
Рефераты по криминологии
Новые или неперечисленные
Без категории

Взаимосвязь языков 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 в качестве машинного кода и его исполнения.





17.06.2012
Большое обновление Большой Научной Библиотеки  рефераты
12.06.2012
Конкурс в самом разгаре не пропустите Новости  рефераты
08.06.2012
Мы проводим опрос, а также небольшой конкурс  рефераты
05.06.2012
Сена дизайна и структуры сайта научной библиотеки  рефераты
04.06.2012
Переезд на новый хостинг  рефераты
30.05.2012
Работа над улучшением структуры сайта научной библиотеки  рефераты
27.05.2012
Работа над новым дизайном сайта библиотеки  рефераты

рефераты
©2011