Optron #25
19 апреля 1999

Ликбез - Ассемблер взгляд издалека: Работа с битами, Сравнение чисел, Команда сравнения.

<b>Ликбез</b> - Ассемблер взгляд издалека: Работа с битами, Сравнение чисел, Команда сравнения.

        Ассемблер: взгляд издалека

{}Инфарх

  Продолжение. Начало - в ||20, 21, 24

             Работа с битами

  Логические  операции, рассмотренные нами
в прошлый раз, производились над всем бай-
том.  Теперь  обратим внимание на команды,
работающие  с отдельными битами. Ну, что с
ними  можно  делать? Очевидно, присваивать
им  конкретное значение, проверять состоя-
ние и... всё! Начнём с установок.
  Команда,  которая  установит  конкретный
бит,  записывается,  как  "SET"  (от англ.
"установить").  А  параметрами  её  служат
указания  на  обрабатываемый  байт  и бит,
подлежащий  установке.  Как  водится, при-
ведём варианты написания этой команды:

              SET   b,r
              SET   b,(HL)
              SET   b,(ii+n)

  Как  Вы  думаете, что такое "b"? Да, со-
вершенно верно! Это номер того бита, кото-
рый  мы  мучаем командой. А нумеруются эти
биты  от младшего разряда к старшему. Вот,
посмотрите:

╔════╤════╤════╤════╤════╤════╤════╤════╗
║ D7 │ D6 │ D5 │ D4 │ D3 │ D2 │ D1 │ D0 ║
╚════╧════╧════╧════╧════╧════╧════╧════╝

  Таким  образом,  если процессор встретит
невзначай команду

               SET   4,E

то  в  разряде  "D4" регистра "E" окажется
единица.
  Теперь на очереди у нас команда "RES".
  Нетрудно  догадаться,  что  её  действие
прямо противоположно команде "SET", и зак-
лючается  оно в сбросе заданного бита. Вот
варианты её написания:

              RES   b,r
              RES   b,(HL)
              RES   b,(ii+n)

  Итак, мы умеем уже устанавливать и сбра-
сывать  биты. Но есть ещё одно, очень важ-
ное,  действие. Оно заключается в проверке
бита,  и  у  Z80  такая  команда, конечно,
есть.
  Её мнемоника - "BIT". А результат её вы-
полнения  мы получим в виде флага "Z", ко-
торый  установится,  если  проверяемый бит
равен нулю или, выражаясь точнее, сброшен.
  А вот и возожные варианты:

              BIT   b,r
              BIT   b,(HL)
              BIT   b,(ii+n)

  Как   видите,  варианты  написаний  всех
рассмотренных выше команд абсолютно одина-
ковы.  Нам  остаётся только вспомнить, что
при выполнении команды возможно её влияние
на флаги и посмотреть, в чём оно выражает-
ся...

   ╔═════════════╤═══════════════════╗
   ║  МНЕМОНИКА  │Разряды регистра F ║
   ║             │     (флаги)       ║
   ╟────┬────────┼───────────────────╢
   ║Опе-│        │                   ║
   ║ ра-│Операнд │ C  Z P/V S  N  H  ║
   ║ ция│        │                   ║
   ╟────┴────────┼───────────────────╢
   ║ BIT b,r     │ .  x  ?  ?  0  1  ║
   ║ BIT b,(HL)  │                   ║
   ║ BIT b,(ii+n)│                   ║
   ║             │                   ║
   ║ RES b,r     │ .  .  .  .  .  .  ║
   ║ RES b,(HL)  │                   ║
   ║ RES b,(ii+n)│                   ║
   ║             │                   ║
   ║ SET b,r     │ .  .  .  .  .  .  ║
   ║ SET b,(HL)  │                   ║
   ║ SET b,(ii+n)│                   ║
   ╚═════════════╧═══════════════════╝

  Пояснения:
  "." - флаг не меняется в результате опе-
рации;
  "x" - флаг устанавливается в зависимости
от результата операции;
  "?" - значение флага не определено;
  прочие обозначения - см. |21.

  Из  таблицы  видно,  что  только команда
"BIT"  оказывает  воздействие  на флаги, а
прочие команды оставляют их без изменений.
  Ну,  а  коль скоро речь зашла о проверке
бита,  уместно вспомнить и методы контроля
всего байта. Итак...


             Сравнение чисел

  В  создаваемой  программе  вам наверняка
понадобится  производить  сравнение  неких
чисел  для последующего управления процес-
сами в этой самой программе.
  Но  как  сравнить  числа  и получить ре-
зультат  в  форме,  понятной процессору? И
что означает выражение "числа совпадают"?
  А  значит  это,  что они равны. Если сей
факт выразить арифметически, то это будет

                A - B = 0

  А  если  сравниваемое  с  A число больше
(ведь   сравнение  предполагает  отношение
между  двумя числами)? Тогда результат вы-
читания   будет   отрицательным.   А  если
меньше, то положительным.
  А теперь на основе команды вычитания SUB
