Студопедия

КАТЕГОРИИ:


Архитектура-(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; Просмотров: 414; Нарушение авторских прав?;


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



ПОИСК ПО САЙТУ:


Читайте также:
studopedia.su - Студопедия (2013 - 2022) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление
Генерация страницы за: 0.024 сек.