-
Notifications
You must be signed in to change notification settings - Fork 1
11. Арифметические команды.
ADD <приемник>, <источник> — сложение. Не делает различий между знаковыми и беззнаковыми числами.
ADC <приемник>, <источник> — сложение с переносом. Складывает приёмник, источник и флаг CF.
SUB <приемник>, <источник> — вычитание. Не делает различий между знаковыми и беззнаковыми числами.
SBB <приемник>, <источник> — вычитание с займом. Вычитает из приёмника источник и дополнительно - флаг CF.
Флаг CF можно рассматривать как дополнительный бит у результата.
.
Можно использовать ADC и SBB для сложения вычитания и больших чисел, которые по частям храним в двух регистрах.
Пример: Сложим два 32-битных числа. Пусть одно из них хранится в паре регистров DX:AX (младшее двойное слово - DX, старшее AX). Другое в паре BX:CX
add ax, cx
adc dx, bx
Если при сложении двойных слов произошел перенос из старшего разряда, то это будет учтено командой adc.
Эти 4 команды (ADD, ADC, SUB, SBB) меняют флаги: CF, OF, SF, ZF, AF, PF
MUL <источник> — выполняет умножение чисел без знака. <источник> не может быть число (нельзя: MUL 228). Умножает регистр AX (AL), на <источник>. Результат остается в AX, либо DX:AX, если не помещается в AX.
IMUL — умножение чисел со знаком.
- IMUL <источник>. Работает так же, как и MUL
- IMUL <приёмник>, <источник>. Умножает источник на приемник, результат в приемник.
- IMUL <приёмник>, <источник1>, <источник2>. Умножает источник1 на источник2, результат в приёмник.
Флаги: OF, CF
DIV <источник> — выполняет деление чисел без знака. <источник> не может быть число (нельзя: DIV 228). Делимое должно быть помещено в AX (или DX:AX, если делитель больше байта). В первом случае частное в AL, остаток в AH, во втором случае частное в AX, остаток в DX.
IDIV <источник> — деление чисел со знаком. Работает так же как и DIV. Окруление в сторону нуля, знак остатка совпадает со знаком делимого.
INC <приемник> — увеличивает примник на 1.
DEC <приемник> — уменьшает примник на 1.
Меняют флаги: OF, SF, ZF, AF, PF
NEG <применик> — меняет знак приемника.
Меня всегда можно найти в Telegram: @mrrvz
-
Выполнение программы. Машинный код. Исполняемые файлы. Язык ассемблера.
-
Виды переходов. Условные, безусловные переходы. Короткий, ближний, дальний переход.
-
Стек. Регистры, связанные со стеком. Команды записи/извлечения из стека.
-
Стек. Использование при вызове подпрограмм. Команды вызоваподпрограммы и возврата.
-
Прерывания. Назначение, виды прерываний. Таблица векторов прерываний.
-
Срабатывание прерывания. Обработчик прерывания в реальном режиме. Возврат из обработчика прерывания.
-
Модели памяти в защищённом режиме. Регистры управления памятью. Страничное преобразование.
-
Математический сопроцессор. Типы данных. Представление вещественных чисел.