Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Упакованные BCD-числа




Как уже отмечалось выше, уУпакованные BCD-числа можно только складывать и вычитать. Для выполнения других действий над ними их нужно дополнительно

тпеореобриазовывать либо в неупакованный формат, либо в двоичное представление.


Из-за того что упакованные BCD-числа представляют не слишком большой ин­
терес, мы их рассмотрим кратко..-; ^ •» р.;;.;-,...

1. Сложение

Пример 8.13. Сложение упакованных BCD-чисел

67 = 0110 0111

+

75 = 0111 0101

142 = 1101 1100 = 220

Как видим, в двоичном виде результат равен 1101 1100 (или 220 в десятичном представлении), что неверно. Это происходит по той причине, что микропроцессор не подозревает о существовании BCD-чисел и складывает их по правилам сложения двоичных чисел. На самом деле результат в двоично-десятичном виде должен быть равен 0001 0100 0010 (или 142 в десятичном представлении). Читатель видит, что, как и для неупакованных BCD-чисел, для упакованных BCD-чисел существует необходимость как-то корректировать результаты арифметических операций. Мик­ропроцессор предоставляет для этого команду daa:

daa (Decimal Adjust for Addition) — коррекция результата сложения для представления в десятичном виде.

Команда daa преобразует содержимое регистра al в две упакованные десятичные цифры по алгоритму, приведенному в Справочнике.

Получившаяся в результате сложения единица (если результат сложения боль­ше 99) запоминается в флаге cf, тем самым учитывается перенос в старший раз­ряд.

Проиллюстрируем сказанное на примере сложения двух двузначных BCD-чисел в упакованном формате (листинг 8.12).

Листинг 8.12. Сложение упакованных BCD-чисел

;prg8_12.asm

masm

model small

stack 256

.data;сегмент данных

b db 17h;упакованное число 17h

c db 45h;упакованное число 45

sum db 2 dup (0)

.code;сегмент кода

main:;точка входа в программу

mov ax,@data

mov ds,ax

xor ax,ax

mov al,b

add al,c

daa

jnc $+6;переход через команду, если результат <= 99

mov sum+1,ah;учет переноса при сложении (результат > 99)

mov sum,al;младшие упакованные цифры результата

exit:

mov ax,4c00h

int 21h

end main

 

В приведенном примере все достаточно прозрачно; единственное, на что следует обратить внимание — это описание упакованных BCD-чисел и порядок формирования результата. Результат формируется в соответствии с основным принципом работы микропроцессоров Intel: младший байт по младшему адресу.|

-

Вычитание

Аналогично сложению, микропроцессор рассматривает упакованные ВСО-числал как двоичные, и, соответственно, выполняет вычитание BCD-чисел как двоичным (см. пример 8.14). Выполним вычитание 67-75. Так как микропроцессор выполняет вычитание способом сложения, то и мы последуем этому:

Пример 8.14. Вычитание упакованных BCD-чисел

67 =0110 0111

+

-75 = 1011 0101

=

-8 = 0001 1100 = 28???

Как видим, результат равен 28 в десятичной системе счисления, что является абсурдом. В двоично-десятичном коде результат должен быть равен 0000 1000 •' (или 8 в десятичной системе счисления). При программировании вычитания упа­кованных BCD-чисел программист, как и при вычитании неупакованных BCD-чисел, должен сам осуществлять контроль за знаком. Это делается с помощью флага cf, который фиксирует заем из старших разрядов. Само вычитание BCD-чисел осуществляется простыми командами вычитания sub или sbb. Коррекция результата осуществляется командой das:

das (Decimal Adjust for Substraction) — коррекция результата вычитания для представления в десятичном виде.

В Справочнике описан алгоритм, по которому команда das преобразует содержи-;
мое регистра al в две упакованные десятичные цифры.,..

 

Подведем некоторые итоги:

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

0 Команды целочисленных операций работают с данными двух типов: двоичны­ми и двоично-десятичными числами (BCD-числами).[7(Двоичные данные могут либо иметь знак, либо не иметь такового. Микро­процессор, на самом деле, не различает числа со знаком и без. Он помогает пишь отслеживать изменение состояния некоторых битов операндов и со­стояние отдельных флагов. Операции сложения и вычитания чисел со знаком vi без знака проводятся одним устройством и по единым правилам. И Контроль за правильностью результатов и их надлежащей интерпретацией полностью лежит на программисте. Он должен контролировать состояние флагов cf и of регистра eflags во время вычислительного процесса. 0 Для операций с числами без знака нужно контролировать флаг cf. Установка

его в 1 сигнализирует о том, что число вышло за разрядную сетку операндов. 0 Для чисел со знаком установка флага of в 1 говорит о том, что в результате сложения чисел одного знака результат выходит за границу допустимых зна­чений чисел со знаком в данном формате, и сам результат меняет знак (пропа­дает порядок).

Ш По результатам выполнения арифметических операций устанавливаются так­же флаги pf, zf и sf. 0 В отличие от команд сложения и вычитания, команды умножения и деления

позволяют учитывать знаки операндов.

0 Арифметические команды очень «капризны» к размерности операндов, поэто­му в систему команд микропроцессора включены специальные команды, по­зволяющие отслеживать эту характеристику.

0 Двоичные данные имеют довольно большой, но ограниченный диапазон зна­чений. Для коммерческих приложений этот диапазон слишком мал, поэтому в архитектуру микропроцессора введены средства для работы с так называемы­ми двоично-десятичными (BCD) данными.

0 Двоично-десятичные данные представляются в двух форматах, упакованном и неупакованном. Наиболее универсальным является неупакованный формат.






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных