BIGLIB
  большущая библиотека (9812 книг), можно не только прочитать но и скачать бесплатно
 
АСТРОЛОГИЯ
  книги по астрологии
 
КРИМИНАЛ
  книги про криминал
 
ДЕТЕКТИВЫ
  детективы известных
   писателей
 
ФАНТАСТИКА
  фентези, фантастика,   фантастические повести
 
ПРИКЛЮЧЕНИЯ
  книги про приключения,   путешествия
 
ПОЛИТИКА
  книги про политиков,   репрессии
 
ПСИХОЛОГИЯ
  разнообразная литература   по психологии
 
КЛАССИКА
  классическая литература
 
КОМПЬЮТЕРНАЯ
  ЛИТЕРАТУРА
  про компютерное железо,   документация, языки   программирования
 
РЕЛИГИЯ, АТЕИЗМ
  книги про религию
 
ФИЛОСОФИЯ
  книги, которые заставляют   задуматься над   окружающим тебя миром.
 
ЭНЦИКЛОПЕДИИ
  самые интересные   энциклопедии на
   разные темы
 
МЕДИЦИНА
  медицинские книги,   методички,
   народные лечебники
 
КУЛИНАРИЯ
  рецепты тортов,   консервирование,
  все о спиртных
  напитках.
 
СТИХИ
  стихи популярных и не   очень авторов
 
ТВОРЧЕСТВО
  народное творчество,   стихи, песни и т.д.
 
ЮМОР
  анекдоты, приколы,   смешные истории
 
ЛЮБОВНЫЙ РОМАН
  мир высоких чувств и   любовных грез
 
ЭРОТИКА
  эротические рассказы,   книги о технике секса,   кама-сутра и др.




adfun.ru
Rambler's Top100 Rambler's Top100
    НА ГЛАВНУЮ
    РЕФЕРАТЫ
    ТОСТЫ
    ТЕСТЫ
    АВТО
    ДЛЯ СТУДЕНТА
    КНИГИ
    КОНТАКТ
 
Турбо Ассемблер 3.0/tasm/#2-2
Автор ""
Размер 465209 Байт
Страница 19 из 54
СКАЧАТЬ КНИГУ ЦЕЛИКОМ

          Сначала  мы  рассмотрим  использование встроенного в Borland
     C++ Ассемблера. Далее мы подробно обсудим компоновку отдельно ас-
     семблированных в Турбо Ассемблере модулей с Borland C++ и  иссле-
     дуем процесс вызова функций, написанных с помощью Турбо Ассембле-
     ра, из программы, созданной в Borland C++. И наконец, мы рассмот-
     рим вызов функций Borland C++ из программы на Турбо Ассемблере.

              Вызов из Borland C++ функций Турбо Ассемблера
     ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

          Обычно C++  и Ассемблер совместно используют путем написания
     отдельных модулей целиком на C++ или Ассемблере, компиляции моду-
     лей С++ и ассемблирования модулей Ассемблера с  последующей  сов-
     местно компоновкой  этих раздельно написанных модулей.  Это пока-
     зано на Рис. 1.18.



     Турбо Ассемблер 3.0/tasm/#2-2                              = 75 =


     ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
     і   Исходный файл на языке С++ і і Исходный файл на Ассемблере  і
     і          имя_файла.СPP       і і        имя_файла.ASM         і
     АДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДЩ АДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДЩ
                    і                              і
                      Компиляция                     Ассемблирование
             ХНННННННННННННё              ХННННННННННННННННННё
             і Borland C++ і              і  Турбо Ассемблер і
             ФНННННННННННННѕ              ФННННННННННННННННННѕ
                    і                              і
                                                  
     ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
     і     Объектный файл языка С++ і і   Объектный файл языка С++   і
     і          имя_файла.OBJ       і і        имя_файла.OBJ         і
     АДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДЩ АДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДЩ
                    і                               і
                    і                               і
                    АДДДДДДДДДДДДДї   ЪДДДДДДДДДДДДДЩ
                                  і   і
                                     
                             ХНННННННННННННё
                             і   TLINK     і Компоновка
                             ФНННННННННННННѕ
                                    і
                                    
                     ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
                     і         Выполняемый файл       і
                     і          имя_файла.EXE         і
                     АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

          Рис. 1.18  Цикл  компиляции,  ассемблирования  и  компоновки
     Borland C++, Турбо Ассемблера и компоновщика TLINK

          Выполняемый файл получается из "смеси" модулей С++ и Ассемб-
     лера. Этот цикл можно запустить командой:

             bcc имя_файла_1.cpp имя_файла_2.asm

     которая указывает Borland C++,  что нужно  сначала  компилировать
     файл имя_файла_1.СPP в файл имя_файла_1.OBJ, а затем вызвать Тур-
     бо Ассемблер для ассемблирования файла имя_файла_2.asm в имя_фай-
     ла_2.obj, и,  наконец,  вызвать  компоновщик TLINK для компоновки
     файла имя_файл_1.OBJ и имя_файл_2.OBJ в файл имя_файла.EXE.

          Раздельную компиляцию полезно использовать  для  программ  с
     большим объемом кода на Ассемблере, так как это позволяет исполь-
     зовать все возможности Турбо Ассемблера и программировать на язы-
     ке Ассемблера  в  чисто ассемблерном окружении  без ключевых слов
     asm, дополнительного времени на компиляцию  и  связанными  с  С++
     непроизводительными затратами  при работе со встроенным Ассембле-
     ром.


     Турбо Ассемблер 3.0/tasm/#2-2                              = 76 =

          За раздельную компиляцию приходится платить  следующую цену:
     программист, работающий с Ассемблером,  должен вникать во все де-
     тали организации интерфейса между С++ и кодом  Ассемблера.  В  то
     время как  при  использовании  встроенного Ассемблера Borland C++
     сам выполняет спецификацию сегментов, передачу параметров, ссылку
     на переменные С++ и т.д.,  отдельно компилируемые функции Ассемб-
     лера должны все это (и даже более) делать самостоятельно.

          В интерфейсе Турбо Ассемблера и Borland C++ есть два  основ-
     ных  аспекта.  Во-первых,  различные  части кода С++ и Ассемблера
     должны правильно компоноваться,  а функции и переменные в  каждой
     части кода должны быть доступны (если это необходимо) в остальной
     части кода. Во-вторых, код Ассемблера должен правильно работать с
     вызовами  функций,  соответствующих  соглашениям  языка С++,  что
     включает в себя доступ к передаваемым параметрам,  возврат значе-
     ний  и соблюдение правил сохранения регистров,  которых требуется
     придерживаться в функциях С++.

          Давайте теперь приступим к изучению правил компоновки  прог-
     рамм Турбо Ассемблера и Borland C++.






