傻子一样的等

昨日出差,办完事后,下午 2:30,准备进长途汽车站买票回家,被一人拦住,说可以带我进去,车马上就要开了,买票来不及。我以为是汽车司机,就跟了进去。进去后,他打了个电话,说 3:30 车才到,让我先把票买了。我把钱给他,他拿了个代客车票的单子,写了几个字给我,说上车时再换票,然后就走了。人已走,车没来,我拿着写了字的纸,感觉像傻子一样的等。3:30,车来了,我凭那张纸,顺利的上了车。是为记。

保护模式

实模式采取 segemnt:offset 的方式,表示 20 位的内存地址。保护模式,段值却变成了索引,指向 descriptor 数据结构,包含基地址,段界限,属性。就像键盘的 key 不是按顺序排列的一样,这个描述符也称得上错落有致。历史原因不去管它,其构成如下图:

不难看出,base 32 位,limit 20 位,attribute 12 位,共 64 位。这就是大名鼎鼎的段描述符。现在,我们就来实现一个保护模式的基本框架。

1.建议安装双系统,参看 win8 硬盘安装 ubuntu:http://www.cnblogs.com/china_x01/archive/2010/11/09/1872739.html

2.进入 ubuntu,在终端中执行如下命令

  sudo apt-get install vgabios bochs bochs-x bximage

这是于渊给出的,但在麒麟中有点问题,还需执行

  sudo apt-get install bochs-sdl

运用时,bochsrc 配置文件开头需添加 display_library : sdl,最后 keyboard_mapping 也要将 x11-pc-us.map 改为 sdl-pc-us.map 。虚拟机安装后,就是开发工具了,执行

  sudo apt-get install build-essential nasm

原则上,这些就够了。你可以用 gedit 或 vi 来开发。但我更喜欢 eclipse,所以可执行

  sudo apt-get install eclipse

如提示需依赖项,可执行

  sudo apt-get  update

当然,CDT 是不可少的。到网上搜素下载,在 eclipse 的 help => install new software 菜单中添加,需注意版本。OK!

3.运行 eclipse,建一 c 空 makefile 项目 x01.os,完整代码可在 x01.Lab.download 中下载。项目中,freedos.img 文件来自 bochs 网站,a.img 由 bximage 创建。在终端中进入 x01.os 目录,执行 bochs,在 bochs 中执行 A:>format B:,对 a.img 进行格式化,退出。进入 /mnt/ 执行 sudo mkdir temp,退出。执行 make all 后,执行 bochs,在 bochs 中输入 A:>B:\boot.com,回车,运行效果图如下:

其中红色的字,数据保存在内存 5M 处,远大于实模式 1M 的限制,进入保护模式无疑。关于代码如 mov ax, 0xAC00; int 0x21; 等的解释,可参看 note 中的 DOS 中断。这就像查字典一样,两向对照,当不太难。如能买本《Orange'S 一个操作系统的实现》,那就更好了。

4.关键部分,是由保护模式跳回实模式。在 .begin 段中,mov [backRealMode + 3], ax 保存的,就是实模式的 segment 地址。在 .code16 段中,backRealMode: jmp 0:realEntry 就是跳回的关键。保存时为什么 +3 ?jmp 1 字节,realEntry 是偏移 2 字节,所以 +3。当执行 backRealMode: jmp 0:realEntry 时,实际上执行的是 jmp segment:realEntry,由此跳回实模式。

