随笔分类 -  Orange's OS

摘要:由于各种原因,原本计划的Orange’s 一个操作系统的实现的学习中断了几个月。现在还是着手继续研究这本书。收到了几个学习这本书的朋友的信息,大家可以加入作者的google群或者我建的QQ群:108148059,看这本书的朋友来交流下! 阅读全文
posted @ 2011-07-18 21:07 Aoysme 阅读(398) 评论(0) 推荐(0) 编辑
摘要:下述代码展示了如何启动分页机制,及页目录及页表项的初始化: ; ========================================== ; pmtest6.asm ; 编译方法:nasm pmtest6.asm -o pmtest6.com ; ========================================== %include    "pm.inc"    ; 常... 阅读全文
posted @ 2011-01-18 22:17 Aoysme 阅读(976) 评论(3) 推荐(1) 编辑
摘要:A.分页机制概述(如图)    Segmentation部分为分段机制,逻辑地址通过段选择子,从GDT中对应的段描述符中确定段基址,然后在加上偏移确定线性地址    Paging部分为分页机制:物理地址=f(线性地址)        分页机制使用两级转换表,第一级叫做页目录(Page Directory),存储在一个物理页中.大小为4KB,每个表项4字节,     共有1024个表项(Pag... 阅读全文
posted @ 2011-01-18 21:31 Aoysme 阅读(548) 评论(0) 推荐(1) 编辑
摘要:完成有效的特权级的转移及使用局部任务返回实模式: ; ========================================== ; pmtest5.asm ; 编译方法:nasm pmtest5.asm -o pmtest5.com ; ========================================== %include    "pm.inc"    ; 常量, 宏,... 阅读全文
posted @ 2011-01-18 20:34 Aoysme 阅读(512) 评论(0) 推荐(1) 编辑
摘要:我们在进入ring3后,实现了高特权级到低特权级的转移,我们在原有代码上稍作修改,实现低特权级到高特权级的转移: 修改的代码如下: 1.修改调用门描述符和选择的特权级 ; 门                               目标选择子,偏移,DCount, 属性 LABEL_CALL_GATE_TEST: Gate SelectorCodeDest,   0,     0, DA_... 阅读全文
posted @ 2011-01-18 20:08 Aoysme 阅读(353) 评论(0) 推荐(1) 编辑
摘要:在上一节的代码中稍作修改,通过转移进入ring3: ; ========================================== ; pmtest5a.asm ; 编译方法:nasm pmtest5a.asm -o pmtest5a.com ; ========================================== %include    "pm.inc"    ; 常量... 阅读全文
posted @ 2011-01-18 19:51 Aoysme 阅读(437) 评论(0) 推荐(1) 编辑
摘要:A.关于堆栈    jmp指令:不影响堆栈    call指令:影响堆栈,对于短调用来说,call指令执行时会将下一条指令的eip压栈,到ret指令时,这个eip会被从堆栈中弹出。                           对于长转移;还会将cs压栈 B.call指令堆栈示意图    假设函数foo(param1,param2,param3)    1.短调用时堆栈示意图  ... 阅读全文
posted @ 2011-01-17 22:21 Aoysme 阅读(917) 评论(0) 推荐(1) 编辑
摘要:在上次的代码基础上,添加一个代码段作为通过调用门转移的目标段。了解一下调用的工作方法,代码分析如下: 红色标识部分为新增代码 ; ========================================== ; pmtest4.asm ; 编译方法:nasm pmtest4.asm -o pmtest4.com ; ================================... 阅读全文
posted @ 2011-01-17 21:27 Aoysme 阅读(535) 评论(0) 推荐(1) 编辑
摘要:A.门描述符结构               0、1字节(  0~15):偏移1   2、3字节(16~31):选择子        4字节(32~39):5、6、7位为0,0~4位为Param Count        5字节(40~47):0~3位为TYPE,4位为S(=0表示门描述符),5~6位为DPL,7位为P   6、7字节(48~63):偏移2     门描述符主要定了目... 阅读全文
posted @ 2011-01-17 20:48 Aoysme 阅读(531) 评论(0) 推荐(2) 编辑
摘要:学习过程中遇到一个对保护模式总结很好的Blog,转来分享一下。 先说下特权级的概念,在保护模式下,系统依靠特权级来实施代码和数据的保护,相当于权限啦。特权级共有4个级别,0,1,2,3,数字越小表示权限越高。如图:    较为核心的代码和数据放在较高(靠内)的层级中,处理器用此来防止较低特权的任务在不被允许的情况下访问处于高特权级的段。为了防止概念混淆,我们不用特权级大小来说明,改为内层(高),外... 阅读全文
posted @ 2011-01-13 20:26 Aoysme 阅读(916) 评论(1) 推荐(1) 编辑
摘要:还是在原有代码基础上进行修改,加入LDT的使用,代码分析如下(红色部分为新增代码): 本程序是在原有完成大内存读写测试完成后,调用局部任务显示字符L ; ========================================== ; pmtest3.asm ; 编译方法:nasm pmtest3.asm -o pmtest3.com ; =========================... 阅读全文
posted @ 2011-01-13 20:07 Aoysme 阅读(639) 评论(0) 推荐(1) 编辑
摘要:在前面的代码上进行修改后,测试读写大地址内存(实模式下的1MB限制),而且从保护模式再调回实模式.上代码分析(省略前面重复的代码部分):相关:org 0100h 请参看DOS加载.EXE过程《Orange’s 一个操作系统的实现》4.保护模式3----DOS加载.EXE过程 阅读全文
posted @ 2011-01-10 23:06 Aoysme 阅读(800) 评论(1) 推荐(2) 编辑
摘要:在《《Orange’s 一个操作系统的实现》》一书中有时使用了org 0100h,为何是0100h?因为书中的例子是为了突破引导扇区512字节的限制,而将asm文件编译为.com文件以便在freedos中执行(bochs中),有必要了解一下DOS加载.EXE的过程. 以下就引用《汇编语言》第二版 王爽中的内容来说明一下: 阅读全文
posted @ 2011-01-10 22:58 Aoysme 阅读(631) 评论(0) 推荐(1) 编辑
摘要:一、详解GDT(转载http://blog.csdn.net/zdwzzu2006/archive/2009/03/27/4030882.aspx)在Protected Mode下,一个重要的必不可少的数据结构就是GDT(Global Descriptor Table)。 为什么要有GDT?我们首先考虑一下在Real Mode下的编程模型: 在Real Mode下,我们对一个内存地址的访问是通过Segment:Offset的方式来进行的,其中Segment是一个段的Base Address,一个Segment的最大长度是64 KB,这是16-bit系统所能表示的最大长度。而Offset则是相对 阅读全文
posted @ 2011-01-05 22:11 Aoysme 阅读(837) 评论(1) 推荐(1) 编辑
摘要:1.前言 还是先来分析下保护模式的代码pmtest1.asm,要硬这头皮看这段代码,而且的搞明白了,后面的代码都是在此基础上扩展的,此代码是大致轮廓2.代码分析3.编译 nasm pmtest1.asm –o pmtest1.bin4.写入软盘 dd if=pmtest1.bin of=a.img bs=512 count=1 conv=notrunc 5. jmp dword SelectorCode32:0 保护模式下SelectorCode选择子对应的描述符为LABEL_DESC_CODE32,而我们之前已经将描述符的段基址初始化为指向LABEL_SEG_CODE32, 偏移为0,所以会 阅读全文
posted @ 2011-01-05 21:13 Aoysme 阅读(979) 评论(3) 推荐(1) 编辑
摘要:1.pm.inc定义了描述符、选择子及相关位数的取值 ; 描述符图示 ; 图示一 ; ;  ------ ┏━━┳━━┓高地址 ;         ┃ 7  ┃ 段 ┃ ;         ┣━━┫    ┃ ;                  基 ;  字节 7 ┆    ┆    ┆ ;                  址 ;         ┣━━┫ ② ┃ ;         ┃ 0 ... 阅读全文
posted @ 2011-01-05 20:20 Aoysme 阅读(1405) 评论(0) 推荐(1) 编辑
摘要:来源于《来源于NASM中文手册》   NASM中文手册 第一章: 简介 1.1 什么是NASM NASM是一个为可移植性与模块化而设计的一个80x86的汇编器。它支持相当多 的目标文件格式,包括Linux和'NetBSD/FreeBSD','a.out','ELF','COFF',微软16 位的'OBJ'和'Win32'。它还可以输出纯二进制文件。它的语法设计得相当的简 洁易懂,和Intel语... 阅读全文
posted @ 2011-01-04 23:53 Aoysme 阅读(3192) 评论(0) 推荐(1) 编辑
摘要:书中给出了两种环境:windows和linux,平台选择根据自己喜好.本人这里选择ubuntu10.04+virtualbox作为开发平台. 1.下载、安装VirtualBox http://download.virtualbox.org/virtualbox/4.0.0/VirtualBox-4.0.0-69151-Win.exe 2.下载ubuntu安装文件 http://www.ubuntu.com/desktop/get-ubuntu/download 3.在VirtualBox中虚拟安装ubuntu10.04 安装方式比较简单,可以选择自动分区或者手动分区,google一下很多,以下 阅读全文
posted @ 2011-01-04 20:13 Aoysme 阅读(1228) 评论(5) 推荐(1) 编辑
摘要:07看过此书的第一版《自己动手写操作系统》,当时就很感兴趣。但是看到都是汇编及C写的就看不下去了(大学没有没有学过C和ASM,唉)。今年看到此书再版了《Orange’s 一个操作系统的实现》,看了一下介绍,就又起了研究的心思。一直对底层技术很感兴趣,心血来潮就dangdang了一本。看到介绍说作者自,己排的版。比第一版更有层次了。 学习此书,需要具备C和ASM的基本功,还好本人之前已经买了C和ASM的书籍.包括以下三本: 1.《C语言程序设计语言》第二版.新版 K&R 2.《汇编语言》第二版 王爽的 3.《80X86汇编语言程序设计教程》 杨季文版 作者提供了一个此书的交流网址及论坛(goog 阅读全文
posted @ 2011-01-04 19:30 Aoysme 阅读(1067) 评论(5) 推荐(1) 编辑