Реклама:

Таненбаум Э.- Архитектура компьютера. стр.553

Определенные в официальной спецификации 8088 команды IN и 0UT не реализованы в интерпретаторе (и по этой причине не указаны в табл. В.2). По факту, это команды перемещения данных в устройство ввода-вывода и из него. Неявным адресом в них всегда является регистр АХ, а вторым операндом команд выступает номер порта регистра целевого устройства.

Во второй группе табл. В.2 представлены команды сложения и вычитания. Для всех них характерны то же сочетание трех операндов, что и для M0V: от действительного адреса к регистру (г<—е), от регистра к действительному адресу (е<—г) и от константы к действительному адресу (е<—#). Во всех четырех командах в зависимости от результата выполнения могут быть установлены флаг переполнения (О), знаковый флаг (5), нулевой флаг (Z) и флаг переноса (С). Флаг О устанавливается в том случае, если результат невозможно с достаточной степенью точности выразить разрешенным числом битов, и сбрасывается, если такая возможность существует. Скажем, при прибавлении максимально допустимого 16-разрядного числа 0x7fff (32 767 в десятеричной системе) к самому себе результат нельзя выразить в виде 16-разрядного числа со знаком, и в этом случае для указания на ошибку устанавливается флаг О. Аналогичным образом устроен механизм установки других флагов состояния. Если команда способна влиять на флаг состояния, в соответствующем столбце это обстоятельство обозначается звездочкой (*). В командах ADC и SBB флаг переноса в начале операции выполняет роль дополнительной единицы (или нуля), выражающей положительный или отрицательный перенос после предыдущей операции. Эта возможность особенно полезна для представления 32-разрядных и более длинных целочисленных значений в нескольких словах. Помимо вышеперечисленного, предусмотрены операции сложения и вычитания байтов.

В следующем блоке таблицы содержатся команды умножения и деления. Для работы с целочисленными операндами со знаком нужны команды IMUL и IDIV; для обработки значений без знака достаточно команд MUL и DIV. В байтовых вариантах этих команд в качестве целевого адреса неявно принимается комбинация регистров АН : AL. В командах обработки слов неявным целевым адресом выступает комбинация регистров АХ : DX. Даже если результатом умножения оказывается одно слово или один байт, значение регистра DX или АХ обновляется. Недопустимых операций умножения не бывает, поскольку нехватка битов по целевому адресу исключена. Биты переполнения и переноса устанавливаются тогда, когда произведение невозможно представить одним словом или одним байтом. Нулевой и отрицательный флаги оказываются после умножения неопределенными.

При делении в качестве целевых адресов используются те же комбинации регистров: DX: АХ или АН : AL. Частное записывается в АХ или AL, а остаток — в DX или АН. Все четыре флага — переноса, переполнения, нуля и отрицательности — после выполнения операции деления переводятся в неопределенное состояние. При нулевом делителе, а также в том случае, когда частное не помещается в регистр, инициируется исключение, и, если процедура перехвата исключений в программе не предусмотрена, программа останавливается. Больше того, затруднена программная обработка знаков «минус» перед операцией деления или после нее, поскольку, согласно спецификации 8088, знак остатка должен быть всегда равен знаку делимого, в то время как в математике допускается только неотрицательный остаток.


⇐ Предыдущая страница| |Следующая страница ⇒