操作系统实现---boot启动并读软盘

原创 2013年12月05日 11:02:51

参照《linux完全剖析》一文中的程序自己写了

如下两个简单的程序:

boot.s

;这个程序将软驱的第二个扇区中的内容(kernel)读到
;内存0x1000:0000的位置然后跳转到该处执行
;
;
;

org 07c00h
jmp start
msg:
db "Now,begin to load kernel....",0ah
msgLen equ $-msg


start:
mov ax,cs
mov ds,ax
mov es,ax

mov ax,msg
mov bp,ax
mov cx,msgLen
mov ax,01301h
mov bx,000ch
mov dl,0
int 10h


load:
mov dx,0x0000 ;dh->磁头号,dl->驱动器号
mov ax,0x1000
mov es,ax
xor bx,bx ;es:bx->the data   0x1000:0000
mov ch,0 ;ch->磁道号
mov cl,2 ;cl->起始扇区号
mov ah,02h ;param
mov al,01h ;how many blocks to read
int 13h


sys: ;jmp to the kernel
jmp 0x1000:0


times 510 -($-$$) db 0
dw 0xaa55


2、sys.s

mov ax,cs
mov ds,ax
mov es,ax
mov ss,ax


mov ax,msg
mov bp,ax
mov cx,msgLen
mov ax,01301h
mov bx,000ch
mov dl,0
int 10h
jmp $


msg:
db "It's the world of kernel!",0ah
msgLen equ $-msg




times 512-($-$$) db 0


将上述两个汇编程序编译之后生成boot.bin sys.bin 然后使用命令dd if=sys.bin of=boot.bin bs=512 seek=1 count=1 将这两个512字节的bin文件做成一个1024字节的文件(即boot在软盘的第一个扇区,sys在软盘的第二个扇区)

使用qemu-system-i386 -hda boot.bin 只出现了“Now,begin to load kernel....”一句话,换言之,sys并没有执行,但是使用bochs模拟却完全没有问题。

原因:应该使用qemu-system-i386 -fda boot.bin ,因为boot中使用的int 13h按照软驱的方式读取的,所以应该使用参数为-fda

若要使用硬盘启动的话,将程序的中的

load:
mov dx,0x0000 ;dh->磁头号,dl->驱动器号

改为:

load:
mov dx,0x0080 ;dh->磁头号,dl->驱动器号,软驱从0开始:  ==> 软驱A:0  软驱B:1 
;硬驱从80h开始: ===> 硬盘C:80h    硬盘D: 81h ....

即可!



相关文章推荐

专注于操作系统26之从软盘引导boot,并加载loader

在这篇文章中我们将从软盘镜像中引导操作系统,至于软盘的制作在上一篇文章中已做了介绍。因为要从软盘中加载,就要了解软盘的结构,这里是fat12文件系统。关于fat12文件系统的介绍请参看fat12文件系...

从'0'开始的操作系统MyOs(汇编FAT12软盘)

原博客地址 LANGUAGE:汇编 BASE            :Orange's &老师写的cmd.asm CPU MOD    :实模式 手动写汇编系统这是大二操作系统作业的一部分,代码很大...

专注于操作系统25之软盘镜像

在以后的文章中我们要用到软盘镜像,因为我们是通过软盘来启动操作系统(因为软盘比硬盘更简单,暂时用软盘)的,而现在的计算机又几乎不配软驱,所以我们只有通过虚拟的软盘来启动。在这里我们主要解决3个问题:1...

用java做操作系统内核:软盘读写

在前两节,我们将一段代码通过软盘加载到了系统内存中,并指示cpu执行加入到内存的代码,事实上,操作系统内核加载也是这么做的。只不过我们加载的代码,最大只能512 byte, 一个操作系统内核,少说也要...

操作系统[极光1.0]软盘测试版

  • 2008年02月10日 09:32
  • 326KB
  • 下载

配置u-boot 參數,構造NFS啓動Beaglebone Black板的操作系統

Board Setup Getting Familiar with the Board Take some time to read about the board features and conn...
  • eibo51
  • eibo51
  • 2016年09月09日 21:22
  • 358

操作系统引导Boot的初步实现

那天,大圣问我:你这个操作系统系统能跑起来了吗?我一愣,想想,好久了,我的工作都是围绕着内核设计的。写线程,消息什么的。这次决定改变方向,先得让它跑起来呀,不然,一切工作都是徒劳。恩恩,这貌似符合于渊...

linuxbootdisk启动软盘

  • 2010年12月29日 23:17
  • 1.41MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:操作系统实现---boot启动并读软盘
举报原因:
原因补充:

(最多只允许输入30个字)