- 博客(25)
- 资源 (18)
- 收藏
- 关注
转载 人物传奇:操作系统“天神”David Cutler
David Cutler,VMS和Windows NT的首席设计师,1988年去微软前号称硅谷最牛的内核开发人员,在操作系统领域摸爬滚打几十年,其间的经历就像一部标准的外省青年奋斗记。 与许多计算机界的前辈牛人们一样,David Cutler并不是计算机科班出生,他在大学拿的是数学学士,主攻物理,满怀热情地想成为一位建造事物的工程师。所以,毕业后他进入杜邦公司从事材料测试。一次偶然的机会,David被指派负责在DEC的计算机上运行模拟程序,还为多台单机实时系统编写中央控制程序,调度各种
2011-05-30 22:04:00 1664
转载 世界上最牛的程序员
MIT BBS上说微软电话面试的一道题就是“Who do you think is the best coder, andwhy?”。我觉得挺有意思的,也来凑个热闹。排名不分先后。 Bill Joy, 前任Sun的首席科学家,当年在Berkeley时主持开发了最早版本的BSD。他还是vi和csh的作者。当然,Csh Programming Considered Harmful 是另一个话题乐。据说他想看看自己能不能写个操作系统,就在三天里写了个自己的Unix, 也就是BSD的前身。当然
2011-05-29 18:06:00 1753
原创 第17章 使用BIOS进行键盘输入和磁盘读写 笔记2
<br />上次只实现了向软盘中写数据。今天要实现向软盘中读取数据。今天晚上回来后看了会儿小说,就开始调试程序了。我上次是使用Virtual PC 2007进行实验的,但是发现Virtual PC 2007有一点小问题。今天就使用的是bochs。调试许久,终于出来了。真高兴啊。实验代码如下面:<br />assume cs:codedata segmentdw 256 dup (1324h)data endscode segmentint7ch: jmp short beg
2011-05-18 00:47:00 607
原创 第17章 使用BIOS进行键盘输入和磁盘读写
P302 键盘输入将引发9号中断,BIOS提供了 int 9 中断例程。P303 BIOS的 int 9 中断例程和 int 16h 中断例程是一对相互配合的程序,int 9 中断例程向键盘缓冲区中写入,int 16h 中断例程从缓冲区中读出。它们写入和读出的实际不同,int 9 中断例程是在有键按下的时候想键盘缓冲区中写入数据;而 int 16h 中断例程是在应用程序对其进行调用的时候,将数据从键盘缓冲区中读出。
2011-05-15 23:25:00 770 1
原创 2011.05.14 Family Day 公司内部趣味运动会
今天公司在万科城小学举办了趣味运动会,我也参加了。我走了方阵,参加了“鱼跃五环”和“力拔山河”这两项比赛。天气也还好,不算太热。一会儿出太阳,一会儿又被云彩遮住了,还凉风习习的。 不过比赛的过程中出现了一点小插曲,快要进行拔河比赛时,突然下起了小雨,还有越来越大的趋势。我们坚持着没有散开,淋了一会儿雨居然停了。比赛正常进行了下去。不过可惜的是,最后我们“联合方阵1”在7支队伍中名列第六,没有取得前三甲,可惜啊。 感觉公司举办这样的活动还是很好的,至少能促进一下部门内部和部门
2011-05-14 23:05:00 943
原创 第16章 直接定址表 笔记
P289 数据标号标记了存储数据的单元的地址和长度。它不同于仅仅表示地址的地址标号。P290 注意:在后面加有":"的地址标号,只能在代码段中使用,不能在其它段中使用。P295 在上面的两个子程序中,我们将 通过给出的数据进行计算或比较而得到结果的问题,转化为用给出的数据作为查表的数据,通过查表得到问题的结果。具体的查表方法,是用查表的依据数据,直接计算出所要查找的元素在表中的位置。像这种可以通过依据数据,直接计算出所要找的元素的位置的表,我们称其为:直接定址表。P299 实验16 编写包含多个功能子程序的
2011-05-14 21:22:00 547
原创 第15章 外中断 笔记
P272 PC系统的接口卡和主板上,装有各种接口芯片。这些外设接口芯片的内部有若干寄存器,CPU将这些寄存器当作端口来访问。 外设的输入不直接送入内存和CPU,而是送入相关的接口芯片的端口中;CPU向外设的输出也不是直接送入外设,而是先送入到端口中,再由相关的芯片送到外设。CPU还可以向外设输出控制命令,而这些控制命令也是先送到相关芯片的端口中,然后再由相关的芯片根据命令对外设实施控制。 可见,CPU通过端口和外部设备进行联系。P274 一般将按下一个键时产生的扫描码称为通码
2011-05-13 21:51:00 458
原创 第14章 端口 笔记
P265 CPU可以直接读写以下3个地方的数据:(1) CPU内部的寄存器;(2) 内存单元;(3) 端口。 在访问端口的时候,CPU通过端口地址来定位端口。因为端口所在的芯片和CPU通过总线相连,所以端口地址和内存地址一样,通过地址总线来传送。在PC系统中,CPU最多可以定位64KB个不同的端口。则端口地址的范围是0~65535。 对端口的读写不能用mov,push,pop等内存读写指令。端口的读写指令只有两条:in和out,分别用于从端口读取数据和往端口写入数据。P266 注
2011-05-12 22:38:00 602
原创 第13章 int指令 笔记
<br />P252 CPU执行int n指令,相当于引发一个n号中断的中断过程。<br />P254 int指令和iret指令的配合使用与call和ret指令的配合使用具有相似的思路。<br />P259 一般来说,一个供程序员调用的中断例程中往往包括多个子程序,中断例程内部用传递进来的参数来决定执行哪一个子程序。BIOS和DOS提供的中断例程,都用ah来传递内部子程序的编号。<br />P262 实验13 编写、应用中断例程。(书里都有例子的,比较简单,就不写程序了)
2011-05-11 22:32:00 605
转载 Intel公司的CPU发展史简述
摘要:中央处理器(Central Processing Unit,CPU),是电子计算机的主要设备之一,由运算器和控制器组成。本文介绍CPU由4位处理器、8位处理器、16位处理器、32位处理器的简单发展历程,挑选了里程碑的事件进行讲述。可以说个人电脑的发展是随着CPU的发展而前进的。一. Intel 4004 1971年,英特尔公司推出了世界上第一款微处理器4004,这是第一个用于微型计算机的4位微处理器,它包含2300个晶体管,随后英特尔又推出了8008,由于运算性能很差,其市场反应十分不理
2011-05-10 23:10:00 9773
转载 windows操作系统中安装驱动文件时的关于数字签名的知识
在Windows 2000以前的Windows版本中,安装操作系统之外的软件,可能会覆盖掉一些共享的系统文件,例如动态链接库(*.dll文件)、可执行文件(*.exe),这样可能会导致程序运行不稳定、系统出现故障,这主要是由于所谓的DLL陷阱所导致。 为了彻底解决这一问题,在Windows 2000和Windows XP中,微软引入了“Windows文件保护”机制用来防止替换受到保护的系统文件,包括*.sys、*.dll、*.ocx、*.ttf、*.fon、*.exe等类型的文件,Wi
2011-05-10 22:32:00 6227
原创 第12章 内中断 笔记
P238 可以用中断类型码,在中断向量表中找到中断处理程序的入口。找到这个入口地址的最终目的是用它设置CS和IP,使CPU执行中断处理程序。用中断类型码找到中断向量,并用它设置CS和IP,这个工作是由CPU的硬件自动完成的。CPU硬件完成这个工作的过程被称为中断过程。 CPU收到中断消息后,要对中断消息进行处理,首先将引发中断过程。硬件在完成中断过程后,CS:IP将指向中断处理程序的入口,CPU开始执行中断处理程序。 下面是8086CPU在受到中断消息后,所引发的中断过程:(
2011-05-10 21:59:00 649
原创 第11章 标志寄存器 笔记
P213 在CPU内部的寄存器中,有一种特殊的寄存器(对于不同的处理器,个数和结构都可能不同)具有以下3种作用:(1) 用来存储相关指令的某些执行结果;(2)用来为CPU执行相关指令提供行为依据;(3)用来控制CPU的相关工作方式。 这种特殊的寄存器在8086CPU中,被称为标志寄存器。P233 pushf的功能是将标志寄存器的值压栈,而popf是从栈中弹出数据,送入标识寄存器。pushf和popf,为直接访问标志寄存器提供了一种方法。P234 编写子程序,代码如下:assume cs:co
2011-05-09 22:16:00 740
转载 评论:微软37年的悲剧:MS-DOS的幽灵
声明:本文转载自太平洋电脑网:http://article.pchome.net/content-1147174.html 一个由虚拟设备文件而造成的限制,竟然能跨越三十多年,跨越CP/M、MS-DOS、Windows、OS/2和Windows NT五个架构而以相同的形式存在,这最后也许真是微软的一场悲剧。 1973年,一个名为CP/M的操作系统诞生了。CP/M的文件系统是单层目录结构,文件名限制为8.3字符。为了支持用户程序的输入输出,CP/M提供了虚拟文件 COM1, COM2,
2011-05-08 23:44:00 722
原创 第10章 CALL和RET指令 课程设计一
第10章的课程设计一是比较难的。我以前也做出来过,这次再做,也花了一个下午加一个晚上的时间。还是自己功力不行啊。平时多多练习多多编程还是正道。下面是今天晚上该搞定的代码:assume cs:codesgdata segment db '1975','1976','1977','1978','1979','1980','1981','1982','1983' db '1984','1985','1986','1987','1988','1989','1990','1991','199
2011-05-08 22:16:00 524
原创 第10章 CALL和RET指令 笔记
P190 call和ret指令都是转移指令,它们都修改IP,或同时修改CS和IP。它们经常被共同用来实现子程序的设计。 ret指令用栈中的数据,修改IP的内容,从而实现近转移; CPU执行ret指令时,相当于进行: pop IP。 retf指令用栈中的数据,修改CS和IP的内容,从而实现远转移。 CPU执行retf指令时,相当于进行: pop IP pop CSP199 mul是乘法指令,使用mul做乘法的时候,注意以下两点:
2011-05-08 11:52:00 644
原创 第9章 转移指令的原理 笔记
P175 可以修改IP,或同事修改CS和IP的指令统称为转移指令。概括地讲,转移指令就是可以控制CPU执行内存中某处代码的指令。 8086CPU的转移行为有以下几类:● 只修改IP时,称为段内转移,比如 jmp ax● 同时修改CS和IP时,称为段间转移,比如 jmp 1000:0 由于转移指令对IP的修改范围不同,段内转移又分为:短转移和近转移。● 短转移IP的修改范围为-128~127。● 近转移IP的修改范围为-32768~32767。 8086CPU的
2011-05-08 09:08:00 531
原创 第8章 数据处理的两个基本问题 笔记
P161 在8086CPU中,只有4个寄存器bx,si,di和bp可以用在“[……]”中进行内存单元的寻址。 在“[……]”中,这4个寄存器或者单个出现,或只能以4中组合出现:bx和si,bx和di,bp和si,bp和di。P162 只要在[……]中使用寄存器bp,而指令中没有显式地给出段地址,段地址就默认放在ss中。P169 div是除法指令。使用div做除法的时候应注意以下问题:(1) 除数:有8位和16位两种,在一个reg或内存单元中。(2) 被除数:有16位和32位两种,默认放在AX
2011-05-07 23:00:00 486
原创 第7章 更灵活的定位内存地址的方法 笔记
P139 我们可以在汇编程序中,用'……'的方式指明数据是以字符的形式给出的。编译器将把它们转化成相对应的ASCII码。P152 如果我们比较一下前面用到的几种定位内存地址的方法(可称为寻址方式),就可以发现:(1) [idata]用一个常量来表示地址,可用于直接定位一个内存单元;(2) [bx]用一个变量来表示内存地址,可用于间接定位一个内存单元;(3) [bx+idata]用一个变量和常量表示地址,可在一个起始地址的基础上用变量间接定位一个内存单元;(4) [bx+si]用两个变量表示地址;(5) [b
2011-05-05 22:10:00 528
原创 第6章 包含多个段的程序 笔记
P123 程序取得所需空间的方法有两种:一是在加载程序的时候为程序分配;二是在程序执行的过程中向系统申请。在我们的课程中,不讨论第二种方法。 我们若要一个程序在被加载的时候取得所需的空间,则必须要在源程序中作出说明。我们通过在源程序中定义段来进行内存空间的获取。P126 我们可以在源程序中指明程序的入口所在。 伪指令end除了通知编译器程序结束外,还可以通知编译器程序的入口在什么地方。 在前面的课程中(参见4.8节),我们已经指导在单任务系统中,可执行文件的程
2011-05-04 22:21:00 454
原创 第5章 [BX]和loop指令 笔记
P95 要完整地描述一个内存单元,需要两种信息:1.内存单元的地址;2.内存单元的长度(类型)。 为了描述上的简洁,在以后的课程中,我们将使用一个描述性的符号“()”来标识一个寄存器中的内容或一个内存单元中的内容。P96 注意,“()”中的元素可以有3中类型:1.寄存器名;2.段寄存器名;3.内存单元的物理地址(一个20位数据)。 “(X)”所表示的数据有两种类型:1.字节;2.字。P99 loop指令的格式为:loop 标号,CPU执行loop指令的时候,要进行两步操作,1.(cx
2011-05-03 23:17:00 541
原创 第4章 第一个程序 笔记
P77 可执行文件包括两部分内容:1.程序(从源程序中的汇编指令翻译过来的机器码)和数据(源程序中定义的数据);2.相关的描述信息(比如,程序有多大,要占用多少内存空间等)。P79 注意,以后可以将源程序文件中的所有内容成为源程序,将源程序中最终由计算机执行、处理的指令或数据,成为程序。P91 为了观察程序的运行过程,可以使用debug。debug可以将程序加载入内存,设置CS:IP指向程序的入口,但debug并不放弃对CPU的控制,这样,我们就可以使用debug的相关命令来单步执行程序,查看每一条指令的执
2011-05-02 22:11:00 409
原创 第3章 寄存器(内存访问) 笔记
P47 字单元,即存放一个字型数据(16位)的内存单元,由两个地址连续的内存单元组成。高地址内存单元中存放字型数据的高位字节,低地址内存单元中存放字型数据的低位字节。P48 任何两个地址连续的内存单元,N号单元和N+1号单元,可以将它们看成两个内存单元,也可看成一个地址为N的字单元的高位字节单元和低位字节单元。P49 8086CPU不支持将数据直接送入段寄存器的操作。为什么8086CPU不支持将数据直接送入段寄存器的操作?这属于8086CPU硬件设计的问题,我们只要知道这一点就行了。P57 8086CPU的
2011-05-02 21:55:00 513
原创 第2章 寄存器 笔记
P14 8086CPU有14个寄存器,每个寄存器有一个名称。这些寄存器是:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。 8086CPU的所有寄存器都是16位的,可以存放两个字节。 8086CPU的上一代CPU中的寄存器都是8位的,为了保证兼容,使原来基于上代CPU编写的程序稍加修改就可以运行在8086之上,8086CPU的AX、BX、CX、DX这4个寄存器都可分为两个可独立使用的8位寄存器来用。P16 处于兼容性的考虑,8086CPU可以一次
2011-05-02 17:09:00 665
原创 第1章 基础知识 笔记
P4 磁盘不同于内存,磁盘上的数据或程序如果不读到内存中,就无法被CPU使用。P7 8088CPU的数据总线宽度为8,8086CPU的数据总线宽度为16。P8 CPU可以直接使用的信息在存储器(内存)中存放。P9 地址总线的宽度决定了CPU的寻址能力; 数据总线的宽度决定了CPU与其它器件进行数据传送时的一次数据传送量; 控制总线的宽度决定了CPU对系统中其它器件的控制能力。
2011-05-02 16:07:00 403
virtual_PC_2007_32bits 第二部分(共2部分)
2011-04-24
virtual_PC_2007_32bits 第一部分(共2部分)
2011-04-24
琢石成器_Windows环境下32位汇编语言程序设计 光盘源代码
2011-04-24
programming the microsoft windows driver model中文版
2011-04-21
micrium ucos-II嵌入式操作系统 V2.70源代码
2011-04-05
micrium ucos-II嵌入式操作系统 V2.61源代码
2011-04-05
micrium ucos-II嵌入式操作系统 V2.85源代码
2011-04-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人