Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
I8086.DOC
Скачиваний:
50
Добавлен:
02.05.2014
Размер:
1.36 Mб
Скачать
      1. Aaa– коррекция сложения двоично-десятичных распакованных чисел

37

AAA

десятичная коррекция сложения AX

Описание.Эта инструкция корректирует сумму двух распакованных двоично-десятичных чисел с целью получить двоично-десятичный распакованный результат. Она используется после инструкцииADDилиADC, выполняющей сложение, и корректирует результат, находящийся в регистреAL.

Если операция сложения сформировала признак вспомогательного переноса (флажок AFв регистреFLAGSбыл установлен) или если младший полубайт регистраALсодержит значениеA16–F16, устанавливаются флажкиAFиCFи производится инкремент регистраAH. Если же флажокAFбыл сброшен, а младший полубайт регистраALсодержал правильный десятичный код (значение 0–9), флажкиAFиCFсбрасываются, а инкремент регистраAHне выполняется. В любом случае старший полубайт регистраALобнуляется.

ФлажкиAFиCFустанавливаются в соответствии с результатом операции (см. выше).

Значение флажков OF,SF,ZFиPFне определено.

Замечания по программированию

Инструкция AAAиспользуется совместно с инструкциейADDилиADCпри выполнении операции сложения распакованных двоично-десятичных чисел. Сложение выполняется последовательно – по одному десятичному разряду. Складываемые двоично-десятичные значения перед выполнением команды сложения располагаются в младших полубайтах её операндов, причём один из них – в младшем полубайте регистраAL. Следующая за инструкцией сложения команда коррекции на основании полученного результата и состояния флажка вспомогательного переноса корректирует результат в регистреAL. ФлажокCF, установленный после выполнения инструкцииAAA, свидетельствует о том, что возник перенос в следующий разряд распакованного двоично-десятичного числа, который должен быть учтён при выполнении следующего прохода сложения.

      1. Aad– коррекция деления двоично-десятичных распакованных чисел

D5 0A

AAD

десятичная коррекция деления AX

Описание.Эта команда используется для коррекции двоично-десятичного распакованного операнда, находящегося в регистреAXи используемого в последующей инструкции деления, для получения правильного двоичного результата.

В результате выполнения инструкции AADв регистреALбудет размещён двоичный эквивалент двоично-десятичного распакованного числа, находящегося перед этим в регистреAX(вычисляется по формулеAL:=AL+AH*10); содержимое регистраAHбудет обнулено.

ФлажкиSF,ZFиPFустанавливаются по обычным правилам.

Значение флажков OF,AFиCFне определено.

Замечания по программированию

Инструкция AADпредшествует инструкцииDIVи корректирует делимое, состоящее из двух двоично-десятичных цифр, находящихся в младших полубайтах регистровAHиAL; старшие полубайты при этом должны быть равны нулю. Делитель должен быть двоично-десятичным одноразрядным распакованным числом, т.е. иметь значение от 0 до 9. В результате выполнения командыDIVв регистреALбудет сформировано правильное двоичное частное. Для его преобразования в двоично-десятичный можно воспользоваться инструкциейAAM. Остаток принимает значение 0–9 в зависимости от значения исходных операндов, поэтому не нуждается в дополнительном преобразовании в двоично-десятичный вид.

Фирменные руководства ничего не говорят о том, используются ли при выполнении инструкции AADзначения старших полубайтов регистровAHиAL, поэтому лучше перестраховаться и обеспечить их обнуление.

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