Главная Программирование Софт Документы Статьи Обо мне


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



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

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

    15------------------------------7-------------------------------0
    ¦ 0   0   0   0 ¦ 1   0   0   0 ¦ 0   0   0   0 ¦ 0   0   0   1 ¦
    +---------------------------------------------------------------+

     0000.1000.0000.0001 в двоичном формате равно десятичному числу 2049,
                         в ASCII - формате  равно десятичному числу 81

 ### С ASCII - числами можно производить любые арифметические  операции.

###  Команда AAA #########################################################

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

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

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

 ### Примечание:
     Сложение  ASCII - чисел  с  повышенной  точностью  похоже  на двоичную
 арифметику  с  повышенной  точностью,  но  после  сложения  каждого  байта
 необходимо производить символьную коррекцию.

###  Команда AAS #########################################################

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

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

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

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

###  Команда AAM #########################################################

 ### Производит символьную коррекцию результата умножения байтовых  ASCII -
 чисел, который содержится в регистре AL.
     Умножение    ASCII - чисел   производится   в   два   этапа:   сначала
 осуществляется умножение командой MUL, а затем результат корректируется по
 следующим правилам:
     1) Содержимое регистра AL делится на число 10.
     2) Частное загружается в регистр AH, а остаток - в регистр AL.

 ### Состояние  флажков  SF,  ZF,  PF  зависит от содержимого регистра  AL.
 Состояние флажков OF, AF, CF не определено.

 ### Формат команды:
                                                       7                0
    +-------------------------+ l = 2 байта            +----------------+
    ¦ AAM                     ¦ t = 83 такта           ¦    11010100    ¦
    +-------------------------+                        ¦----------------¦
                                                       ¦    00001010    ¦
                                                       +----------------+
 ### Примечание:
     Команду  AAM  можно  использовать  для деления  двоичного числа  на 10.
 Частное помещается в регистр AH, остаток - в регистр AL.

###  Команда AAD #########################################################

 ### Производит символьную коррекцию содержимого регистра  АХ  по следующим
 правилам:
     1) Содержимое  регистра  AH  умножается  на  число  10.
     2) Полученный  результат  прибавляется   к  содержимому   регистра  AL.
     3) Содержимое  регистра  AH  сбрасывается.
     Деление  ASCII - чисел производится в два этапа:  сначала двухбайтовое
 ASCII - делимое  преобразуется  в двоичное число  в регистре  AL,  а затем
 командой  DIV  содержимое регистра  AX  делится на байтовое  ASCII - число.
 После деления в регистре  AL  остается частное, а в регистре  AH - остаток.

 ### Состояние  флажков  SF,  ZF,  PF  зависит от содержимого  регистра  AL.
 Состояние флажков OF, AF, CF не определено.

 ### Формат команды:
                                                       7                0
    +-------------------------+ l = 2 байта            +----------------+
    ¦ AAD                     ¦ t = 60 тактов          ¦    11010101    ¦
    +-------------------------+                        ¦----------------¦
                                                       ¦    00001010    ¦
                                                       +----------------+
 ### Применение и особенности программирования:
      Если  делитель  равен  0,  генерируется  прерывание  типа 0.  Если в
 программе   нет  обработки   такого  прерывания,  необходимо  до  операции
 проверить  возможность  возникновения  деления  на  0.
      Может  оказаться,  что  частное  -  это  не  одна  десятичная  цифра
 (например,  когда  число  40  делится  на  2).  При  этом  переполнение не
 возникает,  поэтому  после  каждой  последовательности  команд   AAD - DIV
 необходимо  проверять,  не  превысило  ли  частное  числа  9,  и  вызывать
 соответствующую  обработку  переполнения.

[   ВЕРНУТЬСЯ К ОГЛАВЛЕНИЮ   ]
Сайт создан в системе uCoz