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




adfun.ru
Rambler's Top100 Rambler's Top100
    НА ГЛАВНУЮ
    РЕФЕРАТЫ
    ТОСТЫ
    ТЕСТЫ
    АВТО
    ДЛЯ СТУДЕНТА
    КНИГИ
    КОНТАКТ
 
Справочник по системе программирования Турбо Ассемблер 2.0
Автор ""
Размер 416131 Байт
Страница 48 из 51
СКАЧАТЬ КНИГУ ЦЕЛИКОМ

нуля будет установлен в значение 1 (нужно помнить о том, что флаг
нуля устанавливается в значение 1, если результат последней ариф-
метической операции был нулевым или два операнда в последней опе-
рации сравнения не совпадали).  Аналогично, инструкция LOOPNE за-
вершает  выполнение цикла,  если регистр CX принял значение 0 или
флаг нуля сброшен (имеет нулевое значение).

     Предположим, вы хотите повторять цикл, сохраняя коды нажатых
клавиш, пока не будет нажата клавиша ENTER или не будет накоплено
128 символов. Для выполнения такой работы  можно  написать  такую
программу (где используется инструкция LOOPNE):

          .
          .
          .
          .DATA
  KeyBuffer      DB   128 DUP (?)
          .
          .
          .
          .CODE
          .
          .
          .
          mov   cx,128
          mov   bx,OFFSET KeyBuffer
 KeyLoop:
          mov   ah,1              ; функция DOS ввода с
                                  ; клавиатуры
          int   21h               ; считать следующую
                                  ; клавишу
          mov   [bx],al           ; сохранить ее
          inc   bx                ; установить указатель
                                  ; для следующей клавиши
          cmp   al,0dh            ; это клавиша ENTER?
          loopne KeyLoop          ; если нет, то получить
                                  ; следующую клавишу, пока
                                  ; мы не достигнем максимально-
                                  ; го числа клавиш
          .
          .
          .

     Инструкция  LOOPE  известна  также,  как  инструкция  LOOPZ,
инструкция  LOOPNE  - как инструкция LOOPNZ, также как инструкции
JE эквивалентна инструкция JZ (это инструкции-синонимы).

     Имеется еще одна  инструкция  цикла.  Это  инструкция  JCXZ.
Инструкция  JCXZ  осуществляет  переход только в том случае, если
значение регистра CX равно 0. Это дает удобный  способ  проверять
регистр  CX  перед началом цикла. Например, в следующем фрагменте
программы, при обращении к которому регистр BX указывает на  блок
байт, которые  требуется  обнулить,  инструкция JCXZ используется
для пропуска тела цикла в том случае,  если регистр CX имеет зна-
чение 0:

         .
         .
         .
         jcxz   SkipLoop         ; если CX имеет значение 0, то
                                 ; ничего делать не надо
 ClearLoop:
         mov   BYTE PTR [si],0   ; установить следующий байт в
                                 ; значение 0
         inc   si                ; ссылка на следующий очищаемый
                                 ; байт
 SkipLoop:
         .
         .
         .

     Почему желательно пропустить выполнение цикла, если значение
регистра  CX  равно  0? Потому что в противном случае значение CX
будет уменьшено до величины 0FFFFh и инструкция  LOOP  осуществит
переход  на  указанную  метку. После этого цикл будет выполняться
65535 раз. Вы же хотели, чтобы значение регистра  CX,  равное  0,
указывало, что требуется обнулить 0 байт,  а не 65536. Инструкция
JCXZ позволяет вам в этом случае быстро  и  эффективно  выполнить
нужную проверку.

     Относительно инструкций циклов можно сделать пару интересных
