org 07c00h
mov ax, cs
mov ds, ax
mov es, ax
call DispStr
jmp $
DispStr:
mov ax, BootMessage
mov bp, ax
mov cx, 16 ;CX=串长度
mov ax, 01301h
mov bx, 000ch ;页号为0(BH=0) 黑底红字(BL=0ch,高亮)
mov dl, 0
int 10h
ret
BootMessage: db "Hello, OS world"
times 510-($-$$) db 0 ;填充剩下的空间,使生成的二进制代码恰好为512字节
dw 0xaa55 ;结束标志
把以上文件保存到例如 D:\Projects\TEST\asm
cd /d D:\Projects\TEST\asm
nasm boot.asm -o boot.bin
之后用WinImage 新建一个空img文件也保存到上面的目录
打开FloppyWriter 选择file2img,选择刚刚的bin和img,成功。
用VMware新建虚拟机,添加软盘设备并指定img路径,启动。
bochs
其实制作img什么的可以用bochs中的bximage
还是我们上面的文件夹
创建两个bochs配置文件(来运行boot.img)
#1.bochsrc.txt
#how much memory the emulated machine will have
megs:4
#filename of ROM images
romimage:file=$BXSHARE/BIOS-bochs-latest,address=Oxf0000
#vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest
vgaromimage: file=$BXSHARE/VGABIOS-elpin-2.40
#what disk images will be used
floppya:1_44=boot.img,status=inserted
#Choose the boot disk
boot:a
#where do we send log messages?
log:bochsout.txt
#2.run.bat
SET BXSHARE=C:\Program Files (x86)\Bochs-2.6.8
cd /d D:\Projects\TEST\asm
bochsdbg -q -f bochsrc.txt
pause
参考:
http://blog.youkuaiyun.com/sinzou1/article/details/5905813
http://www.cnblogs.com/windmissing/archive/2012/06/16/2559801.html
其实以上还不算操作系统,涉及到的主要是CPU体系结构和汇编
接下来下来loader kernel
这个是30天自制操作系统01_day/helloos2的运行截图
大致的总结一下:
首先是boot和loader
然后内核的一些东西。
最后是shell和应用程序。
那么,操作系统究竟为程序员解决了哪些问题呢?
即真正意义上的编程从何开始?
首先程序员使用操作系统编写源代码,
接着用编译器生成二进制文件,
以某种方式触发程序的装载运行,
操作系统把二进制文件从磁盘loader到内存的某块区域并跳到那儿执行。
然后还有一些进程间通信的问题。