попробуем разработать систему сравнения на
Ассемблере.
  Допустим,  необходимо сравнить число не-
которого диапазона с числом 16:

  LD A,16 ;имеющееся число
  SUB n   ;сравниваемое число

  Тогда получится следующее:
  - если n = 16, то флаг нуля (Z) установ-
лен, а флаг переноса (CY) - сброшен;
  -  если n < 16, то флаги нуля и переноса
сброшены;
  -  если  n > 16, то флаг нуля сброшен, а
флаг переноса установлен.
  Как видите, метод вполне работоспособен.
Однако,  есть у него и недостаток: измене-
ние содержимого регистра "A".
  И вот здесь к нам на подмогу приходит...

            Команда сравнения

  Она  имеет мнемонику "CP" (сокращение от
английского "compare" - сравнить). Команда
полностью  аналогична вычитанию, за исклю-
чением того, что содержимое "A" не изменя-
ется. Результат сказывается только на фла-
гах.
  Траиционно приведём возможные варианты:

   ╔═════════════╤═══════════════════╗
   ║  МНЕМОНИКА  │Разряды регистра F ║
   ║             │     (флаги)       ║
   ╟────┬────────┼───────────────────╢
   ║Опе-│        │                   ║
   ║ ра-│Операнд │ C  Z P/V S  N  H  ║
   ║ ция│        │                   ║
   ╟────┴────────┼───────────────────╢
   ║  CP r       │ x  x  V  x  1  x  ║
   ║  CP (HL)    │                   ║
   ║  CP n       │                   ║
   ║  CP (ii+n)  │                   ║
   ╚═════════════╧═══════════════════╝

  Пояснение:
  Флаг  P/V  (parity/overflow)  индицирует
сразу  два  разных  условия, относящихся к
двум  принципиально разным группам команд.
При  выполнении операции сравнения наличие
флага Overflow показывает, что в результа-
те арифметического действия изменился знак
операнда.
  А в  завершение  взгляните  на небольшую
таблицу:  она поможет вам  выбрать,  какие
операнды в каких регистрах следует размес-
тить для наиболее оптимального использова-
ния команды сравнения.

   ┌──────────┬───────────┬──────────┐
   │Результат │ Состояние │ Мнемоника│
   │сравнения │  флагов   │  условия │
   ├──────────┼───────────┼──────────┤
   │   A=X    │   Z=1     │    Z     │
   ├──────────┼───────────┼──────────┤
   │  A<>X    │   Z=0     │    NZ    │
   ├──────────┴───────────┴──────────┤
   │ Беззнаковое сравнение (0...255) │
   ├──────────┬───────────┬──────────┤
   │   A<X    │  CY=1     │    C     │
   ├──────────┼───────────┼──────────┤
   │  A>=X    │  CY=0     │    NC    │
   ├──────────┴───────────┴──────────┤
   │ С учетом знака    (-128...+127) │
   ├──────────┬───────────┬──────────┤
   │   A<X    │   S=1     │    P     │
   ├──────────┼───────────┼──────────┤
   │  A>=X    │   S=0     │    M     │
   └──────────┴───────────┴──────────┘

  Пояснения:
  1) Таблица показывает, какие флаги уста-
новятся  при равенстве или отличии операн-
дов в любую сторону.
  2)  В графе "Мнемоника условия" описыва-
ются  проверяемые  флаги  при вводе команд
условного типа.
  3) Обозначения в таблице:
  CY=C=Carry
  NZ=(Z=0)
  NC=(C=0)

  Должен  заметить,  что я, например, пока
такую  таблицу  перед  глазами не повесил,
всё время в условиях путался.

             До новых встреч!

              ──══════════──


           
           
           
           



Другие статьи номера:

ZX-Обоз - Обзор электронной прессы: Фэнзин 7, Kr News 7, Полесье 2, ZX-News 45, Don News 4.

Железо - HDD на спектруме - мифы и реальность.

Ликбез - Ассемблер взгляд издалека: Работа с битами, Сравнение чисел, Команда сравнения.

Лит. страничка - Гриф "Y-II" (Дневник - продолжение).

Реклама - Реклама и объявления...

Рубрика X - Обзор игр: Тwilight, Зеркало, Белый орел, Kolobok Zoom 2, Quadrax, Chaos Zone.

Рубрика X - Электронная пресса: вчера, сегодня, завтра.


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Happybirthday - Всем nривет. Я не знaю,но возможно этот номер целиком и nолностью будет nосвяшен моему день рождению...
Hard group - ZS Scorpion 2000 - о GMX-контроллере.
Coding - Быстрая печать шестипиксельным фонтом.
Реклама - Реклама и объявления ...
"Клaдбищeнcкиe Крыcы" - Вaшemy вниmaнию прeдocтaвляeтcя рaccкaз пиcaтeля-фaнтacтa Гeнри Кaттнeрa.

В этот день...   2 декабря