加载程序不是内核的重点,我们只需知道内核被加载到什么地方,内核的入口地址是什么即可,一些技术细节没必要过分关心。xv6的内核加载程序由两个文件组成:bootasm.S和bootmain.cbootasm.s的主要目的就是由实模式进入保护模式,下面是bootasm.s的代码注释: 1 #加载器被BIO...
分类:
其他好文 时间:
2014-11-30 16:46:29
阅读次数:
312
因为自己也在写一个操作系统的内核,虽然没完成,也遇到很多困难,参考了诸如Linux 0.01 ,minix3.0, Orange's等,总算有点起色吧,属于走一步看一步那种,从实模式怎么跳到保护模式,从怎么打开关闭中断,再到怎么读取内存大小,都是一步一步来,很多内容都是从网上搜索,看资料等,而且我的引导扇区也是用的nasm汇编,实在反感ATT格式汇编,毕竟大学学得汇编是在windows下的的int...
分类:
其他好文 时间:
2014-11-15 08:54:15
阅读次数:
200
这学期学习了汇编,在自己电脑上发现,win7的dos不支持16位实模式。
对编程来说,不能运行程序是致命的。
在经过网上搜集资料后,得到一种解决办法--使用dosbox软件运行
dosbox简单说,就是一个dos模拟程序,支持16位实模式。
1.首先下载一个dosbox安装程序并安装,下面给出地址
http://sourceforge.net/projects/dosbox/files/...
控制台程序是为了兼容DOS程序而设立的,这种程序的执行就好像在一个DOS窗口中执行一样,没有自己的界面。INTEL的CPU有三种工作模式,实模式,保护模式,虚拟模式。实模式是16位的,在这种模式下可工作纯DOS。保护模式是32位的,WINDOWS就工作在这种模式下,为了使在32位保护模..
分类:
其他好文 时间:
2014-10-22 10:12:35
阅读次数:
153
总的来说在操作系统加电启动之后到main函数执行之前操作系统经历了以下3个大步骤
1.启动BIOS。这个时候位于实模式下,加载中断向量和中断服务程序
2.加载操作系统内核并为保护模式做准备。这个时候操作系统一共加载了3部分代码:引导程序bootsect,内核代码setup,内核代码system模块
3.从实模式转换为32位保护模式。这个过程要做大量重建工作,并且持续工作到操作系统main函数...
分类:
其他好文 时间:
2014-10-08 10:46:25
阅读次数:
4682
开机上电的阶段开机上电时CPU寄存器的值CS:0xffff, IP: 0x0000, 此时CPU处于实模式因此会去执行地址 addr = cs * 16 + ip = 0xffff0 此处就是固化在ROM中的一段程序也就是BIOS, 然后BIOS 会去读MBR(引导扇区 512B) , 将这512...
分类:
系统相关 时间:
2014-10-02 19:13:53
阅读次数:
187
实模式:寻址采用和8086相同的16位段和偏移量,最大寻址空间1MB,最大分段64KB。可以使用32位指令。32位的x86 CPU用做高速的8086。保护模式:寻址采用32位段和偏移量,最大寻址空间4GB,最大分段4GB (Pentium Pre及以后为64GB)。在保护模式下CPU可以进入虚拟80...
分类:
其他好文 时间:
2014-09-11 19:00:52
阅读次数:
197
编写运行于x86实模式下的16位代码是一个很复古的话题,编写能在DOS下运行的Plain Binary可执行文件是一个更复古的话题。以往,凡是需要使用x86的16位实模式的时候,作者都喜欢那NASM来编程。比如《30天自制操作系统》、《Orange's 一个操作系统的实现》、《x86汇编语言——从实...
分类:
系统相关 时间:
2014-08-24 16:35:42
阅读次数:
422
逻辑地址(Logical Address) 是指由程序产生的与段相关的偏移地址部分。例如,你在进行C语言指针编程中,可以读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址,不和绝对物理地址相干。只有在Intel实模式下,逻辑地址才和物理地址相等(因为实模式没有分...
分类:
其他好文 时间:
2014-08-18 15:47:42
阅读次数:
173