ЦЕЛЬ работы

Цель настоящей работы – знакомство с форматами представле­ния десятичных чисел, упакованным и неупакованным BCD-фор­матами, освоение команд десятичной коррекции.

ОСНОВНЫЕ СВЕДЕНИЯ

Форматы представления десятичных чисел

Упакованные BCD-числа хранятся по две цифры в байте в виде четырехбитовых групп, называемых тетрадами, причем каждая тетрада представляет собой двоичную комбинацию, соответствую­щую одной десятичной цифре, т.е. двоичное число в диапазоне 0000b – 1001b.

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

Команды десятичной коррекции упакованных чисел

Для упакованных десятичных чисел допустимы только опера­ции сложения и вычитания. Каждая операция выполняется в два этапа.

На первом выполняется операция – сложение или вычитание (add, adc, sub, sbb) двух упакованных десятичных чисел, первое из которых должно находиться в регистре AL, на втором – деся­тичная коррекция результата в регистре AL (daa, das).

Рассмотрим подробнее одну из команд коррекции – daa, кор­рекция после сложения BCD-чисел.

После первого этапа – двоичного сложения правильных BCD-чисел возможно появление неправильного BCD-результата в двух ситуациях:

· получена недопустимая тетрада, т.е. тетрада, двоичный экви­валент которой больше 9;

· получена допустимая тетрада, но при сложении из нее возник двоичный перенос с весом 16, в то время как правильный вес единицы переноса должен быть равен 10.

Отметим, что перенос из младшей тетрады фиксируется флагом AF, а из старшей – CF.

Алгоритм выполнения команды daa состоит из двух шагов:

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

· если CF=1 или старшая тетрада регистра AL содержит запре­щенную комбинацию, к содержимому AL прибавляется 60h и флаг CF устанавливается в 1.

Например. Содержимое регистров AL=65h и BL=28h, что соответ­ствует десятичным числам 65 и 28. Выполним их сложение


add AL, BL; AL=8Dh, AF=0, CF=0, ZF=0
daa; AL=93h, AF=0, CF=0, ZF=0

и вычитание


sub AL, BL; AL=3Dh, AF=1, CF=0, ZF=0

das; AL=37h, AF=1, CF=0, ZF=0

в комментариях показаны значения регистра AL и флагов после выполнения соответствующей команды.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: