Пример: Глобальная сеть INTERNET
Я ищу:
На главную  |  Добавить в избранное  

Главная/

Радиоэлектроника, компьютеры и периферийные устройства. /

Вычислительныемашины и системы, 2 семестр

Документ 1 | Документ 2 | Документ 3 | Документ 4 | Документ 5 | Документ 6 | Документ 7 | Документ 8 | Документ 9 | Документ 10 | Документ 11 | Документ 12 | Документ 13 | Документ 14 | Документ 15 | Документ 16 | Документ 17 | Документ 18 | Документ 19 | Документ 20 | Документ 21

←предыдущая  следующая→
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 


Copyright © 2005—2007 «RefStore.Ru»