Справочник по языку Ассемблера IBM PC

       

Десятичные числа


Десятичные числа — специальный вид представления числовой информации, в основу которого положен принцип кодирования каждой десятичной цифры числа группой из четырех бит. При этом каждый байт числа содержит одну или две десятичные цифры в так называемом двоично-десятичном коде (BCD — Binary-Coded Decimal). Микропроцессор хранит BCD-числа в двух форматах (рис. 3):

упакованном формате — в этом формате каждый байт содержит две десятичные цифры. Десятичная цифра представляет собой двоичное значение в диапазоне от 0 до 9 размером 4 бита. При этом код старшей цифры числа занимает старшие 4 бита. Следовательно, диапазон представления десятичного упакованного числа в одном байте составляет от 00 до 99;

неупакованном формате — в этом формате каждый байт содержит одну десятичную цифру в четырех младших битах. Старшие четыре бита имеют нулевое значение. Это так называемая зона. Следовательно, диапазон представления десятичного неупакованного числа в одном байте составляет от 0 до 9.

Рис. 3. Представление BCD-чисел

Как описать двоично-десятичные числа в программе?

Для этого можно использовать только две директивы описания и инициализации данных — db и dt. Возможность применения только этих директив для описания BCD-чисел обусловлена тем, что к таким числам также применим принцип “младший байт по младшему адресу”, что, как мы увидим далее, очень удобно для их обработки. И вообще, при использовании такого типа данных как BCD-числа, порядок описания этих чисел в программе и алгоритм их обработки — это дело вкуса и личных пристрастий программиста. Это станет ясно после того, как мы ниже рассмотрим основы работы с BCD-числами. К примеру, приведенная в сегменте данных листинга 2 последовательность описаний BCD-чисел будет выглядеть в памяти так, как показано на рис. 4.

   Листинг 2. BCD-числа ;prg_8_2.asm masm model   small stack   256 .data   ;сегмент данных per_1   db      2,3,4,6,8,2 ;неупакованное BCD-число 286432 per_3   dt      9875645 ;упакованное BCD-число 9875645 .code   ;сегмент кода main:   ;точка входа в программу         mov     ax,@data        ;связываем регистр dx с сегментом         mov     ds,ax   ;данных через регистр ax exit:   ;посмотрите в отладчике дамп сегмента данных         mov     ax,4c00h        ;стандартный выход         int     21h end     main    ;конец программы

Рис. 4. Дамп памяти для сегмента данных листинга 2

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



Содержание раздела