←предыдущая следующая→
1 2 3
я2ВТОРОЙ СЕМЕСТР
СЕМИНАР N 6
я_ИНТЕРФЕЙС ТУРБО АССЕМБЛЕРА И ТУРБО СИ
Для смешанного программирования на языке высокого уровня и
Ассемблере прекрасно подходит Турбо Си. Для объединения кода Ас-
семблера и Си в нем предусмотрен не один, а целых два механизма.
Средство встроенного Ассемблера в Турбо Си обеспечивает быстрый и
удобный способ для включения кода Ассемблера непосредственно в
функцию Си. Для тех, кто предпочитает при программировании на Ас-
семблере использовать отдельные модули, целиком написанные на
этом языке, такие модули можно ассемблировать отдельно, а затем
компоновать с программами Турбо Си.
Встроенный Ассемблер - это не что иное, как возможность
вставлять практически любой код Ассемблера в программы на Си.
Каждый раз, когда Турбо Си обнаруживает ключевое слово asm,
указывающее, что это строка Ассемблера, он помещает данную строку
Ассемблера непосредственно в скомпилированный код с одним измене-
нием: ссылки на переменные Си преобразуются в соответствующий
эквивалент на Ассемблере. Предусмотрена возможность объединения
инструкций встроенного ассемблера в блоки с испотльзованием кон-
струкции asm {...} .
Турбо Си компилирует свой код таким образом, чтобы избежать
многих потенциально опасных взаимодействий со встроенным Ассемб-
лером. Тем не менее, неправильно функционирующий встроенный код
Ассемблера определенно может привести к серьезным ошибкам. Однако
ошибки во встроенном коде Ассемблера гораздо менее вероятны, чем
в программе, целиком написанной на Ассемблере, поскольку Турбо Си
берет на себя множество мелочей, таких, как вход в функции и
выход из них, передачу параметров и выделение памяти для перемен-
ных.
.
- 2 -
Как работает встроенный Ассемблер
Обычно Турбо Си компилирует каждый файл исходного кода на
языке Си в объектный файл, а затем вызывает утилиту TLINK для
компоновки объектных файлов в выполняемую программу.
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і Исходный файл на языке Си і
АДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДЩ
V
ЙННННННННННННН»
є Турбо Си є Компиляция
ИННННННЛННННННј
V
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і Объектный файл і
АДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДЩ
V
ЙННННННННННННН»
є TLINK є Компоновка
ИННННННЛННННННј
V
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і Выполняемый файл і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Рис. 1 Цикл компиляции и компоновки Турбо Си.
Однако при использовании встроенного Ассемблера Турбо Си до-
бавляет в цикл компиляции и компоновки дополнительный шаг.
При обработке Турбо Си каждого модуля, где содержится встро-
енный код Ассемблера, сначала весь модуль компилируется в исход-
ный файл на языке Ассемблера, а затем для трансляции полученного
кода Ассемблера а объектный код вызывается Турбо Ассемблер. После
этого для компоновки объектных файлов вызывается утилита TLINK.
.
- 3 -
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і Исходный файл на языке Си і
АДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДЩ
V
ЙННННННННННННН»
є Турбо Си є Компиляция
ИННННННЛННННННј
V
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і Исходный файл на Ассемблере і
АДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДЩ
V
ЙННННННННННННННННН»
є Турбо Ассемблер є Ассемблирование
ИННННННННЛННННННННј
V
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і Объектный файл і
АДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДЩ
V
ЙННННННННННННН»
є TLINK є Компоновка
ИННННННЛННННННј
V
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і Выполняемый файл і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Рис. 2. Цикл компиляции, ассемблирования и компоновки Турбо Си.
Встроенный код Ассемблера просто передается Турбо Си в файл
на языке Ассемблера. Турбо Си не нужно ничего знать об ассембли-
ровании встроенного кода, вместо этого Турбо Си компилирует
исходный код языка Си на уровень Ассемблера, а затем позволяет
Турбо Ассемблеру выполнить трансляцию.
Обычно Турбо Си компилирует исходный код непосредственно в
объектный код. Существует несколько способов, с помощью которых
можно сообщить Турбо Си, что нужно поддерживать встроенный Ассем-
блер путем компиляции на язык Ассемблера и последующего вызова
утилиты TLINK.
Параметр командной строки -s указывает Турбо Си, что нужно
транслировать исходный код в код Ассемблера, после чего прекра-
тить работу. Файл с расширением .ASM, сгенерированный Турбо Си
при использовании параметра -s, можно отдельно ассемблировать и
скомпоновать с другими модулями Си и Ассемблера.
Параметр -b или вставленная в программу на C директива:
#pragma inline
- 4 -
указывают Турбо Си, что нужно выполнить трансляцию в Ассемблер,
а затем для получения объектного кода вызвать Турбо Ассемблер.
Лучше помещать указание #pragma inline возможно ближе к началу
исходного кода языка Си, так как любой исходный код языка Си,
после которым следует следует данная директива, будет компилиро-
ваться дважды: один раз в обычном режиме, а другой раз в режиме
Си -> Ассемблер.
Встроенный код Турбо Ассемблера
Встроенный код Ассемблера может находиться в сегменте кода
или сегменте данных Турбо Си. Код Ассемблера, размещенный в функ-
ции, ассемблируется в сегмент кода Турбо Си, а встроенный код,
размещенный вне функции, ассемблируется в сегмент данных Турбо
Си.
Например, программа:
// Таблица квадратов значений
asm SquareLookUpTable label word;
asm dw 0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100;
// Функция для поиска квадрата значения между 0 и 10
int LookUpSquare
←предыдущая следующая→
1 2 3
|
|