Команда NOP - еще одна удобная команда микропроцессора 8088.  Она  не делает ничего - "нет операции".  Тщательный анализ машинных  команд показывает, что это в действительности команда XCHG.  А  именно, это

  XCHG AX,AX

что эквивалентно "ничего не выполнять", и бывают ситуации,  когда такую команду желательно использовать, чтобы выждать  некоторое время. В небольшом цикле, предназначенном для  определенной временной задержки, можно использовать команды NOP для  заполнения тела цикла, достигая тем самым точной выдержки времени  выполнения цикла (хотя цикл - не лучший способ временной задержки,  если интервал не очень маленький). Разработчики IBM PC требуют  использовать NOP в некоторых местах, чтобы удовлетворять  определенным временным требованиям. Например, программа не может  иметь доступ в схему таймера чаще, чем раз в одну микросекунду. Две  последовательно идущие команды IN нарушают это требование, так что  между командами IN должно быть выполнено несколько команд NOP.

Команда HLP останавливает ЭВМ; после выполнения этой команды  микропроцессор останавливается. Если прерывания заблокированы во  время останова, ЭВМ полностью "замирает". В этой ситуации  единственная возможность запустить ЭВМ заново - выключить питание и  включить его снова. Однако, если прерывания были разрешены в момент  останова микропроцессора, они продолжают восприниматься и  управление будет передаваться обработчику прерываний. После  выполнения команды IRET в обработчике программа продолжает  выполнение с ячейки, следующей за командой HLT. Команду HLT можно  использовать в мультизадачных системах, чтобы завершить текущую  активную задачу, но это не всегда лучший способ такого завершения.  Разработчики персональной ЭВМ используют команду останова только  тогда, когда возникает катастрофическая ошибка оборудования и  дальнейшая работа бессмысленна.

Команда LOCK - это командный префикс, такой же, как подавление  сегментации или REP-префикс. Она предназначена для  мультипроцессорных систем, в которых несколько микропроцессоров  могут одновременно работать с одними и теми же ячейками памяти.  Префикс LOCK вынуждает микропроцессор 8088 захватить линии  управления, и тем самым получить исключительное право доступа в  память на время обработки команды с префиксом. Лучший пример этого  - установка- проверка флага в общей памяти.

  MOV AL,1

  LOCK XCHG AL,FLAG_BYTE

  CMP AL,1

В этом примере байт FLAG_BYTE содержит нулевой или единичный  индикатор. Микропроцессор устанавливает флаг равным единице, когда  входит в "критическую" область программы, где он выполняет  некоторые системные действия, которые может выполнять в данный  момент времени лишь один микропроцессор. Перед входом в  "охраняемую" область микропроцессор должен проверить, не работает  ли в ней другой микропроцессор. Если это так, он должен подождать  перед входом; иначе он может войти в область. В примере перед  командой XCHG используется префикс LOCK. Префикс LOCK дает  микропроцессору право исключительного доступа в течение выполнения  команды XCHG, которая читает содержимое ячейки памяти, а затем  записывает данные в эту же ячейку. Команда XCHG записывает 1 из  регистра AL в поле FLAG_BYTE, засылая его текущее значение в  регистр AL. Теперь, если регистр AL содержит 1, то в "охраняемой"  области находится другой микропроцессор, и проверяющий  микропроцессор обязан ждать. Если регистр AL нулевой,  микропроцессор может войти в "охраняемую" область, а команда XCHG  уже установила поле FLAG_BYTE равным 1, чтобы больше ни один  микропроцессор не смог войти туда. Префикс LOCK препятствует любому  другому микропроцессору проверять поле FLAG_BYTE в течение  короткого интервала времени между проверкой и установкой ячейки  флага.

К сожалению, описание работы префикса LOCK носит чисто  теоретический характер. IBM PC не реализует аппаратные средства,  необходимые для работы LOCK.

Команда WAIT останавливает выполнение программы  микропроцессором, аналогично команде HLT. Но в случае команды WAIT  выполнение программы возобновляется, когда один из внешних выводов  микропроцессора 8088, вывод TEST, становится активен. Если вывод  TEST активен во время выполнения команды WAIT, остановки не  возникает вообще. Если вывод TEST неактивен, микропроцессор ждет до  тех пор, пока он не станет активен. Микропроцессор 8088 использует  эту команду вместе с командой ESC, чтобы работать с арифметическим  сопроцессором 8087.

Команда ESC дает возможность расширить набор команд  микропроцессора 8088 без изменений самого микропроцессора. Команда  содержит поле режима адресации и может указать любую ячейку памяти  с помощью обычных способов адресации микропроцессора 8088. Однако  микропроцессор ничего не делает в случае этой команды, кроме того,  что читает данные из соответствующей ячейки и просто их  отбрасывает.

Команда ESC позволяет другому микропроцессору, или так  называемому сопроцессору, наблюдать за работой микропроцессора  8088. Команда ESC активизирует сопроцессор, и он выполняет ее, как  собственную. Если сопроцессору нужен адрес памяти, микропроцессор  8088 выдает этот адрес в цикле фиктивного чтения. Затем сопроцессор  может выполнять запись или чтение по этому адресу в зависимости от  того, что ему нужно. Эффективность команды ESC станет очевидна в  гл.7, где рассматривается арифметический сопроцессор 8087,  сопроцессор микропроцессора 8088.