Объяснение написанного...
Не вдаваясь в технические подробности, скажу лишь, что команда CLI (CLear Interrupt flag - сбросить флаг прерываний) запрещает немаскируемые прерывания (к таковым относится и прерывание от клавиатуры). В этом случае процессор не реагирует на сигнал INTR (INTerrupt Request - запрос на прерывание). Команда STI (SeT Interrupt flag - установить флаг прерываний) выполняет обратное действие - разрешает немаскируемые прерывания, и процессор снова может обрабатывать немаскируемые прерывания.
Команда HLT (HaLT - останов) приостанавливает работу процессора и ждёт прихода маскируемого прерывания (процессор ожидает появления низкого логического уровня на входе INTR). Команда может быть использована для синхронизации с устройством.
Команда JMP относится к группе команд передачи управления и осуществляет переход на указанную метку (адрес). Для сравнения можно добавить, что её действие эквивалентно действию ненавистного оператора GOTO. В данном примере организован "вечный" цикл: процессор выполняет команду JMP, переходит на адрес и снова встречает команду JMP и т. д.
Теперь про использование CLI совместно с HLT. Поскольку немаскируемые прерывания запрещены, а команда HLT ожидает их появления, то ей придётся долго ждать, также как и пользователю - прерывания - то появиться не могут, они запрещены. В результате эти две простые команды намертво вешают систему.
Copyright © 1999 by HackMaster