Справочник по языку Ассемблера IBM PC

       

HLT


(HaLT)

Остановка

Схема команды:  hlt 

Назначение: остановка микропроцессора до прерывания или перезагрузки.


Алгоритм работы:


перевод микропроцессора в состояние остановки.


Состояние флагов после выполнения команды:



выполнение команды не влияет на флаги

Применение:


В результате выполнения команды микропроцессор переходит в состояние остановки. Из этого состояния его можно вывести сигналами на входах RESET, NMI, INTR. Если для возобновления работы микропроцессора используется прерывание, то сохраненное значение пары cs:eip/ip указывает на команду, следующую за hlt. Для иллюстрации применения данной команды рассмотрим еще один способ переключения микропроцессора из защищенного в реальный режим и его возврата обратно в реальный режим (см. урок 16). Как известно, в микропроцессоре не предусмотрено специальных средств для подобного переключения. Сброс микропроцессора можно инициировать, если вывести байт со значением 0feh в порт клавиатуры 64h. После этого микропроцесор переходит в реальный режим и управление получает программа BIOS, которая анализирует байт отключения в CMOS-памяти по адресу 0fh. Для нас интерес представляют два значения этого байта — 5h и 0ah:

5h — сброс микропроцессора инициирует инициализацию программируемого контроллера прерываний на значение базового вектора 08h (см. уроки 15 и 17). Далее управление передается по адресу, который находится в ячейке области данных BIOS 0040:0067;

0ah — сброс микропроцессора инициирует непосредственно передачу управления по адресу в ячейке области данных BIOS 0040:0067 (то есть без перепрограммирования контроллера прерываний).

Таким образом, если вы не используете прерываний, то достаточно установить байт 0fh в CMOS-памяти в 0ah. Предварительно, конечно, вы должны инициализировать ячейку области данных BIOS 0040:0067 значением адреса, по которому необходимо передать управление после сброса. Для программирования CMOS-памяти используются номера портов 070h и 071h. Вначале в порт 070h заносится нужный номер ячейки CMOS-памяти, а затем в порт 071h — новое значение этой ячейки.


;работаем в реальном режиме, готовимся к переходу ;в защищенный режим:         push    es         mov     ax,40h         mov     es,ax         mov     word ptr es:[67h],offset ret_real ;ret_real — метка в программе, с которой должно ; начаться выполнение программы после сброса         mov     es:[69h],cs         mov     al,0fh  ;будем обращаться к ячейке 0fh в CMOS         out     70h,al         jmp     $+2     ;чуть задержимся, чтобы аппаратура отработала ;сброс без перепрограммирования контроллера         mov     al,0ah         out     71h,al ;переходим в защищенный режим установкой ;бита 0 cr0 в 1 (см. урок 16) ;работаем в защищенном режиме ;готовимся перейти обратно в реальный режим         mov     al,01fch         out     64h,al  ;сброс микропроцессора  hlt ;остановка до физического окончания процесса сброса         ret_real:       ...     ;метка, на которую будет передано                         ;управление после сброса         

См. также: уроки 15, 16, 17


Содержание раздела