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




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

     пользуемые Турбо Cи;  просто скопируйте их  в  вашу  ассемблерную
     часть программы.

          Вы также можете посмотреть, как будут выглядеть соответству-
     ющие старые директивы,  скомпилировав их обычным образом (без па-
     раметра -S) и использовав TDUMP - утилиту, поставляемую Турбо Ас-
     семблером,  чтобы получить все записи определения  сегмента.  Ис-
     пользуйте следующую командную строку:

         tdump -OI segdef module.obj


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

       Значения по умолчанию: когда необходимо загружать сегменты?
     ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

          При входе  в функцию Ассемблера из Borland C++ регистры CS и
     DS имеют следующие значения,  которые зависят от используемой мо-
     дели памяти (регистр SS всегда используется для сегмента стека, а
     ES всегда используется, как начальный сегментный регистр):

           Значения регистров при входе в Ассемблер из Borland C++
                                                          Таблица 18.2
         ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
         і  Модель           CS                          DS          і
         ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
         і Крохотная         _TEXT                    DGROUP         і
         і Малая             _TEXT                    DGROUP         і
         і Компактная        _TEXT                    DGROUP         і
         і Средняя        имя_файла_TEXT              DGROUP         і
         і Большая        имя_файла_TEXT              DGROUP         і
         і Громадная      имя_файла_TEXT   имя_вызывающего_файла_DATAі
         АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

          Здесь "имя_файла" - это имя модуля на Ассемблере, а "имя_вы-
     зывающего_файла" - это имя модуля Borland C++, вызывающего модуль
     на Ассемблере.

          В крохотной модели памяти _TEXT и DGROUP совпадают,  поэтому
     при входе в функцию содержимое регистра CS равно  содержимому DS.
     При  использовании  крохотной,  малой  и компактной модели памяти
     при входе в функцию содержимое SS равно содержимому  регистра DS.

          Когда же в функции на Ассемблере, вызываемой из программы на
     языке С++,  необходимо загружать сегментный регистр?  Отметим для
     начала, что вам никогда не придется (более того, этого не следует
     делать) загружать регистры SS или CS:  при дальних вызовах, пере-
     ходах или возвратах регистр CS  автоматически  устанавливается  в
     нужное значение, а регистр SS всегда указывает на сегмент стека и
     в ходе выполнения программы изменять его не следует  (если только
     вы не пишете программу,  которая "переключает" стеки. В этом слу-
     чае вам нужно четко понимать, что вы делаете).

          Регистр ES вы можете всегда использовать так, как это требу-
     ется.  Вы  можете установить его таким образом, чтобы он указывал

     Турбо Ассемблер 3.0/tasm/#2-2                              = 84 =

     на данные с дальним типом обращения,  или  загрузить  в  ES  сег-
     мент-приемник для строковой функции.

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

                       .
                       .
                       .
                       .FARDATA
     Counter           DW    0
                       .
                       .
                       .
                       .CODE
                       PUBLIC  _AsmFunction
     _AsmFunction      PROC
                       .





. . mov ax,@FarData mov es,ax ; ES указывает на ; сегмент данных с ; дальним типом ; обращения inc es:[Counter] ; увеличить значение ; счетчика . . . _AsmFunction ENDP . . . или иначе: . . . .FARDATA Counter DW 0 . . . Турбо Ассемблер 3.0/tasm/#2-2 = 85 = .CODE PUBLIC _AsmFunction _AsmFunction PROC . . . assume ds:@FarData mov ax,@FarDAta mov ds,ax ; DS указывает на ; сегмент данных с ; дальним типом ; обращения inc [Counter] ; увеличить значение ; счетчика assume ds:@Data mov ax,@Data mov dx,ax ; DS снова указывает ; на DGROUP . . . _AsmFunction ENDP . . . Второй вариант имеет то преимущество, что при каждом обраще- нии к дальнему сегменту данных в нем не требуется переопределение ES:. Если для обращения к дальнему сегменту вы загружаете регистр DS, убедитесь в том, что перед обращением к другим переменным DGROUP вы его восстанавливаете (как это делается в приведенном примере). Даже если в данной функции на Ассемблере вы не обращае- тесь к DGROUP, перед выходом из нее все равно обязательно нужно восстановить содержимое DS, так как в Borland C++ подразумевает- ся, что регистр DS не изменялся. При использовании в функциях, вызываемых из С++, сверхболь- шой модели памяти работать с регистром DS нужно несколько по-дру- гому. В сверхбольшой модели памяти Borland C++ совсем не исполь- зует DGROUP. Вместо этого каждый модуль имеет свой собственный сегмент данных, который является дальним сегментом относительно всех других модулей в программе (нет совместно используемого ближнего сегмента данных). При использовании сверхбольшой модели памяти на входе в функцию регистр DS должен быть установлен таким образом, чтобы он указывал на этот дальний сегмент данных модуля и не изменялся до конца функции, например: . . . .FARDATA . . Турбо Ассемблер 3.0/tasm/#2-2 = 86 = . .CODE PUBLIC _AsmFunction _AsmFunction PROC push ds mov ax,@FarData mov ds,ax . . . pop ds ret _AsmFunction ENDP . . .


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