随笔分类 -  oranges‘

一路下来的学习笔记
全面认识计算机启动过程【转载】
摘要:http://arch.pconline.com.cn//pcedu/teach/computer/base/0405/384661.html打开电源启动机器几乎是电脑爱好者每天必做的事情,面对屏幕上出现的一幅幅启动画面,我们一点儿也不会感到陌生,但是,计算机在显示这些启动画面时都做了 些什么工作呢?相信有的朋友还不是很清楚,本文就来介绍一下从打开电源到出现Windows的蓝天白云时,计算机到底都干了些什么事情。 首先让我们来了解一些基本概念。第一个是大家非常熟悉的BIOS(基本输入输出系统),BIOS是直接与硬件打交道的底层代码,它为操作系统提供了控制硬件设备的基本功能。BIOS包括有系.. 阅读全文

posted @ 2013-08-24 11:32 weiweishuo 阅读(274) 评论(0) 推荐(0)

bochs默认没有pci的
摘要:这篇帖子问得很清楚:------------------------------------------------------------------------------------------------------------------------------------------------------各位,在bochs里面能模拟PCI设备吗?在使用bochs调试时,发现在整个启动过程中没看到向VPC启动时/电脑启动时的自检过程,那BIOS的信息该从哪里获取?PCI设备一般是对CF8、CFC进行读写来获取BIOS中PCI设备配置空间里的信息的,那通过bochs,这个过程还会一. 阅读全文

posted @ 2013-07-04 09:01 weiweishuo 阅读(948) 评论(0) 推荐(0)

IDE控制器中的寄存器【转载】
摘要:IDE控制器中有两组寄存器:命令寄存器和控制寄存器。命令寄存器用于接收命令和传送数据,控制寄存器用作驱动器控制。表10.15列出了IDE控制器中的寄存器。从表中可以看出以下三点:·两组寄存器用CS0(上划线)和CSl(上划线)信号来区分,而组内的寄存器用DA2、DAl和DAO加以区分。·表中有两个寄存器共用一个端口地址的情况:在读操作时,访问一个寄存器;而在写操作时,访问另一个寄存器。这样安排是为了节省I/O地址资源。·控制寄存器组中实际安排的寄存器并不多,真正用作控制的只有一个。这为以后扩充保留了足够的空间。目前,大部分主板配有两个IDE接口,对第一个IDE接口 阅读全文

posted @ 2013-05-26 18:55 weiweishuo 阅读(2014) 评论(0) 推荐(0)

