1. Hello World 级的引导代码

上一节已经搭建好了OS开发环境,现在我们来写个简单的引导代码吧

先讲一下操作系统的引导过程:
PC加电自检后,会把引导设备的0磁头,0磁道,1扇区的内容加载到内存 0x7c00 处,然后就跳转到该处执行引导代码。我只是简单地说了下,详情请自行Google。
ContractedBlock.gif ExpandedBlockStart.gif boot.S
 1 .code16
 2 .text
 3 .globl _start:
 4 _start:
 5          cli
 6         ljmp $0x7c00, $0
 7 go:
 8         movw %cs, %ax
 9         movw %ax, %ds
10         movw %ax, %ss
11         movw $0xff00%sp
12         sti
13 
14         movw $0x0007%bx
15         movw $16%cx
16         movw $0%dx
17         movw $msg, %bp
18         movw $0x1301%ax
19         int $0x10
20 
21         jmp .
22 msg:     .ascii "Hello, OS World!"
23 .org     510
24 .word    0xaa55   
boot.S采用的是AT&T格式的汇编语法,执行的工作就是先设置好相关段寄存器的值,再调用10h中断显示字符串

为了把它加载到bochs,我们还要用make将其编译为纯二进制代码,并且写好相应的配置文件
ContractedBlock.gif ExpandedBlockStart.gif Makefile
 1 AS=as
 2 LD=ld
 3 OBJCOPY=objcopy
 4  
 5 all: floppy.img
 6 
 7 floppy.img: boot
 8      dd if=/dev/zero/ of=floppy.img bs=1024 count=1440
 9      dd if=boot of=floppy.img bs=512 count=1 conv=notrunc
10  
11 boot: boot.o
12      $(LD) --e _start -Ttext 0 -o $@.elf $^
13      $(OBJCOPY) --O binary $@.elf $@
14  
15 boot.o: boot.S
16      $(AS) -o $@ $^
17 
18 clean:
19      rm -rf *.o *.img *.elf bochs.log boot
bochs配置文件的解释请Google
1  megs:  32
2  romimage: file = $BXSHARE / BIOS - bochs - latest #, address = 0xf0000
3  vgaromimage: file = $BXSHARE / VGABIOS - lgpl - latest
4  floppya: 1_44 = floppy.img, status = inserted
5  boot: a

转载于:https://www.cnblogs.com/john-d/archive/2009/10/16/1584765.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值