摘要:
学习过程中遇到一个对保护模式总结很好的Blog,转来分享一下。 先说下特权级的概念,在保护模式下,系统依靠特权级来实施代码和数据的保护,相当于权限啦。特权级共有4个级别,0,1,2,3,数字越小表示权限越高。如图: 较为核心的代码和数据放在较高(靠内)的层级中,处理器用此来防止较低特权的任务在不被允许的情况下访问处于高特权级的段。为了防止概念混淆,我们不用特权级大小来说明,改为内层(高),外... 阅读全文
摘要:
还是在原有代码基础上进行修改,加入LDT的使用,代码分析如下(红色部分为新增代码): 本程序是在原有完成大内存读写测试完成后,调用局部任务显示字符L ; ========================================== ; pmtest3.asm ; 编译方法:nasm pmtest3.asm -o pmtest3.com ; =========================... 阅读全文
摘要:
在前面的代码上进行修改后,测试读写大地址内存(实模式下的1MB限制),而且从保护模式再调回实模式.上代码分析(省略前面重复的代码部分):相关:org 0100h 请参看DOS加载.EXE过程《Orange’s 一个操作系统的实现》4.保护模式3----DOS加载.EXE过程 阅读全文
摘要:
在《《Orange’s 一个操作系统的实现》》一书中有时使用了org 0100h,为何是0100h?因为书中的例子是为了突破引导扇区512字节的限制,而将asm文件编译为.com文件以便在freedos中执行(bochs中),有必要了解一下DOS加载.EXE的过程. 以下就引用《汇编语言》第二版 王爽中的内容来说明一下: 阅读全文
摘要:
一、详解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则是相对 阅读全文
摘要:
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,所以会 阅读全文
摘要:
1.pm.inc定义了描述符、选择子及相关位数的取值 ; 描述符图示 ; 图示一 ; ; ------ ┏━━┳━━┓高地址 ; ┃ 7 ┃ 段 ┃ ; ┣━━┫ ┃ ; 基 ; 字节 7 ┆ ┆ ┆ ; 址 ; ┣━━┫ ② ┃ ; ┃ 0 ... 阅读全文
摘要:
来源于《来源于NASM中文手册》 NASM中文手册 第一章: 简介 1.1 什么是NASM NASM是一个为可移植性与模块化而设计的一个80x86的汇编器。它支持相当多 的目标文件格式,包括Linux和'NetBSD/FreeBSD','a.out','ELF','COFF',微软16 位的'OBJ'和'Win32'。它还可以输出纯二进制文件。它的语法设计得相当的简 洁易懂,和Intel语... 阅读全文
摘要:
十分钟操作系统代码boot.asm如下编译执行过程如下a.编译boot.asm nasm boot.asm –o boot.binb.创建虚拟软盘 输入命令bximage(bochs自带),创建名为1.44M的a.img的虚拟软盘c.将引导扇区boot.bin写入a.img dd if=boot.bn of=a.img bs=512 count=1 conv=notruncd.修改bochsrc文件(bochs2.4.5需要修改)# filename of ROM images romimage: file=/usr/share/bochs/BIOS-bochs-latest vgaromi 阅读全文
摘要:
书中给出了两种环境: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一下很多,以下 阅读全文