我想将BIOS设置为在特定日期和时间启动计算机.我可以直接在BIOS中完成,但我想在一个程序(用Delphi制作)中完成.
我知道我可以通过计划任务执行此操作,但我特别希望避免使用它们.
我看到其他程序能够做到这一点,所以它是可行的.
有谁知道如何实现这个......?
提前感谢您的回复.
我有一个用汇编编写的第一阶段引导加载程序。我需要它从 dvd(或 cd)加载第二阶段引导加载程序。我只找到了从 floopy 或 hdd 读取的示例。那里使用的中断是 13h。在中断描述中,它说它可以读取软盘和硬盘。我曾尝试使用 13h 来读取 CD,就好像它是软盘一样,但它不起作用。
问题:软盘和 DVD 之间有区别吗(在访问它们的意义上),我可以使用 CHS(磁头,磁头,扇区)吗,它的扇区大小是多少,我可以使用 13h 指令正确读取 DVD。也许一些例子。我查看了 LILO 的源代码,发现那里只有 13h,所以它必须工作。谢谢。
使用 BIOS 中断是个好主意INT10吗?还是我应该考虑使用 coreboot、UFEI 或 openFirmware?这些兼容吗?我应该用什么来显示到屏幕上?
我正在搜索有关通过 C++ 管理 BIOS 设置的信息。我不熟悉低级编程。我试图进行一项研究,但我对低级编程术语的缺乏知识终止了我的进步。
我需要在屏幕上绘制像素,更改为文本模式或视频模式等。可以用C++程序来实现吗?
有人可以给我一些可以指导我完成整个过程的信息吗?
我已经考虑过为了学习而制作一个小操作系统,现在我正在使用bootloader.我希望能够用来int 0x13从软盘驱动器读取扇区,将它们放入内存,然后跳转到该代码.这是我到目前为止:
org 0x7c00
bits 16
main:
call setup_segments
mov ah, 2 ; function
mov al, 1 ; num of sectors
mov ch, 1 ; cylinder
mov cl, 2 ; sector
mov dh, 0 ; head
mov dl, 0 ; drive
mov bx, 0x1000 ;
mov es, bx ; dest (segment)
mov bx, 0 ; dest (offset)
int 0x13 ; BIOS Drive Interrupt
jmp 0x1000:0 ; jump to loaded code
times 510 - ($-$$) db 0 ; fluff …Run Code Online (Sandbox Code Playgroud) 编写在QEMU中作为引导加载程序运行的x86实模式汇编程序时遇到问题.我正在尝试通过BIOS中断0x10打印文本.我的代码是:
print:
pusha
.loop:
mov AL, [SI]
cmp AL, 0
je .end
call printChar
inc SI
jmp .loop
.end:
popa
ret
printChar:
pusha
mov AH, 0x0E
mov BH, 0
mov BL, 0x0F
int 0x10
popa
ret
Run Code Online (Sandbox Code Playgroud)
我[ORG 0x7c00]用作原点.我测试了printChar标签,并在AL中用一些字母调用它,它工作正常.当我尝试将内存地址加载到这样的消息时:
loadMsg db "Loading",0
mov SI, loadMessage
call print
Run Code Online (Sandbox Code Playgroud)
我在QEMU仿真器上输出像'U'这样的垃圾作为输出.昨天,我编写了一个与此类似的代码,完全没有问题.是什么导致了我的问题以及如何解决?
我试图从Bootloader编写引导加载程序。写的代码是
BITS 16
start:
mov ax, 07C0h ; Set up 4K stack space after this bootloader
add ax, 288 ; (4096 + 512) / 16 bytes per paragraph
mov ss, ax
mov sp, 4096
mov ax, 07C0h ; Set data segment to where we're loaded
mov ds, ax
mov si, text_string ; Put string position into SI
call print_string ; Call our string-printing routine
jmp $ ; Jump here - infinite loop!
text_string db 'This is my cool …Run Code Online (Sandbox Code Playgroud) I write some code to make my own operating system and study x86 assembly language, too. While studying x86 assembly language, I start wondering about interrupt. Look at below assembly code:
mov ah, 2
mov dl, 'A'
int 0x21
Run Code Online (Sandbox Code Playgroud)
This code prints 'A' to the screen. it is for MS-DOS.
mov eax, 1
mov ebx, 0
int 0x80
Run Code Online (Sandbox Code Playgroud)
This code makes program to exit. it is for Linux. The last one:
mov ah, 2
mov al, 1
mov ch, 0 …Run Code Online (Sandbox Code Playgroud) 我是组装新手。在试图弄清楚 BIOS 做什么时,我使用gdb来跟踪它。然而,我发现了一些对我来说很奇怪的事情。
代码段是这样的:
[f000:d129] 0xfd129: mov eax,0x8f
[f000:d12f] 0xfd12f: out 0x70,al
[f000:d131] 0xfd131: in al,0x71
[f000:d133] 0xfd133: in al,0x92
[f000:d135] 0xfd135: or al,0x2
[f000:d137] 0xfd137: out 0x92,al
Run Code Online (Sandbox Code Playgroud)
我想知道为什么 BIOS 会连续从端口 0x71 和 0x92 读取。第二条指令会覆盖从端口 0x71 读取的值吗?那么为什么它从端口 0x71 读取呢?
谢谢!
我想学习英特尔 BIOS。那么我在哪里可以获得开源代码和一些开发指南?从链接http://www.crn.com/news/applications-os/21401337/intel-bios-code-goes-open-source.htm,我知道英特尔已经开放了 BIOS 源,但我不知道如何获得。