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




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

     стека аргументы задаются директивой ARG. Аргументы имеют внутрен-
     нее представление в виде положительных смещений от  регистров  BP
     или EBP.

          Языковые соглашения  процедуры  определяют,  будут аргументы
     заносится в стек в прямом или обратном порядке. В списке аргумен-
     тов директивы ARG аргументы нужно указывать в том порядке,  в ко-
     тором они указываются в  описании  процедуры  на  языке  высокого
     уровня.

          Директива LOCAL  в  описании  процедуры задает в кадре стека
     переменные, локальные для процедуры.  Аргументы имеют  внутреннее
     представление в  виде  отрицательных  смещений от регистра BP или
     EBP.

          Выделить пространство для локальных переменных  кадра  стека
     можно с помощью включения в процедуру кода инициализации, смещаю-
     щего вниз указатель стека на нужную величину. Код завершения про-
     цедуры должен отбрасывать это лишнее пространство, восстанавливая
     указатель стека. (Когда процедура подчиняется любым языковым сог-
     лашениям, отличным  от NOLANGUAGE,  Турбо Ассемблер автоматически
     генерирует этот код завершения.)

          Нужно помнить о том,  что Турбо Ассемблер предполагает,  что
     процедура, использующая аргументы кадра стека, содержит соответс-
     твующий код инициализации,  устанавливающий регистр BP  или  EBP.
     (Когда процедура подчиняется любым языковым соглашениям, отличным
     от NOLANGUAGE,  Турбо Ассемблер автоматически генерирует этот код
     завершения.) Даже  если  процедура использует языковые соглашения
     NOLANGUAGE, задавайте аргументы и локальные  переменные процедуры
     с помощью  директив ARG и LOCAL.  Однако в этом случае код начала
     (код инициализации) и завершения автоматически не генерируется.


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

                     Синтаксис директив ARG и LOCAL
     ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

          Приведем синтаксис  определения передаваемых процедуре аргу-
     ментов:

          ARG аргумент [,аргумент] ... [=идентификатор]
              [RETURNS аргумент] [,аргумент]]

          При определении  локальных переменных процедуры используется
     следующий синтаксис:

          LOCAL аргумент [,аргумент] ... [=идентификатор]

          Отдельные аргументы имеют следующий синтаксис:

          имя_аргумента [[выражение_счетчик_1]]
                     [: сложный_тип [:выражение_счетчик_2]]

     где "сложный_тип" - это тип данных аргумента.  Он может быть либо
     простым типом,  либо сложным выражением-указателем.  Подробнее  о
     синтаксисе сложных типов рассказывается  в Главе 5.

          Если вы не задаете поле "сложный_тип", Турбо Ассемблер пред-
     полагает WORD.  При выборе 32-разрядной  модели  он  предполагает
     DWORD.

          "Выражение_счетчик_2" задает, сколько элементов данного типа
     определяет аргумент. Например, в определении аргумента:

          ARG tmp:DWORD:4

     определяется аргумент с именем  "tmp",  состоящий  из  4  двойных
     слов.

          По умолчанию  "выражение_счетчик_2"  имеет значение 1 (кроме
     аргументов типа BYTE.  Так как вы не можете занести в стек байто-
     вое значение, для аргументов типа BYTE значение счетчика по умол-
     чанию равно 2,  что обеспечивает для них в стеке размер в  слово.
     Это согласуется с языками высокого уровня, которые интерпретируют
     передаваемые в качестве параметров символьные переменные. Если вы
     действительно хотите задать аргумент, как один байт в стеке, нуж-
     но явным образом определить значение  поля "выражение_счетчик_2",
     равное 1. Например:

          ARG realbyte:BYTE:1

          "Выражение_счетчик_1" представляет   собой  число  элементов
     массива. Общее пространство, резервируемое для аргумента в стеке,
     равно произведению "выражения_счетчик_2" на длину, заданную полем
     "тип_аргумента" и на "выражение_счетчик_1". Если поле "выражение_
     счетчик_1" не  задано,  то по умолчанию оно равно 1.  Общее число
     аргументов задает произведение "выражения"_счетчик_1" на "выраже-

     Турбо Ассемблер 3.0/tasm/#1-2                             = 187 =

     ние_счетчик_2".

          Если вы  завершаете список аргументов символом равенства (=)
     и идентификатором,  то Турбо Ассемблер  будет  приравнивать  этот





идентификатор к общему размеру блока аргументов (в байтах). Если вы не используете автоматическое использование соглашений языков высокого уровня в Турбо Ассемблере, то можете использовать данное значение в конце процедуры в качестве аргумента инструкции RET. Заметим, что это вызывает очистку стека от всех занесенных туда перед возвратом аргументов (это соглашения по вызову, принятые в Паскале). Аргументы и переменные определяются в процедуре как операнды в памяти относительно BP. Передаваемые аргументы, определенные с помощью директивы ARG, имеют положительное смещение относительно BP. Локальные переменные, определенные с помощью директивы LOCAL, имеют отрицательное смещение от BP. Приведем пример: . . . func1 PROC NEAR ARG a:WORD,b:WORD:4,c:BYTE=d LOCAL x:DWORD,y=WORD:2=z . . . Здесь a определяется, как [bp+4], b определяется, как [bp+6], c определяется, как [bp+14], а d - как 20. x - это [bp-2], y - [bp-6], а z - 8. Турбо Ассемблер 3.0/tasm/#1-2 = 188 = Область действия аргументов и имен локальных переменных ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Если вы не задаете для них имена с предшествующий префиксом локального идентификатора, все аргументы, заданные в заголовке процедуры, определены ли они с помощью директивы ARG (передавае- мые аргументы), RETURN (возвращаемые аргументы) или LOCAL (ло- кальные переменные) имеют глобальную область действия. Идентификаторы с локальной областью действия разрешает дирек- тива LOCALS. Например: . . . LOCALS test1 PROC PASCAL FAR ARG @a:WORD,@d:WORD,@c:BYTE LOCAL @x:WORD,@y:DWORD MOV ax,@a MOV @x,ax LES di,@b MOV WORD ptr @y,di MOV WORD ptr @y+2,es MOV @c,'a' RET ENDP test2 PROC PASCAL FAR ARG @a:DWORD,@b:BYTE LOCAL @x:WORD LES di,@a MOV ax,es:[di] MOV @x,ax CMP a1,@b jz @dn MVO @x,0 @dn: MOV ax,@x RET ENDP . . . Примечание: Об управлении областью действия идентифи- каторов подробнее рассказывается в Главе 11. Поскольку в данном примере используются переменные локальной области действия, их имена существуют только в теле процедуры. Таким образом, в test2 можно снова использовать имена @a, @b и @x. Турбо Ассемблер 3.0/tasm/#1-2 = 189 = Сохранение регистров ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Большинство языков высокого уровня требуют, чтобы вызываемые процедуры сохраняли определенные регистры. Это можно сделать, за- нося их в стек в начале процедуры и извлекая из стека в конце процедуры. Турбо Ассемблер может автоматически генерировать код для сохранения и восстановления этих регистров, который включается в код начала и завершения. Эти регистры можно указать в операторе USES, который имеет следующий синтаксис: USES элемент [,элемент] ...


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