Арифметические операции

Содержание

Слайд 2

Инструкции сложения ADD и вычитания SUB Команда ADD требует двух операндов,

Инструкции сложения ADD и вычитания SUB

Команда ADD требует двух операндов,

как и команда MOV:
ADD ol , о2
Команда ADD складывает оба операнда и записывает результат в ol, предыдущее значение которого теряется.
Слайд 3

Инструкции сложения ADD и вычитания SUB Точно так же работает команда

Инструкции сложения ADD и вычитания SUB

Точно так же работает команда

вычитания — SUB:
SUB ol , o2
Результат, ol-o2, будет сохранен в ol, исходное значение ol будет потеряно.
Слайд 4

Например…

Например…

Слайд 5

Размеры переменных Бит (bit) - двоичный разряд. Байт (byte) - последовательность

Размеры переменных

Бит (bit) - двоичный разряд.  Байт (byte) - последовательность из 8 бит.  Слово (word)

- последовательность из двух байт (16 бит).  Двойное слово (double word) - последовательность из четырех байт (32 бита).
Слайд 6

Проверяем, понимаете ли вы, что происходит

Проверяем, понимаете ли вы, что происходит

Слайд 7

Что получится в результате? ?

Что получится в результате?

?

Слайд 8

Что получится в результате?

Что получится в результате?

Слайд 9

Команды инкрементирования INC и декрементирования DEC Команда INC добавляет, a DEC

Команды инкрементирования INC и декрементирования DEC

Команда INC добавляет, a DEC вычитает

единицу из единственного операнда. Допустимые типы операнда — такие же, как у команд ADD и SUB, а формат команд таков:
Слайд 10

Например…

Например…

Слайд 11

Отрицательные числа — целые числа со знаком Один байт может содержать

Отрицательные числа — целые числа со знаком

Один байт может содержать

числа в диапазоне от 0 до 255.
Код дополнения заменяет этот диапазон другим — от -128 до 127.

Положительные

отрицательные

???

Слайд 12

Решение – маппинг! Диапазон от 0 до 127 отображается сам на

Решение – маппинг!

Диапазон от 0 до 127 отображается сам на себя,


отрицательным числам сопоставляется диапазон от 128 до 255:
числу -1 соответствует число 255,
числу -2 — 254 и т.д.
Процесс отображения отрицательных чисел в дополнительный код иногда называют маппингом
Слайд 13

Например…

Например…

Слайд 14

Команды для работы с отрицательными числами. Команда NEG Используя NEG, вы

Команды для работы с отрицательными числами. Команда NEG

Используя NEG, вы

можете преобразовывать положительное целое число в отрицательное и наоборот.
Инструкция NEG имеет только один операнд, который может быть регистром или адресом памяти.
Размер операнда — лю­ бой: 8, 16 или 32 бита.
NEG eax
NEG byte [number]
Слайд 15

Целочисленное умножение и деление (команды MUL, DIV). Операции умножения и деления

Целочисленное умножение и деление (команды MUL, DIV).

Операции умножения и деления

имеют свою специфику. В результате умножения двух чисел мы можем получить число, диапазон которого будет в два раза превышать диапазон операндов.
Деление целых чисел — это операция целочисленная, поэтому в результате образуются два значения: частное и остаток.
С целью упрощения реализации команд умножения и деления эти команды спроектированы так, что один из операндов и результат находятся в фиксированном регистре, а второй операнд указывается программистом.
Слайд 16

Что куда заносим? В 8-разрядной форме операнд может быть любым 8-битным

Что куда заносим?

В 8-разрядной форме операнд может быть любым 8-битным регистром

или адресом памяти. Второй операнд всегда хранится в AL. Результат (произведение) будет записан в регистр АХ
Слайд 17

Что куда заносим? В 16-разрядной форме операнд может быть любым 16-битным

Что куда заносим?

В 16-разрядной форме операнд может быть любым 16-битным регистром

или адресом памяти. Второй операнд всегда хранится в АХ. Результат сохраняется в паре DX:AX
Слайд 18

Что куда заносим? В 32-разрядной форме второй операнд находится в регистре

Что куда заносим?

В 32-разрядной форме второй операнд находится в регистре ЕАХ,

а результат записывается в пару EDX.EAX.
Слайд 19

Например…

Например…

Слайд 20

Команда IMUL Команда IMUL умножает целые числа со знаком и может

Команда IMUL

Команда IMUL умножает целые числа со знаком и может использовать

один, два или три операнда.
Когда указан один операнд, то поведение IMUL будет таким же, как и команды MUL, просто она будет работать с числами со знаком.
Если указано два операнда, то инструкция IMUL умножит первый операнд на второй и сохранит результат в первом операнде, поэтому первый операнд всегда должен быть регистром. Второй операнд может быть регистром, непосредственным значением или адресом памяти.
Слайд 21

Например…

Например…

Слайд 22

А что, если три? Если указано три операнда, то команда IMUL

А что, если три?

Если указано три операнда, то команда IMUL перемножит

второй и третий операнды, а результат сохранит в первый операнд.
Первый операнд — только регистр, второй может быть любого типа, а третий должен быть только непосредственным значением:
Слайд 23

Например…

Например…

Слайд 24

Команды DIV и IDIV В 8-битной форме переменный операнд (делитель) может

Команды DIV и IDIV

В 8-битной форме переменный операнд (делитель) может быть

любым 8-битным регистром или адресом памяти. Делимое содержится в АХ. Результат сохраняется так: частное — в AL, остаток — в АН.
Слайд 25

Команды DIV и IDIV В 16-битной форме операнд может быть любым

Команды DIV и IDIV

В 16-битной форме операнд может быть любым 16-битным

регистром или адресом памяти. Второй операнд всегда находится в паре DX:AX. Результат сохраняется в паре DX:AX (DX — остаток, АХ — частное).
Слайд 26

Команды DIV и IDIV В 32-разрядной форме делимое находится в паре

Команды DIV и IDIV

В 32-разрядной форме делимое находится в паре EDX:EAX,

а результат записывается в пару EDX:EAX (частное в ЕАХ, остаток в EDX).
Слайд 27

Команда IDIV используется для деления чисел со знаком, синтаксис ее такой же, как у команды DIV.

Команда IDIV используется для деления чисел со знаком, синтаксис ее такой

же, как у команды DIV.
Слайд 28

Например…

Например…

Слайд 29

Например..

Например..