码海拾遗

但行好事,莫问前程

导航

一个简单的系统

首先需要一个汇编编译器,Windows下可用NASM,Linux下可用as86和ld86

编译汇编代码

    ++++++++++++++boot.asm begin ++++++++++++++++++  
      
    org 07c00h ;告诉编译器程序加载到7c00处  
    mov ax,cs  
    mov ds,ax  
    mov es,ax  
    call DispStr ;调用显示字符串例程  
    jmp $  ;无限循环  
      
    DispStr:  
     mov ax,BootMessage  
     mov bp,ax ;es:bp = 串地址  
     mov cx,16 ;cx = 串长度  
     mov ax,01301h ;ah = 13, al = 01h  
     mov bx,000ch ;页号为0(bh = 0) 黑底红字(b1 = 0Ch,高亮)  
     mov dl,0  
     int 10h  
     ret  
    BootMessage: db "Hello, OS world!"  
    times 510-($-$$) db 0 ;填充剩下的空间,使生成的二进制代码  
         ;为512字节  
    dw 0xaa55    ;结束标志  
      
    ++++++++++++++boot.asm end++++++++++++++++++  

编译生成“系统”

  Windows:

    nasm boot.asm -o boot.bin

  Linux:

    编译:

      as86 -0 -a -o boot.o boot.asm

    连接:

      ld86 -0 -s -o boot.bin boot.o

  boot.bin就是我们要的操作系统

写入引导

  dd命令可写入系统到指定分区,Windows下需要下载"dd for window"

  命令参考:Linux 启动盘命令

 

参考:

  VMware上跑Hello,World操作系统

  实现一个最简单的boot

  bootloader实现

  linux0.11学习笔记-技术铺垫-简单AB任务切换程序(2)-可加载执行其他程序的bootloader

posted on 2017-04-11 20:34  widrin  阅读(408)  评论(0编辑  收藏  举报