- 博客(69)
- 收藏
- 关注
原创 我只是一个普通不能在普通的人
今天第一次周末加班,感觉好累,回来啥都不想干,就想听着歌,悠闲的上下网。在这个陌生的城市,这只是很普通很平常的一天,原来生活就是那么简单。平平凡凡
2010-09-11 22:34:00 714 2
原创 我的激情 怎么了!
<br />来新的公司已经8个月了,完全进入一个全新的数据通信行业,开始极不适应,太多术语不懂,小组开会的时候根本不知道他们在讲什么。还好,已经开始慢慢适应的,渐渐走入这个行业,心也慢慢平静下来了,现在看到新来的同事能看到我当时的影子,虽然只有才8个月。<br /> <br />从毕业到现在虽然工作才两年了,自己变化很大,已经不是刚出来毛手毛脚的小伙子了。现在开始解决一个问题或者一个项目,会静下心来看看到底怎么回事,是个什么东西,不会在什么都不知道的情况下就跑过去问别人。其实投入进去看,看明白了也就那么回事
2010-09-04 12:05:00 1016 5
原创 了解一下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 5084
转载 今天碰到一个问题,在网上查了一下,发现有人碰到。转一下
<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 1957 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 908
原创 GetFATEntry详解,书上没讲清楚,转下别人的解释,不然真看不懂。
<br />函数GetFATEntry。参数存放在ax寄存器中,表示一个簇号。输出结果是该簇号在FAT表中的FATENTRY,它的内容仍然是一个簇号,表示文件下一部分所在簇的簇号。这里要仔细地体会“簇号”和“簇”之间的差别,否则在看代码的时候,很容易就会迷失。“簇”表示一个或多个扇区的集合。FAT12中,一个簇就是一个扇区,512字节。簇号,从软盘的数据区开始,从2开始编号(0,1为系统使用),本质上是一个基于FAT表的索引。<br />GetFATEntry:<br /> push es<br
2010-07-25 22:16:00 1735 1
原创 自己动手写操作系统--debug调试
启动 Debug,它是可用于测试和调试 MS-DOS 可执行文件的程序。 Debug [[drive:][path] filename [parameters]] 参数 [drive:][path] filename 指定要测试的可执行文件的位置和名称。 parameters 指定要测试的可执行文件所需要的任何命令行信息。 ++ 说明 使用 Debug 命令但不指定要测试的文件 如果使用没有位置和文件名的 Debug 命令,然后键入所有的 Debug 命令以响应 De
2010-07-07 22:59:00 877
转载 汇编指令集
<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 636
原创 自己动手写操作系统--几个问题
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 1360
原创 自己动手写操作系统--搭建环境
书上习惯用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 1042
原创 稍微总结下实模式和保护模式
这段时间一直在看这块的东西,今天总结一下:要理解实模式和保护模式,先讲讲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 893 1
原创 一段汇编,引自《自己动手写操作系统》
最近在看这本书,看得很郁闷,全是汇编,下面贴一段代码:主要是讲如何从实模式进入保护模式基本上没动,抄的书上的,编译也过了,就是没输出结果,头痛!!!待解决。。;=============================================; pmtest1.asm; 编译方法: nasm pmtest1.asm -o pmtest1.com; robbie 2010-06-30;=============================================%include "pm.i
2010-07-04 21:54:00 944 1
原创 归并排序
<br />归并排序原理很简单,是将两个或两个以上的有序表组合成一个新的有序表。<br /> <br />假设初始序列有n个记录,则可看成n个有序的子序列,每个子序列长度为1,然后两两归并,得到n/2个长度为2或1(怎么?为什么有1的可能,想想知道吧,如果是奇数序列呢)的有序子序列;再两两归并,.........如此重复,直至得到一个长度为n的有序序列为止,这种排序称为2-路归并排序。如果还不明白。。。就看看如下图:<br /> <br />49 38 65 97 76
2010-06-27 17:05:00 672
转载 linux pc-lint
1. PC-Lint 是什么?如果你真的不知道它是什么? 那么请私下询问 Google, 但千万不要声张:-).简单而言, PC-Lint 是 Gimpel Software 公司出品的一个很牛的软件, 你可以叫它吹毛求疵器, 因为它能够做比编译器严格得多的(包括但不限于)语法检查.事实上这个工具有两个版本: 一个叫 PC-Lint, 是针对 PC 机的 (主要是对付 Windows, MS-DOS, OS/2 等系统), 以可执行文件形式发布; 另一个叫 FlexeLint, 是针对其它系统的 (比如 L
2010-06-21 22:30:00 14500 2
原创 进程管理--学习笔记
<br />这几天在公司闲暇时间看了一下Robert Love的《linux内核设计与实现》(当然,我看的是中文翻译版哈。看到英文就头痛)进程管理、调度、系统调度、中断这几章,觉得这本书真的写的很好,对我这种级别的人刚好,看起来没那么卡,不像最开始接触linux的时候就抱起《linux内核源码情景分析》来看,看得我“云里来雾里去”,现在想起来真的觉得就是一口吃成大胖子,还没学会走路就开始跑了,好了,废话少说,这里把进程管理这章好好复习一下,希望有兴趣的人一起来学习!<br /> <br />1 几个概念<b
2010-06-21 22:12:00 926
原创 pc-lint
<br />今天准备搭个pclint环境,不然写的代码好多隐藏问题检查不出来,还没弄好,明天继续,下面在网上找了一些pclint安装资料,贴上来吧。。,这个工具非常好,值得推荐,能检查很多问题,还能自己配置“检查约束”<br /> <br /> PC-Lint是C/C++软件代码静态分析工具,你可以把它看作是一种更加严格的编译器。它不仅可以检查出一般的语法错误,还可以检查出那些虽然符合语法要求但不易发现的潜在错误。<br /> C语言的灵活性带来了代码效率的提升,但相应带来了代码
2010-06-17 00:13:00 910
原创 堆排序
<br />堆的定义<br />什么是堆呢?书里是这样说的:完全二叉树中所有非终端结点的值均不大于(或不小于)其左右孩子结点的值。堆可以有两种情况,直接看下面例子吧:<br /> <br /> 96<br /> / /<br /> 83 27<br /> / / /<br /> 38 11 09<br /> <br />{96, 83, 27, 38, 11, 09} 如上图所示,所有非终端结
2010-06-15 21:43:00 932 3
转载 C中的预编译宏定义
<br />今天看到linux内核对swap宏的定义成下面那样,很纳闷,为什么要do while,复习下预编译宏,转了个帖子,里面有介绍!!<br /><br />#define swap(x,y) /<br /> do { unsigned long _temp=x; x=y; y=_tmp} while (0)<br /> <br /> <br />在将一个C源程序转换为可执行程序的过程中, 编译预处理是最初的步骤. 这一步骤是由预处理器(preprocessor)来完成的. 在源流程序被编译器处
2010-06-15 11:48:00 651 2
转载 typeof关键字简介
<br />今天用到typeof,看一下它的用法<br /><br />typeof关键字是C语言中的一个新扩展。只要可以接受typedef名称,Sun Studio C 编译器就可以接受带有typeof的结构,包括以下语法类别:声明 函数声明符中的参数类型链表和返回类型 类型定义 类型操作符s sizeof操作符 复合文字 typeof实参 <br />编译器接受带双下划线的关键字:__typeof和__typeof__。本文中的例子并没有遵循使用双下划线的惯例。从语句构成上看,typeof关键字后带圆括
2010-06-15 10:30:00 918
原创 快速排序
<br />今天把快速排序写好,贴上代码,后面简单把原理讲一下<br /> <br />/****************************************************************<br /> Function: sort_partion<br /> Date: 2010-06-10<br /> Author: Robbie<br /> Description: 将数列分割成两部分<br /> Input: INT *piDat
2010-06-14 09:45:00 505
原创 插入排序
<br />今天复习了一下插入排序,先把代码贴上,后面把原理讲一下<br /> <br /> /****************************************************************<br /> Function: SORT_Insert<br /> Date: 2010-06-10<br /> Author: Robbie<br /> Description: 插入排序<br /> Input: INT *piData
2010-06-10 22:54:00 501 1
原创 选择排序
选择排序和冒泡排序思路上有一点相似,都是先确定最小元素,再确定第二小元素,最后确定最大元素。他的主要流程如下:1.数组A = {5,3,6,2,4,7},对他进行排序2.确定最小的元素放在A[0]位置,我们怎么确定呢,首先默认最小元素为5,他的索引为0,然后用它跟3比较,比他大,则认为最小元素为3,他的索引为1,然后用3跟6比,发现比他小,最小元素还是3,然后跟2比,最小元素变成了2,索引为3,然后跟4比,跟7比。当比较结束之后,最小元素也尘埃落定了。就是2,索引为3,然后我们把他放在A[0]处。为了使A[
2010-06-08 23:45:00 437 2
原创 冒泡排序
<br />呵呵,冒泡排序很简单,先练练手,贴上代码<br /> <br />/****************************************************************<br /> Function: SORT_Bubble<br /> Date: 2010-06-07<br /> Author: Robbie<br /> Description: 冒泡算法<br /> Input: INT *piData 待排序的数列<b
2010-06-08 22:47:00 417
原创 累!!
<br />今天上班有点累,在公司整了一天单元测试,不停的打桩,写测试例,测试,写的头都大了,最郁闷的事才发现1个bug,感觉效率很低啊。单元测试方法还有待加强~!<br /> <br />晚上十点回到家,环境基本搭建好了,开始把一些基本的库都整理一下,从排序算法开始吧。。。。,明天把冒泡算法代码贴上来,哈哈,很简单吧,慢慢来吧!!!呵呵。应该是要自己慢慢积累一些东西了,工作两年了,感觉进步太慢了,还是自己不够努力,得过且过。。<br /> <br />明天继续~fighting!!!
2010-06-07 23:58:00 420
转载 关于#ifdef __cplusplus extern
时常在cpp的代码之中看到这样的代码: #ifdef __cplusplus extern "C" { #endif //一段代码 #ifdef __cplusplus } #endif 这样的代码到底是什么意思呢?首先,__cplusplus是cpp中的自定义宏,那么定义了这个宏的话表示这是一段cpp的代码,也就是说,上面的代码的含义是:如果这是一段cpp的代码,那么加入extern "C"{和}处理其中的代码。 要明白为何使用extern "C",还得从cpp中对函数的重载处理开始说起。在c
2010-06-06 17:30:00 398
原创 (转)一个业内激励人的故事!!不看后悔哦
<br />一段真实在个人经历, 给那些迷失方向的朋友[转帖]<br />这些日子我一直在写一个实时操作系统内核,已有小成了,等写完我会全部公开,希望能够为国内IT的发展尽自己一份微薄的力量。最近看到很多学生朋友和我当年一样没有方向 ,所以把我的经历写出来与大家共勉,希望能给刚如行的朋友们一点点帮助。<br />一转眼我在IT行业学习工作已经七年多了,这期间我做过网页,写过MIS、数据库,应用程序,做过通信软件、硬件驱动、协议栈,到现在做操作系统内核和IC相关开发,这中间走了很多弯路,也吃了不少苦。 <br
2010-06-06 16:55:00 1564 1
原创 C语言18个经典问题答录(转)
<br />1.这样的初始化有什么问题?char *p = malloc(10); 编译器提示“非法初始式” 云云。<br /><br />答:这个声明是静态或非局部变量吗?函数调用只能出现在自动变量(即局部非静态变量) 的初始式中。<br />因为静态变量的地址必须在编译的过程中就确定下来而malloc()申请的内存地址是在运行时确定的。<br /><br />2. *p++ 自增p 还是p 所指向的变量?<br /><br />答:后缀++ 和-- 操作符本质上比前缀一目操作的优先级高, 因此*p++
2010-06-06 01:49:00 514
原创 今天开博,勉励自己,该努力了。。
每天下班回家就停止学习了,感觉这样很空虚,今天在CSDN开个博客,坚持每天回家看看博客,写写代码,坚持!!!希望有志同道合的朋友一起共勉!!
2010-05-05 19:49:00 525 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人