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




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

          DATA        ENDS

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

           MyInt       DW      42        ; это не инициализирует
                                         ; MyInt значением 42

     не вызовет ошибки при компоновке модуля с программой Турбо Паска-
     ля, однако MyInt при выполнении программы не будет иметь значение
     42.

          Эти ограничения можно обойти, описав переменные или  типизо-
     ванные  константы  Турбо  Паскаля  с помощью директивы EXTRN, что
     сделает их доступными Турбо Ассемблеру.

                       Выделение временной памяти
     ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

     CODE          SEGMENT
                   ASSUME  CS:CODE
     MyProc        PROC    FAR       ; procedure MyProc(i : integer);
                   PUBLIC  MyProc
                   LOCAL a : WORD, b : WORD = LocalSpace ; a в [bp-2]
                                     ; b - в [bp-4]
     i             equ   word ptr [bp+6] ; параметр i находится над
                                     ; сохраненным BP и адресом
                                     ; возврата
                   push  bp          ; нужно сохранить BP вызывающей
                                     ; программы
                   mov   bp,sp       ; теперь BP указывает на
                                     ; вершину стека
                   sub   sp,LocalSpace ; зарезервировать пространст-
                                     ; во для двух слов
                   mov   ax,42       ; загрузить в AX начальное
                                     ; значение A
                   mov   a,ax        ; и в A

     Турбо Ассемблер 3.0/tasm/#2-2                             = 134 =

                   xor   ax,ax       ; очистить регистр AX
                   mov   b,ax        ; инициализировать B нулем
                   mov   b,ax        ; выполнить нужные действия
                   .
                   .
                   .
                   mov   sp,bp       ; восстановить исходное
                                     ; значение SP
                   mov   bp          ; восстановить исходное
                                     ; значение регистра BP
                   ret   2
     MyProc        ENDP
     CODE          ENDS
                   END

                Примечание: Директива Турбо Ассемблера LOCAL использу-
           ется для создания идентификаторов и выделения  пространства
           для локальных переменных.

          Оператор:

             LOCAL a : WORD, b : WORD = LocalSpace

     на время выполнения процедуры присваивает идентификатору a значе-
     ние  [BP-2], идентификатору b - значение [BP-4], а идентификатору
     LocalSpace - число 4 (размер области локальных переменных).  Пос-
     кольку  нет соответствующего оператора для создания идентификато-
     ров, ссылающихся на параметры, вы должны использовать  присваива-
     ние i значения [BP+6].

          Более разумный  способ  инициализации  локальных  переменных
     заключается  в  том, чтобы вместо уменьшения SP занести в стек их
     значения. Таким образом, вы  должны  заменить  SUB  SP,LocalSpace
     инструкциями:

          mov   ax,42                ; получить начальное значение
                                     ; для a
          push  ax                   ; занести его в a
          xor   ax,ax                ; обнулить AX
          push  ax                   ; и занести 0 в b

          Если вы используете этот способ, нужно внимательно  отслежи-
     вать  стек!  Не  следует  ссылаться на идентификаторы a и b перед
     тем, как они занесены в стек.

          Другой вид оптимизации предусматривает  использование  инст-





рукции PUSH CONST для инициализации локальных переменных (ее мож- но использовать при наличии процессором 80186, 80286 и 80386), или сохранение BP в регистре вместо занесения его в стек (если есть неиспользованные регистры). Турбо Ассемблер 3.0/tasm/#2-2 = 135 = Примеры подпрограмм на Ассемблере для Турбо Паскаля ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД В данном разделе вы дадим некоторые примеры подпрограмм на языке Ассемблера, которые вы можете вызывать из программ Турбо Паскаля. Подпрограмма шестнадцатиричного преобразования общего назначения ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Содержащиеся в параметре num байты преобразуются в строку шестнадцатиричных цифр длины (byteCount * 2). Поскольку каждый байт порождает два символа, максимальное значение byteCount равно 127 (не проверяется). Для преобразования каждой группы (по 4 би- та) в шестнадцатиричную цифру мы для скорости используем последо- вательность add-daa-adc-daa. Процедура HexStr (ее можно найти в файле HEX.ASM) написана так, что вызываться она должна с помощью вызова дальнего типа. Это означает, что ее следует описывать в интерфейсной части моду- ля Турбо Паскаля или с помощью директивы компилятора {$F+}. CODE SEGMENT ASSUME cs:CODE,ds:NOTHING ; Параметры (+2 с учетом push bp) byteCount equ byte ptr ss:[bp+6] num equ dword ptr ss:[bp+8] ; Адресация к результату функции (+2 с учетом push bp) resultPtr equ dword ptr ss:[bp+12] HexStr PROC FAR PUBLIC HexStr push bp mov bp,sp ; получить указатель ; стека les di,resultPtr ; получить адрес ; результата функции mov dx,ds ; сохранить DS Турбо ; Паскаля в DX lds si,sum ; получить адрес числа mov al,byteCount ; сколько байт? xor ah,ah ; слово mov cx,ax ; отслеживать число ; байт в CX add si,ax ; начать со старшего ; байта числа dec si shl ax,1 ; сколько цифр? Турбо Ассемблер 3.0/tasm/#2-2 = 136 = ; (2/байт) cld ; сохранить число цифр ; (работать в прямом ; направлении) stosb ; в приемнике - байт ; длины строки NextLoop: std ; сканировать число от ; старшего байта к ; младшему lodsb ; получить следующий ; байт mov ah,al ; сохранить его shr al,1 ; выделить старшую ; группу бит shr al,1 shr al,1 shr al,1 add al,90h ; специальная после- ; довательность шестнад- ; тиричного преобразования daa ; использование инструкций ; ADD и DAA adc al,40h daa ; группа преобразована ; в код ASCII cld ; сохраним ASCII и следуем ; далее stosb mov al,ah ; повторить преобразование ; для младшей группы and al,0Fh add al,90h daa adc al,40h daa stosb loop HexLoop ; продолжать, пока не


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