| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Asm: Общие вопросы > hlt команда |
| Автор: rthsobakas 9.2.2008, 11:50 |
| Читал в инете и в справочниках об этой команде и везде написано что она останавливает процессор. Зачем это нужно? приведите,пжл, пару примеров с её использованием(маленьких тока)... |
| Автор: PPS05 9.2.2008, 16:46 |
| Имею мысль, что можно использовать при ожидании прерывания. А вот нужно ли?... |
| Автор: rthsobakas 9.2.2008, 17:49 | ||
мне тоже не совсем понятно зачем она нужна... Примеров не могу найти с ней, так бы может че понял |
| Автор: PPS05 9.2.2008, 18:36 |
| Полазил по ссылкам в Гугле. Получается, что т.к. процессор приостанавливается можно его охладить. Вывести из hlt можно прерыванию, разрешенному до hlt. |
| Автор: rthsobakas 9.2.2008, 20:40 | ||
ну к примеру код
но при выполнении exe выдает ошибку. |
| Автор: PPS05 10.2.2008, 15:28 |
А под какую систему запускается? В NT линейке hlt - привелигированная команда, недопустима в ring-3. |
| Автор: rthsobakas 11.2.2008, 15:27 | ||
на winXP запускаю
чето ниче не понял. Объясни поподробней , если не сложно |
| Автор: PPS05 11.2.2008, 18:26 |
| В двух словах особо не объяснишь... На системах Windows 2000, 2003, NT, XP команда hlt входит в состав привелигированных, это значит, что прикладные программы не могут использоать hlt. Ей может пользоваться лишь ядро системы, которое имеет большие привилегия на выполнение кода. |
| Автор: Mikl_ 14.2.2008, 10:25 |
| Семантика команды: остановка микропроцессора до прерывания или перезагрузки. Применение: В результате выполнения команды микропроцессор переходит в состояние остановки. Из этого состояния его можно вывести сигналами на входах RESET, NMI, INTR. Если для возобновления работы микропроцессора используется прерывание, то сохраненное значение пары CS:EIP/IP указывает на команду, следующую за HLT. Для иллюстрации применения данной команды рассмотрим способ переключения микропроцессора из защищенного в реальный режим и его возврата обратно в реальный режим. В микропроцессоре не предусмотрено специальных средств для подобного переключения. Сброс микропроцессора можно инициировать, если вывести байт со значением 0FEh в порт клавиатуры 64h. После этого микропроцессор переходит в реальный режим и управление получает программа BIOS, которая анализирует байт отключения в CMOS-памяти по адресу 0Fh. Если значения этого байта равно 05h — сброс микропроцессора инициирует инициализацию программируемого контроллера прерываний на значение базового вектора 08h. Далее управление передается по адресу, который находится в ячейке области данных BIOS 0040:0067h; Если значения этого байта равно 0Ah — сброс микропроцессора инициирует непосредственно передачу управления по адресу в ячейке области данных BIOS 0040:0067h (то есть без перепрограммирования контроллера прерываний). Если Вы не используете прерываний, то достаточно установить байт 0Fh в CMOS-памяти в 0Ah. Предварительно Вы должны инициализировать ячейку области данных BIOS 0040:0067h значением адреса, по которому необходимо передать управление после сброса. Для программирования CMOS-памяти используются номера портов 070h и 071h. Вначале в порт 070h заносится нужный номер ячейки CMOS-памяти, а затем в порт 071h — новое значение этой ячейки. ;работаем в реальном режиме, готовимся к переходу в защищенный режим: PUSH ES PUSH 40h POP ES MOV WORD PTR ES:[67h],OFFSET RET_REAL;RET_REAL — метка в программе, с которой должно ;начаться выполнение программы после сброса MOV ES:[69h],CS MOV AL,0Fh ;будем обращаться к ячейке 0Fh в CMOS OUT 70h,AL NOP ;чуть задержимся, чтобы аппаратура отработала сброс без перепрограммирования контроллера MOV AL,0Ah OUT 71h,AL ;переходим в защищенный режим установкой бита 0 CR0=1 . . .;работаем в защищенном режиме ;готовимся перейти обратно в реальный режим MOV AL,01FCh OUT 64h,AL ;сброс микропроцессора HLT ;остановка до физического окончания процесса сброса RET_REAL: ... ;метка, на которую будет передано управление после сброса Разработчики из фирмы Intel рекомендуют использовать команду HLT только тогда, кода возникает катастрофическая ошибка оборудования и дальнейшая работа бессмысленна. |
| Автор: sgi1981 14.2.2008, 22:30 |
| В остановленном состоянии микропроцессор потребляет мощность несколько ватт, а в исполняемом состоянии мощность несколько десятков ватт, вот поэтому есть смысл применять HLT. |
| Автор: Mikl_ 15.2.2008, 13:05 |
| MAKCim Я цитировал Юрова |
| Автор: AndNot 28.2.2008, 13:38 | ||
Извиняюсь за поднятие старой темы, просто вспомнился старый досовский трюк:
|
| Автор: MAKCim 28.2.2008, 15:10 |
| AndNot, стремный способ особенно если учесть, что кроме таймера есть еще куча всяких устройств |
| Автор: AndNot 1.3.2008, 20:37 | ||||
MAKCim,
А вот старый способ самой короткой "вешалки":
|