Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
12-12-2013_11-21-32 / пособие_m.doc
Скачиваний:
76
Добавлен:
10.05.2015
Размер:
484.35 Кб
Скачать
    1. Команды десятичной арифметики

Микропроцессоры данного семейства не имеют команд, непосредственно оперирующих упакованными и неупакованными десятичными цифрами. Для выполнения операций над двоично-десятичными цифрами имеется шесть команд, которые выполняют коррекцию, т.е. позволяют правильно осуществлять сложение и вычитание упакованных чисел, а также производят все арифметические действия над неупакованными числами. Эти команды коррекции выполняются после выполнения обычных операций над двоичными числами.

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

Сложение для этого случая осуществляется в два этапа: сначала операнды складываются как два двоичных числа, т.е. выполняется команда ADD, при этом необходимо, чтобы результат находился в регистре AL. После этого осуществляется корректировка результата при помощи однобайтной команды DAA десятичной коррекции для сложения. Алгоритм коррекции состоит из двух шагов:

  1. сначала осуществляется коррекция младшей тетрады и для этого осуществляются следующие действия - если младшая тетрада содержит запрещенную для десятичного представления цифры комбинацию (в диапазоне чисел от 10 до 15) или выработался флаг дополнительного переноса AF, то к содержимому AL прибавляется 06;

2) затем аналогичным способом осуществляется корректировка старшей тетрады – если эта тетрада содержит запрещенную комбинацию или выработался флаг переноса CF, то к содержимому AL прибавляется 60.

Вычитание упакованных чисел также осуществляется в два этапа: сначала осуществляется обычное вычитание двух операндов при помощи команды SBB, при этом необходимо, чтобы результат располагался в регистре AL. После этого осуществляется корректировка полученного результата при помощи однобайтной команды DAS десятичной коррекции для вычитания. Аналогично коррекции сложения коррекция вычитания осуществляется за два шага следующим образом:

  1. если младшая тетрада регистра AL содержит запрещенную комбинацию или установлен флаг дополнительного переноса AF, то из содержимого AL вычитается 06, после чего осуществляется корректировка старшей тетрады;

  2. если старшая тетрада содержит запрещенную комбинацию или установлен флаг переноса CF, то из содержимого регистра AL вычитается 60.

Неупакованное представление двоично-десятичных чисел обычно соответствует представлению ASCII-формата. Такое представление позволяет осуществить четыре арифметических операции.

Сложение в данном формате осуществляется в два этапа: сначала производится обычное сложение двоичных чисел с получением промежуточного результата в регистре AL, а затем производится коррекция этого результата при помощи команды AAA. Коррекция сложения включает в себя следующие шаги:

  1. если младшая тетрада регистра AL содержит допустимое значение и флаг AF=0, то перейти к шагу 3;

  2. если младшая тетрада регистра AL содержит запрещенную комбинацию или флаг AF=1, то необходимо прибавить 06 к содержимому регистра AL, прибавить 1 к содержимому регистра AH и установить AF=1;

  3. сбросить старшую тетраду регистра AL;

  4. установить флаг CF в то же состояние, в каком находится флаг AF.

Для коррекции результата двоичного вычитания, полученного при помощи команды SUB, который должен находиться в регистре AL, используется команда коррекции для вычитания AAS, которая реализует следующий алгоритм:

  1. если младшая тетрада регистра AL содержит допустимую комбинацию и флаг AF=0, то перейти к шагу 3;

  2. если младшая тетрада регистра AL содержит запрещенную комбинацию или AF=1, то необходимо вычесть 06 из содержимого регистра AL, вычесть 1 из содержимого регистра AH и установить флаг AF=1;

  3. сбросить старшую тетраду регистра AL;

  4. установить флаг CF в такое же состояние, в каком находится флаг AF.

Умножение неупакованных десятичных чисел выполняется в два этапа:

  1. умножение одноразрядных сомножителей, представленных байтами, в которых младшие тетрады содержат десятичные цифры, а старшие тетрады нулевые. Умножение выполняется командой MUL, которая формирует в регистре AL двоичное произведение;

  2. двухбайтная команда коррекции для умножения AAM преобразует полученный результат в двухбайтное произведение, находящееся в регистрах AH (старший разряд) и AL (младший разряд). Младшие тетрады содержат в обоих байтах цифры произведения, а старшие – нулевые.

Команда AAM осуществляет деление содержимого регистра AL на десять и загружает частное в регистр AH, а остаток – в регистр AL.

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

Двухбайтной командой AAD выполняются следующие действия:

  1. содержимое регистра AH умножается на десять;

  2. полученный результат прибавляется к содержимому регистра AL;

  3. содержимое регистра AH сбрасывается.

Собственно деление полученного в регистре AX делимого на одноразрядный делитель осуществляется командой DIV.

Соседние файлы в папке 12-12-2013_11-21-32