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




adfun.ru
Rambler's Top100 Rambler's Top100
    НА ГЛАВНУЮ
    РЕФЕРАТЫ
    ТОСТЫ
    ТЕСТЫ
    АВТО
    ДЛЯ СТУДЕНТА
    КНИГИ
    КОНТАКТ
 
Турбо С: руководство пользователя. Часть 2
Автор ""
Размер 800673 Байт
Страница 47 из 56
СКАЧАТЬ КНИГУ ЦЕЛИКОМ

     манду  DW (резервировать слово),  в то время как другие - DD (ре-          
     зервировать двойное слово), что определяет размер результирующего          
     указателя.  Числовые и текстовые константы определяются как обыч-          
     но.                                                                        
                                                                                
          Переменные определяются так же, как константы. Если вы хоти-          
     те получить переменные, которые не инициализированы определенными          
     значениями,  вы можете объявить их в _BSS-сегменте, поставив воп-          
     росительный знак (?) там, куда вы потом поместите переменные.              
                                                                                
                                                                                
                                                                                
                                                                                

                         - 385,386 -
                                                                                
            Определение глобальных и внешних идентификаторов                    
     -----------------------------------------------------------------          
                                                                                
          Создание вами модуля не принесет большого успеха до тех пор,          
     пока ваша программа на Турбо Си не будет знать, какие функции она          
     может вызывать и на какие переменные может ссылаться. Кроме того,          
     вам  может потребоваться возможность вызывать функции Турбо Си из          
     подпрограмм,  написанных на ассемблере или ссылаться на  перемен-          
     ные, объявленные в Турбо Си.                                               
                                                                                
          Чтобы освоить  эти  возможности,  вам  нужно  разобраться  в          
     трансляторе и компоновщике Турбо Си.  Когда вы объявляете внешний          
     идентификатор,  транслятор  автоматически  ставит  перед ним знак          
     подчеркивания (_) до его сохранения в объектном модуле. Это озна-          
     чает,  что  вы  должны  поставить  знак подчеркивания перед любым          
     идентификатором в вашем ассемблеровском модуле, к которому вы хо-          
     тите получить доступ из программы на Си.  К Паскаль-идентификато-          
     рам обращение идет иначе, чем к идентификаторам Си, - они исполь-          
     зуют   только   верхний   регистр   и   не   снабжаются  символом          
     подчеркивания.                                                             
                                                                                
          Знак подчеркивания для идентификаторов Си  необязателен,  он          
                                                                                
     устанавливается  по умолчанию(on). Он может быть отключен (off) с          
     помощью опции командной строки -u-. Однако, если  вы  используете          
     стандартные библиотеки Турбо Си, то столкнетесь с проблемами, ес-          
     ли  только  вы  не переделали эти библиотеки. (Чтобы сделать это,          
     вам понадобится другой продукт Турбо Си - исходный текст программ          
     для  библиотек  поддержки;   контактируйте   с   фирмой   Borland          
     International для получения более подробной информации.)                   
                                                                                
          Если любая asm-программа в исходном файле ссылается на любой          
     Си-идентификатор  (данные  или  функции), то такие идентификаторы          
     должны начинаться со знака подчеркивания.                                  
                                                                                
          Турбо Ассемблер  (TASM) не чувствителен к регистру,  другими          
     словами,  когда вы транслируете программу с языка ассемблера,  то          
     все  идентификаторы сохраняются только в заглавных символах.  Ис-          
     пользование в TASM опции /mx переводит его в режим  "чувствитель-          
     ности регистра" для внешних указателей.  Компоновщик Турбо Си де-          
     лает то же  самое  с  помощью  идентификатора  extern,  т.о.  эти          
     моменты хорошо совпадают.  Вы можете заметить, что в наших приме-          
     рах ключевые слова и директивы записаны в верхнем регистре, а все          
     другие  идентификаторы и коды команд - в нижнем (строчными симво-          
     лами);  это совпадает со стилем,  предлагаемым в  руководстве  по          

                         - 387,388 -
                                                                                
     TASM. Однако, вы вольны использовать все заглавные (или строчные)          
     или любые смешанные идентификаторы, как вам удобно.                        
                                                                                
          Для того чтобы сделать идентификаторы (имена  подпрограмм  и          
     переменных) видимыми извне вашего ассемблерного модуля, вам нужно          
     объявить их как PUBLIC.                                                    
                                                                                
          Так, например,  если вы написали модуль, имеющий целые функ-          
     ции  max  и  min и целые переменные MAXINT,lastmax и lastmin,  вы          
     должны вставить в него оператор                                            
                                                                                
          PUBLIC _max,_min                                                      
                                                                                
     в ваш программный сегмент, а операторы                                     
                                                                                
          PUBLIC  _MAXINT, _lastmax, _lastmin                                   
          _MAXINT  DW 32767                                                     
          _lastmin DW 0                                                         
          _lastmax DW 0                                                         
                                                                                
     в сегмент данных.                                                          
                                                                                
                                                                                
                    Порядок вызова Турбо Си из .ASM                             
     -----------------------------------------------------------------          
                                                                                
          Для того чтобы созданный вами модуль на ассемблере мог обра-          
     щаться к функциям и переменным,  объявленным в программе на Турбо          
     Си, используйте оператор EXTRN.                                            
                                                                                
                                                                                
                        Указатели на функции                                    
     -----------------------------------------------------------------          





