上一页 1 2 3 4 5 6 ··· 13 下一页
摘要: 再说中断描述符表之前,我们先搞清楚,中断向量表和中断描述符表的联系和区别,在实地址模式中,CPU把内存中从0开始的1K字节作为一个中断向量表。表中的每个表项占四个字节,由两个字节的段地址和两个字节的偏移量组成,这样构成的地址便是相应中断处理程序的入口地址。但是,在保护模式下,由四字节的表项构成的中断向量表显然满足不了要求。这是因为,除了两个字节的段描述符,偏移量必用四字节来表示;‚要有反映模式切换的信息。因此,在保护模式下,中断向量表中的表项由8个字节组成,中断向量表也改叫做中断描述符表IDT(Interrupt Descriptor Table)。其中的每个表项叫做一个门描述符(gate 阅读全文
posted @ 2013-02-24 10:34 zhenhai 阅读(410) 评论(0) 推荐(0)
摘要: 所谓GDT即为global descriptor table意思为全局描述符,亦为全局段号记录表,因为CPU的段寄存器为16位(16为,32位和64位模式下的段寄存器都为16位)低3不能使用,所以能够使用的段号为13位为0~8191,为了表示一个段,需要包含以下信息段的大小段的起始地址段的管理属性属性(禁止写入,系统专用等)记录这三个信息需要8个字节所以GDT总共包含的数据位8192*8=65536字节(64KB)将每个段的描述信息设定好之后,连续的排列在内存的某个地方,然后将其起始地址和有效设定个数存入GDTR寄存器中在设定GDT时,要设定段上限和地址值,赋值给一个名为GDTR的48位的寄存 阅读全文
posted @ 2013-02-23 15:05 zhenhai 阅读(1193) 评论(0) 推荐(0)
摘要: 转载自:http://blog.csdn.net/billpig/article/details/5833980保护模式下的段寄存器 由 16位的选择器 与 64位的段描述符寄存器 构成段描述符寄存器: 存储段描述符选择器:存储段描述符的索引PS:原先实模式下的各个段寄存器作为保护模式下的段选择器,80486中有6个(即CS,SS,DS,ES,FS,GS)80位的段寄存器,同时提供6个段左右机器当前运行的地址空间。由选择器CS对应表示的段仍为代码段,选择器SS对应表示的段仍为堆栈段(1)全局描述符表GDT(Global Descriptor Table)在整个系统中,全局描述符表GDT只有一张 阅读全文
posted @ 2013-02-18 20:20 zhenhai 阅读(1890) 评论(0) 推荐(0)
摘要: 32位CPU所含有的寄存器有: 4个数据寄存器(EAX、EBX、ECX和EDX)2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES、CS、SS、DS、FS和GS)1个指令指针寄存器(EIP) 1个标志寄存器(EFlags)1、数据寄存器数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。对低16位数据的存取,不会影响高16位的数据。这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。4个16位寄存器又可分割 阅读全文
posted @ 2013-02-18 19:36 zhenhai 阅读(2658) 评论(0) 推荐(0)
摘要: 汇编指令: LGDT、LIDT、LLDT、LMSW、LOADALL、LOADALL286、LOCK、LODSB、LODSW、LODSDFROM:http://hi.baidu.com/formerdays/blog/item/76aa90606464f743ebf8f88a.html名称功能操作数操作码模数寄存器1寄存器2或内存位移量立即数符号方向芯片型号16位32位LGDT加载全局描述符[寄16]$0F01000105无无无无286无$67LGDT加载全局描述符[寄32]$0F01000105无无无无286$67无LGDT加载全局描述符[寄16+位移8]$0F010101059无无无286无 阅读全文
posted @ 2013-02-18 19:31 zhenhai 阅读(544) 评论(0) 推荐(0)
摘要: 这一阶段,到第五天最后一个问题之前,主要完成了小操作系统界面的处理部分,使其看起来像一个操作系统,期间先用汇编语言制作了操作系统的引导部分IPL,从磁盘中读取信息(这里用到的是软盘)调入内存,在内存中执行时,完成一些基本的设定之后,跳到操作系统的开始部分.sys在内存中所在的位置即可执行自己制作的程序,而且真正操作系统执行的应用程序是用C语言编写的,将.nas,.c的程序编译为.obj的目标文件时,再进行连接,生成zeus.img,这一阶段主要是界面显示的程序,包括从内存中读取显示的像素信息,做出基本的操作系统界面,然后利用像素坐标制作字体来显示不同的字符,最后显示字符串,然后再显示鼠标,到这 阅读全文
posted @ 2013-02-16 22:27 zhenhai 阅读(377) 评论(0) 推荐(0)
摘要: 调用号0x13参数:AH=0x02(读盘)AH=0x03(写盘)AH=0x04(校验)AH=0x0c(寻道)AL=处理对象的扇区数,只能同时处理连续的扇区CH=柱面号&0xffCL=扇区号(0-5位)|(柱面号&0x300)>>2DH=磁头号DL=启动器号ES:BX=缓冲地址返回值:FLACS.CF==0:没有错误,AH==0FLACS.CF==1;有错误,错误号码存入AH内 阅读全文
posted @ 2013-02-06 16:09 zhenhai 阅读(242) 评论(0) 推荐(0)
摘要: 转载自:http://zzili.blog.163.com/blog/static/193620024201131714722358/windows消息分流器的实现很好理解,windows操作系统使用消息处理机制,那么,我们所设计的程序如何才能分辨和处理系统中的各种消息呢?这就是消息分流器的作用.简单来说,消息分流器就是一段代码,在我的讲述中,将分7重来循序渐进的介绍它.从最初的第1重到最成熟的第7重,它的样子会有很大的变化.但,实现的功能都是一样的,所不同的,仅仅是变得更加简练罢了.程序开始时候,会是main函数,然后会生成初始的窗口,同时会调用WndProc函数.这是一个自定义的函数,名字 阅读全文
posted @ 2012-12-26 20:20 zhenhai 阅读(347) 评论(0) 推荐(0)
摘要: 这道题要用到单调队列,我们从给出的样例能够看出,区间上很长的一段对当前的决策来说是毫无意义的,最明显的就是比当前的值大的那些值,其实这个也有一点动态规划的思想在里面,我们保证了队首位置的值对当前来说是最优的,很显然这肯定是一个递增的队列,对于当前要加入队列中的元素,我们去掉对于其来说毫无意义的一些值,对于队列中的一个位置i如果其后的一个位置的j的最优值取在了i的位置,也就意味着cost[j]>cost[i]+(j-i)*S,那么对于其后的一个位置k如果有cost[j]+(k-j)*S<cost[k]不等式相加我们可以得到cost[k]>cost[i]+(k-i)*S,而且我们 阅读全文
posted @ 2012-10-26 17:26 zhenhai 阅读(215) 评论(0) 推荐(0)
摘要: 题意很好理解,关键是要抽象成一棵二叉树,每一个空白矩形是一个叶子节点,每次插入一条线段都把一个空白矩形分为两个矩形,也就是要产生两个节点,所以总的节点的数目是N*2+1,然后要标记线段的方向和矩形被分割的方向,分情况判断在左孩子还是右孩子插入节点,RMQ判断最近公共祖先,求的是去掉公共祖先的子树剩下多少叶子节点,插入实在是太费劲了,麻烦啊,还因为一个细节错了两次View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstring> 5 #def 阅读全文
posted @ 2012-10-17 22:47 zhenhai 阅读(282) 评论(0) 推荐(0)
上一页 1 2 3 4 5 6 ··· 13 下一页