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




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

     лера.  Что поможет вам в этом случае? Турбо Си дает ответ на этот          
     вопрос (фактически три ответа): псевдопеременные, встроенный  ас-          
     семблер  и  функции прерывания. Прочтите эту главу, и вы поймете,          
     как каждый из них поможет выполнить вашу работу.                           
                                                                                
                                                                                
                                                                                
                             Псевдопеременные                                   
     -----------------------------------------------------------------          
                                                                                
          Процессор в вашей ЭВМ (8088/8086/80186/80286) имеет  опреде-          
     ленное число регистров (или специальных элементов хранения),  ко-          
     торые он использует для манипулирования величинами.  В каждом ре-          
     гистре   16  разрядов  (2  байта);  некоторые  из  них  выполняют          
                                                                                
     специальные функции,  хотя часть из них может быть использована и          
     в  качестве регистров общего назначения.  Вспомните "Модели памя-          
     ти", рассмотренные в начале этой главы, для подробного рассмотре-          
     ния этих регистов процессора.                                              
                                                                                
          Иногда (в низкоуровневом программировании) вам может понадо-          
     биться обращение непосредственно к этим регистрам из Си-программы          
     для:                                                                       
          - загрузки в них значений перед вызовом  системных  подпрог-          
     рамм;                                                                      
          - просмотра значений, содержащихся в них в настоящее время.           
                                                                                
          Турбо Си очень просто позволит вам обратиться к этим регист-          
     рам через псевдопеременные. Псевдопеременные - это просто иденти-          
     фикаторы,  которые  соответствуют  данным регистрам. Их можно ис-          
     пользовать по  аналогии  с  переменными  типа  unsigned  int  или          
     unsigned char.                                                             
                                                                                
          В таблице 12.6 приведен полный список псевдопеременных,  ко-          
     торые можно использовать,  их типы,  регистры,  которым они соот-          
     ветствуют, и для чего эти регистры обычно используются.                    
                                                                                

                         - 411,412 -
                                                                                
                                                                                
     ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН          
        Псевдо -                                  Назначение                    
      переменные        Тип          Регистр       регистра                     
     ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН          
                                                                                
         _AX       unsigned int        AX     РОН / аккумулятор                 
         _AL       unsigned char       AL     младший байт AX                   
         _AH       unsigned char       AH     старший байт AX                   
                                                                                
         _BX       unsigned int        BX     РОН / индексный                   
         _BL       unsigned char       BL     младший байт BX                   
         _BH       unsigned char       BH     старший байт BX                   
                                                                                
         _CX       unsigned int        CX     РОН/счетчик,счетчик               
                                                           цикла                
         _CL       unsigned char       CL     младший байт CX                   
         _CH       unsigned char       CH     старший байт CX                   
                                                                                
         _DX       unsigned int        DX     РОН / содержащий данные           
         _DL       unsigned char       DL     младший байт DX                   
         _DH       unsigned char       DH     старший байт DX                   
                                                                                
                                                                                
         _CS       unsigned int        CS     сегмент кода                      
         _DS       unsigned int        DS     сегмент данных                    
         _SS       unsigned int        SS     сегмент стека                     
         _ES       unsigned int        ES     дополнительный сегмент            
                                                                                
         _SP       unsigned int        SP     указатель стека                   
                                            (смещение относительно SS)          
         _BP       unsigned int        BP     указатель базы                    
                                            (смещение относительно SS)          
         _DI       unsigned int        DI     Используется для                  
                                              регистровых переменных            
         _SI       unsigned int        SI     Используется для                  
                                              регистровых переменных            
                                                                                
     ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН          
                                                                                
           Таблица 12.6. Псевдопеременные Турбо Си                              
                                                                                
          Для  чего  же вам может понадобиться прямое обращение к этим          
     переменным из Турбо Си ?                                                   
                                                                                

                         - 413,414 -
                                                                                
          Для занесения в регистр некоторого  значения  перед  вызовом          
     низкоуровневой подпрограммы. Например, можно вызвать определенную          
     подпрограмму из ПЗУ, используя INT (прерывание), но обязательно с          
     предварительным занесением  необходимой информации в определенные          
     регистры, например так:                                                    
                                                                                
     void readchar (unsigned char page, unsigned char *ch,                      
                                        unsigned char *attr);                   
     (                                                                          





_AH = 8; /*Код операции: прочитать знак, аттрибут */ _BH = page; /* номер страницы дисплея*/ geninterrupt(0*10) /* вызов прерывания INT 10h */ *ch = _AL; /* получение кода ASCII считанного знака */ *attr = _AH; /* получение аттрибута считанного знака */ ) Вы видите, что код операции и номер страницы дисплея переда- ются в подпрограмму по INT 10h, а возвращаемые значения копируют- ся в ch и attr. C псевдопеременными можно обращаться так, будто это обычные глобальные переменные соответствующего типа (unsigned int или unsigned char). Однако то, что они ссылаются на регистры процес- сора, а не на ячейки, накладывает на их использование ряд ограни- чений и соглашений: - вы не можете использовать оператор адреса (&) совместно с псевдопеременной, т.к. псевдопеременная не имеет адреса; - так как компилятор генерирует команды, использующие ре- гистры, то нет никакой гарантии того, что значения, занесенные в псевдопеременные, будут храниться там длительное время. Это зна- чит, что вы должны заносить значения в регистры непосредственно перед выполнением запроса и выбирать из них результат сразу же после его завершения, как, например, в предыдущем случае с readchar. Это особенно касается регистров общего назначения (AX,AH,AL и т.п.), т.к. компилятор свободно использует их как временную память, и, кроме того, сам процессор изменяет их в про- извольные моменты времени, используя, например, CX для установки организации цикла при выполнении операции сдвига, или DX - для хранения старшего слова при 16-битном умножении; - нет полной уверенности в том, что занесенная в регистр ве- личина сохранится при выполнении вызова функции. Например: - 415,416 - _CX = 18; myFunc(); i = _CX ; Во время вызова функции сохраняются не все регистры, и нет гарантии, что i получит значение 18. Надежно, до и после вызова функции, величины хранятся лишь в регистрах _CS,_BP,_SI и _DI; - необходимо очень осторожно использовать некоторые регист- ры, т.к. это может привести к неожиданным и неблагоприятным ре- зультатам. Например, прямое сохранение величин в _CS,_SS,_SP или _BP может стать (и почти всегда будет) причиной того, что ваша программа будет работать неустойчиво, т.к. код, создаваемый ком- пилятором Турбо Си, использует эти регистры для других целей. Использование встроенного ассемблера ----------------------------------------------------------------- Вы уже видели, как надо писать отдельные подпрограммы на ас- семблере и компоновать их с программами на Турбо Си. Кроме этого Турбо Си позволяет использовать команды ассемблера непосредствен- но в Си программе. Это называется встроенным ассемблером. Для того, чтобы использовать встроенный ассемблер в Си-прог- рамме, вы должны использовать опцию компилятора -В. Если вы не используете эту опцию, и компилятор встретит встроенный ассемб- лер, то он предупредит вас и закончит свою работу с требованием запустить его снова с опцией -В. Вы можете избежать этого с по- мощью введения в программу утверждения #pragma inline, что заме- нит вам опцию -В, когда компилятор встретит его. Вам нужно обязательно иметь копию Турбо Ассемблера(TASM). На первом шаге компилятор создает файл с программой на языке ассемб- лера, а затем вызывает TАSM, чтобы получить .OBJ файл. Вам также следует знать архитектуру и набор каманд 8086. Кроме того, вам необходимо знать, как работают команды, которые - 417,418 - вы используете, как можно и как нельзя их применять. Если вы все это знаете, то вам остается только использовать ключевое слово asm для того, чтобы вставлять команды встроенного ассемблера. Это записывается в следующем виде: asm <код операции> <операнды> <; или символ новой строки> где: - <код операции> - допустимая команда 8086 (таблицы с допус- тимыми командами приведены ниже); - <операнды> - содержат операнды, допустимые для данной ко- манды, и могут ссылаться на Си-константы, переменные и метки; - <; или символ новой строки> - точка с запятой или новая строка, указывающие на окончание оператора asm.


Страницы : 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
Форумы политика, лучшие анекдоты
знакомства.