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



         

ГЛАВА 13. Арифметические операции II: - часть 2


Ассемблер для 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-числа в четырехбайтовую сумму. Обратите внимание на следующее:




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