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




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

                              і                       і
                              ГДДДДДДДДДДДДДДДДДДДДДДДґ
                              і                       і
                              ГДДДДДДДДДДДДДДДДДДДДДДДґ
                     SP ДД   і    Адрес возврата     і
                              ГДДДДДДДДДДДДДДДДДДДДДДДґ
                     SP + 2   і        25 (i)         і
                              ГДДДДДДДДДДДДДДДДДДДДДДДґ
                     SP + 4   і        4 (j)          і
                              ГДДДДДДДДДДДДДДДДДДДДДДДґ
                     SP + 6   і           1           і
                              ГДДДДДДДДДДДДДДДДДДДДДДДґ
                              і                       і
                              ГДДДДДДДДДДДДДДДДДДДДДДДґ
                              і                       і
                              .                       .
                              .                       .
                              .                       .

          Рис. 18.2 Состояние стека перед выполнением первой  инструк-
     ции функции Test

     Турбо Ассемблер 3.0/tasm/#2-2                              = 95 =


          Параметры функции Test представляют собой фиксированные  ад-
     реса относительно SP, начиная с ячейки, на два байта старше адре-
     са, по которому хранится адрес возврата, занесенный туда при  вы-
     зове. После загрузки регистра BP значением SP вы можете обращать-
     ся к параметрам относительно BP. Однако, вы должны сначала сохра-
     нить BP,  так как в вызывающей программе предполагается,  что при
     возврате  BP  изменен не будет.  Занесение в стек BP изменяет все
     смещения в стеке. На Рис. 18.3 показано состояние стека после вы-
     полнения следующих строк кода:

           .
           .
           .
           push  bp
           mov   bp,sp
           .
           .
           .

                           .                       .
                           .                       .
                           .                       .
                           і                       і
                           ГДДДДДДДДДДДДДДДДДДДДДДДґ
                  SP ДД   і BP вызывающей прогр.  і  ДД BP
                           ГДДДДДДДДДДДДДДДДДДДДДДДґ
                  SP + 2   і    Адрес возврата     і  BP + 2
                           ГДДДДДДДДДДДДДДДДДДДДДДДґ
                  SP + 4   і        25 (i)         і  BP + 4
                           ГДДДДДДДДДДДДДДДДДДДДДДДґ
                  SP + 6   і        4 (j)          і  BP + 6
                           ГДДДДДДДДДДДДДДДДДДДДДДДґ
                  SP + 8   і           1           і  BP + 8
                           ГДДДДДДДДДДДДДДДДДДДДДДДґ
                           і                       і
                           ГДДДДДДДДДДДДДДДДДДДДДДДґ
                           і                       і
                           .                       .
                           .                       .
                           .                       .

          Рис. 18.3 Состояние стека после инструкций PUSH и MOVE

          Организация передачи параметров функции через стек и исполь-
     зование его для динамических локальных переменных - это стандарт-
     ный прием в языке С++. Как можно заметить, неважно, сколько пара-
     метров имеет программа на языке С++:  самый левый параметр всегда
     хранится в стеке по адресу,  непосредственно следующим за  сохра-
     ненным в стеке адресом возврата,  следующий возвращаемый параметр
     хранится непосредственно после самого  левого  параметра  и  т.д.
     Поскольку  порядок  и  тип  передаваемых параметров известны,  их
     всегда можно найти в стеке.

     Турбо Ассемблер 3.0/tasm/#2-2                              = 96 =


          Пространство для динамических локальных переменных можно за-
     резервировать, вычитая  из  SP  требуемое  число байт.  Например,
     пространство для динамического локального массива размером  в 100
     байт можно  зарезервировать,  если начать функцию Test с инструк-
     ций:

          .
          .
          .
          push  bp
          mov   bp,sp
          sub   sp,100
          .
          .
          .






как показано на Рис. 18.4 Турбо Ассемблер 3.0/tasm/#2-2 = 97 = . . . . . . і і ГДДДДДДДДДДДДДДДДДДДДДДДґ SP ДД і і Д BP - 100 ГДДДДДДДДДДДДДДДДДДДДДДДґ і і ГДДДДДДДДДДДДДДДДДДДДДДДґ . . . . . . . . і і ГДДДДДДДДДДДДДДДДДДДДДДДґ SP + 100 ДД і BP вызывающей прогр. і ДД BP ГДДДДДДДДДДДДДДДДДДДДДДДґ SP + 102 і Адрес возврата і BP + 2 ГДДДДДДДДДДДДДДДДДДДДДДДґ SP + 104 і 25 (i) і BP + 4 ГДДДДДДДДДДДДДДДДДДДДДДДґ SP + 106 і 4 (j) і BP + 6 ГДДДДДДДДДДДДДДДДДДДДДДДґ SP + 108 і 1 і BP + 8 ГДДДДДДДДДДДДДДДДДДДДДДДґ і і ГДДДДДДДДДДДДДДДДДДДДДДДґ і і . . . . . . Рис. 18.4 Состояние стека после инструкций PUSH, MOVE и SUB Поскольку та часть стека, где хранятся динамические локаль- ные переменные, представляет собой более младшие адреса, чем BP, для обращения к динамическим локальным переменным используется отрицательное смещение. Например, инструкция: mov byte ptr [bp-100] даст значение первого байта ранее зарезервированного 100-байтово- го массива. При передаче параметров всегда используется положи- тельная адресация относительно регистра BP. Хотя можно выделять пространство для динамических локальных переменных описанным выше способом, в Турбо Ассемблере предусмот- рена специальная версия директивы LOCAL, которая существенно уп- рощает выделение памяти и присваивание имен для динамических ло- кальных переменных. Когда в процедуре встречается директива LOCAL, то подразумевается, что она определяет для данной процеду- ры динамические локальные переменные. Например, директива: Турбо Ассемблер 3.0/tasm/#2-2 = 98 = LOCAL LocalArray:BYTE:100,LocalCount:WORD=AUTO_SIZE определяет динамические переменные LocalArray и LocalCount. LocalArray на самом деле представляет собой метку, приравненную к [BP-100], а LocalCount - это метка, приравненная к [BP-102]. Од- нако вы можете использовать их, как имена переменных. При этом вам даже не нужно будет знать их значения. AUTO_SIZE - это общее число байт (объем памяти), необходимых для хранения динамических локальных переменных. Чтобы выделить пространство для динамичес- ких локальных переменных, это значение нужно вычесть из SP. Приведем пример того, как нужно использовать директиву LOCAL: . . . _TestSub PROC LOCAL LocalArray:BYTE:100,LocalCount:WORD=AUTO_SIZE push bp ; сохранить указатель стека ; вызывающей программы mov bp,sp ; установить собственный ; указатель стека sub sp,AUTO_SIZE ; выделить пространство для ; динамических локальных ; переменных mov [LocalCount],10 ; установить переменную ; LocalCount в значение 10 ; (LocalCount это [BP-102]) . . . mov cx,[LocalCount] ; получить значение ; (счетчик) из локальной ; переменной mov al,'A' ; заполним символом 'A' lea bx,[LocalArray] ; ссылка на локальный ; массив LocalArray ; (LocalArray это [BP-100]) FillLoop:


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