- •Лекции 17 -
- •Структура машинной
- •Структура машинной команды
- •Структура машинной команды
- •Структура машинной команды
- •Структура машинной команды
- •Сочетания операндов
- •Система команд
- •Система команд
- •Команды пересылки
- •Команды пересылки данных
- •Команды пересылки данных
- •Команды пересылки данных
- •Команды пересылки данных
- •Команды пересылки данных
- •Команды пересылки
- •Команды пересылки
- •Команды пересылки данных
- •Команды пересылки данных
- •Команды пересылки
- •Команды пересылки данных
- •Команды пересылки данных
- •Прочие команды
- •Прочие команды
- •Прочие команды
- •Команды загрузки сегментных регистров
- •Команды ввода – вывода
- •Команды ввода – вывода
- •Команды ввода – вывода
- •Команды ввода – вывода
- •Команды обработки строк
- •Команды обработки строк
- •Команды обработки строк
- •Команды обработки строк
- •Команды обработки строк
- •Команды обработки строк
- •Арифметические команды
- •Арифметические команды
- •Арифметические команды
- •Арифметические команды
- •Арифметические команды
- •Арифметические команды
- •Арифметические команды
- •Арифметические команды
- •Арифметические команды
- •Арифметические команды
- •Логические команды
- •Логические команды
- •Логические команды
- •Логические команды
- •Логические команды
- •Команды сдвигов
- •Команды сдвигов
- •Команды сдвигов
- •Команды сдвигов
- •Команды сдвигов
- •Команды сдвигов
- •Команды сдвигов
- •Команды сдвигов
- •Команды сдвигов
- •Команды обработки бит
- •Команды обработки бит
- •Команды обработки бит
- •Команды обработки бит
- •Команды обработки бит
- •Команды обработки бит
- •Команды работы с регистром флагов
- •Команды передачи управления
- •Команды передачи управления
- •Команды передачи управления
- •Команды передачи управления
- •Команды передачи управления
- •Команды передачи
- •Команды передачи управления
- •Команды передачи управления
- •Команды передачи управления
- •Команды передачи управления
- •Пример 1
- •Пример 1
- •Пример 1
- •Пример 1
- •Пример 2
- •Пример 2
- •Пример 2
- •Пример 2
- •Пример 2
- •Пример 2
- •Пример 3
- •Пример 3
- •Пример 3
- •Пример 3
- •Пример 3
- •Пример 3
Арифметические команды
Команда незнакового умножения: MUL множитель
Множителем может быть:
8-разрядный регистр или ячейка памяти: AX = AL * множитель, 16-разрядный регистр или ячейка памяти: DX:AX = AX * множитель, 32-разрядный регистр или ячейка памяти: EDX:EAX = EAX * множитель
Флаги OF и CF устанавливаются в 1, если старшая часть результата не равна 0. В противном случае – в ноль.
Примеры:
mul |
ch |
mul |
word ptr [edi] |
mul |
ecx |
|
|
Арифметические команды
Команда знакового умножения: IMUL множитель
IMUL назначение, источник
IMUL назначение, источник1, источник2
1 вариант: совпадает с MUL
2 вариант: назначение = назначение * источник, назначение – РОН, источник – РОН, ячейка памяти, непосредственное значение
3 вариант: назначение = источник1 * источник2,
назначение – РОН, источник1 – РОН, ячейка памяти, источник2 – непосредственное значение.
Примеры:
imul |
cx |
imul |
eax, dword ptr [esi] |
imul |
eax, edx, 100 |
|
|
Арифметические команды
Команда незнакового деления: DIV делитель
Делитель может быть РОН или ячейкой памяти.
Если делитель 8-разрядный, то AX / делитель → AL – частное, AH – остаток.
Если делитель 16-разрядный, то DX:AX / делитель → AX – частное, DX
– остаток.
Если делитель 32-разрядный, то EDX:EAX / делитель → EAX – частное, EDX – остаток.
Примеры:
div |
cl |
div |
word ptr [edi] |
div |
ebx |
|
|
Арифметические команды
Команда знакового деления: IDIV делитель
Делитель может быть РОН или ячейкой памяти.
Если делитель 8-разрядный, то AX / делитель → AL – частное, AH – остаток.
Если делитель 16-разрядный, то DX:AX / делитель → AX – частное, DX
– остаток.
Если делитель 32-разрядный, то EDX:EAX / делитель → EAX – частное, EDX – остаток.
Примеры:
idiv |
cl |
idiv |
word ptr [edi] |
idiv |
ebx |
|
|
Арифметические команды
Команда инкремента: INC значение
Команда декремента: DEC значение
Значение может быть РОН или ячейкой памяти 8-, 16- или 32- разрядности.
Не оказывает влияния на CF, остальные флаги устанавливаются в зависимости от полученного результата.
Пример:
inc |
edx |
dec |
es:[edi] |
|
|
Арифметические команды
Команда арифметического отрицания: NEG значение
Равнозначна вычитанию из 0. Значение может быть РОН или ячейкой памяти 8-, 16- или 32-разрядности.
CF устанавливается в 0, если операнд равен 0. В противном случае CF устанавливается в 1. Остальные флаги устанавливаются согласно результату.
Команда сравнения: |
|
CMP |
операнд1, операнд2 |
Вычитает из первого операнда второй операнд без сохранения результата, устанавливает флаги в соответствии с результатом.
Первый операнд может быть РОН или ячейкой памяти, второй операнд – РОН, ячейкой памяти или непосредственным значением. Оба операнда не могут быть одновременно ячейками памяти.
Логические команды
Команда побитового «И»
AND назначение, источник
Назначение: РОН, память.
Источник: РОН, память, непосредственное значение.
Оба операнда не могут быть одновременно памятью
Флаги CF и OF очищаются, флаги ZF, SF, PF устанавливаются в соответствии с результатом.
Примеры:
and |
al, ah |
and |
eax, es:[edi] |
and |
word ptr es:[edi], 200 |
and |
dx, 0ff00h |
|
|
Логические команды
Команда побитового «ИЛИ»
OR назначение, источник
Назначение: РОН, память.
Источник: РОН, память, непосредственное значение.
Оба операнда не могут быть одновременно памятью
Флаги CF и OF очищаются, флаги ZF, SF, PF устанавливаются в соответствии с результатом.
Примеры:
or |
al, dh |
or |
eax, ds:[esi] |
or |
word ptr es:[edi], 200 |
or |
dx, 7777h |
|
|
Логические команды
Команда побитового «Исключающее ИЛИ» XOR назначение, источник
Назначение: РОН, память.
Источник: РОН, память, непосредственное значение.
Оба операнда не могут быть одновременно памятью
Флаги CF и OF очищаются, флаги ZF, SF, PF устанавливаются в соответствии с результатом.
Примеры:
xor |
al, dh |
xor |
eax, ds:[esi] |
xor |
word ptr es:[edi], 200 |
xor |
dx, 7777h |
|
|
Логические команды
Команда побитового отрицания: NOT назначение
Назначение: РОН или память Не оказывает влияния на регистр флагов
Примеры:
not edx not ds:[ebx]