Чтобы вызывать Си-функцию иэ подпрограммы, написанной на ас- семблере, вы должны объявить ее в своем модуле с помощью операто- ра EXTRN : где - имя функции, означает near или far, в зависимости от того, какой является Си-функция (near или far). Если - near, то оператор EXTRN должен появиться в прог- раммном сегменте вашего модуля; если - far, то EXTRN должен поя- виться вне любого сегмента. Итак, вы получите следующий оператор - 389,390 - в программном сегменте: EXTRN _myCfunc1 : near, _myCfunc2 : far позволяющий вам вызывать _myCfunc1 и _myCfunc2 из ваших подпрог- рамм на ассемблере. Указатели на данные ----------------------------------------------------------------- Чтобы ссылаться на переменные, вы должны поместить внутрь сегмента данных соответствующий оператор (или операторы) EXTRN следующим образом: EXTRN : где есть имя переменной, а указывает на ее размер. Возможные значения : - BYTE (1 байт) - WORD (2 байта) - DWORD (4 байта) - QWORD (8 байт) - TBYTE (10 байт) Размеры элементов массивов должны соответствовать . При объявлении структуры в качестве нужно использовать размер наиболее часто встречающегося в структуре элемента. Т.о., если ваша Си-программа имела глобальные переменные int i, jarray [10]; char ch; long result; то вы можете сделать их доступными в вашем модуле с помощью сле- дующего оператора: EXTRN _i:WORD,_jarray:WORD,_ch:BYTE,_result:DWORD И последнее важное замечание. Если вы используете модель па- мяти huge, то операторы EXTRN должны появляться вне любого сег- - 391,392 - мента. Это применимо как к процедурам, так и к переменным. Создание подпрограмм на ассемблере ----------------------------------------------------------------- Теперь вы знаете, каким образом все должно быть определено, и настало время ознакомиться, как вообще записываются функции на ассемблере. Здесь необходимо рассмотреть несколько важных момен- тов: передача параметров, возвращаемые значения и соглашения по регистрам. Предположим, вы хотите написать функцию min, которая, как вы полагаете, имеет следующий прототип в Си: int extern min(int v1, int v2); Вы хотите, чтобы функция min вернула минимальную из двух пе- реданных ей величин. В общем виде запись функции min будет:


Страницы : 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 55 56


adfun.ru









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

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

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

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