不需要操作系统运行的程序 hello,os world!

⌚Time: 2023-05-18 19:07:50

👨‍💻Author: Jack Ge

boot.asm

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

当计算机电源被打开,运行存储在ROM中BIOS程序。他会检查位于磁盘的第一个扇区(0磁头0磁道1扇区),如果是以0xAA55结束,BIOS认为他是一个引导扇区,然后将这个扇区内容加载到内存0000:7C00的位置,然后跳转到0000:7c00将控制交给这段引导代码。因此程序开始ORG 7C00H,设置程序被编译后的开始地址

$表示当前行被汇编后的地址,$$表示一个节的开始处被汇编后的地址。 times 510-($-$$) db 0表示将0这个字节重复 510-($-$$)遍,加上最后的0xAA55正好有512字节一个扇区的大小

dw 0xaa55 设置有效引导扇区

jmp $ 循环执行程序,防止程序执行到后面非指令的数据上(用单片机的话说就是跑飞)

需要的工具

1.编译汇编代码boot.asm生成boot.bin

nasm boot.asm -o boot.bin

2.创建软盘镜像disk.img

dd if=/dev/zero of=disk.img bs=512 count=2880

3.将boot.bin写入到disk.img

dd if=boot.bin of=disk.img bs=512 count=1 conv=notrunc
rawwrite dd for windows version 0.6beta3.
Written by John Newbigin <jn@it.swin.edu.au>
This program is covered by terms of the GPL Version 2.

notrunc
1+0 records in
1+0 records out

disk.img启动镜像已经制作好了,为了方便直接在虚拟机上测试,新建虚拟机

建立好虚拟机后设置,添加软盘驱动器

选择disk.img

运行。在没有操作系统的环境下跑出了helloworld

最早的程序没有操作系统,在裸机上运行程序

对于linux操作系统,磁盘的第一个扇区的MBR包含有基本的引导程序。计算机打开电源后,执行固化的BIOS程序,bios按照启动顺序检查可引导设备。硬盘上的当MBR被装载后,BIOS就会将控制权转交给MBR。MBR完成基本的初始化后并且将控制权交给硬盘主分区(活动分区)上的GRUB,GRUB再让用户选择启动的操作系统。之后将控制权交给操作系统,操作系统加载内核,层层引导实现启动