Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > int 19h


Автор: cornhulio 27.9.2002, 17:09
Я ламак полный   :withstupid  помогите пожалуйста разобраться с int 19h
подкиньте плиз исходник того как перезагрузить комп....а то внизу чел написал чё-то я и непонял  :hmmm

Автор: Chingachguk 27.9.2002, 20:31
А что ты хочешь от него ?
Вызываешь его - и все.

Применяется в коде типа mbr/boot, когда надо перезагрузить систему. Например, если код в Mbr не смог прочесть boot-сектор, то он может вызвать весь процесс загрузки по новой, но без переинициализации таблицы векторов прерываний.

int 19h - Это вызов BIOS.

Откуда ты хочешь вызвать перезагрузку и зачем ? Если ты напишешь подробнее, то ответ, возможно, будет более содержательным...

Автор: cornhulio 27.9.2002, 23:22
:notify  точняк...ну короче мне нужно от этого прерывания...чтоб комп ребутнуть ну экзешник.... :withstupid

Автор: Chingachguk 27.9.2002, 23:33
Из экзешника где ? В дос ? Под виндами ? Под NT точно не будет работать...

Автор: cornhulio 28.9.2002, 00:11
давай сначала под дос.....ненавижу винды =)
пингвин рулит =)

Автор: Chingachguk 28.9.2002, 17:58
Ну, графический дос-98 ничего...

Значит, так:

int 19h у меня не работает - программа виснет (в DOS). Видимо, это происходит из-за:

"INT 19 - SYSTEM - BOOTSTRAP LOADER
Desc: This interrupt reboots the system without clearing memory or restoring
 interrupt vectors.  Because interrupt vectors are preserved, this
 interrupt usually causes a system hang if any TSRs have hooked
 vectors from 00h through 1Ch, particularly INT 08..."

- т.е. он не переинициализирует таблицу векторов прерываний.

А вот как (в досе) можно безусловно перезагрузить комп:

.286
text segment byte public
assume cs:text,ds:text
org   100h
begin:
 mov  dx,offset Start
 call @@Message
 ; Restart processor
 mov  al,0FEh
 out  64h,al
@@Stop:
 jmp @@Stop ; Или hlt - ждать до прерывания
@@Exit:
 mov  dx,offset Finish
 call @@Message
 retn
@@Message:
 mov   ah,09h
 int   21h
 retn
Start db 'Start !',13,10,'$'
Finish db 'Finish !',13,10,'$'
Text Ends
end begin

При желании ты можешь сделать так, что после сброса процессора управление перейдет на ту точку в памяти, которое ты укажешь.

Автор: Гость_Андрей 11.5.2004, 14:23
Ой, люди, люди....такая интересная тема. Вообщем так...проблема такая мне надо заменить послебовательность alt+ctrl+del на alt+ctrl+RShift+del в досе плюс прога должна бвть резедентной на базе мультиплексного прерывания...плиз помогите очень надо.

Автор: Akina 11.5.2004, 15:02
Чтобы перегрузить комп в ДОСе - достаточно просто вот такого:

jmp far ptr 0FFFFh:0

Чтобы изменить под ДОСом последовательность alt+ctrl+del на alt+ctrl+RShift+del - надо сделать свой клавиатурный обработчик int 9. Резидентный есссно... а уж мультиплексное прерывание (2Fh) тут вообще не при чем...

Автор: Jin X 15.5.2004, 22:39
Перезагрузка

Под DOS:
Код
db 0EAh  ; jmp far
dd 0F000FFF0h

Код
mov al,0FEh
out 64h,al

Под DOS/Win9X,ME:
Код
mov dx,0CF9h
mov al,0FFh
out dx,al

Под WinNT/2K/XP: никак sad.gif

p.s.int 19h хоть и настроен в современных компах на jmp far F000:FFF0, но лучше его не использовать!
p.p.s. Перед перезагрузкой советую сделать сброс дисковых буферов (т.е. незаписанный software-кэш дозаписывается на диск):
Код
mov ah,0Dh
int 21h

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)