上次的文章结束的时候把一大段我的boot loader贴出来了,可能会让人迷惑.这里我又写了个小小的微缩版的16位实模式下的boot loader,大家看看吧.
这里我再次说明一下,这个文章只是记录我自己做16位os的经验,绝不是什么标准的教程.但是我也不会像其它的文章讲个boot loader就结束了.后面我还会做到kernel以及文件系统等很多东西 【程序编程相关:中小企业服务器配置方案(文件服务器之NF】 【推荐阅读:中小企业服务器配置方案(文件服务器之FT】 【扩展信息:中小企业服务器配置方案(IP伪装)】bits 16
org 0x7c00entry:
mov ax, 0 mov ds, ax mov si, welcomemsg call putstr hang: jmp hang welcomemsg db welcome to my operating system,0 putstr: lodsb or al, al jz putstrd mov ah, 0x0e mov bx, 0x0007 int 0x10 jmp putstr putstrd: retn size equ $ - entry %if size+2 > 512 %error "code is too large for boot sector" %endif times (512 - size - 2) db 0db 0x55, 0xaa
其中显示为深红色的才是真正的汇编代码,而显示为蓝色的是nasm的宏或一些控制语句.
首先是bits 16,这个说明是要把我们这个程序编译成16位的代码,org 0x7c00则是告诉编译器我们的这段代码将从0x7c00这个地址开始执行(由于汇编编译器对于静太变量的引用都是使用绝对地址,所以一定要设置好你程序运行开始的地址.比如dos下.com文件就要设置org 0x100也是一个道理.否则你的数据地址会出现错误)entry:
mov ax, 0 mov ds, ax ... 下一页