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

[Orange‘s:一个操作系统的实现]第一天:环境配置

时间:2015-04-28 18:33:07      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:操作系统

前言:环境介绍

电脑:Macbook Air 2014年早期版
系统:OS X 10.10.3

虚拟机:由于在Mac上编译Bochs一直不通过,原因在sourceforge上有说:sourceforge.net/p/bochs/bugs/1344 /1360,这两个地址说他们的程序员没有开发mac下的,所以会编译不通过。我不想多折腾,用VirtualBox,同时也是免费的。去官网下载VirtualBox,双击安装就行。同时,VirtualBox支持调试,在网上搜也有很多关于调试的文章,这里不贴地址。

#启动虚拟机调试的常见命令
VirtualBox --startvm /path_of_virtualmachine.vbox --debug 

源码获取:作者在书的最后给出了源码的地址,如果买了书的同学可以去下载。

生成img文件:书中使用的是Bochs自带的bximage,由于我们没有编译成功,使用dd命令也是非常的方便

#生成一块1.44M空软盘命令。
dd if=/dev/zero of=os.img bs=512 count=2880 conv=notrunc

挂载img文件:在Linux可以使用mount命令, 但是在mac下需要-t选项,一直搞不清楚FAT12对应的代号,可能没有,后来发现了这么一个命令

#挂载img文件
hdiutil mount os.img
#命令会有输出,将文件挂载在哪个位置,一般都是在/Volumes/文件夹下
hdiutil unmount /Volumes/path

Dos下进入不同的盘:

#直接输入盘符加:号
B:

第一章:一个引导程序

最开始介绍了一个是多行的代码,用于引导软盘进入系统

    org 07c00h          ; 告诉编译器程序加载到7c00处
    mov ax, cs
    mov ds, ax
    mov es, ax
    call    DispStr         ; 调用显示字符串例程
    jmp $          ; 无限循环
DispStr:
    mov ax, BootMessage
    mov bp, ax          ; ES:BP = 串地址
    mov cx, 16          ; CX = 串长度
    mov ax, 01301h      ; AH = 13,  AL = 01h
    mov bx, 000ch       ; 页号为0(BH = 0) 黑底红字(BL = 0Ch,高亮)
    mov dl, 0
    int 10h         ; 10h 号中断
    ret
BootMessage:        db  "Hello, OS world!"
times   510-($-$$)   db  0   ; 填充剩下的空间,使生成的二进制代码恰好为512字节
dw  0xaa55              ; 结束标志

对于上面的代码,不做过多的描述,第一行是跳转到7c00处,将控制权移交给系统,不再是BIOS,接着初始化几个寄存器之后调用字符显示函数,然后进入死循环。最后是填充数据,写入结束标志。

讲述一些NASM汇编中的规则,更详细内容去看官网手册:
对变量加[],取值,不加表示地址;
$:当前行被汇编后的地址
$$:当前段section被汇编之后的起始地址。

好的,到现在,如果你和我一样的系统,一样的硬件,你应该已经全部搞定书上的操作实例了。
那么接下来进入保护模式。


[Orange‘s:一个操作系统的实现]第一天:环境配置

标签:操作系统

原文地址:http://blog.csdn.net/dallasseller/article/details/45337819

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