写一个简单的磁盘驱动
摘要:写一个简单的IDE磁盘驱动。 那么多端口,光oranges’上列出来的几个我都晕了。还是先别一头扎进去。“驱动模块”不过是向上(系统)提供读写磁盘的接口函数,向下封装一系列端口操作。闭上眼,想想我们需要磁盘驱动器做什么,再去找相应功能的端口。下面我们就闭上眼: 1,首先,我们要设定硬盘控制器对扇区的寻址方式,是传统的“柱面/磁头/扇区”,还是所谓的“逻辑扇区”?这就需要设定0X1F6端口的bit6(L位),1表示LBA,0表示CHS。 我们选择LBA。 2,无论读写,我们都要告诉硬盘控制器,要操作的硬盘号(一个PC至少能挂4个IDE硬盘呢),起始扇区号,读写的扇区个数。 我们把硬盘号(0或1. 阅读全文

posted @ 2013-05-25 21:39 weiweishuo 阅读(489) 评论(0) 推荐(0)

关于有符号数移位的一篇帖子
摘要:请问有符号位的移位,最高位是否会被补1,从而成为负数?比如signed int a = 320;a>>1=?...不会。随着移位,正数不断填零,负数会不断的填1。...负数填1是保证 还是负数正数填0 保证还是正数 ...给楼主一个建议,做位移之前,通通强制转换成无符号型的,这样结果就可控了…… ...移位 要看是什么数,和码制,这里整体讲一下:一、逻辑移位(无符号数):不管原码、反码、补码,左移和右移一律补"0"二、算术移位(有符号数): (1):真值为正数:不管原码、反码、补码,左移和右移一律补"0" (2)... 阅读全文

posted @ 2013-05-25 17:17 weiweishuo 阅读(758) 评论(0) 推荐(0)

c语言使用汇编模块里的标签
摘要:假如在一个汇编模块里声明了entrance_kernel equ 0x30400global entrance_kernel要想在c语言里用这个标签,先要写:extern int entrance_kernel,把entrance_kernel声明成一个int类型的变量。试着printf("%x",entrance_kernel);会发现输出的不是0x30400,因为c只会到ds:entrance_kernel处取一个整数。试着printf("%x“,&entrance_kernel);就输出0x30400了。汇编的标签与c的变量... 阅读全文

posted @ 2013-05-15 14:22 weiweishuo 阅读(237) 评论(0) 推荐(0)

equ定义的是符号
摘要:编译这段程序:global babybaby equ 0x30400[section .text]mov eax,babynasm -f elf -o t.o t.asmreadelf -s t.oSymbol table '.symtab' contains 4 entries: Num: Value Size Type Bind Vis Ndx Name 0: 00000000 0 NOTYPE LOCAL DEFAULT UND 1: 00000000 0 FILE LOCAL DEFAULT ABS t.... 阅读全文

posted @ 2013-05-15 13:52 weiweishuo 阅读(310) 评论(0) 推荐(0)

tips for asm
摘要:1,mov eax,-1 向寄存器mov负值是合法的(我用的是nasm),把这条语句汇编后又反汇编后得到:mov eax ,0xffffffff 不知道这是intel支持的,还是nasm汇编器支持的 阅读全文

posted @ 2013-01-08 20:09 weiweishuo 阅读(136) 评论(0) 推荐(0)

orange‘s学习日志
摘要:2012-10-10 *第5章学完了,真像作者说的,“喘口气了”。想到学习第三章时的痛苦,心里开阔了一些:第三章确实是个坎儿,我之前只学了王爽的80X86汇编,没接触过保护模式和80386工作机制,所以第三章劈头盖脸的就是选择子,段描述符,门描述符,gdt,idt,ldt,tss,特权级,堆栈切换等等,彻头彻尾的新知识,而我当时还没意识到(现在想起来这一点才是可怕的),没有心理准备,每天学的都不满意,不开心...不过,虽然方法不对头,但终究一点儿点儿摸过来了,这时才猛发现杨季文那本黑皮书,在这段日子里被翻老了半截。很感谢在网上认识的ganboing,他对我讲学orange's,光有一点 阅读全文

posted @ 2012-10-10 17:49 weiweishuo 阅读(387) 评论(0) 推荐(0)

linux不使用任务门【转载】
摘要:http://oss.org.cn/kernel-book/ch05/5.4.1.htmIntel的这种设计确实很周到,也为任务切换提供了一个非常简洁的机制。但是,由于i386的系统结构基本上是CISC的,通过JMP指令或CALL(或中断)完成任务的过程实际上是“复杂指令”的执行过程,其执行过程长达300多个CPU周期(一个POP指令占12个CPU周期),因此,Linux内核并不完全使用i386CPU提供的任务切换机制。由于i386CPU要求软件设置TR及TSS,Linux内核只不过“走过场”地设置TR及TSS,以满足CPU的要求。但是,内核并不使用任务门,也不使用JMP或CALL指令实施任务 阅读全文

posted @ 2012-10-10 10:04 weiweishuo 阅读(409) 评论(0) 推荐(0)

用nasm编译16位的elf文件
摘要:文档里说到nasm在输出elf目标文件时,具备16位段的扩展能力(众所周知elf只有32位和64位格式)。不知道官方这句话真的假的,反正目前我试过两种情形会失败: 情形1——16位实模式下,通过int 13h将软盘上的kernel.elf文件加载到80000h地址处,找到elf的入口地址,然后跳进去,结果代码执行错误,输入"u/10 entry"(entry是在调试时候慢慢算出来的)反汇编一看,入口处的指令奇形怪状,跟kernel.asm不一样。我怀疑16位实模式下,使不能执行elf文件中的指令的。下面贴出来kernel.asm: kernel.asm global _st 阅读全文

posted @ 2012-10-06 15:30 weiweishuo 阅读(709) 评论(0) 推荐(0)

bochs调试心得
摘要:1,让调试错误信息显示到控制台 作者在第三章讲DPL时,设计了一个保护异常的出错例子(50页):将DPL设为1,RPL设为3,编译运行,结果“系统崩溃,bochs重启,在控制台你能看到这样的字样:load_seg_reg(ds):RPL&amp;RPL must be <=DPL” 可我专门找了一个上午都没有找到出错信息,最后发现bochs的调试出错信息默认都被重定向到bochsout.txt文件里去了。 要想让出错信息重回控制台,把配置文件.bochsrc里“log: Bochsout.txt ”这行用#号注释掉就OK了。 bochs在退出或崩溃时都会输出有关信息(到控制台或是 阅读全文

posted @ 2012-10-06 15:08 weiweishuo 阅读(745) 评论(0) 推荐(0)

谈谈我对攻读计算机研究生的看法
摘要:就我自己的理解,谈谈我对读研和软件学院的看法,不妥之处一笑了之即可。 如果你有实际开发工作经验,感觉自己的水平和实力进入了一个高原期,迫切需要从理论上提高,那么计算机学院是唯一选择。因为计算机学院才能让你在理论上更上一层楼。软件学院从教学计划上就没有把你往这方面带。当然能不能更上一层楼最终还是完全取决于你自己。需要特别说明的是,工作经验并不一定等于开发经验,我见过很多工作2-3年的人,但是没有一点开发经验。 你说:“他们都有很强的开发能力,只是不太喜欢读书,也只是希望混个学历对今后在岗位上晋升有好处”,我可以向你保证,你所说的人绝对不是开发能力很强的人。因为,1)高手不可能不喜欢读... 阅读全文

posted @ 2012-10-02 09:39 weiweishuo 阅读(217) 评论(0) 推荐(0)

ELF(Executable and Linking Format)
摘要:http://hi.baidu.com/zengzhaonong/item/32b06adfecdb774edcf9be78【来源】 现代Linux采用ELF(Executable and Linking Format)做为其可连接和可执行文件的格式,因此ELF格式也向我们透出了一点Linux核内的情景,就像戏台维幕留下的一条未拉严的缝。 PC世界32仍是主流,但64位的脚步却已如此的逼近。如果你对Windows比较熟悉,本文还将时时把你带回到PE中,在它们的相似之处稍做比较。ELF文件以“ELF头”开始,后面可选择的跟随着程序头和节头。地理学用等高线与等温线分别展示同一地区的地势和气候,程序 阅读全文

posted @ 2012-09-30 20:20 weiweishuo 阅读(676) 评论(0) 推荐(0)

Linux下的ELF文件格式简介
摘要:发布时间:2002.01.26 12:20 来源:开放系统世界作者:杜昆1. 概述Executable and linking format(ELF)文件是x86 Linux系统下的一种常用目标文件(object file)格式,有三种主要类型:(1)适于连接的可重定位文件(relocatable file),可与其它目标文件一起创建可执行文件和共享目标文件。(2)适于执行的可执行文件(executable file),用于提供程序的进程映像,加载的内存执行。(3)共享目标文件(shared object file),连接器可将它与其它可重定位文件和共享目标文件连接成其它的目标文件,动态连接器 阅读全文

posted @ 2012-09-30 14:34 weiweishuo 阅读(345) 评论(0) 推荐(0)

可执行文件elf的格式
摘要:我就喜欢这种用标准国文说话(非翻译体),又言之有物的文章,读起来心里是感激的http://blog.chinaunix.net/uid-20221893-id-1716166.html-------------------------------------------------------------------------------------------------------------------------------By WSW机器执行的是机器指令,而机器指令就是一堆二进制的数字。高级语言编写的程序之所以可以在不同的机器上移植就因为有为不同机器设计的编译器的存在。高级语言的编 阅读全文

posted @ 2012-09-30 12:26 weiweishuo 阅读(368) 评论(0) 推荐(0)

call Init8259A——痛定思痛,不要数典忘祖了
摘要:call Init8259A 这条指令出现在第三章的pmtest9.asm中,是典型的call+label实现段内近转移。 我第一眼看到这指令有点儿不敢认:这是保护模式下32位的代码段,这种转移还行得通?翻看80X86黑皮书,上面赫然写着:在保护方式下,段内无条件转移指令的方法未变。因而是行得通的。 基础不扎实就是这种样子。 顺便复习一下“call label”这种转移方式:“call label(将当前的IP入栈后,转到标号处执行指令)相当于进行 push IP jmp near ptr label” 阅读全文

posted @ 2012-09-28 20:52 weiweishuo 阅读(301) 评论(0) 推荐(0)

通过中断门或陷阱门的转移——【只上传好图一张】
摘要:上述的流程,全部硬件机制实现的。这张图十分好。 阅读全文

posted @ 2012-09-28 09:19 weiweishuo 阅读(146) 评论(0) 推荐(0)

orange's习题——第三章【中断和异常】
摘要:一,简答题1,说说80386下“中断”和“异常”的概念?答案:对80386而言,中断是由异步的外部事件引起的,与正在执行的指令没有关系。异常则是由指令执行期间检测到的不正常或非法的条件引起的,它与正在执行的指令有直接关系。软中断指令“int n”和“into”也归于异常,这是因为执行这些指令产生异常事件。2,说说你对Fault,Trap,Abort的理解。答案:这三者是根据引起异常的程序是否可被恢复和恢复点的不同,把异常进一步细分的。 Fault是一种可被更正的异常,当一个fault发生时,处理器会把fault指令的源操作数恢复为指令开始之前的值,所保存断点cs及eip的值指向引起fault的 阅读全文

posted @ 2012-09-27 18:38 weiweishuo 阅读(340) 评论(0) 推荐(0)

关于“数据段向低扩展”——遇到一篇很佩服的帖子
摘要:段描述符TYPE字段在ED=1时成为“向低扩展段”,至于什么是“向低扩展段”,杨季文老师这样说:“ED=0表示向高扩展,ED=1表示向低扩展...当段最大为1M时,在自然的向高扩展段内,从0~limit的偏移是合法有效的偏移,而从limit+1~1M-1的偏移是非法无效的偏移;在向低扩展段中,情形刚好相反,从0~limit的偏移是非法无效的偏移,而从limit+1~1M-1的偏移是合法有效的偏移。” 我看来看去没看懂,在网上查了好久也无收获,准备偃旗息鼓时竟遇到这么一篇帖子,作者探讨问题的态度让我佩服。原文粘下: 最近在研究保护模式,一个问题一直在困扰我,就是段的向下扩展,看雪里有一篇关于向. 阅读全文

posted @ 2012-09-27 18:00 weiweishuo 阅读(840) 评论(0) 推荐(0)

导航