码迷,mamicode.com
首页 > 其他好文 > 详细

30天自制操作系统读书笔记(二)

时间:2015-04-16 14:04:33      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:

我还以为马大哈的作者忘记解释之前那段好长的汇编代码了,留下这么多疑惑!

第二天作者就交代了:以后再讲,第二天我们先来谈谈程序核心部分的内容吧!

 

好吧,刚准备欢喜的等着作者解释,没想到他就扔了一大串代码(什么鬼?)

; hello-os
; TAB=4

        ORG        0x7c00            ; 指明程序的装载地址,这个指令是和nask编译器说的(伪指令)告诉nask,开始执行的时候,把代码放到0x7c00的地方。
                      ;为什么是0x7c00呢,因为规定了0x7c00-0x7dff是启动区的装载地址。 ; 以下用于标准的FAT12格式的软盘 JMP entry DB
0x90 __略___ ; 程序核心 entry: MOV AX,0 ; 初始化寄存器 ;此时ax = 0 MOV SS,AX      ;SS堆栈段寄存器也等于0 MOV SP,0x7c00    ;SP堆栈寄存器SP(stack pointer)存放栈的偏移地址 等于0x7c00 MOV DS,AX      ;DS——数据段寄存器=0 MOV ES,AX      ;ES——附加段寄存器=0 MOV SI,msg      ;msg其实就是地址啦。 nask计算出msg里程序开始差了几个字节然后相差的字节+0x7c00 就是msg的地址了。 putloop: MOV AL,[SI]     ;讲寄存器SI所代表的的地址的值赋给AL ADD SI,1 ; 给S1加一 CMP AL,0       ;把AL和0对比 JE fin        ;如果AL为零那就跳转到fin执行 MOV AH,0x0e ; 显示一个文字 MOV BX,15 ; 指定字符颜色 INT 0x10 ; 调用显卡BIOS,调用BIOS时,AH,BX里的值就是BIOS程序将要用到的参数 JMP putloop ;前面看到SI不断加一,就是总有一次会读完msg保存的数据,这时候AL就是0了,然后就会执行jE指令让CPU待机。 fin: HLT ; 让CPU停止,等待命令 JMP fin ; 无限循环
;保存要打印输出的数据 msg: DB
0x0a, 0x0a ; 换行2次 DB "hello, world" DB 0x0a ; 换行 DB 0

 

 

(⊙v⊙)嗯。。上面的注释我就算解释了代码了。。 (总算补了一点昨天的东西)

 

但是吧,把启动区和操作系统写在一个文件里然后nask编译之后,重命名为img,现在看起来貌似还方便。但是以后如果操作系统写的越来越大呢?以后如果要修改或者管理呢?

那就蛋疼了。

所以作者决定只写IPL然后其他的文件写好之后再用磁盘管理文件将它们合并进去。

然后作者果断删了代码,并把helloos.nas改名为了ipl.nas,顺便也就修改了asm.bat这个批处理文件.

呵呵呵。作者顺便输出了ipl.lst 用来记录每个指令是如何翻译成机器语言的。

哦,另外还增加了一个makeimg.bat.内容如下:

      

..\z_tools\edimg.exe   imgin:../z_tools/fdimg0at.tek   wbinimg src:ipl.bin len:512 from:0 to:0   imgout:helloos.img

 

这句话什么意思呢,大概意思就是先读入一个空白的磁盘映像文件fdimg0at.tek,然后在开头写入ipl.bin的内容,最后将结果输出名为helloos.img的磁盘映像文件。

 

Makefile入门:

  

MakeFile 的基本格式如下:

 

 宏定义  源文件之间的相互依赖关系
         任意可执行的Shell命令

 

作者给出了如下的代码:

  

# デフォルト動作

default :
    ../z_tools/make.exe img

# ファイル生成規則

ipl.bin : ipl.nas Makefile
    ../z_tools/nask.exe ipl.nas ipl.bin ipl.lst

helloos.img : ipl.bin Makefile
    ../z_tools/edimg.exe   imgin:../z_tools/fdimg0at.tek         wbinimg src:ipl.bin len:512 from:0 to:0   imgout:helloos.img

# コマンド

asm :
    ../z_tools/make.exe -r ipl.bin

img :
    ../z_tools/make.exe -r helloos.img

run :
    ../z_tools/make.exe img
    copy helloos.img ..\z_tools\qemu\fdimage0.bin
    ../z_tools/make.exe -C ../z_tools/qemu

install :
    ../z_tools/make.exe img
    ../z_tools/imgtol.com w a: helloos.img

clean :
    -del ipl.bin
    -del ipl.lst

src_only :
    ../z_tools/make.exe clean
    -del helloos.img

作者还给了一个make.bat

..\z_tools\make.exe %1 %2 %3 %4 %5 %6 %7 %8 %9

 

其中后面的%1,%2,%3表示传递的参数。

好了偷懒工作完成了。。今天就到这吧。

 

那,能不能稍微解释下makefile文件呢?

 

额,,,自己看看吧,一定看得懂的.

 

30天自制操作系统读书笔记(二)

标签:

原文地址:http://www.cnblogs.com/You0/p/4431788.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!