- •Тема №10. Арифметичні операції. Обробка двійкових даних.
- •Приклад
- •Прямі, обернені і доповнюючі коди
- •Аналіз переповнення.
- •Множення.
- •Багатослівне множення.
- •Ділення.
- •Перетворення знаку.
- •Тема №11 Обробка даних в форматах ascii та bcd.
- •Для округлення числа додається число 5 старшого, що відкидається і зсунути результат на кількість розрядів що відкидається. Приклад
- •Тема №12. Обробка таблиць.
- •Приклад програми, яка визначає інвентарну таблицю з 6 рядків і виконує табличний пошук.
- •Title tabsrch (com) Табличний пошук.
Множення.
Операція множення для без знакових даних виконується командою 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).
