КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
IMUL – команда умножения со знаком
MUL – беззнаковое умножение КОМАНДА СЛОЖЕНИЯ INC КОМАНДА NEG КОМАНДА ВЫЧИТАНИЯ DEC КОМАНДА ВЫЧИТАНИЯ С ЗАЁМОМ SBB КОМАНДА ВЫЧИТАНИЯ SUB
SUB OP1,OP2 OP1:=OP1-OP2 В обычном процессоре отсутствует вычитатель, и поэтому к первому операнду прибавляется второй с противоположным знаком ==> OP1:=OP1+(-OP2) SUB AL,BL AL=5=05h= 0.0000101b BL=18=12h=0.0010010b | изменение знака V OF SF ZF AF PF CF 1.1101110b ┌──┬──┬──┬──┬──┬──┐ 0.0000101b │ 0│ 1│ 0│ *│ 1│ 0│ ---------- └──┴──┴──┴──┴──┴──┘ 1.1110011b дк ---------- 1.0001101b пк = -13 Все флаги формируются по правилу сложения чисел со знаком.
SBB OP1,OP2 OP1:=OP1-OP2-CF Используется для вычитания чисел, длина которых превышает слово.
DEC OP – однооперандная OP:= OP – 1 Команда формирует все флаги, кроме флага переноса CF (который не определен).
NEG OP OP:= –OP – инвертирует операнд
INC OP OP:= OP + 1 Команда формирует все флаги, кроме флага переноса CF (который не определён).
mul OP───┬──>регистр └──>ячейка памяти mul 5 – недопустимая команда
В команде явно присутствует второй операнд, по умолчанию первый операнд – регистр AL или AX. Использование непосредственного операнда запрещено, т. к. неизвестно, какая должна быть у него длина (8 или 16 бит).
mul BH ┌───┐ ------ └───┘AL ;AX:= AL * BH * ┌───┐ └───┘BH ───────── ┌───┬───┐ └───┴───┘AX
mul BX ┌───┬───┐ ------ └───┴───┘AX * ┌───┬───┐
;(DX:AX):= AX * BX └───┴───┘BX ────────────────── ┌───┬───┐┌───┬───┐ └───┴───┘└───┴───┘ DX AX
Пусть мы имеем два максимальных двузначных десятичных числа
99 * 99 = 9801
Перемножение двузначного на двузначное дает число не более четырёх цифр. Диапазон байта 0..255 0..(28 - 1) (28 - 1) * (28 - 1) = 65025, а диапазон слова: 0..65535 0..(216 - 1) Т. к. при умножении формируется результат удвоенной длины, то физическое переполнение невозможно. Однако именно в команде умножения формируются синхронно два флага CF и OF. Значение '1' определяет ситуацию переполнения, которая сигнализирует о том, что значение произведения превышает длину исходных операндов.
Пример: ┐ AL=25│ * ├─0..255 BH=25│ ┘ ─────── AX=625 ┌───┬───┐ │ 02│ 71│-> CF=1, OF=1 └───┴───┘ Обычно при выполнении вычислений используются операнды одной длины. Если это байты, тогда если при умножении не возникает переполнения, то в качестве результата можно использовать его младшую половину.
15 * 15 = 225 = E1h
┌───┐ │ 0F│AL └───┘ * ┌───┐ │ 0F│BH └───┘ ───────── ┌───┬───┐ ┌──│ 00│ E1│AX │ └───┴───┘ V └─┬─┘ OF=0 └──────>результат в AL CF=0 Все остальные флаги в команде формируются хаотично.
imul OP – умножение знаковых операндов
-------
Алгоритмы умножения беззнаковых чисел и знаковых чисел отличаются, что потребовало двух команд умножения. Команда выполняется аналогично mul, при умножении автоматически формируются знак результата. Отличие состоит в правилах формирования флага переполнения
(-128..127) – диапазон байта
При выходе результата за диапазон байта формируется переполнение:
15 * 15 = 225 = E1h | (-15) * 15 =-225 =-Е1h=1Fhдк ┌───┐ ┐ | ┌───┐ │ 0F│ AL│ | │ F1│ AL └───┘ │ | └───┘ * ┌───┐ │ | ┌───┐ │ OF│ BH│ | │ 0F│ BH └───┘ ├─┐ | └───┘ ───────── │ V | ───────── ┌───┬───┐ │ знаковые | ┌───┬───┐ ┌───│ 00│ E1│ AX│ величины | │ FF│ 1F│ AX │ └───┴───┘ ┘ | └───┴───┘ V └─┬─┘ | Если цифровая часть резуль- CF=1 ┌────────┐ | тата помещается в младшем бай- OF=1 │11100001│ | те, то все биты старшего байта └────────┘ можно рассматривать как знаковые разряды. При этом если знаковый разряд младшего байта отличается от любого бита старшего байта, то это указывает на ситуацию переполнения. ┌───┬───┐ │ FF 1F│ AX └───┴───┘ AX | | AL ┌────────┐ ┌────────┐ │11111111│ │00011111│ └────────┘ └────────┘
Дата добавления: 2014-01-04; Просмотров: 502; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |