- 论坛徽章:
- 0
|
;boot.asm文件,最小的操作系统,不到20行
org 07c00h ; 告诉编译器程序加载到7c00处
mov ax, cs
mov ds, ax
mov es, ax
call DispStr ; 调用显示字符串例程
jmp $ ; 无限循环
DispStr:
mov ax, BootMessage
mov bp, ax ; ES:BP = 串地址
mov cx, 16 ; CX = 串长度
mov ax, 01301h ; AH = 13, AL = 01h
mov bx, 000ch ; 页号为0(BH = 0) 黑底红字(BL = 0Ch,高亮)
mov dl, 0
int 10h ; 10h 号中断
ret
BootMessage: db "Hello, OS world!"
times 510-($-$$) db 0 ; 填充剩下的空间,使生成的二进制代码恰好为512字节
dw 0xaa55 ; 结束标志
Linux下编译:
nasm boot.asm ;将生成一个boot文件。然后插入软盘,输入如下命令:
dd if=boot bs=512 count=2880 of=/dev/fd0 ;boot内容copy到软盘上.可以运行了
这时可用BOCHS or VMWare or VirtualPC 从软盘启动。红色的Hello,OS world!就出来了.
也可以再执行下面命令,创建一个软盘映像文件.
dd if=/dev/fd0 bs=512 count=2880 of=boot.img ;生成一个boot.img映像文件。
注:若你只用VMware,那么只需dd boot.asm后直接dd if=boot of=boot.img,便可运行了。
Winodows下编译:
nasm boot.asm -o boot.bin ;生成一个512B的boot.bin文件
再用软盘绝对扇区读写工具将这个bin文件写到一个软盘上。就OK了。
备注:
$表示当前行被汇编后的地址。反汇编后可以看到这行是jmp short 0x7c09
$$表示一个节(section)的开始(被汇编后的)地址。这里只有1个节,即0x7c00
Reference:
于渊,自己动手写操作系统,2005-8
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/13855/showart_210629.html |
|