随笔分类 -  一个操作系统的实现

摘要:; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; boot.asm; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; Forrest Yu, 2005; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; Noted by Ethan_zhang, 2011; +++++++++++++++++++++++... 阅读全文
posted @ 2011-11-07 15:54 MagiCube 阅读(3320) 评论(0) 推荐(0) 编辑
摘要:先看下面的Makefile代码:# Makefile for boot# Programs, flags, etc.ASM = nasmASMFLAGS = -I include/# This ProgramTARGET = boot.bin loader.bin# All Phony Targets.PHONY : everything clean all# Default starting positioneverything : $(TARGET)clean : rm -f $(TARGET)all : clean everythingboot.b... 阅读全文
posted @ 2011-11-07 14:01 MagiCube 阅读(2201) 评论(0) 推荐(0) 编辑
摘要:1. cli 在asm汇编中表示将处理器标志寄存器的中断标志位清0,不允许中断2. 汇编 eax寄存器和AX,AH,AL之间的关系00000000 00000000 00000000 00000000|===============EAX===============|--32个0,4个字节,2个字,1个双字 |======AX=======|--16个0,2个字节,1个字 |==AH===|-----------8个0,1个字节 |===AL==|---8个0,1个字节 AH是AX的高8位,AL是AX的低8位,AX是EAX的低16位3. in al,92h 表示从92h号端口读入一个字节 o 阅读全文
posted @ 2011-11-01 22:45 MagiCube 阅读(8738) 评论(1) 推荐(2) 编辑
摘要:一个程序本质上都是由bss段、data段、text段三个组成的。这样的概念,不知道最初来源于哪里的规定,但 在当前的计算机程序设计中是很重要的一个基本概念。而且在嵌入式系统的设计中也非常重要,牵涉到嵌入式系统运行时的内存大小分配,存储单元占用空间大小的 问题。 在采用段式内存管理的架构中(比如intel的80x86系统),bss段(Block Started by Symbol segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域,一般在初始化时bss 段部分将会清零。bss段属于静态内存分配,即程序一开始就将其清零了。 比如,在C语言之类的程序编译完成之后,已初始化的全局变 阅读全文
posted @ 2011-10-25 20:51 MagiCube 阅读(4377) 评论(0) 推荐(0) 编辑
摘要:两段代码://global.c#define GLOBAL_VARIABLES_HERE#include "type.h"#include "const.h"#include "protect.h"#include "global.h"//global.h# ifdef GLOBAL_VARIABLES_HERE# undef EXTERN# define EXTERN# endifEXTERN int disp_pos;EXTERN t_8 gdt_ptr[6]; // 0~15:Limit 16~47:Bas. 阅读全文
posted @ 2011-10-25 20:26 MagiCube 阅读(1052) 评论(0) 推荐(0) 编辑
摘要:JMP、CALL和RET指令的近转移形式只是在当前代码段中执行程序控制转移,因此不会执行特权级检查。JMP、CALL或RET指令的远转移形式会把控制转移到另外一个代码段中,因此处理器一定会执行特权级检查。1、jmp指令紧紧进行执行流程的跳转,不会保存返回地址2、call指令在进行流程跳转前会保存返回地址,以便在跳转目标代码中可以使用ret指令返回到call指令的下一条指令处继续执行。执行段内跳转时,只保存EIP;如果是段间跳转,还保存CS。3、ret和retf:这两个指令的功能都是调用返回。 (1)ret在返回时只从堆栈中取得EIP;retf中的字母f表示far,即段间转移返回,要从堆栈中.. 阅读全文
posted @ 2011-10-22 17:53 MagiCube 阅读(3501) 评论(0) 推荐(0) 编辑
摘要:INT 10H 是由 BIOS 对屏幕及显示器所提供的服务程序,而后倚天公司针对倚天中文提供了许多服务程序,这些服务程序也加挂在 INT 10H 内。使用 INT 10H 中断服务程序时,先指定 AH 寄存器为下表编号其中之一,该编号表示欲调用的功用,而其他寄存器的详细说明,参考表后文字,当一切设定好之后再调用 INT 10H。底下是它们的说明:AH功 能调用参数返回参数 / 注释1 置光标类型 (CH)0―3 = 光标开始行 (CL)0―3 = 光标结束行2 置光标位置 BH = 页号 DH = 行 DL = 列 3 读光标位置 BH = 页号 CH = 光标开始行 ... 阅读全文
posted @ 2011-10-19 14:59 MagiCube 阅读(43734) 评论(0) 推荐(1) 编辑
摘要:转自:http://blog.csdn.net/zhuichao001/article/details/5618206段寄存器存放 基地址AX 通用寄存器CS 存放要被cpu执行的代码的基地址 code segmentIP 别名为指令指针寄存器,存放段地址的偏移地址CS*16+IP 就是cpu要执行的指令debug是dos、windows都提供的实模式程序调试工具,可以查看cpu各种寄存器中的内容和机器码级跟踪程序的运行r命令用来查看和改变各个寄存器内容,d命令查看内存中的内容,u命令将内存机器码转为汇编指令,a命令以汇编指令格式在内存写入指令t命令但不跟踪数据段:全局变量代码段:代码堆栈段: 阅读全文
posted @ 2011-10-19 14:40 MagiCube 阅读(12838) 评论(0) 推荐(1) 编辑