Меню сайта

Урок 79. Специальные команды

Команда 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.

Категория: Программирование на Ассемблере | Дата: 01.02.13

Меню раздела
Блок