Ассемблер и программирование для IBM PC


          

Ассемблер для IBM PC. Глава


Ассемблер для IBM PC. Глава 13 2
AAA (ASCII Adjust for Addition - коррекция для сложения ASCII-кода) AAD (ASCII Adjust for Division - коррекция для деления ASCII-кода) AAM (ASCII Adjust for Multiplication - коррекция для умножения ASCII-кода) AAS (ASCII Adjust for Subtraction - коррекция для вычитания ASCII-кода)
Эти команды кодируются без операндов и выполняют автоматичес кую коррекцию в регистре AX. Коррекция необходима, так как ASCII код представляет так называемый распакованный десятичный формат, в то время, как компьютер выполняет арифметические операции в двоичном формате.
Сложение в ASCII-формате
Рассмотрим процесс сложения чисел 8 и 4 в ASCII-формате:
Шест. 38 34 Шест. 6C
Полученная сумма неправильна ни для ASCII-формата, ни для двоичного формата. Однако, игноригуя левую 6 и прибавив 6 к правой шест.C: шест.C + 6 = шест.12 - получим правильный результат в десятичном формате. Правильный пример слегка упрощен, но он хорошо демонстрирует процесс, который выполня ет команда AAA при коррекции. В качестве примера, предположим, что регистр AX содержит шест. 0038, а регистр BX - шест.0034. Числа 38 и 34 представляют два байта в ASCII формате, которые необходимо сложить. Сложение и коррекция кодируется следующими командами:
ADD AL,BL ;Сложить 34 и 38 AAA ;Коррекция для сложения ASCII кодов
Команда AAA проверяет правую шест. цифру (4 бита) в регистре AL. Если эта цифра находится между A и F или флаг AF равен 1, то к регистру AL прибавляется 6, а к регистру AH прибавляется 1, флаги AF и CF устанавливаются в 1. Во всех случаях команда AAA устанавливает в 0 левую шест. цифру в регистре AL. Результат - в регистре AX:
После команды ADD: 006C После команды AAA: 0102
Для того, чтобы выработать окончательное ASCII-представ ление, достаточно просто поставить тройки на место левых шест. цифр: OR AX,3030H ;Результат 3132
Ассемблер для IBM PC. Глава 13 3
Все показанное выше представляет сложение однобайтовых чисел. Сложение многобайтовых ASCII-чисел требует организа ции цикла, который выполняет обработку справа налево с учетом переноса. Пример , показанный на рис.13.1 складывает два трехбайтовых ASCII-числа в четырехбайтовую сумму. Обратите внимание на следующее:

Содержание  Назад  Вперед