简单的bootloader代码说明

时间:2014-06-06 20:35:02

标签: assembly x86

我有这个简单的引导程序代码,但我不确定它是做什么的。

mov ax, 07c00h
mov ds, ax

mov si, msg
ch_loop: lodsb
   or al, al
   jz hang
   mov ah, 0eh
   int 10h
   jmp ch_loop

hang:
   jmp hang

msg db "Hello, world!", 13, 10, 0
times 512-($-$$) db 0

首先,我认为你告诉BIOS加载内存位置7c00(为什么不说org 7c00h?或者那不是x86程序集?)。接下来,将ax的值移动到dx。然后,移动' msg'到si(为什么si?)。接下来,我想您正在创建一个循环来打印屏幕上的所有字符。我不知道or al, al是什么意思。如果为零则跳转挂起功能(当完成所有字符打印到屏幕时,它是否为0?)。接下来的两行与视频有关。我知道int 10h是视频/图形模式的BIOS中断。在我理解int 10h之后。我觉得大会非常困难。我知道ax是一个注册人注册,但这究竟意味着什么?

请有人帮帮我! 提前谢谢你 有任何问题,请评论!
PS任何真正深入的网站都是这样的?阿什,什么是'页面'在大会?您使用bh寄存器,但为什么bh

3 个答案:

答案 0 :(得分:3)

您确定代码以

开头
        mov     ax,07c00h
        mov     ds,ax

而不是

        mov     ax,07c0h
        mov     ds,ax

BIOS始终在0000:7c00加载启动(或分区)扇区。对于Microsoft分区扇区,BIOS在扇区映像中加载0000:7c00,代码自身向下移动到0000:0600,然后定位并将引导扇区加载到0000:7c00,并跳转到引导扇区代码。对于多引导系统,可以再次重复该循环。

答案 1 :(得分:1)

  

任何真正深入的网站都是这样的?

OSDev是搜索此类问题答案的地方:

http://forum.osdev.org/

http://wiki.osdev.org/

答案 2 :(得分:1)

int 10h调用BIOS视频服务。在这种情况下,输出一个字符。在int 10h左右是一个循环,从消息中读取字符,消息结束时的0导致循环退出到另一个循环,但是无限的“挂起”循环。现在,将这些操作放在一起,您期望代码做什么:)