
汇编/操作系统
文章平均质量分 67
ruyanhai
努力就是硬道理
展开
-
为什么全局描述符表GDT的第0项总是一个空描述符
用于当一个任务使用的所有段都是系统全局段时。GDTR(48位)用于描述GDT的基址和界限LDTR(16位)用于描述当前任务的LDT在GDT中的选择子。如果一个任务没有LDT,就会把LDTR清空,此时指向GDT中的第0项描述符,即为空描述符。转自:http://apps.hi.baidu.com/share/detail/24570154 LESSON4:为什么全局描述符表GDT转载 2012-01-06 14:41:00 · 4621 阅读 · 4 评论 -
段界限为什么要减1
在orange's一个操作系统的实现,第3章,pmtest1.asm中,有如下代码 GdtPtr dw GdtLen - 1 ; GDT界限我们知道一个描述符中包含段基址和段界限,那么如果GdtLen是GDT的长度,为什么段界限要-1呢?因为段界限表达的是段内的最大偏移,而不是段的最大长度。一个简单的例子,加入一个段有如下内存:var1 db原创 2012-01-06 15:22:31 · 3289 阅读 · 4 评论 -
磁盘的磁道(Track)
觉得写的特别好,就转过来了,原文链接:http://blog.youkuaiyun.com/badbad_boy/article/details/4313645写这篇文章,主要是为了解决长久以来的一个困惑。由此也可以看出偶以前确实不太聪明。 哈哈(虽然现在仍然还是)以前见到的很多磁道的示意图都是这样的:注意标线的位置,“指向一条线”,我当时的理解好像是这条线就是磁道。还有的解释是说磁道就是转载 2012-01-07 15:11:39 · 1847 阅读 · 0 评论 -
实模式跳转保护模式,代码全注释
最近正在阅读《orange's,一个操作系统的实现》,真是相见恨晚啊,那么多年就没有一本真正深入浅出弄点代码让我们入门和实践一下的书,感谢作者于渊。下面是第3章pmtest1.asm的全注释总结执行过程如下:初始化32位代码段的段基址,并存储到GDT中对应的描述符中准备GDT的基地址,并通过LGDT指令加载到GDTR寄存器中cli关中断打开地址线A20将CR0寄存器的PE位置1,进原创 2012-01-06 18:00:42 · 3091 阅读 · 2 评论 -
bochs利用中断调试dos程序
本文主要内容:在bochs中运行dos程序,如何在程序的开始处中断使用bochs调试,如何在程序的任意位置下断点虽然在程序的入口处中断后,我们就可以随意使用bochs下断点了,但是毕竟不能像C/C++那么方便,使用函数名,或者文件名+行号就可以下断点,而是需要自己算偏移地址等。因此需要一种更加方便的下断点方法。 因为TD不能调试保护模式下的DOS程序,因此必须(或者是可原创 2012-01-13 22:35:46 · 2545 阅读 · 0 评论 -
ubuntu 11.10 x64编译安装bochs2.5.1
众所周知Apt-get安装的bochs是不带调试功能的,必须通过源码编译加上--enable-debugger才行。现在ubuntu源上的bochs版本是2.4.6,但是bochs网站已经发布了2.5.1(http://bochs.sourceforge.net/ ),因此我们直接编译安装bochs2.5.1。 编译源码从http://bochs.sourceforge.n原创 2012-01-12 20:23:21 · 2775 阅读 · 0 评论 -
为什么保护模式跳回实模式要选择一个NormalSelector
来自:http://blog.youkuaiyun.com/lancedegate/article/details/1558795段寄存器段基地址段界限(固定)存在性特权级已存取粒度扩展方向可读性可写性可执行堆栈大小一致特权CS当前CS*160000FFFFHY0YBUYYY-N转载 2012-01-09 12:48:36 · 1359 阅读 · 0 评论 -
保护模式跳回实模式的normal descriptor(续)
上一次转的文章(为什么保护模式跳回实模式要选择一个NormalSelectorhttp://blog.youkuaiyun.com/ruyanhai/article/details/7186970)中提到了描述符的高速缓存,但那篇文章说的不是很清楚,因此这里又总结了一下。 blog.youkuaiyun.com/ruyanhai众所周知,保护模式下,GDT存储在内存中,为了加快访问GDT中相关描述符的速度,x86原创 2012-01-17 16:07:34 · 1365 阅读 · 0 评论