繁体   English   中英

简单的引导程序代码说明

[英]Simple bootloader code explanation

我有这个简单的引导程序代码,但是不确定所有功能。

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任何类似这样的东西的网站真的很深入吗? Aslo,组装中的“页面”是什么? 您使用bh寄存器,但是为什么使用bh

您确定代码以

        mov     ax,07c00h
        mov     ds,ax

相对于

        mov     ax,07c0h
        mov     ds,ax

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

是否有任何真正深入的网站来提供类似的信息?

OSDev是搜索以下问题答案的地方:

http://forum.osdev.org/

http://wiki.osdev.org/

int 10h调用BIOS视频服务。 在这种情况下,输出一个字符。 在int 10h周围是一个循环,它从消息中读取字符,而在消息末尾的0导致该循环退出到另一个但无尽的“挂起”循环。 现在,将这些动作放在一起,您期望该代码做什么:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM