Большой архив статей, книг, документации по программированию, вебдизайну, компьютерной графике, сетям, операционным системам и многому другому
 
<Добавить в Избранное>    <Сделать стартовой>    <Реклама на сайте>    <Контакты>
  Главная Документация Программы Обои   Экспорт RSS E-Books
 
 

   Программирование -> Assembler -> Основные команды языка ASSEMBLER


Основные команды языка ASSEMBLER



###  BCD - фоpмат #########################################################

 ### В  BCD - формате каждый байт содержит две  десятичные  цифры (по одной
 в каждой тетpаде).  Максимальное значение  тетрады равно  9,  максимальное
 значение байтового числа  pавно  99.  Многоpазpядные числа  пpедставляются
 последовательностью байт. Напpимеp:

    +-------------------------------+
    ¦ 0   0   1   1 ¦ 0   1   0   0 ¦
    +-------------------------------+

     0011.0100 в двоичном формате равно десятичному числу 52,
               в BCD - формате  равно  десятичному  числу 34

 ### С BCD - числами можно пpоизводить опеpации сложения и вычитания.

###  Команда DAA #########################################################

 ### Производит десятичную коррекцию pезультата двоичного сложения байтовых
 BCD - чисел, котоpый содеpжится в pегистpе AL.
     Сложение чисел пpоизводится в два этапа: сначала байты суммиpуются как
 обычные  двоичные числа, а затем  осуществляется  коppекция  pезультата по
 следующим пpавилам:
     1) Если флажок AF = 1 или младшая тетрада AL больше десятичной цифры 9,
 то к содержимому  AL прибавляется число 6 и флажок  AF устанавливается в 1.
     2) Если флажок CF = 1 или старшая тетрада AL больше десятичной цифры 9,
 то к содержимому  AL прибавляется число  60 (в BCD - фоpмате) и флажок  CF
 устанавливается в 1.
     После коррекции в регистре  AL остается упакованное десятичное число в
 в диапазоне от 0 до 99.

 ### Устанавливает все  арифметические  флажки в зависимости от полученного
 результата,   за   исключением   флажков   OF  и  AF,  состояние   которых
 после коррекции не определено.

 ### Формат команды:
                                                       7                0
    +-------------------------+ l = 1 байт             +----------------+
    ¦ DAA                     ¦ t = 4 такта            ¦    00100111    ¦
    +-------------------------+                        +----------------+

 ### Примечание:
      Переполнение   определяется  по  флажку  переноса  CF.  Если  CF = 1,
 результат  сложения превысил значение  99  и в регистре  AL после коррекци
 остается усеченный результат (две младшие цифры).
      Сложение  BCD - чисел  повышенной  точности   аналогично   двоичному
 сложению с повышенной точностью  (смотрите ADC), но после сложения каждого
 байта необходимо производить десятичную коррекцию.
       Пример сложения BCD - слов:

    15----------------------------------0
    ¦ 0 0 0 0 0 0 0 1 ¦ 1 0 0 1 1 0 0 1 ¦  Соответствует десятичному 199
-+- +-----------------------------------+
    +-----------------------------------+
    ¦ 0 0 0 0 0 0 0 0 ¦ 1 0 0 1 0 0 1 1 ¦  Соответствует десятичному  93
    +-----------------------------------+

 1) Сложение младших байт командой ADD.

                       -----------------+
                       ¦1 0 0 1 1 0 0 1 ¦
               -+-     -----------------+
                       -----------------+
                       ¦1 0 0 1 0 0 1 1 ¦
                       -----------------+
                    ---------------------
                       -----------------+  Произошел перенос из старшего
                       ¦0 0 1 0 1 1 0 0 ¦  бита,   поэтому   флажок   CF
                       -----------------+  устанавливается в состояние 1

 2) Десятичная коррекция промежуточного результата:

                       -----------------+
                       ¦1 0 0 1 1 0 0 1 ¦
               -+-     -----------------+
                       -----------------+  Прибавляется  число  6,  т.к.
                       ¦0 0 0 0 0 1 1 0 ¦  младшая  тетрада   больше  9
               -+-     -----------------+
                       -----------------+  Прибавляется  число  60, т.к.
                       ¦0 1 1 0 0 0 0 0 ¦  при  сложении  командой  ADD
                       -----------------+  произошел  перенос  (CF = 1)
                    ---------------------
                       -----------------+
                       ¦1 0 0 1 0 0 1 0 ¦  После  десятичной  коррекции
                       -----------------+

  3) Сложение стаpших байт командой ADC.

    +-----------------
    ¦ 0 0 0 0 0 0 0 1¦
-+- +-----------------
    +-----------------
    ¦ 0 0 0 0 0 0 0 0¦
    +-----------------
-+-               +---+
                  ¦ 1 ¦  флажок CF
                  +---+
  ---------------------
    +-----------------
    ¦ 0 0 0 0 0 0 1 0¦  Флажок CF устанавливается в 0
    +-----------------

  4) Десятичная коррекция сложения  старших байт не изменяет промежуточного
     результата,   т.к.   значения  тетрад  допустимые  и   флажок   CF = 0.

  5) Окончательный Результат соответствует десятичному числу  292.

    +-----------------------------------+
    ¦ 0 0 0 0 0 0 1 0 ¦ 1 0 0 1 0 0 1 0 ¦
    +-----------------------------------+

