Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Вычитание двоичных чисел без знакаСодержание книги
Поиск на нашем сайте
Команды вычитания выполняют вычитание, по рассмотренным алгоритмам, а учёт особых ситуаций должен производиться самим разработчиком программного продукта. К командам вычитания относят: – 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=1 10100110 в приёмнике число в дополнительном коде. (sf=1; of=1;) +00000001 =010110102 =9010
Умножение двоичных чисел без знака Для умножения чисел без знака предназначена команда: MUL <источник>; Выполняет умножение содержимого источника (регистр или переменная) и регистра AL, АХ, ЕАХ (в зависимости от размера источника) и помещает результат в АХ, DX:AX, EDX:EAX соответственно. Произведение имеет двойной размер.
Размер Источник Результат (приёмник)
Если АН, DX, EDX содержит только нули, то флаги CF=0 и OF=0, иначе — в 1. Например, умножим содержимое регистра al (25) на 45.
Умножение двоичных чисел со знаком – IMUL <операнд_1>[, операнд_2, операнд_3]; умножение чисел со знаком. Эта команда имеет три формы, различающиеся числом операндов: 1) IMUL <операнд_1>: операнд_1 (регистр или переменная) умножается на AL, АХ или ЕАХ (в зависимости от размера операнда), и результат располагается в АХ, DX:AX или EDX:EAX соответственно. 2) IMUL <операнд_1>,<операнд_2>: операнд_2 (число, регистр или переменная) умножается на операнд_1 (регистр), и результат заносится в операнд_1. 3) IMUL <операнд_1>,<операнд_2>,<операнд_3>: операнд_2 (регистр или переменная) умножается на операнд_3 (число), и результат заносится в операнд_1 (регистр). Произведение имеет двойной размер В первом случае приемник (регистры АХ, DX:AX или EDX:EAX) всегда больше операнд_1. Если результат мал и умещается в одном регистре (то есть если cf=of=0), то содержимое другого регистра (старшей части) является расширением знака – все его биты равны старшему биту (знаковому разряду) младшей части результата. В противном случае (если cf=of=1) знаком результата является знаковый бит старшей части результата, а знаковый бит младшей части является значащим битом двоичного кода результата.
Пример: mul bl;al*bl, результат в Ах. Пример: mul bx;ax*bx, результат Dx:Ax.
Лекция №5. Арифметические команды над целыми числами (продолжение). Арифметические операции над двоично-десятичными числами (BCD числами) Деление двоичных чисел без знака. Для деления чисел без знака предназначена команда: – DIV <делитель>; Команда выполняет целочисленное деление без знака АХ, DX:AX или EDX:ЕАХ (в зависимости от размера делителя) на делитель (регистр или переменная) и помещает результат в AL, АХ или ЕАХ, а остаток — в АН, DX или EDX соответственно.
Расположение операндов и результата при делении
Пример: div bl;ax/bl, результат в Al,Ah. Пример: div bx; (Dx:Ax)/Bx, результат Ax,Dx. Источник (делитель) может быть: 1. 8-бит регистр (al, ah, cl,...) 2. 16-бит регистр (ax, dx,...) 3. 32-бит регистр (eax, edx, ecx...) 4. 8-бит значение из памяти (byte ptr [xxxx]) 5. 16-бит значение из памяти (word ptr [xxxx]) 6. 32-бит значение памяти (dword ptr [xxxx]) Прерывание 0 – «деление на 0» – при выполнении команды div может возникнуть по одной из следующих причин: 1) делитель равен 0; 2) частное не входит в отведённую под него разрядную сетку, что может случиться в следующих случаях: – при делении слова на байт значение делимого в более чем 256 раз больше значения делителя; – при делении двойного слова на слово делимое в более чем 65536 раз больше значения делителя; – при делении учетверённого слова на двойное слово делимое в более чем 4 294 967 296 раз больше значения делителя. Пример:
|
||||||||||||||||||||||
Последнее изменение этой страницы: 2016-09-13; просмотров: 413; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.137.181.69 (0.007 с.) |