orange's---一路下来的学习笔记
文章平均质量分 51
weiweishuo
这个作者很懒,什么都没留下…
展开
-
有关int 8h和in1ch(一段很精辟的说明)
在系统加电初始化期间,把系统定时器初为每隔约55毫秒发出一次中断请求,CPU在响应定时器中断请求后转入8H号中断处理程序,BIOS提供的8H号中断处理程序中有一条中断指令INT1CH,所以每秒要调用到约18.2次1CH号中断处理程序,而BIOS的1CH号中断处理程序实际上并没有做任何工作,只有一条中断返回指令.原帖:http://topic.csdn.net/u/20090529/09/eb4转载 2012-08-16 16:00:55 · 513 阅读 · 0 评论 -
揭开硬件中断请求IRQ所有秘密(图解)
实用:揭开硬件中断请求IRQ所有秘密(图解)http://www.sina.com.cn 2004年05月17日 09:31 赛迪网--中国电脑教育报 文/蔡远翔 IRQ(Interrupt Request)的作用就是在我们所用的电脑中,执行硬件中断请求的动作,用来停止其相关硬件的工作状态。比如我们要打印一份文件,在打印结束转载 2012-09-27 15:16:34 · 792 阅读 · 0 评论 -
Linux下的ELF文件格式简介
发布时间:2002.01.26 12:20 来源:开放系统世界 作者:杜昆1. 概述Executable and linking format(ELF)文件是x86 Linux系统下的一种常用目标文件(object file)格式,有三种主要类型:(1)适于连接的可重定位文件(relocatable file),可与其它目标文件一起创建可执行文件和共享目标文件。(转载 2012-09-30 14:34:05 · 551 阅读 · 0 评论 -
ELF(Executable and Linking Format)
http://hi.baidu.com/zengzhaonong/item/32b06adfecdb774edcf9be78【来源】 现代Linux采用ELF(Executable and Linking Format)做为其可连接和可执行文件的格式,因此ELF格式也向我们透出了一点Linux核内的情景,就像戏台维幕留下的一条未拉严的缝。 PC世界32仍是主流,但64位的脚步却已如此转载 2012-09-30 20:20:33 · 527 阅读 · 0 评论 -
虚拟地址空间达64TB是怎么算来的
搜了好多帖子,还是这篇说的有道理:http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=1959427&page=5虚拟地址空间由GDT 映射的全局地址空间和由LDT映射的局部地址空间组成。选择符的索引部分由13 个比特位表示,加上区分GDT 和LDT 的1 个比特位;因此Intel 80X86 CPU 共可以索引16384转载 2012-09-08 14:51:03 · 1333 阅读 · 0 评论 -
用nasm编译16位的elf文件
文档里说到nasm在输出elf目标文件时,具备16位段的扩展能力(众所周知elf只有32位和64位格式)。不知道官方这句话真的假的,反正目前我试过两种情形会失败: 情形1——16位实模式下,通过int 13h将软盘上的kernel.elf文件加载到80000h地址处,找到elf的入口地址,然后跳进去,结果代码执行错误,输入"u/10 entry"(entry是在调试时候慢慢算出来的)反汇编一原创 2012-10-06 15:30:45 · 464 阅读 · 0 评论 -
orange's习题——分页机制【第3章】
一,简答题1,什么是虚拟存储器?答案:虚拟存储器是一种软硬件结合的技术,用于提供比在计算机中实际可用的物理存储器大得多的存储器空间。这样,程序员在编写程序时,不用考虑物理存储器的实际容量。2,为什么说80386支持的虚拟地址空间达64TB?答案:虚拟地址空间由GDT 映射的全局地址空间和由LDT映射的局部地址空间组成。选择符的索引部分由13 个比特位表示,加上区分GDT 和LDT原创 2012-09-08 19:43:31 · 345 阅读 · 0 评论 -
linux不使用任务门【转载】
http://oss.org.cn/kernel-book/ch05/5.4.1.htmIntel的这种设计确实很周到,也为任务切换提供了一个非常简洁的机制。但是,由于i386的系统结构基本上是CISC的,通过JMP指令或CALL(或中断)完成任务的过程实际上是“复杂指令”的执行过程,其执行过程长达300多个CPU周期(一个POP指令占12个CPU周期),因此,Linux内核并不完全使用i转载 2012-10-10 10:04:30 · 420 阅读 · 0 评论 -
linux进程状态浅析【转载】
众所周知,现在的分时操作系统能够在一个CPU上运行多个程序,让这些程序表面上看起来是在同时运行的。linux就是这样的一个操作系统。在linux系统中,每个被运行的程序实例对应一个或多个进程。linux内核需要对这些进程进行管理,以使它们在系统中“同时”运行。linux内核对进程的这种管理分两个方面:进程状态管理,和进程调度。本文主要介绍进程状态管理,进程调度见《linux进程调度浅析》。转载 2012-10-18 21:30:16 · 71 阅读 · 0 评论 -
orange‘s学习日志
2012-10-10 *第5章学完了,真像作者说的,“喘口气了”。想到学习第三章时的痛苦,心里开阔了一些:第三章确实是个坎儿,我之前只学了王爽的80X86汇编,没接触过保护模式和80386工作机制,所以第三章劈头盖脸的就是选择子,段描述符,门描述符,gdt,idt,ldt,tss,特权级,堆栈切换等等,彻头彻尾的新知识,而我当时还没意识到(现在想起来这一点才是可怕的),没有心理准备,每天学的原创 2012-10-10 17:49:53 · 769 阅读 · 0 评论 -
8259A编程
一个外部中断请求信号通过中断请求线IRQ,传输到IMR(中断屏蔽寄存器),IMR根据所设定的中断屏蔽字(OCW1),决定是将其丢弃还是接受。如果可以接受,则8259A将IRR(中断请求暂存寄存器)中代表此IRQ的位置位,以表示此IRQ有中断请求信号,并同时向CPU的INTR(中断请求)管脚发送一个信号,但CPU这时可能正在执行一条指令,因此CPU不会立即响应,而当这CPU正忙着执行某条指令时,还有转载 2012-09-27 15:05:22 · 413 阅读 · 0 评论 -
orange's习题——第三章【中断和异常】
一,简答题1,说说80386下“中断”和“异常”的概念?答案:对80386而言,中断是由异步的外部事件引起的,与正在执行的指令没有关系。异常则是由指令执行期间检测到的不正常或非法的条件引起的,它与正在执行的指令有直接关系。软中断指令“int n”和“into”也归于异常,这是因为执行这些指令产生异常事件。2,说说你对Fault,Trap,Abort的理解。答案:这三者是根据原创 2012-09-27 18:38:50 · 351 阅读 · 0 评论 -
通过中断门或陷阱门的转移——【只上传好图一张】
上述的流程,全部硬件机制实现的。这张图十分好。原创 2012-09-28 09:19:12 · 569 阅读 · 0 评论 -
DOS下COM文件和EXE文件的比较
【来源】http://www.cnsharenet.com/DOS/f/dft/dexecom.htm COM文件是一种可执行程序的内存映象文件,它与只有16位地址线的8位机上的CP/M操作系统下的可执行程序结构相似。在COM程序执行过程中,除了调用DOS功能和 ROM BIOS功能,以及用户特意安排外,段寄存器一般不发生变化。四个段寄存器具有同样的内容,都指向PSP,因此程序的大小仍限转载 2012-08-19 12:01:39 · 451 阅读 · 0 评论 -
org是做什么的
于渊前辈有这么一句注释:------------------------------------------------------ org07c00h ;告诉编译器加载到7c00h处------------------------------------------------------ 到了第三章,编译com文件时,要把07c00h改成0100h。如果按照之前原创 2012-08-19 12:16:01 · 418 阅读 · 0 评论 -
先熟悉nasm 【1】
注:应该是新浪博客的一个bug:“define”前面加%是显示乱码的,只能把%用100代替,因此下文看到100define时不要被吓到。----------------------------------------------------------------------------------------------------------------------------------原创 2012-08-16 16:00:55 · 1130 阅读 · 0 评论 -
先熟悉nasm 【2】
在网上溜达时看到一个不错的问答,问题难度不大,但回答的很精准:-----------懂nasm的进,请问nasm程序的入口是什么 我怎么输入程序呢???------解决方案--------------------------------------------------------NASM和MASM有很大的不同。在MASM中,要先定义段和程序入口点。过程调用还要显式的原创 2012-08-16 16:00:55 · 1090 阅读 · 0 评论 -
com文件与bin文件是很相似的
我觉得com文件只比bin文件多了个标签:org 0100h,告诉你此文件dos专用。 两者都是可执行程序的内存映象文件:所谓映像,就是说把硬盘上的bin文件或com文件加载回内存中,再设置cs:ip指向文件的第一条指令,cpu就可以顺利的跑起来。 它们仅具备程序基本的要素:指令和数据。 dos执行com文件时,会先创建一个256byte的psp内存空间(用于和com程原创 2012-08-19 12:08:58 · 389 阅读 · 0 评论 -
先熟悉nasm 【3】
nasm下,向内存写数据可以这样: mov byte [0200h],64h 上面代码是可以通过编译的,反汇编得到:mov byte ptr ds:0x200, 0x64 我记得在masm下,偏移寻址是必须要用寄存器。 我试着写“mov byte [0x0000:0x0200],64h”,nasm就报错了,看来段寄存器还是少不了的。不过可以用立即数寻址,已经很满足了!原创 2012-08-19 01:35:30 · 957 阅读 · 0 评论 -
8253定时/计数器的几篇好文章
这两篇讲的浅而易懂:时钟中断时钟概述(特别这篇,作者文字准确有力,很佩服)这两篇是参考手册级别的:定时计数器8253资料8253A定时计数器转载 2012-08-16 16:00:55 · 282 阅读 · 0 评论 -
我对call gate的理解
call gate(调用门)提供一种机制,允许通过call指令实现向更高级非一致代码段的跳转,同时cpl发生相应跃迁。 所以说call gate是call指令的专用门。猜测call gate之名定取the gate for call是也。 对上面两点作下解释: “允许通过call指令实现向更高级非一致代码段的跳转”,为什么是非一致代码段?我们知道,若目标段是一致代原创 2012-08-31 17:20:49 · 396 阅读 · 0 评论 -
我对jmp selector:offset模型的理解
jmp selector:offset,其中的selector可能指示段描述符或门描述符,cpu执行该指令的流程应该是这样: 以上就是我对jmp selector:offset执行过程的理解,其实call selector:offset类似,仅仅是首尾多了cs,eip的堆栈,出栈。 (图示的箭头画的有些扎眼,希望没影响到你心情,我也没办法,flash cs里做的图,它又原创 2012-09-01 15:57:13 · 546 阅读 · 0 评论 -
ret向外层返回
1,ret指令先从堆栈弹出返回地址指针(48位的selector:offset) 若selector的RPL等于当前的CPL,则直接开始向目标代码段转移的步骤,即执行jmp selector:offset 若selector的RPL大于当前的CPL,则引起向外层返回。CPL的变化也必然对应着堆栈切换。 2,内层堆栈弹掉先前堆栈切换时复制进来的参数,再弹原创 2012-09-01 21:41:50 · 293 阅读 · 0 评论 -
进入内层时的堆栈切换
1,根据TSS,建立同切换后CPL相对应的内层堆栈。 2,将外层堆栈指针ss,esp依次压入内层堆栈。 3,从外层堆栈复制dcount个参数到内层堆栈。 4,将当前的cs,eip压入内层堆栈。 (实际上到这里已经完成了堆栈切换的相关工作) 5,加载调用门中指定的selector:offset到cs:eip,目标代码段开始执行。原创 2012-09-01 21:32:26 · 280 阅读 · 0 评论 -
nasm报错:operator may only be applied to scalar values
搜到了一篇不错的帖子: (回答的那个人实在是太敬业了)Hey all.I'm a complete beginner in assembly and have chosen NASM to work my way up with. But I have a problem with the pseudo-instruction set. More precisel转载 2012-08-25 23:16:11 · 683 阅读 · 0 评论 -
保护模式下寻址
保护模式下寻址,使用“段选择子+段偏移” 在pmtest1.asm中有句:jmp secletorCode32:0 这就是直接使用“段选择子+段偏移”寻址 还有一种: mov ax,selectorCode32 mov gs,ax mov edi,(80*11+79)*2原创 2012-08-25 19:53:40 · 293 阅读 · 0 评论 -
orange's习题——分段机制【第3章】
一,简答题1,全局描述符表中每个表项需要按照8字节对齐吗?答案:不需要二,填空题1,描述符的TYPE字段占_____个bit。其中的位_____指示描述符是否被访问过,用符号_____标记。位_____指示所描述的段是代码段还是数据段,用符号E标记,指示所描述的段是否可执行。当E=_____,TYPE中的位_____指示所描述的数据段是否可写,用W标记。TYPE中的位2原创 2012-09-24 15:10:41 · 660 阅读 · 0 评论 -
先熟悉nasm 【4】 ——SECTION和标签
1,nasm下,自定义段默认按4byte对齐。 手册上说,“ 通过在段定义行的后面加上'ALIGN'限定符实现的。比如:section .data align=16 它切换到段'.data',并指定它必须对齐到 16 字节边界。” 我也在自定义段里加上align 16,发现编译生成的代码仍按照4byte对齐。很诡异。 2,再说标签。 看下面一段代码(可正常运行),它原创 2012-08-25 17:35:58 · 1104 阅读 · 0 评论