zoukankan      html  css  js  c++  java
  • 自制一个能显示helloworld的最简单OS

    《自己动手写操作系统》

      org 07c00h
      mov ax,cs
      mov ds,ax
      mov es,ax
      call DispStr
      jmp $
    DispStr:
      mov ax,BootMessage
      mov bp,ax
      mov cx,16
      mov ax,01301h
      mov bx,000ch
      mov dl,0
      int 10h
      ret
    BootMessage:   db "Hello,OS world!"
    times 510-($-$$) db 0
    dw  0xaa55

    在自己电脑安装nasm。

    官网下载地址:http://www.nasm.us/pub/nasm/releasebuilds/2.12/win64/

    这样就编译为bin的可执行文件,通过软盘启动计算机,便是操作系统的雏形。

    之后要做的是将这个bin文件转换为img文件,我花了几个小时在网上寻找解决办法,最后通过一个winhex的神奇小工具解决了。

    具体办法:使用 WinHex 用winhex打开 t.bin 文件,按 ctrl+A 选择全部内容,然后点右键->edit- >copy all->hex values,然后用 winhex 新建一个文件,在弹出窗口选择大小为 1.44M。把刚才复制的十六进制值粘贴至新文件。保存为t.img。

     用vmware虚拟机启动这个img文件。

    首先创建一个空白的虚拟机,也就是创建时选择稍后安装os。

    然后右键点击该虚拟机,选择设置。

    在硬件里添加软盘->使用软盘影像->将刚才制作的t.img加载进来。

    然后开启虚拟机,成功显示hello world文字。

    原理分析总结:当计算机通电启动时,会加电自检,然后寻找启动盘,如果是从软盘启动,计算机会寻找0面0磁道1扇区。发现他如果以0xaa55结束会认为这是一个引导扇区。boot sector。

    一个正确的boot sector除了必须以0xaa55结束,还应该包括至少512B执行码。

    一旦BIOS发现了引导扇区,会将这512B内容加载至0000:7c00处。然后跳转至0000:7c00处将控制权交给这段代码。

  • 相关阅读:
    AutoFac
    MEF 基础简介 四
    MEF 基础简介 三
    MEF 基础简介 二
    MEF 基础简介 一
    Ioc原理理解
    .NET里面 abstract class和Interface有什么区别以及用法的展现?
    .NET-ORM框架EF-Code First代码优先
    SQL SERVER PIVOT与用法解释
    SQL Server 中的 NOLOCK 到底是什么意思?
  • 原文地址:https://www.cnblogs.com/rixiang/p/5264401.html
Copyright © 2011-2022 走看看