专注于操作系统6之导入操作系统内核

      前面的引导程序,只是显示了一个字符串,但它还没执行它的主要任务,即导入操作系统内核。当然这里的操作系统的内核是非常简单的,在这主要是说明导入的过程。下面是引导程序和操作系统内核的代码。

引导程序 myboot.asm 的代码

;;nasm 2.07 汇编

org 7c00H

call welcome      ;调用欢迎模块,显示欢迎字符
call loadkernel   ;导入操作系统内核


welcome:            ;欢迎模块 
	   mov ax,cs   ;调用BIOS的10号中断显示字符
	   mov es,ax
	   mov bp,hello
	   mov bx,000ch
	   mov dx,0005h
       mov cx,18
	   mov ax,1301h
	   int 10h
	   ret
loadkernel:         ;导入操作系统内核
       reset:        ;磁盘系统复位
	      mov ax,0  ;调用BIOS的13号中断使磁盘系统复位
		  mov dl,0
		  int 13h
		  jc reset      ;如果复位成功CF=0,如果不成功CF!=0,重新复位
       load:              ;将操作系统内核导入到内存的es:bx位置,这里是01000h:0h
	     mov ax,01000h   ;这个位置可自己设定
         mov es,ax       ;这里的操作系统内核是放在软盘的第二个扇区,所以,调用BIOS的13号中断
	   	mov bx,0h       ;将操作系统内核从软盘导入到内存

		mov cx,0002h
		mov dx,0000h
		mov ax,0201h
		int 13h
		jc load          ;导入成功,CF=0,不成功CF!=0,则重新导入

  jmp 1000h:0000h        ;导入成功后,跳到内存的01000h:0h的位置(因已导入了操作系统内核,所以这里放的是内核的代码),
                         ;执行操作系统内核的代码
hello: db 'hello this is boot'   ;欢迎的字符

times 510-($-$) db 0      ;补满剩下的空间,最后两个字节为0aa55h表示是引导扇区
dw 0aa55h

操作系统内核 mykernel.asm  的代码

;;nasm 2.07 汇编

org 0h    ;在本段的偏移地址为0h的地方载入

call welcome  ;调用欢迎模块,表示进入了内核
call input    ;调用该内核的功能模块,允许输入字符,并显示出来

welcome:         ;欢迎模块,调用BIOS的10h号中断,显示欢迎字符
       mov ax,cs
	   mov es,ax
	   mov bp,hello

	   mov bx,000ch
	   mov dx,0200h
	   mov cx,28

	   mov ax,1301h
	   int 10h
	   ret
input:              ;功能模块,调用BIOS的16h号中断,实现键盘的输入,和字符的显示
      mov ax,0b800h
	  mov ds,ax
	  mov si,480

   s:
     mov [si],al
	 mov ah,0
	 int 16h
	 inc si
	 inc si
	 jmp s

hello: db 'this is kernel you can input'  ; 欢迎字符

times 512-($-$) db 0

  下面说一下执行的过程

 1.nasm myboot.asm -o myboot.img

 2.nasm mykernel.asm -o mykernel.img

 3.partcopy mykernel.img 0 200 myboot.img 200  这里目的是,将mykernel.img,无缝接到myboot.img后面

  这里的第一个0表示从mykernel.img的0号位置开始复制,第一个200(16进制的200,即表示十进制的512)表示复制的大小,第二个200(也是16进制)表示复制到myboot.img的200h的位置。(因为myboot.img本身就是512个字节的大小,占据的范围是0h-01ffh,那么就可将mykernel.img复制到200h的位置,无缝连接)

4.将myboot.img 装入到虚拟机,启动,我这里用的是VMware。


下面是运行的效果图




评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值