Основные моменты в интерфейсе Турбо Ассемблера и Borland C++ ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Чтобы скомпоновать вместе модули Borland C++ и Турбо Ассемб- лера, должны быть соблюдены следующие три пункта: 1. В модулях Турбо Ассемблера должны использоваться соглаше- ния об именах, принятые в Borland C++. 2. Borland C++ и Турбо Ассемблер должны совместно использо- вать соответствующие функции и имена переменных в форме, приемлемой для Borland C++. 3. Для комбинирования модулей в выполняемую программу нужно использовать утилиту-компоновщик TLINK. Здесь ничего не говориться о том, что в действительности де- лают модули Турбо Ассемблера. Пока мы коснемся только основных моментов, обеспечивающих разработку функций Турбо Ассемблера, совместимых с С++. Турбо Ассемблер 3.0/tasm/#2-2 = 77 = Компоновка ассемблерных модулей с С++ ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Важной концепцией С++ является безопасная с точки зрения стыковки типов компоновка. Компилятор и компоновщик должны рабо- тать согласованно, чтобы гарантировать правильность типов переда- ваемых между функциями аргументов. Процесс, называемый "корректи- ровкой имен" (name-mangling), обеспечивает необходимую информацию о типах аргументов. "Корректировка имени" модифицирует имя функ- ции таким образом, чтобы оно несло информацию о принимаемых функ- цией аргументах. Когда программа пишется целиком на С++, корректировка имен происходит автоматически и прозрачно для программы. Однако, когда вы пишете ассемблерный модуль для последующей его компоновки с программой на С++, вы сами обязаны обеспечить корректировку имен в модуле. Это легко сделать, написав пустую функцию на С+ и ском- пилировав ее с ассемблерным модулем. Генерируемый при этом Borland С++ файл .ASM будет содержать исправленные имена. Затем вы можете их использовать при написании реального ассемблерного модуля. Например, следующий фрагмент кода определяет четыре различ- ные версии функции с именем test: void test() { } void test( int ) { } void test( int, int ) { } void test( float, double ) { } Если этот код компилируется с параметром -S, то компилятор создает на выходе файл на языке Ассемблера (.ASM). Вот как он выглядит (несущественные детали убраны): ; void test() @testSqv proc near push bp mov bp,sp popo bp ret @testSqv endp Турбо Ассемблер 3.0/tasm/#2-2 = 78 = ; void test( int ) @testSqi proc near push bp mov bp,sp popo bp ret @testSqi endp ; void test( int, int ) @testSqii proc near push bp mov bp,sp popo bp ret @testSqii endp ; void test( float, double ) @testSqfd proc near push bp mov bp,sp popo bp ret


Страницы : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [19] 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54


adfun.ru









Форум раскрутка сайта и интернет-реклама
реклама - рекламное агентство -
Интернет PR агентство чат и форум
волчат знакомства - сайт знакомств
бесплатные компьютерные игры
фото знакомства
новые стеклопакеты -
качественное остекление балконов
портал - пластиковые окна -
закажите окна пвх в Москве

частная стоматология в Москве:
надежная стоматологическая клиника
протезирование зубов и
отбеливание зубов в стоматологии
Музыка - скачать mp3 музыка
каталог партнерские программы
ручной бесплатный обмен ссылками цифровые камеры цифровые фотоаппараты -
цифровые видеокамеры

театры - заказ билетов в театр -
магазин - продажа компьютеров
в Москве форум Испания - жилье -
недвижимость в испании

турфирма - испания туры
Переводы - бюро переводов
Законы - закон о товарных знаках,
Грузовые перевозки. АсМАП. Дальнобой закон о рекламе
Интернет казино
реклама на форуме и контекстная реклама
на Яндексе Баннерная сеть и
интернет каталог сайтов Holiday.Ru
Форумы политика, лучшие анекдоты
знакомства.