Арифметические команды. (Лекция 10)

Слайд 2


Вычитание:
обычное - SUB,
вычитание с заемом - SBB,
декрементация (-1)

Вычитание: обычное - SUB, вычитание с заемом - SBB, декрементация (-1) –
– DEC.
Команда Выполнение команды процессором:
sub bx, 4 ; bx ← bx –4
sbb ds:[8], cl ; ds:[8]←ds:[8]– cl - CF
dec ax ; ax ← ax - 1

Слайд 3


Сравнение: CMP
Команда Выполнение команды процессором:
cmp ax, 7 ; ах

Сравнение: CMP Команда Выполнение команды процессором: cmp ax, 7 ; ах -
- 7
При выполнении команды сравнения CMP процессор вычисляет разность между первым и вторым операндом, которая никуда не записывается.
Результат команды являются установленные арифметические флаги, по которым можно судить о соотношении этих величин.

Слайд 4


Изменение знака числа: NEG
Команда Выполнение команды процессором:
neg edx ;

Изменение знака числа: NEG Команда Выполнение команды процессором: neg edx ; edx
edx ← 0 - edx
Изменение знака числового операнда получается вычитанием его из нуля.

Слайд 5


Умножение:
беззнаковых – MUL, знаковых – IMUL
Команды имеют один явный

Умножение: беззнаковых – MUL, знаковых – IMUL Команды имеют один явный операнд.
операнд. Второй - по умолчанию.
Произведение размещается процессором в определенных регистрах (см.описание команды в системе команд)
Важно!
- форматы операндов должны быть одинаковые
- формат произведения получится в два раза длиннее

Слайд 6

Пример. Получить произведение 258 на 7
Выбор формата операндов – слова.
Один из

Пример. Получить произведение 258 на 7 Выбор формата операндов – слова. Один
операндов по умолчанию надо разместить в АХ
mov сx, 258 ; 1-й операнд в сх
mov ax, 7 ; 2-й операнд в ах
mul сx ; dx-ax ← ах * сx
Полученное 4-байтное произведение процессор «разложит» по регистрам dx - старшее слово и ax -младшее слово
Ручная отладка: 258*7=180610 = 70е16
Ожидаем 4-х байтное произведение 00 00 07 0e (в hex):
в DX=00 00, в AX - 070e

Слайд 7


Деление (целочисленное):
беззнаковых – DIV, знаковых – IDIV
Команды имеют один

Деление (целочисленное): беззнаковых – DIV, знаковых – IDIV Команды имеют один явно
явно задаваемый операнд - делитель. Делимое берется процессором по умолчанию из определенных регистров (см. систему команд).
Важно !:
- Формат делимого должен быть в 2 раза длиннее формата делителя;