замечаний. Во-первых, нужно помнить о том, что инструкции циклов,
как и инструкции  условных  переходов,  могут  выполнять  переход
только  на  метку,  отстоящую от инструкции цикла не более чем на
128 байт в ту или другую сторону.  Циклы,  превышающие 128  байт,
требуют  использования  условных  переходов с помощью безусловных
переходов (этот метод описан в предыдущем разделе "Условные пере-
ходы"). Во-вторых, важно понимать, что ни одна из инструкций цик-
лов не влияет на состояние флагов.  Это означает, что инструкция:

            loop   LoopTop

не эквивалентна в точности инструкциям:

            dec   cx
            jnz   LoopTop






поскольку инструкция DEC изменяет флаги переполнения, знака, ну- ля, дополнительного переноса и четности, а инструкция LOOP на флаги не влияет. Кроме того, использование инструкции DEC не эк- вивалентно варианту: sub cx,1 jnz LoopTop поскольку инструкция SUB влияет на флаг переноса, а инструкция DEC - нет. Различия невелики, но при программировании на языке Ассемблера важно понимать, какие именно флаги устанавливают те или иные инструкции. Подпрограммы ----------------------------------------------------------------- До сих пор мы рассматривали только программы, представляющие собой одну длинную последовательность исходного кода. Каждая программа начиналась с раздела кода, выполняла поочередно каждую инструкцию (иногда изменяя свой маршрут при выполнении циклов или принятии решений), а затем завершалась в конце раздела кода. Все это хорошо для небольших программ, но в больших программах требу- ется использования таких конструкций, которые называются подпрог- раммами. Возможно вы уже знакомы с подпрограммами в языках высокого уровня. В языке Си подпрограммы называются функциями, в Паскале и Бейсике - процедурами и функциями. Подпрограммы, процедуры и фу- нкции представляют собой, в общем, одно и то же - отдельную часть кода, воспринимающую определенные входные данные, выполняющую оп- ределенные действия и, возможно, возвращающую полученное в ре- зультате значение. Подпрограммы позволяют вам строить программы по модульному принципу. При этом подпрограммы позволяют "скрывать" специфичес- кие детали (то есть убирать их на нижний уровень) и сосредоточить внимание на общем алгоритме программы. Подпрограммы позволяют также сделать программы намного более компактными, поскольку от- дельную подпрограмму можно вызывать во многих местах программы и даже выполнять различные функции, передавая ей различные значе- ния. В больших программах (независимо от того, написаны они на Ассемблере, Паскале или Си) подпрограммы являются существенным средством для создания упорядоченного и легко обслуживаемого ис- ходного кода. Выполнение подпрограмм ----------------------------------------------------------------- Основные моменты выполнения подпрограммы иллюстрируются на Рис. 5.12. В вызывающей подпрограмму программе выполняется инст- рукция CALL, которая заносит адрес следующей инструкции в стек и загружает в регистр IP адрес соответствующей подпрограммы, осуще- ствляя таким образом переход на подпрограмму. После этого под- программа выполняется, как любой другой код. В подпрограммах мо- гут (часто это так и бывает) содержаться инструкции вызовов дру- гих подпрограмм. Фактически, должным образом построенные подпрог- раммы могут даже вызывать сами себя (это называется рекурсией). . . . . . . . . . . . . |-------------| |------------| 1000 | mov al,1 | (в IP загружается -->| shl al,1 | 1110 |-------------| 1110 и 1007 зано- | |------------| 1002 | mov bl,3 | сится в стек) | | add al,bl | 1112 |-------------| | |------------| 1004 | call DoCalc |-------------------- | and al,7 | 1114 |-------------| |------------| 1007 | mov ah,2 |<------------------- | add al,'0' | 1116 |-------------| Значение вершины | |------------| 1009 | int 21h | стека 1007 извле- ---| ret | 1118 |-------------| кается и заносится в |------------| . . IP . . . . . . . . . . Рис. 5.12 Выполнение подпрограммы. Когда подпрограмма заканчивает работу, она вызывает инстру- кцию RET, которая извлекает из стека адрес, занесенный туда со- ответствующей инструкцией CALL, и заносит его в IP. Это приводит к тому, что вызывающая программа возобновит выполнение с инструк- ции, следующей за инструкции CALL. Например, следующая программы выводит на экран три строки: Привет Пример строки Еще одна строка Для вывода строк вызывается подпрограмма PrintString: DOSSEG .MODEL SMALL .STACK 200h .DATA Message1 DB 'Привет',0dh,0ah,0 Message2 DB 'Пример строки',0dh,0ah,0 Message3 DB 'Еще одна строка',0dh,0ah,0


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