x01.os.7: 傻子一样的等的更多相关文章

  1. x01.os.14: 时间都去哪儿了

    时间都去哪儿了 老帕的“花儿为什么这样红”,三分钟引起六次欢呼,却败给了张碧晨.试想一下,如果是人气更高的陈冰,即使唱得和张碧晨一模一样,可能仍然不敌老帕,为什么张碧晨就能取胜呢?有这么个笑话:一人弹 ...

  2. x01.os.13: 文件系统

    停了两天电,忽然得空闲.找来破吉他,已然不成弦.           丁丁当当敲,敲到电来到.为把时间捡,熬夜三四点. 从我的置顶随笔 x01.Lab.Download 中下载 x01.os.12.t ...

  3. x01.os.9: 进程切换

    进入内核后,当然不能无所事事.先创建三个进程,分别打印 A,B,C.虽然只是简单的打印,但却是一切扩展的基础,不可等闲视之. 进程切换,涉及一系列的寄存器需要保护,于是,就有了 ProcessStac ...

  4. x01.os.8: 加载内核

    在 x01.os.7 中,借助 freedos,学习了保护模式.但操作系统必须完成引导:boot, 加载内核:loader,kernel,进而管理process,memory,file等. 引导比较简 ...

  5. x01.os.18: MBR

    硬盘不同于软盘,它是要分区的.这时,mbr(master boot record)便不可少了.安装 os 硬盘的第一扇区,开始有一小段不多于 446 字节的程序,然后是分区表 512-446-2 字节 ...

  6. x01.os.16: 添加功能

    准备工作  1.确保是 win xp,如是 win 8,运行 nasm 需按提示同意安装组件.  2.确保 src 和 z_tools 在同一目录下,nasm 已包含在 z_tools 文件夹中.  ...

  7. x01.os.12: 在 windows 中写 OS

    在 windows 中写操作系统,需要一系列的辅助工具.在此,要感谢川谷秀实!所有工具,都在 z_tools 文件夹中.有了大师的帮助,不妨也来尝试在 windows 中写一把 OS. 源代码及工具可 ...

  8. x01.os.20: compile linux-0.11 on the ubuntu

    为什么学习 linux 正如不能依靠美国的 GPS 为我们的导弹指示目标一样,很难想像用运行 windows 的电脑去同美国进行信息战.而朝鲜的网络崩溃,再次警示国人,信息战.网络战离我们并不遥远.l ...

  9. x01.os.19: linux 0.0

    linux 0.0 是一个丢失的版本,但赵炯老师又在 linux 0.11 的基础上,使它起死回生.www.oldlinux.org 有大量资源可供下载,值得一看. 1.要编译运行,首先需安装:sud ...

随机推荐

  1. selenium + python自动化测试环境搭建

    selenium的在python平台的搭建: 搭建平台windows 准备工具如下: --------------------------------------------------------- ...

  2. mybatis公用代码抽取到单独的mapper.xml文件

    同任何的代码库一样,在mapper中,通常也会有一些公共的sql代码段会被很多业务mapper.xml引用到,比如最常用的可能是分页和数据权限过滤了,尤其是在oracle中的分页语法.为了减少骨架性代 ...

  3. Atitit.atiRI  与 远程调用的理论and 设计

    Atitit.atiRI  与 远程调用的理论and 设计 1. 怎么做到透明化远程服务调用?1 2. 2  怎么对消息进行编码和解码1 2.1.  确定消息数据结构dsl1 2.1.1. 消息里为什 ...

  4. Grid – 入门必备!简单易懂的响应式设计指南

    如今,人们使用各种各样的移动设备访问网页,设计师们需要去适配不同的屏幕,让用户在都能有最佳的浏览体验.Grid 是一个简单的响应式设计指南,按照这些简单的步骤,你的就能够掌握基础的响应网页设计技巧. ...

  5. 分享11个纯css完成的图片浏览器

    图片画廊用于在网站上显示系列图片,它已成为网站重要的组成部分.实现图片画廊有很多种方法,今天要与大家分享的是11个使用纯 CSS 实现的图片画廊,它们代码少,效果炫,加载速度快,希望能对大家有所帮助. ...

  6. css通用小笔记03——浏览器窗口变小 div错位的问题

    我最近写网页的时候,经常碰到一个普遍的问题,经过我的查阅和尝试,终于解决了这一问题,这里有两种方法提供给大家,如果博友还有更好的方法,欢迎补充. 一.使用min-width属性: 我们先看看下面这段代 ...

  7. 计算DEM上的Profile图

    #!/usr/bin/env python # -*- coding: utf-8 -*- import sys, gdal, os from gdalconst import GA_ReadOnly ...

  8. DevExpress应用案例--语音识别器Dual Writer

    Dual Writer是 一个以语音识别为特色的文档处理器,无需安装其他软件,只需要插入你的麦克风就可以开始录入口述文字.它不仅支持MS Word的DOCX格式,还支持 RTF.ODT.TXT等常见文 ...

  9. Windows下修改Android手机的hosts

    Windows下修改Android手机的hosts 1.首先,手机是Root过的. 2.连接手机和电脑, adb shell 进入命令行. 3.获取root用户权限: su -root 4.不知道为何 ...

  10. cocoapods安装完第三方类库后不生成workspace

    cocoapods的版本太低,更新cocoapod版本:sudo gem install cocoa pods