`
iwebcode
  • 浏览: 2072297 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

认识操作系统(一)

 
阅读更多

声名,其中有很代码是载自<自己动手写操作系统>,作为读书的笔迹吧~~

高中的时候就口出狂言,要写一个操作系统.

到现在还不知道操具体为合物.索性,买了本操作系统的书看《自己动手写操作系统》.一个月的囫囵吞枣的浏览了一遍这本书,对于我这个汇编还没有入门的人来说,很多地方还是不胜明白?

虽对操作系统有了大概的了解,为求胜解,无奈,再看一遍吧~~

看到第三章保护模式,被GDT,LDT,IDT,ldtr~~~~搞得头晕,

上网搜寻资料,也有很多详细的介绍,看似详细,或许真要叫真,问他到底是为什么要这样?或者也是照抄某段著作吧?继续搜寻,发现csdn里面居然没有操作系统板块,欧到汇编,发现一人号召创建一汇编板块,欣然奋起支持.发现http://www.xemean.net/resource/网站,上面有些不错的资料,或许不错, 发现一篇 写你自己的操作系统(前6课) 国人 Kasi 翻译 Joel Gompert的作品 <Write Your Own Operating System Tutorial>,才感觉和<自己动手写操作系统>颇有几分相似~~姑且叫做相似吧,更深的含义也不去揣摩了,和一个朋友说起,这么年轻的人写这样的书或许早了点.或许吧~~~~这个也不关我的事,有书看就行了,有中文书看,就更好,写得好一点的中文书,那就更好了.姑且认为是叫做写吧,翻译得好的也不错~~~~~虽然看 候捷 大师翻译书籍台湾味颇浓,毕竟都是中文,台湾大陆都是一家,也就看得明白了~~

转入正题,保护模式

看到代码----<自>---p38

; pmtest1.asm
; 编译方式:nasm pmtest1.asm -o pmtest1.com

%include "pm.inc" ; 常量、宏,以及一些说明
org 0100h
jmp LABEL_BEGIN

[SECTION .gdt]
; GDT
LABEL_GDT: Descriptor 0, 0, 0 ; 空描述符
LABEL_DESC_CODE32: Descriptor 0, SegCode32Len-1, DA_C + DA_32 ; 代码段,32位
LABEL_DESC_VIDEO: Descriptor 0B800h, 0ffffh, DA_DRW ; 显存首地址

; GDT 结束

GdtLen equ $ - LABEL_GDT ; GDT长度
GdtPtr dw GdtLen -1 ; GDT界限
dd 0
; GDT 选择子
SelectorCode32 equ LABEL_DESC_CODE32 - LABEL_GDT
SelectorVideo equ LABEL_DESC_VIDEO - LABEL_GDT
; END OF [SECTION .gdt]
[SECTION .s16]
[BITS 16]
LABEL_BEGIN:
mov ax, cs
mov ds, ax
mov es, ax
mov ss, ax
mov sp, 0100h

; 初始化32位代码段描述符
xor eax, eax
mov ax, cs
shl eax, 4
add eax, LABEL_SEG_CODE32
mov word [LABEL_DESC_CODE32+2], ax
shr eax, 16
mov byte [LABEL_DESC_CODE32+4], al
mov byte [LABEL_DESC_CODE32+7], ah

; 为加载gdtr做准备
xor eax, eax
mov ax, ds
shl eax, 4
add eax, LABEL_GDT ; eax <- gdt 基地址
mov dword [GdtPtr+2], eax ; [GdtPtr+2] <- gdt 基地址

; 加载gdtr
lgdt [GdtPtr]

; 关中断
cli

; 打开地址线A20
in al, 92h
or al, 00000010b
out 92h, al

; 准备进入保护模式
mov eax, cr0
or eax, 1
mov cr0, eax

; 真正计入保护方式
jmp dword SelectorCode32:0 ; 执行这一句会把SelectorCode32
; 装入cs,并跳转到SelectorCode32:0 处

[SECTION .s32] ; 32位代码段,由实模式跳入
[BITS 32]

LABEL_SEG_CODE32:
mov ax, SelectorVideo
mov gs, ax ; 视频段选择子(目的)

mov edi, (80 * 10 + 0) * 2 ; 屏幕第10行,第0行
mov ah, 0Ch ; 0000:黑底 1100:红字
mov al, 'P'
mov [gs:edi], ax

; 到此停止
jmp $
SegCode32Len equ $-LABEL_SEG_CODE32
; END OF [SECTION .s32]

中,

mov ax, cs
mov ds, ax
mov es, ax
mov ss, ax
mov sp, 0100h

不明白其意,为何要把其他寄存器的值都指向CS?

后经Orion和Peter点拨才明白,ds,es,ss,sp都可以指向其他的地方,只有在初试的时候保证他们都指向同一个段,才能保证取出的数据不会出错.

再看到

; 初始化32位代码段描述符
xor eax, eax
mov ax, cs
shl eax, 4
add eax, LABEL_SEG_CODE32
mov word [LABEL_DESC_CODE32+2], ax
shr eax, 16
mov byte [LABEL_DESC_CODE32+4], al
mov byte [LABEL_DESC_CODE32+7], ah

时不明白其理,为何要

mov ax,cs
shl eax,4

根据初始化ds,es……,想明白,要保证ax指向的cs正确的代码段,后面的shl eax,4是为了保证在实模式下seggemnet:offset考虑,

先写到这里,明天继续

分享到:
评论

相关推荐

    一个操作系统的实现

    书中讲解了大量在开发操作系统中需注意的细节问题,这些细节不仅能使读者更深刻地认识操作系统的核心原理,而且使整个开发过程少走弯路。本书分上下两篇,共11章。其中每一章都以前一章的工作成果为基础,实现一项新...

    我对国产操作系统的认识.pdf

    国产操作系统是在特定的国家政策和市场需求下应运而生的一类操作系统,其主要目的是为了摆脱对国外操作系统的依赖,实现技术自主可控,并满足国内用户的使用习惯。从【部分内容】中,我们可以提炼出以下几个知识点:...

    操作系统的基本认识-操作系统实验报告

    操作系统实验报告中的主题是关于一个简单的多用户文件系统的设计,旨在深入理解文件系统的内部功能和实现方式。 首先,该文件系统采用了二级目录结构,即主文件目录(MFD)和用户文件目录(UFD)。MFD全局管理所有...

    操作系统实验课认识环境

    ### 操作系统实验课认识环境 #### 一、操作系统概览 **操作系统**是一种系统软件,它管理和控制计算机系统的硬件和软件资源,并为用户提供高效、可靠、安全且易于使用的环境。在计算机系统中,操作系统处于核心...

    我对国产操作系统的认识.docx

    国产操作系统的认识和发展 国产操作系统是一个非常重要的领域,目前国产操作系统领域市场占有率稳居第一的操作系统中标麒麟 Linux 桌面软件是上海中标软件有限公司发布的面向桌面应用的操作系统产品。在 Linux 内核...

    Orange+S:一个操作系统的实现 有光盘

    书中讲解了大量在开发操作系统中需注意的细节问题,这些细节不仅能使读者更深刻地认识操作系统的核心原理,而且使整个开发过程少走弯路。本书分上下两篇,共11章。其中每一章都以前一章的工作成果为基础,实现一项新...

    Orange's 一个操作系统的实现

    书中讲解了大量在开发操作系统中需注意的细节问题,这些细节不仅能使读者更深刻地认识操作系统的核心原理,而且使整个开发过程少走弯路。本书分上下两篇,共11章。其中每一章都以前一章的工作成果为基础,实现一项新...

    认识操作系统.zip

    这个名为"认识操作系统.zip"的压缩包包含了一份PDF文档,很可能是对操作系统的详细介绍。下面,我们将深入探讨操作系统的一些关键概念和功能。 首先,操作系统(Operating System,简称OS)是计算机系统的核心软件...

    ORANGE'S:一个操作系统的实现

    - 从简单到复杂的实现步骤,帮助读者建立起对操作系统整体架构的认识。 - 涉及的知识点包括但不限于:编译环境搭建、调试技巧、虚拟机运行等。 3. **注重实战经验**: - 强调实践中遇到的问题及其解决方案,使...

    Unix操作系统认识教程

    ### Unix操作系统认识教程知识点梳理 #### 一、Unix操作系统简介 - **起源与发展**: - Unix操作系统起源于1969年的贝尔实验室(Bell Labs),最初由肯·汤普森(Ken Thompson)和丹尼斯·里奇(Dennis Ritchie)开发。...

    EOS操作系统实验教程

    重要概念,这样,读者就可以对 EOS 操作系统的总体构成有一个清晰的认识。 在进行实验之前了解一下 EOS 操作系统的文件目录结构、主要的源代码文件和调用的 重要函数是十分必要的,这样读者可以更全面的认识 EOS ...

    操作系统 西电 操作系统

    操作系统是计算机科学中的核心课程,尤其在西安电子科技大学(西电)的教学中占有重要地位。本文将基于提供的文件名称,详细解析操作...通过这些资料的学习,学生能够对操作系统有全面且深入的认识,并能解决实际问题。

    操作系统实验报告

    操作系统实验报告是对操作系统原理的实践性学习,旨在帮助学生深入理解操作系统的...通过这样的实验,学生不仅能增强操作系统的实际操作技能,还能深化对操作系统工作原理的认识,这对于未来从事相关工作具有重要意义。

    一个简单操作系统的实现

    在"一个简单操作系统的实现"这个项目中,我们将会探讨如何从零开始构建一个操作系统,这通常涉及到底层编程和系统级知识。 首先,我们要理解操作系统的基本构成。操作系统主要由以下几个部分组成: 1. 引导加载器...

    简易操作系统源码 类linux的

    我们参照Linux系统的代码组织结构来开发一个小小的...所以说是个假界面(没有实现SHELL等功能)——我们希望通过该系统能让大家实地感受一下系统启动的过程,也希望通过这个过程能让大家认识操作系统的原始开发过程。

    操作系统的引导过程.doc

    从上面的描述我们可以知道,引导程序需要将存在于磁盘上的操作系统的核心部份读入内存,因此这里我们不得不再讲一讲,怎样不通过操作系统(因为现在还没有操作系统)去读磁盘磁区。一般说来这有两种方法可以实现,一...

    自己动手写操作系统(一部学习操作系统原理很好的教材)

    在计算机科学的广阔天地中,操作系统作为基础而关键的一环,其原理与构建一直是学习者们关注的焦点。《自己动手写操作系统》一书以其独到的教学方法,为渴望深入操作系统世界的读者提供了一条捷径。不仅包含了操作...

    Unix操作系统认识教程PDF

    《Unix操作系统认识教程》PDF是一份详尽的教育资源,旨在帮助读者深入了解Unix操作系统的基本概念、核心功能以及在实际应用中的重要性。Unix操作系统是计算机科学领域的重要里程碑,它以其高效、稳定和强大的特性,...

    计算机网络操作系统教案

    在这个教案中,我们将重点探讨Windows 2000 Server这一经典的操作系统,它在21世纪初广泛应用于企业级网络环境,提供了强大的网络服务功能。 Windows 2000 Server是由微软公司推出的一款服务器操作系统,它基于NT...

Global site tag (gtag.js) - Google Analytics