Лекция по программированию

Автор работы: Пользователь скрыл имя, 11 Января 2011 в 19:34, лекция

Краткое описание

Язык ассемблера - это один из самых старых из всех существующих языков программирования. Когда-то это был один из основных языков программирования, без знания которого нельзя было заставить компьютер сделать что-либо полезное. Появились более удобные средства общения с компьютером. Но в отличии от других языков ассемблер не умирал, более того он это не смог сделать в принципе.

Содержимое работы - 1 файл

LECTS.DOC

— 893.00 Кб (Скачать файл)

                    JCXZ      LABEL2

          LABEL1:   MOV       [DI],AL

                    INC/DEC   DI        ;Инкремент или декремент

                    LOOP      LABEL1

          LABEL2:   ...

CMPS: СРАВНЕНИЕ СТРОК

     Команда CMPS сравнивает содержимое одной области  памяти  (адресуемой регистрами DS:SI) с содержимыми другой области (адресуемой как  ES:DI).  В зависимости от флага DF  команда  CMPS  также  увеличивает  или  уменьшает адреса в регистрах SI и DI на 1 для байта или на 2 для слова. Команда CMPS устанавливает флаги AF, CF, OF, PF, SF и ZF.  При  использовании  префикса REP в регистре CX должна находиться длина сравниваемых полей. Команда CMPS может сравнивать любое число байт или слов.

     Рассмотрим процесс сравнения двух  строксодержащих  имена  JEAN  и JOAN. Сравнение побайтно слева направо приводит к следующему:

               J  :  J        Равно

               E  :  O        Не равно (E меньше O)

               A  :  A        Равно

               N  :  N        Равно

     Сравнение  всех  четырех  байт  заканчивается  сравнением    N:N    - pавно/нульТак как имена "не равны", операция должна  прекратитьсякак только будет обнаружено условие "не равно".  Для этих  целей  команда  REP имеет модификацию REPE, которая  повторяет  сравнение  до  тех  порпока сравниваемые элементы равны, или регистр  CX  не  pавен  нулюКодируется повторяющееся однобайтовое сравнение следующим образом:

REPE CMPSB

     Предупреждение! При использовании команды CMPSW для  сравнения  одного  слованеобходимо  инициализиpовать  регистр   CX значением 5. Кроме того следует помнить, что команда CMPSW  при  сравнении слов переставляет байты. Например, сравнивая имена SAMUEL и ARNOLD команда CMPSW выбирает вместо SA и AR переставленные значения, т.е.  AS  и  RA.  В результате  вместо  "большеполучится  "меньше",    т.е.    неправильный результатТаким образом команда  CMPSW  работает  правильно  только  при сравнении строк, которые содержат числовые данные, определенные как DW, DD или DQ.

SCAS: СКАНИРОВАНИЕ СТРОК

     Команда  SCAS  отличается  от  команды  CMPS  тем,   что    сканирует (просматривает) строку на определенное значение байта или  словаКоманда SCAS сравнивает содержимое области памяти (адресуемой pегистрами ES:DI)  с содержимым регистра AL или AX.  В зависимости от значения флага DF команда SCAS также увеличивает или уменьшает адрес в регистре DI на  1  для  байта или на 2 для словаКоманда SCAS устанавливает флаги AF, CF, OF, PF, SF и ZF.  При использовании префикса REP и значения длины в регистре CX команда SCAS может сканировать строки любой длины.

     Команда SCAS особенно полезна, например, в текстовых редакторахгде программа должна сканировать строкивыполняя  поиск  знаков  пунктуации: точек, запятых и пробелов.

 

               REPNE SCASB

 

  При использовании  отладчика  DEBUG для трассировки команд в конце процедуры H10SCAS можно увидеть в  регистре AH значение 03 для индикации того, что  символ  "m"  найденКоманда  REP SCASB кроме того уменьшит значение регистра CX от 10 до 06.

     Команда SCASW сканирует в памяти слово  на  соответствие  значению  в регистре AX.  При использовании команд LODSW или MOV для пересылки слова в регистр AX, следует помнить, что первый байт будет в регистре AL, а второй байт - в регистре AH.  Так как команда SCAS сравнивает  байты  в  обратной последовательности, то oперация корректна.

Информация о работе Лекция по программированию