不管怎么说,造一个独立于库的程序总是开心的。如果你也像我一样这么认为的话。虽然它不能做任何实际的事情,只是作为占据软盘启动扇区的一个小东西,在被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