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




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

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

                       Глава 10. Описание процедур
     ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

          Турбо Ассемблер позволяет вам описывать процедуры нескольки-
     ми способами.  В  данной  главе описываются процедуры NEAR и FAR,
     объявление языка процедур,  использование в процедурах аргументов
     и переменных,  сохранение регистров, вложенные процедуры и описа-
     ние процедур методов для объектов.

                     Синтаксис определения процедур
     ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

          Для описания процедур вы можете использовать директиву PROC.
     В режиме Ideal она имеет следующий синтаксис:

          PROC [[модификатор_языка] язык] имя [расстояние]
             [ARG список_аргументов] [RETURN список_элементов];
                [LOCAL список_аргументов]
                   [USES список_элементов]
               .
               .
               .
          ENDP [имя]

          В режиме MASM используется следующий синтаксис:

          имя PROC [[модификатор_языка] язык] [расстояние]
             [ARG список_аргументов] [RETURN список_элементов];
                [LOCAL список_аргументов]
                   [USES список_элементов]
                   .
                   .
                   .
          [имя] ENDP

          Турбо Ассемблер также воспринимает для  определения процедур
     синтаксис MASM. Подробнее о синтаксисе MASM рассказывается в Гла-
     ве 3.


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

                    Описание процедур NEAR или FAR
     ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

          Процедуры NEAR  вызываются  с помощью вызова ближнего типа и
     содержат ближний возврат управления. Вы должны вызывать их только
     в том же сегменте,  в котором они определены. Вызов ближнего типа
     заносит адрес возврата в стек и устанавливает указатель  инструк-
     тор  (IP)  в значение смешения процедуры.  Поскольку сегмент кода
     (CS) не изменяется,  процедура должна находиться в том же сегмен-
     те,  что  и  вызывающая  программа.  Когда процессор обнаруживает
     возврат ближнего типа,  он извлекает из стека  адрес  возврата  и
     снова устанавливает в него IP. Сегмент кода не изменяется.

          Процедура FAR  вызывается  с  помощью вызова дальнего типа и
     содержит возврат дальнего типа.  Процедуры FAR вы можете вызывать
     вне сегмента,  в  котором  они определяются.  Вызов FAR заносит в
     стек адрес в виде сегмента  и  смещения,  а  затем  устанавливает
     CS:IP  в  адрес  процедуры.  Когда процессор обнаруживает возврат
     дальнего типа,  он извлекает из стека сегмент и  смещение  адреса
     возврата и устанавливает в него CS:IP.

          Расстояние (NEAR или FAR), используемое в процедуре по умол-
     чанию, определяется текущей выбранной моделью.  Для моделей TINY,
     SMALL и  COMPACT по умолчанию процедура будет ближней (NEAR). Для
     всех других моделей по умолчанию выбирается расстояние  FAR. Если
     вы не  используете упрощенные директивы определения сегментов, то
     по умолчанию процедура всегда будет ближней (NEAR).

                Примечание: FAR или NEAR можно задать в качестве аргу-
           мента оператора MODEL. Более подробно об этом рассказывает-
           ся в Главе 7.

          Вы можете переопределить используемое по умолчанию  расстоя-
     ние, задав  нужное расстояние в определении процедуры.  Для этого
     вы можете использовать ключевые слова NEAR или FAR.  Эти ключевые
     слова переопределяют  расстояние,  используемое  в  процедуре  по
     умолчанию, но только для текущей процедуры. Например:

          .
          .
          .
          MODEL TINY                ; по умолчанию расстояния NEAR
          .
          .
          .                         ; test1 - это дальняя процедура
          test1 PROC FAR
                                    ; тело процедуры
          RET                       ; это будет дальним возвратом:
          ENDP
                                    ; test2 по умолчанию является
                                    ; ближней процедурой
          test2 PROC





; тело процедуры Турбо Ассемблер 3.0/tasm/#1-2 = 179 = RET ; это будет ближним возвратом ENDP . . . В процедурах NEAR и FAR используется одна и та же инструкция RET. Турбо Ассемблер использует расстояние процедуры для опреде- ления того, требуется возврат ближнего или дальнего типа. Анало- гично, Турбо Ассемблер использует расстояние процедуры для опре- деления того, требуется для ссылки на процедуру возврат ближнего или дальнего типа. . . . CALL test1 ; это дальний возврат CALL test2 ; это ближний возврат . . . При выполнении вызова процедуры с опережающей ссылкой Турбо Ассемблеру может потребоваться для определения расстояния проце- дуры выполнить несколько проходов. Например: . . . test1 PROC NEAR MOV ax,10 CALL test2 RET test1 ENDP test1 PROC FAR ADD ax,ax RET test2 ENDP . . . Когда Турбо Ассемблер при первом проходе достигает инструк- ции call test2, он еще не обнаруживает test2, и следовательно не знает расстояния. Он предполагает, что это расстояние NEAR, и что можно сделать ближний вызов. Когда Турбо Ассемблер обнаруживает, что test2 является на самом деле дальней процедурой, он определяет, что для корректной генерации вызова требуется второй проход. Если вы разрешаете нес- колько проходов (с помощью параметра-переключателя командной строки /m), то можно сделать второй проход. Если вы не разрешаете Турбо Ассемблер 3.0/tasm/#1-2 = 180 = несколько проходов, то Турбо Ассемблер будет выводить ошибку 'forward reference needs override' ('опережающая ссылка требует переопределения'). Чтобы избежать такой ситуации (и уменьшить число проходов), вы можете задать в вызове расстояние процедур с опережающей ссыл- кой, как NEAR PTR и FAR PTR. . . . test1 PROC NEAR mov AX,10 CALL FAR PTR test2 RET test1 ENDP . . . В предыдущем примере Турбо Ассемблеру сообщается, что нужно использовать дальний вызов, поэтому не возникает необходимость в нескольких проходах. Описание языка процедуры ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Вы можете легко определить процедуры, которые используют в Турбо Ассемблере соглашения по интерфейсу языков высокого уровня. Соглашения по интерфейсу поддерживаются для языков NOLANGUAGE (Ассемблер), BASIC, PROLOG, FORTRAN, C, CPP (C++) и PASCAL. Турбо Ассемблер выполняет всю работу по генерации корректно- го кода начала (вход в процедуру) и завершения (выход из процеду- ры), необходимых для соблюдения соглашений заданного языка. С помощью директивы MODEL вы можете задать язык, используе- мый по умолчанию. Подробности можно найти в Главе 7. Если используемый по умолчанию язык задан, все процедуры, для которых не задается другой язык, используют соглашения назначенного по умолчанию языка. Чтобы переопределить используемый по умолчанию язык для


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


adfun.ru









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

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

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

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