Читайте также:
|
|
Команды умножения — одноадресные. Указывается только SRC (множитель); DST (множимое) берется строго определенным образом.
- MUL src — умножение (multiply — умножение без знака). Выполняет умножение беззнакового множимого (8 или 16 бит) на беззнаковый множитель (8 или 16 бит). Команда одноадресная — указывается только SRC (множитель); DST (множимое) берется строго определенным образом. SRC может быть представлен оператором типа r или m (i — нельзя). Если формат SRC — байт, то множимое (байт) в AL, произведение (слово) будет в АХ; если формат SRC — слово, то множимое (слово) в АХ, произведение (двойное слово) в DX: АХ (старшие два байта в DX, младшие в АХ). Команда MUL формирует флаги CF, OF; воздействует на флаги AF, PF, SF, ZF (флаги не определены).
- IMUL src — целое умножение знаковых чисел (integer multiply — умножение целых со знаком). Выполняет умножение знакового множимого (8 или 16 бит) на знаковый множитель (8 или 16 бит). Команда одноадресная — указывается только SRC (множитель); DST (множимое) берется строго определенным образом. SRC может быть представлен оператором типа г или m (i — нельзя). Если формат SRC — байт, то множимое (байт) в AL, произведение (слово) будет в АХ; если формат SRC — слово, то
множимое (слово) в АХ, произведение (двойное слово) в DX: АХ (старшие два байта в DX, младшие в АХ). Команда IMUL формирует флаги CF, OF; воздействует на флаги AF, PF, SF, ZF (флаги не, определены).
1. Команды деления
Команды деления — одноадресные, указывается только SRC (делитель); DST (делимое) берется строго определенным образом.
- DIV src - деление (divide — деление без знака). Выполняет деление беззнакового делимого (16 или 32 бит) на беззнаковый делитель (8 или 16 бит). Команда одноадресная — указывается только SRC (делитель); DST (делимое) берется строго определенным образом. SRC может быть представлен оператором типа г или m (1 — нельзя). Если формат SRC — байт, то делимое (слово) в АХ, частное от деления (байт) будет в AL, остаток от деления (байт) в АН; если формат SRC — слово, то делимое (двойное слово) в DX: АХ (старшие два байта в DX, младшие в АХ), частное отделения (слово) в АХ, остаток отделения (байт) в DL. Команда DIV формирует флаг IF (IF = 1 при делении на 0 и при делении большого числа на очень малое, если частное вне диапазона); воздействует на флаги AF, CF, OF, PF, SF, ZF (флаги не определены).
- IDIV src — деление целых чисел со знаком (integer divide — деление целых чисел со знаком). Выполняет деление знакового делимого (16 или 32 бит) на знаковый делитель (8 или 16 бит). Команда одноадресная — указывается только SRC (делитель); DST (делимое) берется строго определенным образом. SRC может быть представлен оператором типа г или m (i — нельзя). Если формат SRC -байт, то делимое (слово) в АХ, частное от деления (байт) будет в AL, остаток от деления (байт) в АН; если формат SRC — слово, то делимое (двойное слово) в DX: АХ (старшие два байта в DX, младшие в АХ), частное от деления (слово) в АХ, остаток отделения (байт) в DL. Команда IDIV формирует флаг IF (IF = 1 при делении на 0 и при делении большого числа на очень малое, если частное вне диапазона); воздействует на флаги AF, CF, OF, PF, SF, ZF (флаги не определены).
a. Логические команды
Это двухадресные команды, они используются для сравнения, сброса и установки битов операнда в операциях преобразования кодов и при выполнении арифметических операций в кодах ASCII.
- OR dst,src — логическое сложение (or — или). Команда выполняет поразрядную дизъюнкцию (логическое сложение — операцию «ИЛИ») битов двух операндов; устанавливает 1 в тех битах операнда dst, в которых была 1 хотя бы у одного из исходных операндов. Операнды dst и src должны иметь одинаковый формат (оба или байт, или слово) и могут быть: src типа r, m, i; dst типа r, m (невозможно rsegm и нельзя, чтобы оба типа были m). Команда OR устанавливает OF=0 и CF=0; формирует PF, SF, ZF; значение AF не определено.
- AND dst. src — логическое умножение (and — и). Команда выполняет поразрядную конъюнкцию (логическое умножение — операцию «И») битов двух операндов; устанавливает 1 в тех битах операнда dst, в которых у обоих исходных операндов были 1. Операнды dst и src должны иметь одинаковый формат (оба, или байт, или слово) и могут быть: src типа r, m, i; dst типа r, m (невозможно rsegm и нельзя, чтобы оба типа были m). Флаги: команда устанавливает OF=0 и CF=0; формирует PF, SF, ZF; значение AF не определено.
i. Команды безусловной передачи данных
JMP opr — команда безусловной передачи управления (jump unconditionally — перейти безусловно). Операнд OPR может быть задан прямым или косвенным адресом:
- по прямому адресу: JMP метка
Если метка в том же сегменте, что и команда JMP, переход считается внутренним (near),
если не в том же сегменте — переход внешний (far). В самой команде JMP разницы нет; тип перехода определяется видом метки: после метки для внутреннего перехода ставится двоеточие:. Транслятор по таблице меток и их адресов сам определяет атрибуты near или far и соответственно транслирует команду передачи управления в более короткую или более длинную команду (более длинную, так как надо менять не только содержимое смещения IP, но и регистра сегментов CS). Несколько сократить длину команды может указание программиста «JMP short метка» о том, что метка не далее ±128 байт от команды JMP (это указание не обязательно, но если оно есть и ошибочно, то транслятор выдаст ошибку).
- по косвенному адресу. Косвенный адрес может быть задан: в регистре: JMP r или в памяти: JMP символьное_имя;
- в памяти с косвенной адресацией: JMP near ptr [SI]; JMP far ptr [ВХ] и т.д.
В последних двух командах near ptr и far ptr указывать обязательно, так как какое слово содержится в регистре SI — обычное или двойное, — ассемблер заранее не знает и ему нужно помочь.
Дата добавления: 2015-12-07; просмотров: 175 | Нарушение авторских прав