###  Команда DAS #########################################################

 ### Производит   десятичную   коррекцию   результата  двоичного  вычитания
 байтовых BCD - чисел, который содержится в регистре AL.
     Вычитание производится  в два этапа: сначала  осуществляется вычитание
 как  для  обычных  двоичных чисел,  а затем  корректируется  результат  по
 следующим правилам:
     1) Если флажок AF = 1 или младшая тетрада AL больше десятичной цифры 9,
 то из содержимого  AL вычитается  число 6 и флажок  AF устанавливается в 1.
     2) Если флажок CF = 1 или старшая тетрада AL больше десятичной цифры 9,
 то из содержимого  AL вычитается число 60 и флажок  CF устанавливается в 1.

 ### Устанавливаются все арифметические флажки в зависимости от полученного
 результата,  за  исключением  флажков  OF и  AF,  состояние  которых после
 коррекции не определено.  Флажок  CF интерпретируется как флажок заема, он
 равен 1, если вычитаемое больше уменьшаемого.

 ### Формат команды:
                                                       7                0
    +-------------------------+ l = 1 байт             +----------------+
    ¦ DAS                     ¦ t = 4 такта            ¦    00101111    ¦
    +-------------------------+                        +----------------+

 ### Примечание:
     Вычитание BCD - чисел с  повышенной  точностью  аналогично   двоичному
 вычитанию  с  повышенной   точностью  (смотрите  SBB).  Но  после  каждого
 байтового вычитания необходимо производить десятичную коррекцию.
     Пример вычитания BCD - слов:

    15----------------------------------0
    ¦ 0 0 0 0 0 0 1 1 ¦ 0 0 0 0 0 1 1 1 ¦  Соответствует десятичному 307
--- +-----------------------------------+
    +-----------------------------------+
    ¦ 0 0 0 0 0 0 1 0 ¦ 0 0 0 0 1 0 0 0 ¦  Соответствует десятичному 208
    +-----------------------------------+

 1) Вычитание младших байт командой SUB.

                       -----------------+
                       ¦0 0 0 0 0 1 1 1 ¦
               ---     -----------------+
                       -----------------+
                       ¦0 0 0 0 1 0 0 0 ¦
                       -----------------+
                    ---------------------
                       -----------------+  Произошло  два заема,  поэтому
                       ¦1 1 1 1 1 1 1 1 ¦  флажки AF и CF устанавливаются
                       -----------------+  в состояние 1

 2) Десятичная коррекция промежуточного результата:

                       -----------------+
                       ¦1 1 1 1 1 1 1 1 ¦
               ---     -----------------+
                       -----------------+  Вычитается число  6, т.к. AF = 1
                       ¦0 0 0 0 0 1 1 0 ¦  и младшая тетрада больше 9
               ---     -----------------+
                       -----------------+  Вычитается число 60, т.к. СF = 1
                       ¦0 1 1 0 0 0 0 0 ¦  и   старшая   тетрада  больше  9.
                       -----------------+  Флажок CF остается в состоянии 1
                    ---------------------
                       -----------------+
                       ¦1 0 0 1 1 0 0 1 ¦  После  десятичной  коррекции
                       -----------------+

  3) Вычитание стаpших байт командой SBB.

    +-----------------
    ¦ 0 0 0 0 0 0 1 1¦
--- +-----------------
    +-----------------
    ¦ 0 0 0 0 0 0 1 0¦
    +-----------------
---               +---+
                  ¦ 1 ¦  флажок CF
                  +---+
  ---------------------
    +-----------------
    ¦ 0 0 0 0 0 0 0 0¦  Флажок CF устанавливается в 0
    +-----------------

  4) Десятичная коррекция вычитания старших байт не изменяет промежуточного
     результата,   т.к.   значения  тетрад  допустимые  и   флажок   CF = 0.

  5) Окончательный Результат соответствует десятичному числу  99.

    +-----------------------------------+
    ¦ 0 0 0 0 0 0 0 0 ¦ 1 0 0 1 1 0 0 1 ¦
    +-----------------------------------+

[   ВЕРНУТЬСЯ К ОГЛАВЛЕНИЮ   ]

 

 
Интересное в сети
 
10 новых программ
CodeLobster PHP Edition 3.7.2
WinToFlash 0.7.0008
Free Video to Flash Converter 4.7.24
Total Commander v7.55
aTunes 2.0.1
Process Explorer v12.04
Backup42 v3.0
Predator 2.0.1
FastStone Image Viewer 4.1
Process Lasso 3.70.4
FastStone Image Viewer 4.0
Xion Audio Player 1.0.125
Notepad GNU v.2.2.8.7.7
K-Lite Codec Pack 5.3.0 Full


Наши сервисы
Рассылка новостей. Подпишитесь на рассылку сейчас и вы всегда будете в курсе последних событий в мире информационных технологий.
Новостные информеры. Поставьте наши информеры к себе и у вас на сайте появится дополнительный постоянно обновляемый раздел.
Добавление статей. Если вы являетесь автором статьи или обзора на тему ИТ присылайте материал нам, мы с удовольствием опубликуем его у себя на сайте.
Реклама на сайте. Размещая рекламу у нас, вы получите новых посетителей, которые могут стать вашими клиентами.
 
Это интересно
 

Copyright © CompDoc.Ru
При цитировании и перепечатке ссылка на www.compdoc.ru обязательна. Карта сайта.
 
Rambler's Top100