Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lec_10-12.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
172.54 Кб
Скачать

Множення.

Операція множення для без знакових даних виконується командою MUL, а для знакових – IMUL (integer Multiplication) – множення цілих чисел. Контроль над форматом чисел і вибір команди множення повинен здійснювати сам програміст.

Множення байт на байт . Множення знаходиться в регістрі AL, а множник – в байті пам’яті або в однобайтовому регістрі. Тоді результат буде розміщений в регістрі AX.

Множення слова на слово. Множення знаходиться в AX, множник – в слові пам’яті або в регістрі. Після перемноження добуток утворюється в подвійному слові: в DX – старше слово; в AX – молодше.

Команди MUL і IMUL мають один операнд, в якому вказується множник: MUL MULTR.

Якщо поле MULT визначено як байт (DB), то операція передбачає множення вмісту регістру AX на слово з MULTER. Якщо множник знаходиться в регістрі , то довжина регістру визначає тип операції.

Якщо перемножуються слово на байт з допомогою без знакової команди MUL, то розширення байту до слова здійснюється шляхом очистки старшого байту командою SUB AH, AH, а не CBW, яка заповнює старший байт знаковим розрядом.

При здійснені множення операндів із знаком використовується команда IMUL, яка виконується аналогічно команді MUL тільки в старшому розряді відображає знак результату. Крім того, при розширені байту до слова, якщо множиться слово на байт, потрібно використовувати команду CBW, яка заповнює старший байт значенням знакового розряду вихідного однобайтного операнду.

Множення на число рівне цілому степеню числа 2 (2, 4, 8, 16 і т. д) еквівалентне зсуву значення множеного вліво на число розрядів рівне степеню двійки числа множника.

00010011 100 = 01001100

Команди зсуву.

ROL RCL

ROR RCR

SHL,. SAL SHR

SAR

Багатослівне множення.

При множені операндів, значення яких перевищують слово використовується перемноження по словах:

1 операнд 01 05 AB CE 1. ABCE 2. 0105 3. ABCE 4. 0105

2 операнд 00 E1 C1 A9 C1A9 C1A9 00E1 00E1

D ob 1 Dob 2 0000 Dob 3 0000 Dob 400000000

0105 Результат: Dob1  

00E1 Dob2 0000   0000

Dob 4 00000000 Dob3 0000   0000

Dob4 0000 0000   0000 0000

      

При здійснені додавання добутків необхідно уважно слідувати за бітами переносу, які можуть виникнути при додаванні слів. Це біти переносу необхідно враховувати при додаванні старших слів результатів добутку. Необхідно пам’ятати, що при занесенні результатів добутків в пам’ять по молодшій адресі записується молодший байт слова, а по наступній адресі – старший байт слова.

Ділення.

DIV – команда ділення без знакових даних.

IDIV – команда ділення знакових чисел.

Для ділення 1- байтних чисел, 8 – розрядне ділене, що знаходиться в регістрі AL попередньо розширяється до 16 – розрядів командою CBW. При цьому регістр AH заповнюється значенням старшого розряду рег. AL. В результаті виконання команди частка знаходиться в AL, а залишок – в AH.

Для ділення 2 – байт них чисел ділене в регістрі AX розширюється до 32 – розрядів в регістрі DX за допомогою команди CWD. Регістр DX заповнюється старшим розрядом рег. АХ.

Якщо дільник = 0, процесор формує ознаку переривання ділення на нуль.

Команди множення і ділення не впливають на плаги OF і CF. Проте якщо значення дільника більше за значення старшого байту діленого – при ділені слова на байт (або за значення старшого слова діленого – при ділені подвійного слова на слово), то результат операцій ділення буде невірним, оскільки його значення не поміщається в регістр AL (AX).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]