不管怎么说,造一个独立于库的程序总是开心的。如果你也像我一样这么认为的话。虽然它不能做任何实际的事情,只是作为占据软盘启动扇区的一个小东西,在被bios加载后打印出“hello world”而已。
这个小东西是从2.6版本的linux内核参考来了。具体文件是/arch/i386/boot/bootsect.S。虽然改动没有什么技术含量,但是毕竟是我找来的呀。
见过网上类似的东西,但是它们的编译好像要用到as86,ld86或者nasm,乃至dos下面的masm。我的fedora core 4没有,要下。这样就麻烦了。现在我的这个有gcc,objcopy,make就可以了,这三个我的系统装好就有的。比较方便。自豪的说^_^
一共两个文件:
bootsect.S:
BOOTSEG = 0x07C0
.code16
.text
.global _start
_start:
jmpl $BOOTSEG, $start2
start2:
movw %cs, %ax
movw %ax, %ds
movw %ax, %es
movw %ax, %ss
movw $0x7c00, %sp
sti
cld
movw $msg, %si
msg_loop:
lodsb
andb %al,%al
jz start2
movb $0xe, %ah
movw $7, %bx
int $0x10
jmp msg_loop
msg:
.ascii "hello world\r\n"
.byte 0
.org 510
.word 0xAA55
makefile:
all: bootsect
bootsect: bootsect.o
objcopy -O binary bootsect.o bootsect
dd if=bootsect of=/dev/fd0
bootsect.o: bootsect.S
gcc -c bootsect.S
clean:
rm bootsect.o
rm bootsect