dys 撰寫於文章 <53358d$1CM$9@bbs.openfind.com.tw>...
>請問一下, 要如何才能在 Turbo C IDE 環境下,不用組合語言(asm), 寫出
> DOS Reboot 的功能??謝謝!!
方法 1 :
直接跳躍至 FFFF:0000 (16進位) 的位置即可.
比方 Assembly :
.model small
.code
reset_address dd 0ffff0000h
start:
jmp reset_address
end start
以 C / C++ 表示 :
int main(void)
{
void far (*reboot)(void) = (void far (*)()) (0xFFFF0000L);
reboot();
return 0;
}
方法 2 :
其實直接跳躍至 FFFF:000 的位置不一定可以重新開機,
因為若是系統使用了 QEMM 記憶體位移的管理方式,
那 FFFF:0000 位置就不是 Reset System 的進入點. 所以你
可以使用下面 I/O Port 的方式: (Reset CPU)
Assembly 的表示方式:
.model small
.code
mov al,fe
mov dx,64h
out dx,al
end
以 C / C++ 表示 :
#include <dos.h>
int main() { outportb(0x64,0xfe); }