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




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

          Заметим, что  исходное состояние регистра DS сохраняется при
     входе в функцию _AsmFunction с помощью инструкции  PUSH  и  перед
     выходом восстанавливается с помощью инструкции POP. Даже в сверх-
     большой модели памяти Borland C++ требует, чтобы все функции сох-
     раняли регистр DS.

                 Общедоступные и внешние идентификаторы
     ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

                         Подчеркивания и язык Си
     ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

          Например, следующая программа на языке Си (link2asm.cpp):

           extrn int ToggleFlag();
           int Flag;

     Турбо Ассемблер 3.0/tasm/#2-2                              = 87 =

           main()
           {
               ToggleFlag();
           }

     правильно компонуется  со  следующей  программой  на   Ассемблере
     (CASMLINK.ASM):

                 .MODEL  SMALL
                 .DATA
                 EXTRN   _Flag:word
                 .CODE
                 PUBLIC  _ToggleFlag
     _ToggleFlag PROC
                 cmp     [_Flag],0      ; флаг сброшен?
                 jz      SetFlag        ; да, установить его
                 mov     [_Flag],0      ; нет, сбросить его
                 jmp     short EndToggleFlag ; выполнено
     SetFlag:
                 mov     [_Flag],1      ; установить флаг
     EndToggleFlag:
                 ret
     _ToggleFlag ENDP
                 END

          При использовании в директивах EXTERN и PUBLIC спецификатора
     языка Си правильно компонуется со следующей программой на Ассемб-
     лере (CSPEC.ASM):

                 .MODEL  SMALL
                 .DATA
                 EXTRN   C Flag:word
                 .CODE
                 PUBLIC  C ToggleFlag
     ToggleFlag  PROC
                 cmp     [Flag],0       ; флаг сброшен?
                 jz      SetFlag        ; да, установить его
                 mov     [Flag],0       ; нет, сбросить его
                 jmp     short EndToggleFlag ; выполнено
     SetFlag:
                 mov     [Flag],1       ; установить флаг
     EndToggleFlag:
                 ret
     ToggleFlag  ENDP
                 END

                Примечание: Метки,  на  которые  отсутствуют  ссылки в
           программе не Си (такие, как SetFlag) не требуют предшеству-
           ющих символов подчеркивания.

          Турбо Ассемблер  автоматически  при  записи  имен   Flag   и
     ToggleFlag  в объектный файл поместит перед ними символ подчерки-
     вания.

     Турбо Ассемблер 3.0/tasm/#2-2                              = 88 =


      Различимость  строчных и прописные символов в идентификаторах





ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД В именах идентификаторов Турбо Ассемблер обычно не различает строчные и прописные буквы (верхний и нижний регистр). Поскольку в С++ они различаются, желательно задать такое различие и в Турбо Ассемблере (по крайней мере для тех идентификаторов, которые сов- местно используются Ассемблером и С++). Это можно сделать с по- мощью параметров /ML и /MX. Переключатель (параметр) командной строки /ML приводит к тому, что в Турбо Ассемблере во всех идентификаторах строчные и прописные символы будут различаться (считаться различными). Пара- метр командной строки /MX указывает Турбо Ассемблеру, что строч- ные и прописные символы (символы верхнего и нижнего регистра) нужно различать в общедоступных (PUBLIC) идентификаторах, внешних (EXTRN) идентификаторах глобальных (GLOBAL) идентификаторах и об- щих (COMM) идентификаторах. В большинстве случаев следует также использовать параметр /ML. Типы меток ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Хотя в программах Турбо Ассемблера можно свободно обращаться к любой переменной или данным любого размера (8, 16, 32 бита и т. д.), в общем случае хорошо обращаться к переменным в соответствии с их размером. Например, если вы записываете слово в байтовую пе- ременную, то обычно это приводит к проблемам: . . . SmallCount DB 0 . . . mov WORD PTR [SmallCount],0ffffh . . . Поэтому важно, чтобы в операторе Ассемблера EXTRN, в котором описываются переменные С++, задавался правильный размер этих пе- ременных, так как при генерации размера доступа к переменной С++ Турбо Ассемблер основывается именно на этих описаниях. Если в программе на языке С++ содержится оператор: char c то код Ассемблера: Турбо Ассемблер 3.0/tasm/#2-2 = 89 = . . . EXTRN c:WORD . . . inc [c] . . . может привести к весьма неприятным ошибкам, поскольку после того, как в коде на языке С++ переменная c увеличится очередные 256 раз, ее значение будет сброшено, а так как она описана, как пере- менная размером в слово, то байт по адресу OFFSET c + 1 будет увеличиваться некорректно, что приведет к непредсказуемым резуль- татам. Турбо Ассемблер 3.0/tasm/#2-2 = 90 = Между типами данных С++ а Ассемблера существует следующее соотношение: ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї і Тип данных С++ і Тип данных Ассемблераі ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ і unsigned char і byte і і char і byte і і enum і word і і unsigned short і word і і short і word і і unsigned int і word і і int і word і і unsigned long і dword і і long і dword і і float і dword і і double і qword і і long double і tbyte і і near* і word і і far* і dword і АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ Внешние дальние идентификаторы ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Если вы используете упрощенные директивы определения сегмен-


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