我有这个简单的引导程序代码,但我不确定它是做什么的。
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
?
答案 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)
答案 2 :(得分:1)
int 10h调用BIOS视频服务。在这种情况下,输出一个字符。在int 10h左右是一个循环,从消息中读取字符,消息结束时的0导致循环退出到另一个循环,但是无限的“挂起”循环。现在,将这些操作放在一起,您期望代码做什么:)