自己动手写操作系统
robbie1314
每天坚持学习至少一小时~~
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
一段汇编,引自《自己动手写操作系统》
最近在看这本书,看得很郁闷,全是汇编,下面贴一段代码:主要是讲如何从实模式进入保护模式基本上没动,抄的书上的,编译也过了,就是没输出结果,头痛!!!待解决。。;=============================================; pmtest1.asm; 编译方法: nasm pmtest1.asm -o pmtest1.com; robbie 2010-06-30;=============================================%include "pm.i原创 2010-07-04 21:54:00 · 1023 阅读 · 1 评论 -
今天碰到一个问题,在网上查了一下,发现有人碰到。转一下
<br />老于第五章P209的exception_handler函数在我的2.6.18的内核编译的时候会出现一个错误:undefined reference to `memset'<br />这是因为(推断一下应该是这个原因):其中的二维数组err_description[][64]的赋值造成的。在linux编译这段二维数组赋值的时候会调用到C库函数memset。而老于这章的makefile中用ld连接的时候并没有使用-lc选项,所以会有上面提到的错误。当修改makefile增加-lc选项的时候再使用ma转载 2010-08-09 23:36:00 · 2219 阅读 · 2 评论 -
《自己动手写OS》勘误区
<br /> 《自己动手写OS》看了也半月有余,发现不少书中的笔误或错误,于是开辟一篇博客详述其中的错误之处,以后会不断更新。<br />P154 表5-2 Program header 1 下数第三行,第四行的 0x8049110 该为 0x8048110<br />P158 LABEL_FILENAME_FOUND 标号下 and di, 0FFF0h 改为 and di, 0FFE0h<br />书中多次在定义描述符时,对描述符的界限定义出现错误,例P85 代码3-25 中 Descrip转载 2010-08-08 14:47:00 · 974 阅读 · 0 评论 -
GetFATEntry详解,书上没讲清楚,转下别人的解释,不然真看不懂。
<br />函数GetFATEntry。参数存放在ax寄存器中,表示一个簇号。输出结果是该簇号在FAT表中的FATENTRY,它的内容仍然是一个簇号,表示文件下一部分所在簇的簇号。这里要仔细地体会“簇号”和“簇”之间的差别,否则在看代码的时候,很容易就会迷失。“簇”表示一个或多个扇区的集合。FAT12中,一个簇就是一个扇区,512字节。簇号,从软盘的数据区开始,从2开始编号(0,1为系统使用),本质上是一个基于FAT表的索引。<br />GetFATEntry:<br /> push es<br原创 2010-07-25 22:16:00 · 1854 阅读 · 1 评论 -
自己动手写操作系统--debug调试
启动 Debug,它是可用于测试和调试 MS-DOS 可执行文件的程序。 Debug [[drive:][path] filename [parameters]] 参数 [drive:][path] filename 指定要测试的可执行文件的位置和名称。 parameters 指定要测试的可执行文件所需要的任何命令行信息。 ++ 说明 使用 Debug 命令但不指定要测试的文件 如果使用没有位置和文件名的 Debug 命令,然后键入所有的 Debug 命令以响应 De原创 2010-07-07 22:59:00 · 978 阅读 · 0 评论 -
稍微总结下实模式和保护模式
这段时间一直在看这块的东西,今天总结一下:要理解实模式和保护模式,先讲讲intel x86 cpu发展的历史从8086开始讲吧,8086是16位cpu(为什么是16位,是指地址线吗?不是的,因为8086就是20位地址线,一般是指处理器中的“算术逻辑单元”ALU的宽度。系统总线中的数据部分,称为“数据总线”,通常与ALU具有相同的宽度)。8086是20位地址线,即能寻址2的20次方即1M地址空间。而8086的ALU宽度只有16位,如何寻址1M空间呢??intel是这样实现的:原创 2010-07-05 21:22:00 · 995 阅读 · 1 评论 -
汇编指令集
<br />一、数据传输指令<br /> 1. 通用数据传送指令.<br />MOV (MOVe) 传送字或字节.<br />MOVS (MOVe String) 串传送指令<br />MOVSX 先符号扩展,再传送.<br />MOVZX 先零扩展,再传送.<br />PUSH 把字压入堆栈.<br />POP 把字弹出堆栈.<br />PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.<br />POPA转载 2010-07-07 22:46:00 · 704 阅读 · 0 评论 -
自己动手写操作系统--几个问题
1 有关DOS下emm386错误运行书中程序发现DOS提示错误“emm386:unrecoverable privileged operation error #n9.press enter to reboot..”解决方法如下: 在dos下修改config.sys文件,将emm那一行去掉即可,或在该行前键入REM 。注意需要重新启动虚拟机才能生效! (修改文件的命令为:edit config.sys)2 清屏代码pmtest1这个程序中没有清屏过程,只是直接现实红色“P”,加入以下代码原创 2010-07-07 22:43:00 · 1454 阅读 · 0 评论 -
自己动手写操作系统--搭建环境
书上习惯用virtual PC和bochs,但是我习惯了VMware,最后还是用vmware搭建了dos环境步骤如下:1 安装nasm。编译书中的汇编程序需要用到汇编软件Nasm。可以到http://sourceforge.net/project/showfiles.php?group_id=6208下载Windows和DOS版本的Nasm。 我用的是window版本,下载后解压,然后把nasm.exe ndisasm.exe拷贝到c:/windows/system32/下 这样,就可以在“开始->运原创 2010-07-07 22:01:00 · 1157 阅读 · 0 评论 -
了解一下IRETD/ RET/ RETF
<br />IRETD/ RET/ RETF 有什么区别,今天GOOGLE了一下:<br />RET, and its exact synonym RETN, pop IP or EIP from the stack and transfer control to the new address. Optionally, if a numeric second operand is provided, they increment the stack pointer by a further imm16 b原创 2010-08-14 22:12:00 · 5558 阅读 · 0 评论
分享