Слайд 2
Инструкции сложения ADD и вычитания SUB
Команда ADD
требует двух операндов, как и команда MOV:
ADD ol
, о2
Команда ADD складывает оба операнда и записывает результат в ol, предыдущее значение которого теряется.
Слайд 3
Инструкции сложения ADD и вычитания SUB
Точно так
же работает команда вычитания — SUB:
SUB ol ,
o2
Результат, ol-o2, будет сохранен в ol, исходное значение ol будет потеряно.
Слайд 5
Размеры переменных
Бит (bit) - двоичный разряд.
Байт (byte) - последовательность
из 8 бит.
Слово (word) - последовательность из двух байт (16
бит).
Двойное слово (double word) - последовательность из четырех байт (32 бита).
Слайд 6
Проверяем, понимаете ли вы, что происходит
Слайд 7
Что получится в результате?
?
Слайд 8
Что получится в результате?
Слайд 9
Команды инкрементирования INC и декрементирования DEC
Команда INC добавляет,
a DEC вычитает единицу из единственного операнда. Допустимые типы
операнда — такие же, как у команд ADD и SUB, а формат команд таков:
Слайд 11
Отрицательные числа — целые числа со знаком
Один
байт может содержать числа в диапазоне от 0 до
255.
Код дополнения заменяет этот диапазон другим — от -128 до 127.
Положительные
отрицательные
???
Слайд 12
Решение – маппинг!
Диапазон от 0 до 127 отображается
сам на себя,
отрицательным числам сопоставляется диапазон от 128
до 255:
числу -1 соответствует число 255,
числу -2 — 254 и т.д.
Процесс отображения отрицательных чисел в дополнительный код иногда называют маппингом
Слайд 14
Команды для работы с отрицательными числами. Команда NEG
Используя NEG, вы можете преобразовывать положительное целое число в
отрицательное и наоборот.
Инструкция NEG имеет только один операнд, который может быть регистром или адресом памяти.
Размер операнда — лю бой: 8, 16 или 32 бита.
NEG eax
NEG byte [number]
Слайд 15
Целочисленное умножение и деление (команды MUL, DIV).
Операции
умножения и деления имеют свою специфику. В результате умножения
двух чисел мы можем получить число, диапазон которого будет в два раза превышать диапазон операндов.
Деление целых чисел — это операция целочисленная, поэтому в результате образуются два значения: частное и остаток.
С целью упрощения реализации команд умножения и деления эти команды спроектированы так, что один из операндов и результат находятся в фиксированном регистре, а второй операнд указывается программистом.
Слайд 16
Что куда заносим?
В 8-разрядной форме операнд может быть
любым 8-битным регистром или адресом памяти. Второй операнд всегда
хранится в AL. Результат (произведение) будет записан в регистр АХ
Слайд 17
Что куда заносим?
В 16-разрядной форме операнд может быть
любым 16-битным регистром или адресом памяти. Второй операнд всегда
хранится в АХ. Результат сохраняется в паре DX:AX
Слайд 18
Что куда заносим?
В 32-разрядной форме второй операнд находится
в регистре ЕАХ, а результат записывается в пару EDX.EAX.
Слайд 20
Команда IMUL
Команда IMUL умножает целые числа со знаком
и может использовать один, два или три операнда.
Когда
указан один операнд, то поведение IMUL будет таким же, как и команды MUL, просто она будет работать с числами со знаком.
Если указано два операнда, то инструкция IMUL умножит первый операнд на второй и сохранит результат в первом операнде, поэтому первый операнд всегда должен быть регистром. Второй операнд может быть регистром, непосредственным значением или адресом памяти.
Слайд 22
А что, если три?
Если указано три операнда, то
команда IMUL перемножит второй и третий операнды, а результат
сохранит в первый операнд.
Первый операнд — только регистр, второй может быть любого типа, а третий должен быть только непосредственным значением:
Слайд 24
Команды DIV и IDIV
В 8-битной форме переменный операнд
(делитель) может быть любым 8-битным регистром или адресом памяти.
Делимое содержится в АХ. Результат сохраняется так: частное — в AL, остаток — в АН.
Слайд 25
Команды DIV и IDIV
В 16-битной форме операнд может
быть любым 16-битным регистром или адресом памяти. Второй операнд
всегда находится в паре DX:AX. Результат сохраняется в паре DX:AX (DX — остаток, АХ — частное).
Слайд 26
Команды DIV и IDIV
В 32-разрядной форме делимое находится
в паре EDX:EAX, а результат записывается в пару EDX:EAX
(частное в ЕАХ, остаток в EDX).
Слайд 27
Команда IDIV используется для деления чисел со знаком,
синтаксис ее такой же, как у команды DIV.