logo

Система команд x86
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

AAS

ASCII коррекция после вычитания

Влияние команды на флаги и форматы команды:

OF

DF

IF

TF

SF

ZF

AF

PF

CF

?

     

?

?

*

?

*

 

Код

Команда

Описание

Проц.

Пример

3F

AAS

ASCII коррекция AL после вычитания

8086

aas

Описание:

Команда AAS относится к группе команд двоично-десятичной арифметики (Binary-Coded Decimal, BCD) и позволяет преобразовать результат вычитания двоично-десятичных данных в ASCII-формат. Для этого команда AAS должна выполняться после команды двоичного вычитания SUB, которая помещает однобайтный результат в регистр AL.

Для корректного использования команды AAS младшая тетрада операнда предшествующей команды SUB должна быть в диапазоне от 0 до 9 (BCD-цифры). В этом случае команда AAS корректирует регистр AL таким образом, что он будет содержать правильную двоично-десятичную цифру, соответствующую результату вычитания двух двоично-десятичных значений (операнд команды SUB вычитается из исходного содержимого AL). Если при вычитании командой SUB происходит десятичный перенос (EFLAGS.AF = 1), то регистр AH уменьшается на единицу, а также устанавливаются флаги EFLAGS.CF и EFLAGS.AF. Если при вычитании десятичного переноса не возникло (EFLAGS.AF = 0), тогда сбрасываются флаги EFLAGS.CF и EFLAGS.AF, а регистр AH не изменяется. Во всех случаях старшая тетрада регистра AL обнуляется.

Для того, чтобы преобразовать содержимое регистра AL к ASCII-формату, необходимо после команды AAS выполнить команду OR AL,0x30h .

Сама по себе двоично-десятичная арифметика с преобразованием к ASCII-формату считалась устаревшей уже тогда, когда появились первые микропроцессоры. Эта методика предполагает использование для расчетов данных в ASCII-формате (в ASCII-формате цифрам 1, 2, 3, 4, ... соответствуют байт-коды 0x31h, 0x32h, 0x33h, 0x34h ...) и последующее получение результата также в ASCII-формате. При положительном результате вычитания это выглядит следующим образом:

sub AH,AH    ; очистка AH
mov AL,'9'   ; AL = 0x39h 
sub AL,'3'   ; AL = 0x39h - 0x33h = 0x06h 
aas          ; AX = 0x0006h 
or AL,30H    ; AL = 0x36h

при вычитании с получением результа меньше нуля:

sub AH,AH    ; очистка AH
mov AL,'3'   ; AL = 0x33h 
sub AL,'9'   ; AL = 0x33h - 0x39h = 0xFAh 
aas          ; AX = 0xFF04h 
or AL,30H    ; AL = 0x34h = '4'

Операция:

IF ( (AL AND 0x0Fh) > 9 or EFLAGS.AF = 1 )

   THEN

      IF (Процессор Intel286, ...)

         THEN AL = AL - 0x06h;

         ELSE AX = AX - 0x0006h;

      FI;

      AH = AH - 0x01h;

      EFLAGS.AF = 1;

      EFLAGS.CF = 1;

   ELSE

      EFLAGS.CF = 0;

      EFLAGS.AF = 0;

FI;

AL = AL AND 0x0Fh;

Особые ситуации защищенного режима:

Intel386 … :
#UD при использовании префикса LOCK.

Особые ситуации режима реальной адресации:

Intel386 … :
#UD при использовании префикса LOCK.

Особые ситуации режима V86:

Intel386 … :
#UD при использовании префикса LOCK.

Замечание:

К командам двоично-десятичной арифметики относятся команды DAA, DAS, AAA, AAS, AAM, AAD.

В свою очередь, сами названные команды двоично-десятичной арифметики делятся на две подгруппы. Первая подгруппа команд предназначена для так называемой ASCII-коррекции, которая используется при непосредственной работе с данными в формате ASCII или в формате упакованных двоично-десятичных данных (неупакованный BCD-формат). Подгруппа включает команды AAA, AAS, AAM, AAD. Вторая подгруппа — это команды DAA и DAS — они предназначены для коррекции операций сложения и вычитания упакованных двоично-десятичных (упакованный BCD-формат).

В процессорах 8086/8088 и 80186/80188 реализация команд AAA, AAS была не вполне корректной, что дополнительно способствовалу тому, что их и использовали достаточно редко.


Входит в группу команд: Базовая система команд CPU


Все права защищены © 1997-2011 Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru

Яндекс.Метрика               Сервер радиолюбителей России - схемы, документация,

 соревнования, дипломы, программы, форумы и многое другое!   схемы новости электроники