Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Сложение двоичных чисел без знакаСодержание книги
Похожие статьи вашей тематики
Поиск на нашем сайте Если при сложении результат превышает размерность поля операнда, то результат оказывается неверным. Например: 254+5=259 (11111110+0000101=1 00000011). Для фиксирования ситуации выхода за разрядную сетку результата предназначен флаг переноса cf. Поэтому после операции сложения в программе предполагается включение участков кода, в которых анализируется флаг cf. Это можно сделать с помощью команды условного перехода jc <метка>.
В системе команд микропроцессора имеются три команды двоичного сложения: – INC <операнд>; операция инкремента, то есть увеличение значения операнда на 1. – ADD <операнд_1><операнд_2>; Принцип действия: операнд_1=операнд_1+операнд_2. В этой команде нельзя использовать переменную одновременно и для опернда_1, и для операнда_2. Команда ADD не различает числа со знаком и без знака. – ADC <операнд_1><операнд_2>; команда сложения с учётом флага переноса cf. Принцип действия: операнд_1=операнд_1+операнд_2+значение_cf.
Имеющиеся варианты приёмника и источник:
Сложим, например, два 64-битных целых числа: одно число находится в регистрах EDX:EAX, а другое в регистрах ЕВХ:ЕСХ: Add eax,ecx Adc edx,ebx Если при сложении младших двойных слов произошел перенос из старшего разряда (флаг CF=1), то он будет учтен следующей командой ADC.
Вычислим сумму 254+17 в регистр ах. При этом известно, что результат сложения выходит за границы операнда.
– XADD <операнд_1><операнд_2>; выполняет команду «обменять между собой и сложить». Выполняет сложение, помещает содержимое операнд_1 в операнд_2, — сумму операндов — в операнд_1. Операнд_2 всегда регистр, операнд_1 может быть регистром и переменной. Сложение двоичных чисел со знаком. При сложении чисел с одинаковым знаком необходимо учитывать значение флага переполнения of в регистре eflags (бит 11). Пример1. 30566=0111011101100110 + 00687=0000001010101111 = 31253=0111101000010101 – результат правильный (sf=0; of=0). Пример2. 30566=0111011101100110 + 30566=0111011101100110 = 61132=1110111011001100 – результат правильный, но значение считается отрицательное (в старшем бите 1, sf=1; of=0). Пример3. -30566= 1000100010011010 (дополнительный код) + -04875= 1110110011110101 (дополнительный код) = -35441<>1 0111010110001111 – результат неправильный, так как получилось положительное число 95 631 (в старшем бите 0, sf=0; of=1). Для того, чтобы получить правильный ответ необходимо: а) инвертировать результат: 1000101001110000 б) прибавить 1: 1000101001110000+1=1000101001110001b 35441d в) или выполнить команду neg(0111010110001111)=1000101001110001b= =35441d Пример4. (sf=1; of=1) -4875= 1110110011110101 + -4875= 1110110011110101 = -9750<>1 1101100111101010b (121 322d) – результат неправильный. Neg(1101100111101010b)=0010011000010110b=9750d Таким образом, ситуация переполнения при сложении чисел с одинаковым знаком (установка флага of в 1) происходит при переносе: 1) из 14-го разряда (для положительных чисел); Из 15-го разряда (для отрицательных чисел).
Переполнения не происходит (флаг of сбрасывается в 0), если есть перенос из обоих разрядов или перенос отсутствует в обоих разрядах. При сложении чисел с одинаковыми знаками может быть следующая ситуация: 1) sf=0; of=0 => в приёмнике результат положительный и правильный; 2) sf=1; of=0 => в приёмнике результат правильный, но он считается отрицательным, так как sf=1. Работать с результатом необходимо как с положительным числом; 3) sf=0; of=1 => в приёмнике результат в дополнительном коде, необходимо применять команду neg и работать с результатом как с отрицательным числом; 4) sf=1; of=1 => в приёмнике результат в дополнительном коде, необходимо применять команду neg и работать с результатом как с отрицательным числом;
Правильный процесс сложения чисел со знаком и без знака необходимо проводить, анализируя флаги cf и of. Состояние флагов после выполнения команд ADD, ADC, INC сведено в табл. 1. Таблица 1.
Сложение чисел с разными знаками Пример 1: найдём сумму чисел -6+7. Для чисел отведено 2 байта. Для этого -6d (110b) представим в дополнительном коде: 0000000000000110 инвертируем, получим: + = 11111111111110102 =6553010 =fffa16 =-6d Тогда: mov ax,FFFAh mov dx, 7h add ax,dx + = 1 0000000000000001b=65537d (sf=0; cf=1)
fffah+7h=1 0001h – результат не помещается в регистр АХ, будет установлен флаг переноса cf в 1. Если значение cf проигнорировать, то оставшееся в АХ значение будет правильным.
Пример 2: найдём сумму 25+(-300). -300d=1111111011010100b + = 11111110111011012 =6526110 = -27510 (sf=1; cf=0) Результат в дополнительном коде. Инвертируем 0000000100010010 + 0000000000000001 = 00000001000100112 = 27510 или (neg(1111111011101101b))= 0000000100010011b=275d При сложении чисел разных знаков: 1) если в результате получаем sf=0; cf=1, то значение в приёмнике будет верным и положительным. 2) если в результате получаем sf=1; cf=0, то значение в приёмнике будет верным в дополнительном коде и отрицательным.
При выполнении команды сложения устанавливаются следующие флаги: 1) CF=1, если результат не помещается в приемнике, т.е. произойдет перенос. 2) PF=1; если результат имеет четное число битов с 1. 3) AF=1, если результат сложения десятичных чисел требует коррекции. 4) ZF=1, если результат =0. 5) SF= 1, если результат отрицателен. 6) OF=1, если при сложении 2-х чисел одного знака результат превышает диапазон допустимых значений в обратном коде, а сам приемник меняет знак. SF и OF имеют смысл при сложении чисел со знаком, AF – для десятичных чисел.
|
||||||||||||||||||||
|
Последнее изменение этой страницы: 2016-09-13; просмотров: 974; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.169 (0.009 с.) |