如何从零开始写一个简单的操作系统

2024-12-17 17:06:08
推荐回答(2个)
回答1:

如何动手制作这样的引导扇区呢?这个过程十分简单,
  (1)首先按照要求写一个合法的引导程序(通常用汇编,机器码也可以,呵呵);
  (2)然后将其通过汇编程序,如NASM汇编成二进制文件;
  (3)最后,将这个二进制文件写入到目标盘的第一个扇区。

  第一步:写代码
  ; 文件名:boot.asm
  ; 代码如下,注意,汇编中通常用“;”来表示注释内容
  ; 此段代码参考《自己动手写操作系统》(于渊)
  ;
  ; 初始化函数
  org 07c00h ; 告诉编译器将此段程序加载
  ; 到内存0x0000:07C00处
  mov ax, cs
  mov ds, ax
  mov es, ax
  call PrintStr ; 调用屏幕打印函数
  jmp $ ; 无限循环

  PrintStr: ; 屏幕打印函数
  mov ax, HelloWorld ; 将字符串拷贝到ax
  mov bp, ax ; es:bp = 串地址
  mov cx, 24 ; cx = 串长度
  mov ax, 01301h ; ah = 13, al = 01h
  mov bx, 000ch ; 页号为0(bh = 0) 黑底红字(bl = 0ch,高亮)
  mov dl, 0
  int 10h ; 10h号中断
  ret

  HelloWorld: db "Welcome to Lee's OS *_*" ; 字符串负值
  times 510-($-$$) db 0 ; 用0x0填充剩余的空间使生成
  ; 的二进制代码刚好为512字节

  dw 0xaa55 ; 结束标志
  ; 整个程序结束!很短吧

  第二步:汇编
  假设你已经安装了NASM程序,那么进入命令行模式,然后输入以下命令:
  C:[PATH]\ nasm boot.asm -o boot.bin
  其中“C:[PATH]\”为boot.asm代码文件所在位置。
  现在如果不出意外的话,你已经拥有了boot.bin二进制文件,这个就是引导程序!

  第三步:制作引导盘
  由于不能随便更改硬盘,否则系统无法进入原来的操作系统,所以我们用软盘来试验。
  那么,我们准备一张软盘。
  现在,我们要自己写一个程序将我们汇编得到的二进制文件写到软盘的第一个扇区。
  C语言程序代码如下:

  /***************START***************/
  #include
  #include

  int main(void)
  {
  FILE *in;
  unsigned char buffer[520];

  if((in = fopen("boot.bin", "rb"))==NULL)
  {
  printf("Error loading file\n");
  exit(0);
  }

  fread(&buffer, 512, 1, in);
  while(biosdisk(3, 0, 0, 0, 1, 1, buffer));
  fclose(in);

  return 0;
  }
  /****************END****************/
  注意,这个程序必须同boot.bin文件在同一目录下,然后将软盘放进软驱,运行此程序。

  第四步:GOGOGO
  好了,现在你拥有了一张从头到尾完全自制的引导盘,由于有了她,你想运行你的电脑再也不需要微软插手了,而且这很可能是你第一次能在裸机上运行一个自己的程序哦,哈哈!
  重新启动你的机器,记得把软盘放进去,现在你看见什么了?
  一行醒目的红字:
  Welcome to Lee's OS *_*
  打印在屏幕上!

回答2:

你可以去参考一下《30天自制操作系统》