Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Сложение двоичных чисел со знакомСодержание книги
Похожие статьи вашей тематики
Поиск на нашем сайте
Флаг переноса cf, установка которого в 1 говорит о том, что произошёл выход за пределы разрядности операндов. Регистрация состояния старшего (знакового) разряда операнда осуществляется с помощью флага переполнения of в регистре eflags (бит 11). Пример1. 30566=0111011101100110 + 00687=0000001010101111 = 31253=0111101000010101 – результат правильный. Пример2. 30566=0111011101100110 + 30566=0111011101100110 = 61132=1110111011001100 – результат неправильный, значение получилось отрицательное (в старшем бите 1). Пример3. -30566=1000100010011010 + -04875=1110110011110101 = -35441=0111010110001111 – результат неправильный, так как получилось положительное число (в старшем бите 0) Пример4. -4875=1110110011110101 + -4875=1110110011110101 = -9750=1101100111101010 – результат правильный.
Таким образом, ситуация переполнения (установка флага of в 1) происходит при переносе: 3) из 14-го разряда (для положительных чисел); Из 15-го разряда (для отрицательных чисел).
Переполнения не происходит (флаг of сбрасывается в 0), если есть перенос из обоих разрядов или перенос отсутствует в обоих разрядах. Правильный процесс сложения чисел со знаком и без знака необходимо проводить, анализируя флаги cf и of. Состояние флагов после выполнения команд ADD, ADC, INC сведено в табл. 1. Таблица 1.
Пример: найдём сумму чисел -6+7. Для чисел отведено 2 байта. Для этого -6 представим в дополнительном коде: 0000000000000110 инвертируем, получим: + = 11111111111110102 =6553010 =fffa16 Тогда: Mov ax,FFFAh Mov dx, 7h Add ax,dx fffa+7=1 0001 – результат не помещается в регистр АХ, будет установлен флаг переноса cf в 1. Если значение cf проигнорировать, то оставшееся в АХ значение будет правильным.
Пример: вычтем 25-300 - = 11111110111011012 =6526110 = -27510 Если произошёл заём 1 из старшего разряда, то состояние флага cf установлено в 1 – значит результат получился в дополнительном коде. 1111111011101101 инвертируем 0000000100010010 + 0000000000000001 = 00000001000100112 = 27510 При выполнении команды сложения устанавливаются следующие флаги: 1) CF=1, если результат не помещается в приемнике, т.е. произойдет перенос. 2) PF=1; если результат имеет четное число битов с 1. 3) AF=1, если результат сложения десятичных чисел требует коррекции. 4) ZF=1, если результат =0. 5) SF= 1, если результат отрицателен. 6) OF=1, если при сложении 2-х чисел одного знака результат превышает диапазон допустимых значений в обратном коде, а сам приемник меняет знак. SF и OF имеют смысл при сложении чисел со знаком, AF – для десятичных чисел. Вычитание двоичных чисел без знака Команды вычитания выполняют вычитание, по рассмотренным алгоритмам, а учёт особых ситуаций должен производиться самим разработчиком программного продукта. К командам вычитания относят: – DEC <операнд> – операция декремента. Флаг CF не затрагивается, а остальные арифметические флаги (OF, SF, ZF, AF, PF) устанавливаются в соответствии с результатом вычитания. – SUB <операнд_1>,<операнд_2> – команда вычитания; Принцип действия: операнд_1=операнд_1-операнд_2. Нельзя использовать переменную одновременно и для операнд_2, и для операнд_1. Команда SUB не делает различий между числами со знаком и без знака. – SBB <операнд_1>,<операнд_2> – команда вычитания с учётом заёма (флага cf). Принцип действия: операнд_1=операнд_1-операнд_2-значение_cf.
Пример: вычтем из одного 64-битного числа, хранящегося в EDX:EAX другое, хранящееся в ЕВХ:ЕСХ. Sub eax,ecx Sbb edx,ebx Если при вычитании младших двойных слов произошел заем, то он будет учтен при вычитании старших. Пример: в регистр al поместить результат вычитания 5-10.
Факт того, что в al записано отрицательное число, отражён в состоянии флага cf. Вычитание двоичных чисел со знаком Вычитание в микропроцессоре производится путём сложения. Результат вычитания нужно рассматривать как значение в дополнительном коде. Например: -45-45=-90 -45=11010011 + -45=11010011 = -90=10100110 число в дополнительном коде. +00000001 =010110102 =9010
Умножение двоичных чисел без знака Для умножения чисел без знака предназначена команда: MUL <источник>; Выполняет умножение содержимого источника (регистр или переменная) и регистра AL, АХ, ЕАХ (в зависимости от размера источника) и помещает результат в АХ, DX:AX, EDX:EAX соответственно. Произведение имеет двойной размер.
Размер Источник Результат
Если АН, DX, EDX содержит только нули, то флаги CF=0 и OF=0, иначе — в 1. Например, умножим содержимое регистра al (25) на 45.
|
||||||
|
Последнее изменение этой страницы: 2016-09-13; просмотров: 968; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.147 (0.011 с.) |