Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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; просмотров: 836; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.137.198.143 (0.01 с.) |