Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Вычитание Ш

Арифметические команды | Десятичные числа | Сложение двоичных чисел без знака | Сложение двоичных чисел со знаком | Вычитание двоичных чисел без знака | Вычитание двоичных чисел со знаком j | Вычитание и сложение операндов большой размерности | Умножение двоичных чисел без знака ; ; | Деление двоичных чисел без знака | Команды преобразования типов |


Читайте также:
  1. Вычитание
  2. Вычитание
  3. Вычитание двоичных чисел
  4. Вычитание двоичных чисел без знака
  5. Вычитание двоичных чисел со знаком j
  6. Вычитание и сложение операндов большой размерности

па s Ситуация здесь вполне аналогична сложению. Рассмотрим те'же'случаи. ™Ц

' • •.:.. v.,•

Пример 8.11. Результат вычитания не больше 9е 9 •, • •,;}>;• j

6 = 0000 0110 ••• •. ; -.• :.$

–-'••• • "••',-•. ^

 

3 = 0000 0011 - ! ' ' : •"'". j

3 = 0000 0011 ' ••'•••' •,

" •" '•• •'; - '•!

Как видим, Ззаема из старшей тетрады нет. Результат верный и корректировки не \
требует.;:- J

"i
Пример 8.12. Результат вычитания больше 9../....,,, ~ •,,•.*

6 = 0000 0110

– ••-."...••,• ' •?•> • Ш'\

7 -= 0000 0111 • *Ь. "Я j

 

=

-1 = 1111 1П111 1

 

Вычитание проводится по правилам двоичной арифметики. Поэтому результат не
является BCD-числом. Правильный результат в неупакованном BCD-формате
должен быть 9 (0000 1001 в двоичной системе счисления). При этом предполага­
ется заем из старшего разряда, как при обычной команде вычитания, то есть в
случае с BCD-числами фактически должно быть выполнено вычитание 16 - 7.

Таким образом, видно, что, как и в случае сложения, результат вычитания нужно
корректировать. Для этого существует специальная команда

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

Команда aas также не имеет операндов и работает с регистром al, анализируя его младшую тетраду следующим образом: если ее значение меньше 9, то флаг cf сбрасывается в 0, и управление передается следующей команде. Если значение тетрады в al больше 9, то команда aas выполняет следующие действия:

- О из содержимого младшей тетрады регистра аl] (заметьте — не из содержимого всего регистра) вычитает 6;

- О обнуляет старшую тетраду регистра al;

- О устанавливает флаг cf в 1, тем самым фиксируя воображаемый заем из стар­шего разряда.

Понятно, что команда aas применяется вместе с основными командами вычита­ния sub и sbb. При этом команду sub есть смысл использовать только один раз при вычитании самых младших цифр операндов, далее должна применяться команда sbb

hb которая будет учитывать возможный заем из старшего разряда.

В листинге 8.9
' обходимся одной командой sbb, которая в цикле производит поразрядное
вычитание двух BCD-чисел. - -..........

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

<\>;prg_8_9.asm ", •..:.- •'..?it

<ф, masm

.ф, model small

ф. stack 256 -Jк •-,*..^;С".

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

<6> ьb db 1,7;неупакованное число 71 ',. ''

<-}> с db 4,5;неупакованное число 54 ' ••"-."•'"•

<8> subs db 2 dup (0) - " ' ;"fi-

<9>. code : '•' ' " ' ""' ;:

<10> main:;точка входа в программу Vl •-..-<• •:,'.„

<ц> rmnov ax,@.^data связываем регистр dx с сегнентйн-•'"• i! •''

<12> mov ds,.ax;данных через регистр ах

<13> хогr ах,ах..;очищаем ах.., •.

<14> len equ 2;2.' -.разрядность чисел ' ',:•;,;.,'.'

<15> хогr bx.,bx,.., |,,,,.., (

<16> mov ecx,len;загрузка в сх счетчика цикла../.'.".,

<17> ml: '' ; '; '"' : '•

<18> mov al,b[bx]. •, '•' "V

<19> sbb al.,c[bx].,... ii.jK. ',

<20> aas ' ' • ••.'"• •'' " •;41 '-'

<21> mov subs[bx],al - "-'• '• • •;..••• • s'"'1 v т; s...

<22> •.. Iinc bx..., (|,. ;,:.... '.':-

<23> ' loop ml....-- - •. •.

<:24> jc m2; анализ флага эзаенма

<25> jmp exit = - - '." • ^'-iv:.;:•(-. r~. v •

m^26> ni2:.... ".. • •-

•=27> exit:

<28> mov ax,4c00OOh;стандартный выход

^29> innt 21h.- -.I..',.W- '.

":30> end main;конец программы,; • -,,.,v •

Данная программа не требует особых пояснений, когда уменьшаемое больше вы­читаемого. Поэтому обратите внимание на строку 24. С ее помощью Мы предусмат­риваем случай, когда после вычитания старших цифр чисел был зафиксирован факт заема. Это говорит о том, что вычитаемое было больше уменьшаемого, в результа­те чего разность будет неправильной. Эту ситуацию нужно как-то обработать. С этой целью в строке 24 командой jc анализируется флаг cf. По результату этого анализа мы уходим на ветку программы, обозначенную меткой т2, где и будут вы­полняться некоторые действия. Набор этих действий сильно зависит от конкрет­ного алгоритма обработки, поэтому поясним только суть действий, которые может Выполнять соответствующий фрагмент программы. Для этого посмотрим в отлад-ике, как наша программа выполнит вычитание 50 - 74 (правильный ответ -24). о, что вы увидите в окне Dump отладчика, в поле, соответствующем адресу subs, УДет далеко от истинного ответа. Что делает в этом случае человек? Он просто ыполняет вычитание 74 - 50 = 24 и рассматривает результат как имеющий знакминус. Так как у микропроцессора нет средств обработки подобной ситуации, то фрагмент программы, обозначенный меткой т2, может поменять уменьшаемое ц вычитаемое местами, выполнить вычитание и где-то отметить тот факт, что раз-ность, на самом деле, нужно рассматривать как отрицательное число. Но ключевой момент здесь все-таки тот, что микропроцессор с помощью флага cf сигнализирует нам об этой особой ситуации.

 


Дата добавления: 2015-08-27; просмотров: 53 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Над двоично-десятичными числами| Умножение I

mybiblioteka.su - 2015-2024 год. (0.008 сек.)