﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-计算机之路-随笔分类-我的操作系统</title><link>http://www.blogjava.net/wilsonny/category/1096.html</link><description>小爽的博客</description><language>zh-cn</language><lastBuildDate>Mon, 19 Mar 2007 08:47:31 GMT</lastBuildDate><pubDate>Mon, 19 Mar 2007 08:47:31 GMT</pubDate><ttl>60</ttl><item><title>Kernel启动进程的实验</title><link>http://www.blogjava.net/wilsonny/archive/2007/03/19/104717.html</link><dc:creator>小爽</dc:creator><author>小爽</author><pubDate>Mon, 19 Mar 2007 05:04:00 GMT</pubDate><guid>http://www.blogjava.net/wilsonny/archive/2007/03/19/104717.html</guid><wfw:comment>http://www.blogjava.net/wilsonny/comments/104717.html</wfw:comment><comments>http://www.blogjava.net/wilsonny/archive/2007/03/19/104717.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wilsonny/comments/commentRss/104717.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wilsonny/services/trackbacks/104717.html</trackback:ping><description><![CDATA[
		<font color="#ff0000">
				<strong>也就是说，假设 0 --&gt; limit --&gt; FFFF<br />那么如果一个段是expandupward的，他的offset只能是0到limit，而如果是expanddownward的，offset就是从limit到FFFF，且该栈的增长方向是limit--&gt;FFFF，即，数据在内存中总是从低地址放到高地址</strong>
		</font>
		<br />
		<br />今天受益匪浅.....我塞，如果不是在网络上搜索到的这句话，我自己编写的Kernel进程怎么也调试不好。<br />今天太高兴了，终于把Kernel的进程机制调整好了！！！截个图，庆祝一下。<br />不过截图有个错误，就是应该是Process的，而不是Thread，这两个东西有本质区别。<br /><p align="center"><img src="http://www.blogjava.net/images/blogjava_net/wilsonny/19081/o_process.JPG" align="center" border="0" /></p><img src ="http://www.blogjava.net/wilsonny/aggbug/104717.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wilsonny/" target="_blank">小爽</a> 2007-03-19 13:04 <a href="http://www.blogjava.net/wilsonny/archive/2007/03/19/104717.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我的Kernel实现了中断....</title><link>http://www.blogjava.net/wilsonny/archive/2007/02/27/101033.html</link><dc:creator>小爽</dc:creator><author>小爽</author><pubDate>Tue, 27 Feb 2007 15:26:00 GMT</pubDate><guid>http://www.blogjava.net/wilsonny/archive/2007/02/27/101033.html</guid><wfw:comment>http://www.blogjava.net/wilsonny/comments/101033.html</wfw:comment><comments>http://www.blogjava.net/wilsonny/archive/2007/02/27/101033.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/wilsonny/comments/commentRss/101033.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wilsonny/services/trackbacks/101033.html</trackback:ping><description><![CDATA[
		<p>
				<font size="2">今天我把Kernel添加了中断处理的部分。经过DEBUG以后终于可以运行了。值得注意的是，FAULTS返回是返回到当前行。<br /><br /><img src="http://www.blogjava.net/images/blogjava_net/wilsonny/19081/o_interrupt2.JPG" align="center" border="0" /></font>
		</p>
<img src ="http://www.blogjava.net/wilsonny/aggbug/101033.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wilsonny/" target="_blank">小爽</a> 2007-02-27 23:26 <a href="http://www.blogjava.net/wilsonny/archive/2007/02/27/101033.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>今天对Kernel进行了扩充</title><link>http://www.blogjava.net/wilsonny/archive/2007/02/26/100719.html</link><dc:creator>小爽</dc:creator><author>小爽</author><pubDate>Mon, 26 Feb 2007 04:54:00 GMT</pubDate><guid>http://www.blogjava.net/wilsonny/archive/2007/02/26/100719.html</guid><wfw:comment>http://www.blogjava.net/wilsonny/comments/100719.html</wfw:comment><comments>http://www.blogjava.net/wilsonny/archive/2007/02/26/100719.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wilsonny/comments/commentRss/100719.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wilsonny/services/trackbacks/100719.html</trackback:ping><description><![CDATA[
		<p align="left">
				<font size="2">今天对Kernel进行了扩充，为了过两天实现中断机制。我编写了打印彩色字符的kprint函数和打印Int值的函数。期中有些Bug，不过都修改过了。<br /><img src="http://www.blogjava.net/images/blogjava_net/wilsonny/19081/o_newop.JPG" align="center" border="0" /></font>
		</p>
<img src ="http://www.blogjava.net/wilsonny/aggbug/100719.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wilsonny/" target="_blank">小爽</a> 2007-02-26 12:54 <a href="http://www.blogjava.net/wilsonny/archive/2007/02/26/100719.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>今天更新了我的操作系统Kernel</title><link>http://www.blogjava.net/wilsonny/archive/2007/02/22/100385.html</link><dc:creator>小爽</dc:creator><author>小爽</author><pubDate>Thu, 22 Feb 2007 14:56:00 GMT</pubDate><guid>http://www.blogjava.net/wilsonny/archive/2007/02/22/100385.html</guid><wfw:comment>http://www.blogjava.net/wilsonny/comments/100385.html</wfw:comment><comments>http://www.blogjava.net/wilsonny/archive/2007/02/22/100385.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wilsonny/comments/commentRss/100385.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wilsonny/services/trackbacks/100385.html</trackback:ping><description><![CDATA[
		<p align="left">
				<font size="2">
						<img src="http://www.blogjava.net/images/blogjava_net/wilsonny/19081/o_kprintb.JPG" align="center" border="0" />
						<br />
						<br />今天更新了Kernel，编写了一个Kernel的Print函数，void kprint(char *); 好久没有更新了，唉，过年了，事情太多了，没办法，串亲戚，会朋友.......</font>
		</p>
<img src ="http://www.blogjava.net/wilsonny/aggbug/100385.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wilsonny/" target="_blank">小爽</a> 2007-02-22 22:56 <a href="http://www.blogjava.net/wilsonny/archive/2007/02/22/100385.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我的KERNEL的树结构列表（学习于渊的）</title><link>http://www.blogjava.net/wilsonny/archive/2007/02/03/97810.html</link><dc:creator>小爽</dc:creator><author>小爽</author><pubDate>Sat, 03 Feb 2007 15:26:00 GMT</pubDate><guid>http://www.blogjava.net/wilsonny/archive/2007/02/03/97810.html</guid><wfw:comment>http://www.blogjava.net/wilsonny/comments/97810.html</wfw:comment><comments>http://www.blogjava.net/wilsonny/archive/2007/02/03/97810.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/wilsonny/comments/commentRss/97810.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wilsonny/services/trackbacks/97810.html</trackback:ping><description><![CDATA[
		<font size="2">虽然这还不能完全算是自己的，但是总算有了进步啊，呵呵，加油，要设计出自己的操作系统！！</font>
		<br />
		<p align="center">
				<img src="http://www.blogjava.net/images/blogjava_net/wilsonny/19081/o_kernelmanifest.JPG" align="center" border="0" />
		</p>
<img src ="http://www.blogjava.net/wilsonny/aggbug/97810.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wilsonny/" target="_blank">小爽</a> 2007-02-03 23:26 <a href="http://www.blogjava.net/wilsonny/archive/2007/02/03/97810.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>没有想到堆栈的问题会这么严重！！</title><link>http://www.blogjava.net/wilsonny/archive/2007/02/03/97806.html</link><dc:creator>小爽</dc:creator><author>小爽</author><pubDate>Sat, 03 Feb 2007 15:10:00 GMT</pubDate><guid>http://www.blogjava.net/wilsonny/archive/2007/02/03/97806.html</guid><wfw:comment>http://www.blogjava.net/wilsonny/comments/97806.html</wfw:comment><comments>http://www.blogjava.net/wilsonny/archive/2007/02/03/97806.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wilsonny/comments/commentRss/97806.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wilsonny/services/trackbacks/97806.html</trackback:ping><description><![CDATA[
		<p>
				<font size="2">今天发现自己的操作系统虽然可以在VMware和VPC下运行，但是在Bochs下会报错！短短的几秒钟使得Bochs产生了几十兆甚至上百兆的输出文件。在文件里面，我发现报错主要是IRET的消息，说堆栈似乎有问题。经过检查代码，我发现了问题所在。应该是mov esp,0x100的一句，写成了mov esp,0100,最后估计是因为堆栈不够造成了Bochs报错。现在总算调节好了，截个图。庆祝一下！</font>
		</p>
		<br />
		<img src="http://www.blogjava.net/images/blogjava_net/wilsonny/19081/o_LoaderDebug.JPG" align="center" border="0" />
<img src ="http://www.blogjava.net/wilsonny/aggbug/97806.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wilsonny/" target="_blank">小爽</a> 2007-02-03 23:10 <a href="http://www.blogjava.net/wilsonny/archive/2007/02/03/97806.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>今天对Kernel进行了DEBUG，使用了C语言和汇编混合编程</title><link>http://www.blogjava.net/wilsonny/archive/2007/02/02/97682.html</link><dc:creator>小爽</dc:creator><author>小爽</author><pubDate>Fri, 02 Feb 2007 14:14:00 GMT</pubDate><guid>http://www.blogjava.net/wilsonny/archive/2007/02/02/97682.html</guid><wfw:comment>http://www.blogjava.net/wilsonny/comments/97682.html</wfw:comment><comments>http://www.blogjava.net/wilsonny/archive/2007/02/02/97682.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wilsonny/comments/commentRss/97682.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wilsonny/services/trackbacks/97682.html</trackback:ping><description><![CDATA[
		<p align="center">
				<img src="http://www.blogjava.net/images/blogjava_net/wilsonny/19081/o_NewKernel.JPG" align="center" border="0" />
				<br />
				<br />
				<font size="2">虽然从整体上来看好像没有什么变化，但是今天修改了N多个BUG，总算是完成汇编和C语言的混合编程。问题最严重的BUG是ELF文件的ProgramHeader的读取。我没有想到，竟然ELF格式的ProgramHeader有的竟然段长度为0！！这可怎么理解啊，唉，找些书籍看看吧。弄不懂的话影响将来开发Kernel啊....</font>
		</p>
<img src ="http://www.blogjava.net/wilsonny/aggbug/97682.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wilsonny/" target="_blank">小爽</a> 2007-02-02 22:14 <a href="http://www.blogjava.net/wilsonny/archive/2007/02/02/97682.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于C语言中static关键字的一些细节</title><link>http://www.blogjava.net/wilsonny/archive/2007/01/31/97058.html</link><dc:creator>小爽</dc:creator><author>小爽</author><pubDate>Wed, 31 Jan 2007 12:12:00 GMT</pubDate><guid>http://www.blogjava.net/wilsonny/archive/2007/01/31/97058.html</guid><wfw:comment>http://www.blogjava.net/wilsonny/comments/97058.html</wfw:comment><comments>http://www.blogjava.net/wilsonny/archive/2007/01/31/97058.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wilsonny/comments/commentRss/97058.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wilsonny/services/trackbacks/97058.html</trackback:ping><description><![CDATA[
		<font size="2">定义了static 该变量就不可以为其他文件所用了,这块内存区域标识为私有,这样可以防止一些内存的错误操作,处于同样的道理,头文件里面是不许出现static的&lt;/CA&gt;</font>
<img src ="http://www.blogjava.net/wilsonny/aggbug/97058.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wilsonny/" target="_blank">小爽</a> 2007-01-31 20:12 <a href="http://www.blogjava.net/wilsonny/archive/2007/01/31/97058.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LOADER终于载入KERNEL了！！</title><link>http://www.blogjava.net/wilsonny/archive/2007/01/31/97051.html</link><dc:creator>小爽</dc:creator><author>小爽</author><pubDate>Wed, 31 Jan 2007 11:20:00 GMT</pubDate><guid>http://www.blogjava.net/wilsonny/archive/2007/01/31/97051.html</guid><wfw:comment>http://www.blogjava.net/wilsonny/comments/97051.html</wfw:comment><comments>http://www.blogjava.net/wilsonny/archive/2007/01/31/97051.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wilsonny/comments/commentRss/97051.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wilsonny/services/trackbacks/97051.html</trackback:ping><description><![CDATA[
		<font size="2">今天编写了一下午程序，最终完成了LOADER载入KERNEL并把控制权交给了以ELF格式存在于磁盘上的KERNEL.BIN了。值得庆祝的一天，因为以后终于可以使用C和汇编混合编程了，Wow~~~~~~~~截个图，呵呵。<br /><p align="center"><img src="http://www.blogjava.net/images/blogjava_net/wilsonny/19081/o_InKernel.JPG" align="center" border="0" /></p></font>
<img src ="http://www.blogjava.net/wilsonny/aggbug/97051.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wilsonny/" target="_blank">小爽</a> 2007-01-31 19:20 <a href="http://www.blogjava.net/wilsonny/archive/2007/01/31/97051.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>今天开始写操作系统初始化Kernel部分</title><link>http://www.blogjava.net/wilsonny/archive/2007/01/31/96989.html</link><dc:creator>小爽</dc:creator><author>小爽</author><pubDate>Wed, 31 Jan 2007 07:28:00 GMT</pubDate><guid>http://www.blogjava.net/wilsonny/archive/2007/01/31/96989.html</guid><wfw:comment>http://www.blogjava.net/wilsonny/comments/96989.html</wfw:comment><comments>http://www.blogjava.net/wilsonny/archive/2007/01/31/96989.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wilsonny/comments/commentRss/96989.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wilsonny/services/trackbacks/96989.html</trackback:ping><description><![CDATA[
		<p>
				<font size="2">今天开始写对ELF格式Kernel载入的程序，ELF文件格式本身并不难，只不过这段需要认真编写程序。下面截个图。<br /></font>
				<br />
				<img src="http://www.blogjava.net/images/blogjava_net/wilsonny/19081/o_initKernel.JPG" align="center" border="0" />
		</p>
<img src ="http://www.blogjava.net/wilsonny/aggbug/96989.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wilsonny/" target="_blank">小爽</a> 2007-01-31 15:28 <a href="http://www.blogjava.net/wilsonny/archive/2007/01/31/96989.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Cycar名称修改...</title><link>http://www.blogjava.net/wilsonny/archive/2007/01/22/95327.html</link><dc:creator>小爽</dc:creator><author>小爽</author><pubDate>Mon, 22 Jan 2007 06:02:00 GMT</pubDate><guid>http://www.blogjava.net/wilsonny/archive/2007/01/22/95327.html</guid><wfw:comment>http://www.blogjava.net/wilsonny/comments/95327.html</wfw:comment><comments>http://www.blogjava.net/wilsonny/archive/2007/01/22/95327.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wilsonny/comments/commentRss/95327.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wilsonny/services/trackbacks/95327.html</trackback:ping><description><![CDATA[
		<p>
				<font size="2">看来Cycar要修改名字了，Cycar已经有人用了，虽然不是操作系统。准备修改名称为Cycardy......</font>
		</p>
<img src ="http://www.blogjava.net/wilsonny/aggbug/95327.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wilsonny/" target="_blank">小爽</a> 2007-01-22 14:02 <a href="http://www.blogjava.net/wilsonny/archive/2007/01/22/95327.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>今天对我的“准操作系统”进行了修改</title><link>http://www.blogjava.net/wilsonny/archive/2007/01/21/95145.html</link><dc:creator>小爽</dc:creator><author>小爽</author><pubDate>Sun, 21 Jan 2007 08:20:00 GMT</pubDate><guid>http://www.blogjava.net/wilsonny/archive/2007/01/21/95145.html</guid><wfw:comment>http://www.blogjava.net/wilsonny/comments/95145.html</wfw:comment><comments>http://www.blogjava.net/wilsonny/archive/2007/01/21/95145.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wilsonny/comments/commentRss/95145.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wilsonny/services/trackbacks/95145.html</trackback:ping><description><![CDATA[
		<p>
				<font size="2">我准备把自己的系统命名为Cycar，名字的由来？来自两个单词，Cyber和Cardinal，分别是数字和非常重要（红衣主教）的意思。希望我的这个系统将来能够越来越powerfull。目前来说，这个不能算是自己的操作系统，因为它缺少很多东西，但是，这些回慢慢扩充的。同时，他目前可以算是按照《自己动手写操作系统》一步一步下来的，没有原创的东西。如果非要给它一个版本号的话，那么它的版本号是 -10.0，因为我还有十分的东西需要学习和领悟，然后慢慢实现自己的操作系统。最终实现0.0.1版本。呵呵呵。截个图。<br /></font>
		</p>
		<p align="center">
				<img src="http://www.blogjava.net/images/blogjava_net/wilsonny/19081/o_Cycar.JPG" align="center" border="0" />
		</p>
<img src ="http://www.blogjava.net/wilsonny/aggbug/95145.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wilsonny/" target="_blank">小爽</a> 2007-01-21 16:20 <a href="http://www.blogjava.net/wilsonny/archive/2007/01/21/95145.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>今天的Loader实验总算DEBUG完成</title><link>http://www.blogjava.net/wilsonny/archive/2007/01/18/94691.html</link><dc:creator>小爽</dc:creator><author>小爽</author><pubDate>Thu, 18 Jan 2007 08:22:00 GMT</pubDate><guid>http://www.blogjava.net/wilsonny/archive/2007/01/18/94691.html</guid><wfw:comment>http://www.blogjava.net/wilsonny/comments/94691.html</wfw:comment><comments>http://www.blogjava.net/wilsonny/archive/2007/01/18/94691.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/wilsonny/comments/commentRss/94691.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wilsonny/services/trackbacks/94691.html</trackback:ping><description><![CDATA[
		<p>
				<font size="2">今天的程序编写倒不是很长时间，但是DEBUG花了我好长时间，具体前几次崩溃的原因没有找出来，但是最终可以运行了。<br />截个图片，然后是汇编程序。<br /><br /></font>
		</p>
		<p align="center">
				<img src="http://www.blogjava.net/images/blogjava_net/wilsonny/19081/o_newPM.JPG" align="center" border="0" />
		</p>
		<p>
				<br />
				<br />org 0x100<br />[bits 16]<br />jmp loaderStart</p>
		<p>
				<font size="2">_GRAPH_SEG_OFFSET_ equ 0xb800</font>
		</p>
		<p>
				<font size="2">_RootEntCnt_ equ 0xe0</font>
		</p>
		<p>
				<font size="2">BS_OEMName db 'XXXXXXXX'<br />BPB_BytsPerSec dw 0x200<br />BPB_SecPerClus db 1<br />BPB_RsvdSecCnt dw 1<br />BPB_NumFATs db 2<br />BPB_RootEntCnt dw _RootEntCnt_<br />BPB_totSec16 dw 0xb40<br />BPB_Media db 0xf0<br />BPB_FATSz16 dw 9<br />BPB_SecPerTrk dw 0x12<br />BPB_NumHeads dw 2<br />BPB_HiddSec dd 0<br />BPB_totSec32 dd 0<br />BS_DrvNum db 0<br />BS_Reserved1 db 0<br />BS_BootSig db 0x29<br />BS_VolID dd 0<br />BS_VolLab db '11111111111'<br />BS_FileSysType db 'FAT12   '</font>
		</p>
		<p>
				<font size="2">parameters:<br /> screenPo dd 0<br /> STR_LEN equ 12<br /> bootStr db 'Loading...  '<br /> noLoaderStr db 'No Kernel...'<br /> ready db 'Ready       '<br /> KernelBase equ 0x8000<br /> KernelOffset equ 0x0<br /> rootEntryNum db _RootEntCnt_<br /> loaderName db 'KERNEL  BIN'</font>
		</p>
		<font size="2">
				<p>
						<br />loaderStart:<br /> mov ax,cs<br /> mov ds,ax<br /> mov es,ax<br /> mov ss,ax<br /> mov sp,0100<br /> mov ax,_GRAPH_SEG_OFFSET_<br /> mov gs,ax<br /> <br /> mov dh,0<br /> call displayStr<br /> <br /> xor ah,ah<br /> mov dl,[BS_DrvNum]<br /> int 0x13<br /> <br /> mov ax,KernelBase<br /> mov es,ax<br /> mov bx,0<br /> mov ax,19<br /> mov cl,14<br /> call readSector<br /> <br /> <br /> xor edi,edi<br /> <br />anotherFile:<br /> xor esi,esi<br /> cmp byte [rootEntryNum],0<br /> je noLoader<br /> <br />nextChar:<br /> mov al,byte [es:edi]<br /> cmp byte [ds:loaderName+si],al<br /> jne notThisFile<br /> cmp si,10<br /> je found<br /> inc esi<br /> inc edi<br /> jmp nextChar<br /> <br /> notThisFile:<br /> shr edi,5<br /> inc edi<br /> shl edi,5<br /> dec byte [rootEntryNum]<br /> jmp anotherFile<br /> <br />noLoader:<br /> mov dh,1<br /> call displayStr<br /> jmp $<br /> <br />found:<br /> mov dh,2<br /> call displayStr<br /> <br /> mov ax,word [es:edi+(0x10)]<br /> mov cl,1<br /> <br /> push ax<br /> mov ax,KernelBase<br /> mov es,ax<br /> mov ebx,KernelOffset<br /> pop ax<br /> <br /> readEntry:<br /> <br /> cmp ax,0xfff<br /> je readEnd<br /> push ax<br /> add ax,19+14-2<br /> call readSector<br /> pop ax<br /> <br /> add ebx,512<br /> call getFATEntry<br /> <br /> jmp readEntry<br /> readEnd:<br /> <br /> jmp toProtectMode</p>
				<p>displayStr:<br /> ; dh: String index<br /> push cx<br /> push ax<br /> push bx<br /> push esi<br /> push edi<br /> mov cx,STR_LEN<br /> mov edi,dword [screenPo]<br /> mov esi,bootStr<br /> xor eax,eax<br /> mov al,dh<br /> mov bl,STR_LEN<br /> mul bl<br /> add esi,eax<br /> .1:<br /> lodsb<br /> mov [gs:edi],al<br /> inc edi<br /> inc edi<br /> loop .1<br /> <br /> mov dword [screenPo],edi<br /> pop edi<br /> pop esi<br /> pop bx<br /> pop ax<br /> pop cx<br /> ret</p>
				<p>readSector: ;ax: starting sector cl:number of sectors<br /> ; ah 0x2          al:number of sector to read<br /> ;      bx: es:bx<br /> ; ch:cylinder   cl:start sector<br /> ; dh:head num   dl:Drive<br /> push bp<br /> mov bp,sp<br /> push cx<br /> push dx<br /> push ax<br /> <br /> mov dl,[BPB_SecPerTrk]<br /> div dl<br /> mov cl,ah<br /> inc cl<br /> <br /> mov ch,al<br /> shr ch,1<br /> <br /> mov dh,al<br /> and dh,1<br /> <br /> mov dl,byte [BS_DrvNum]<br /> <br /> .1:<br /> mov ah,2<br /> mov al,byte [bp-2]<br /> int 0x13<br /> jc .1<br />  <br /> pop ax<br /> pop dx<br /> pop cx<br /> pop bp<br /> ret<br /> <br />getFATEntry:<br /> FATBaseInMem equ 0x7000<br /> ;ax is the entry number<br /> ;return ax is the next entry<br /> <br /> push es<br /> push bx<br /> push dx<br /> push cx<br /> <br /> mov bx,FATBaseInMem<br /> mov es,bx <br /> <br /> mov bx,3<br /> mul bx ;dx:ax<br /> mov bx,2<br /> div bx ;dx is the rest<br /> push dx<br /> <br /> xor dx,dx<br /> mov bx,[BPB_BytsPerSec]<br /> div bx<br /> mov cl,2<br /> xor bx,bx<br /> add ax,1<br /> call readSector<br /> mov bx,dx; mov byte index<br /> <br /> pop dx<br /> xor ax,ax<br /> cmp dx,0<br /> jne oddPart<br /> </p>
				<p> mov ax,word [es:bx]<br /> and ax,0x0fff<br /> <br /> jmp after<br /> oddPart:<br /> <br /> mov ax,word [es:bx]<br /> shr ax,4</p>
				<p>
						<br /> after:<br /> pop cx<br /> pop dx<br /> pop bx<br /> pop es<br /> <br /> ret<br /> <br /> <br />toProtectMode:<br /> jmp start<br /> <br />%macro Descriptor 3<br /> dw %2 &amp; 0xffff<br /> dw %1 &amp; 0xffff<br /> db (%1 &gt;&gt; 16) &amp; 0xff <br /> dw ((%2 &amp; 0x0f0000) &gt;&gt; 8) | (%3 &amp; 0xf0ff)<br /> db (%1 &gt;&gt; 24) &amp; 0xff<br />%endmacro</p>
				<p>DummyGDT: Descriptor 0,0,0<br />CodeGDT: Descriptor 0,0xfffff,1100000010011010b<br />DataGDT: Descriptor 0,0xfffff,1000000010010010b<br />ScreenGDT: Descriptor 0xb8000,0xffff,0000000010010010b</p>
				<p>GDTPtr dw $-DummyGDT-1<br /> dd 0x9000*0x10+DummyGDT</p>
				<p>CodeSelector equ CodeGDT-DummyGDT<br />DataSelector equ DataGDT-DummyGDT<br />ScreenSelector equ ScreenGDT-DummyGDT</p>
				<p>start:<br /> call killMotor<br /> cli<br /> mov dh,2<br /> call displayStr<br /> <br /> lgdt [GDTPtr]<br /> <br /> in al,0x92<br /> or al,10b<br /> out 0x92,al<br /> <br /> mov eax,cr0<br /> or eax,1<br /> mov cr0,eax<br /> <br /> jmp dword CodeSelector:(0x9000*0x10+ProtectMode)</p>
				<p>killMotor:<br /> push dx<br /> mov dx,0x3f2<br /> mov al,0<br /> <br /> out dx,al<br /> pop dx<br /> ret</p>
				<p>
						<br />[bits 32]<br />ProtectMode:<br /> mov ax,ScreenSelector<br /> mov gs,ax<br /> xor edi,edi<br /> .again:<br /> inc byte [gs:edi]<br /> jmp .again</p>
		</font>
<img src ="http://www.blogjava.net/wilsonny/aggbug/94691.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wilsonny/" target="_blank">小爽</a> 2007-01-18 16:22 <a href="http://www.blogjava.net/wilsonny/archive/2007/01/18/94691.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>int 13h 不能将数据读入显存的原因</title><link>http://www.blogjava.net/wilsonny/archive/2007/01/17/94409.html</link><dc:creator>小爽</dc:creator><author>小爽</author><pubDate>Wed, 17 Jan 2007 05:38:00 GMT</pubDate><guid>http://www.blogjava.net/wilsonny/archive/2007/01/17/94409.html</guid><wfw:comment>http://www.blogjava.net/wilsonny/comments/94409.html</wfw:comment><comments>http://www.blogjava.net/wilsonny/archive/2007/01/17/94409.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wilsonny/comments/commentRss/94409.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wilsonny/services/trackbacks/94409.html</trackback:ping><description><![CDATA[
		<p>
				<font size="2">在我认为，读写磁盘的BIOS中断13H是用来向可用内存（内存TYPE为1）中存入数据的。虽然目前对于X86结构的显存机制不是特别的了解，但是显存的TYPE是2，这也就意味着不能够被操作系统任意使用。这样，INT 13H也就不能够直接把磁盘数据转存到显存里面。如果需要把它的数据显示到屏幕上面，可以通过下面的方式：<br /><br />磁盘--&gt;可用内存--&gt;显存<br /><br />应该是这样吧，现在我仅仅是感性理解，需要将来看一些深入的书籍来了解。</font>
		</p>
<img src ="http://www.blogjava.net/wilsonny/aggbug/94409.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wilsonny/" target="_blank">小爽</a> 2007-01-17 13:38 <a href="http://www.blogjava.net/wilsonny/archive/2007/01/17/94409.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>今天把Boot程序DEBUG完成了</title><link>http://www.blogjava.net/wilsonny/archive/2007/01/16/94273.html</link><dc:creator>小爽</dc:creator><author>小爽</author><pubDate>Tue, 16 Jan 2007 10:40:00 GMT</pubDate><guid>http://www.blogjava.net/wilsonny/archive/2007/01/16/94273.html</guid><wfw:comment>http://www.blogjava.net/wilsonny/comments/94273.html</wfw:comment><comments>http://www.blogjava.net/wilsonny/archive/2007/01/16/94273.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wilsonny/comments/commentRss/94273.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wilsonny/services/trackbacks/94273.html</trackback:ping><description><![CDATA[
		<p align="center">
				<font size="2">今天终于把Boot程序DEBUG完成了，下一步是编写Loader进行载入，我把我的Unit3最后一个完成的程序命名成Loader.com并拷贝到磁盘上面，结果发现载入运行正常！！鼓励一下，再接再厉！！<br /></font>
				<img src="http://www.blogjava.net/images/blogjava_net/wilsonny/19081/o_bootFinal.JPG" align="center" border="0" /> </p>
<img src ="http://www.blogjava.net/wilsonny/aggbug/94273.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wilsonny/" target="_blank">小爽</a> 2007-01-16 18:40 <a href="http://www.blogjava.net/wilsonny/archive/2007/01/16/94273.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开始编写载入程序</title><link>http://www.blogjava.net/wilsonny/archive/2007/01/16/94182.html</link><dc:creator>小爽</dc:creator><author>小爽</author><pubDate>Tue, 16 Jan 2007 04:00:00 GMT</pubDate><guid>http://www.blogjava.net/wilsonny/archive/2007/01/16/94182.html</guid><wfw:comment>http://www.blogjava.net/wilsonny/comments/94182.html</wfw:comment><comments>http://www.blogjava.net/wilsonny/archive/2007/01/16/94182.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wilsonny/comments/commentRss/94182.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wilsonny/services/trackbacks/94182.html</trackback:ping><description><![CDATA[
		<font size="2">今天开始编写载入程序Loader了，Loader应该负责载入内核和跳入保护模式，然后把控制权交给内核。内核估计要过一段时间才能编写的，先编写Loader吧。<br /><br />搞不懂为什么那本书要把内核编译成elf格式的.....有空得看看gcc了</font>
<img src ="http://www.blogjava.net/wilsonny/aggbug/94182.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wilsonny/" target="_blank">小爽</a> 2007-01-16 12:00 <a href="http://www.blogjava.net/wilsonny/archive/2007/01/16/94182.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>对于int 0x13不能载入到显存的确认程序</title><link>http://www.blogjava.net/wilsonny/archive/2007/01/12/93354.html</link><dc:creator>小爽</dc:creator><author>小爽</author><pubDate>Fri, 12 Jan 2007 02:56:00 GMT</pubDate><guid>http://www.blogjava.net/wilsonny/archive/2007/01/12/93354.html</guid><wfw:comment>http://www.blogjava.net/wilsonny/comments/93354.html</wfw:comment><comments>http://www.blogjava.net/wilsonny/archive/2007/01/12/93354.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wilsonny/comments/commentRss/93354.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wilsonny/services/trackbacks/93354.html</trackback:ping><description><![CDATA[
		<p>org 0x7c00</p>
		<p>mov ah,0<br />mov dl,0<br />int 0x13</p>
		<p>mov ax,0x7f0<br />mov es,ax<br />mov ah,2<br />mov ch,0<br />mov dh,0<br />mov al,1<br />mov cl,2<br />mov dl,0<br />mov ebx,0<br />int 0x13</p>
		<p>mov ax,0xb800<br />mov gs,ax<br />jmp 0x7f00</p>
		<p>times 510-($-$$) db 0<br />dw 0xaa55</p>
		<p>again:<br />.1:<br />inc byte [gs:8]<br />jmp .1</p>
		<p>times 1024-($-$$) db 0</p>
		<p>这个程序的执行成功说明有一段的内存地址是不能够被int 0x13访问的。但是具体是为什么需要进一步思考。</p>
<img src ="http://www.blogjava.net/wilsonny/aggbug/93354.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wilsonny/" target="_blank">小爽</a> 2007-01-12 10:56 <a href="http://www.blogjava.net/wilsonny/archive/2007/01/12/93354.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>编写载入程序读磁盘出现的问题</title><link>http://www.blogjava.net/wilsonny/archive/2007/01/12/93342.html</link><dc:creator>小爽</dc:creator><author>小爽</author><pubDate>Fri, 12 Jan 2007 02:08:00 GMT</pubDate><guid>http://www.blogjava.net/wilsonny/archive/2007/01/12/93342.html</guid><wfw:comment>http://www.blogjava.net/wilsonny/comments/93342.html</wfw:comment><comments>http://www.blogjava.net/wilsonny/archive/2007/01/12/93342.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wilsonny/comments/commentRss/93342.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wilsonny/services/trackbacks/93342.html</trackback:ping><description><![CDATA[
		<p>
				<br />
				<font face="Verdana" size="2">mov ah,0<br />mov dl,0<br />int 0x13</font>
		</p>
		<p>
				<font face="Verdana" size="2">mov ax,0x7d00; original: mov ax,0xb800<br />mov es,ax<br />mov ah,2<br />mov ch,0<br />mov dh,0<br />mov al,1<br />mov cl,1<br />mov dl,0<br />mov ebx,0<br />int 0x13</font>
		</p>
		<p>
				<font face="Verdana" size="2">mov ah,0x4c<br />int 0x21<br /><br />这么短短的程序,在原先把磁盘第一扇区的数据载入到B800：0000从屏幕显示出来却执行完成后B800：0000却没有数据，而如果修改了地址为7d00却可以，这是为什么呢？</font>
		</p>
<img src ="http://www.blogjava.net/wilsonny/aggbug/93342.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wilsonny/" target="_blank">小爽</a> 2007-01-12 10:08 <a href="http://www.blogjava.net/wilsonny/archive/2007/01/12/93342.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用GCC和NASM在Linux下联合编译</title><link>http://www.blogjava.net/wilsonny/archive/2007/01/10/93011.html</link><dc:creator>小爽</dc:creator><author>小爽</author><pubDate>Wed, 10 Jan 2007 14:06:00 GMT</pubDate><guid>http://www.blogjava.net/wilsonny/archive/2007/01/10/93011.html</guid><wfw:comment>http://www.blogjava.net/wilsonny/comments/93011.html</wfw:comment><comments>http://www.blogjava.net/wilsonny/archive/2007/01/10/93011.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wilsonny/comments/commentRss/93011.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wilsonny/services/trackbacks/93011.html</trackback:ping><description><![CDATA[
		<p>
				<font size="2">今天使用nasm和gcc一起编译了一个程序<br />先使用nasm编译一个asm文件为elf格式，汇编文件里面有全局global的_start和functionC，将来连接的时候用。其中还有extern用来表示外部C语言中的函数。<br /><br />我的程序的调用结构： _start(ASM)-&gt;funB(C)-&gt;funC(ASM)<br />其中 ASM文件中：extern funB、global _start、global funC<br />C文件中声明：void funC();<br /><br />函数参数的传递：使用push来传递<strong>地址</strong>，而不是数值。最后参数的清理需要caller来自己解决。</font>
		</p>
		<p>
				<font size="2">需要的命令行：</font>
		</p>
		<p>
				<font size="2">nasm -f elf -o <em>dest</em>.o <em>src</em>.asm </font>
		</p>
		<p>
				<font size="2">gcc -c -o <em>dest2</em>.o <em>src2</em>.c           (-c 的意思是仅仅compile)</font>
		</p>
		<p>
				<font size="2">ld -s -o <em>final</em>.o <em>dest</em>.o <em>dest1</em>.o</font>
		</p>
<img src ="http://www.blogjava.net/wilsonny/aggbug/93011.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wilsonny/" target="_blank">小爽</a> 2007-01-10 22:06 <a href="http://www.blogjava.net/wilsonny/archive/2007/01/10/93011.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于BIOS中断访问磁盘</title><link>http://www.blogjava.net/wilsonny/archive/2007/01/10/92927.html</link><dc:creator>小爽</dc:creator><author>小爽</author><pubDate>Wed, 10 Jan 2007 07:33:00 GMT</pubDate><guid>http://www.blogjava.net/wilsonny/archive/2007/01/10/92927.html</guid><wfw:comment>http://www.blogjava.net/wilsonny/comments/92927.html</wfw:comment><comments>http://www.blogjava.net/wilsonny/archive/2007/01/10/92927.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wilsonny/comments/commentRss/92927.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wilsonny/services/trackbacks/92927.html</trackback:ping><description><![CDATA[
		<p>
				<font size="2">因为磁盘的前512字节负责启动机器，而512字节如果想完成关于保护模式，载入中断向量，磁盘读写等功能几乎不可能。所以前512字节几乎都用来载入磁盘上特定的一个程序来进行下一步的工作。而载入的工作常常是利用中断0x13来进行的。而由于中断的限制，所以Linux不能引导1024扇区以后的内容。不过当系统引导起来以后，因为重新载入了中断向量，所以原来的int就不能够使用了。而在那时候，操作系统就使用端口来读写磁盘了，就不需要再使用原来的BIOS中断了。</font>
		</p>
<img src ="http://www.blogjava.net/wilsonny/aggbug/92927.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wilsonny/" target="_blank">小爽</a> 2007-01-10 15:33 <a href="http://www.blogjava.net/wilsonny/archive/2007/01/10/92927.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>想写个自己的操作系统</title><link>http://www.blogjava.net/wilsonny/archive/2007/01/09/92788.html</link><dc:creator>小爽</dc:creator><author>小爽</author><pubDate>Tue, 09 Jan 2007 15:58:00 GMT</pubDate><guid>http://www.blogjava.net/wilsonny/archive/2007/01/09/92788.html</guid><wfw:comment>http://www.blogjava.net/wilsonny/comments/92788.html</wfw:comment><comments>http://www.blogjava.net/wilsonny/archive/2007/01/09/92788.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/wilsonny/comments/commentRss/92788.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wilsonny/services/trackbacks/92788.html</trackback:ping><description><![CDATA[
		<font size="2">目前研究操作系统，整天使用汇编语言，很想写个自己的操作系统。不要求实用性，只求实现自己多年的梦想。</font>
<img src ="http://www.blogjava.net/wilsonny/aggbug/92788.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wilsonny/" target="_blank">小爽</a> 2007-01-09 23:58 <a href="http://www.blogjava.net/wilsonny/archive/2007/01/09/92788.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用来理解显示页概念的汇编程序(NASM)</title><link>http://www.blogjava.net/wilsonny/archive/2005/04/28/3896.html</link><dc:creator>小爽</dc:creator><author>小爽</author><pubDate>Thu, 28 Apr 2005 14:24:00 GMT</pubDate><guid>http://www.blogjava.net/wilsonny/archive/2005/04/28/3896.html</guid><wfw:comment>http://www.blogjava.net/wilsonny/comments/3896.html</wfw:comment><comments>http://www.blogjava.net/wilsonny/archive/2005/04/28/3896.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wilsonny/comments/commentRss/3896.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wilsonny/services/trackbacks/3896.html</trackback:ping><description><![CDATA[<P><FONT face=Arial color=#000000 size=1>;很多书都在说显示页，就是没有人说到底显示页的概念具体是什么的。<BR>;80x86字符显示页有8个。有对应的BIOS中断来切换页的，页与页之间没有直接关系的。<BR>;当程序在多个页中写程序时，可以及时地在各个页中切换。向屏幕写字符并且想要立刻看到，一定要写到当前显示的页中。<BR>;阅读下面的程序需要有引导程序的知识<BR><BR>;下面的程序功能是在8个页中写入不同的字符，最后在各个页中切换。<BR><BR>;******************************************<BR>;Copy Right Xiaoshuang Wang<BR>;B.F.U<BR>;2005<BR>; 转载请保留此部分<BR>;******************************************<BR><BR>org 0x7c00</FONT></P>
<P><FONT face=Arial color=#000000 size=1>bootStart:<BR>&nbsp;xor ax,ax<BR>&nbsp;mov ds,ax<BR>&nbsp;mov ss,ax<BR>&nbsp;mov sp,0x7c00<BR>&nbsp;mov bp,sp<BR>&nbsp;<BR>&nbsp;; Init the DRIVE <BR>&nbsp;; Boot drive number is stored in DX(lower part)<BR>&nbsp;mov [drive],dl</FONT></P>
<P><FONT face=Arial color=#000000 size=1>again:</FONT></P>
<P><FONT face=Arial color=#000000 size=1>&nbsp;mov cx,200<BR>&nbsp;againChar:<BR>&nbsp;call putString<BR>&nbsp;loop againChar</FONT></P>
<P><FONT face=Arial color=#000000 size=1>&nbsp;<BR>&nbsp;mov al,[page]<BR>&nbsp;inc al<BR>&nbsp;mov [page],al<BR>&nbsp;cmp al,0x8<BR>&nbsp;jne again<BR>&nbsp;<BR>&nbsp;mov cx,0x9<BR>&nbsp;xor al,al<BR>&nbsp;mov [page],al<BR>&nbsp;check:<BR>&nbsp;mov ah,0x05<BR>&nbsp;int 0x10<BR>&nbsp;xor ah,ah<BR>&nbsp;int 0x16<BR>&nbsp;mov al,[page]<BR>&nbsp;inc al<BR>&nbsp;mov [page],al<BR>&nbsp;loop check<BR>&nbsp;<BR>db 0xea<BR>dw 0x0000, 0xffff</FONT></P>
<P><FONT face=Arial color=#000000 size=1>data db '012345678'</FONT></P>
<P><FONT face=Arial color=#000000 size=1>putString:<BR>&nbsp;mov si,[page]<BR>&nbsp;mov al,[data+si]<BR>&nbsp;mov ah,0x0a<BR>&nbsp;mov bl,0x07<BR>&nbsp;mov bh,[page]<BR>&nbsp;int 0x10<BR>retn</FONT></P>
<P><BR><FONT face=Arial color=#000000 size=1>;************************<BR>; Here are the data part<BR>;************************<BR>drive db 0<BR>page db 0</FONT></P>
<P><FONT face=Arial color=#000000 size=1>times 510-($-$$) db 0<BR>&nbsp;dw 0xaa55<BR>&nbsp;</FONT></P><img src ="http://www.blogjava.net/wilsonny/aggbug/3896.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wilsonny/" target="_blank">小爽</a> 2005-04-28 22:24 <a href="http://www.blogjava.net/wilsonny/archive/2005/04/28/3896.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>BIOS中断获得磁盘数据是怎么工作的？</title><link>http://www.blogjava.net/wilsonny/archive/2005/04/21/3584.html</link><dc:creator>小爽</dc:creator><author>小爽</author><pubDate>Thu, 21 Apr 2005 09:47:00 GMT</pubDate><guid>http://www.blogjava.net/wilsonny/archive/2005/04/21/3584.html</guid><wfw:comment>http://www.blogjava.net/wilsonny/comments/3584.html</wfw:comment><comments>http://www.blogjava.net/wilsonny/archive/2005/04/21/3584.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/wilsonny/comments/commentRss/3584.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wilsonny/services/trackbacks/3584.html</trackback:ping><description><![CDATA[<FONT face=Arial size=1><IMG style="WIDTH: 640px; HEIGHT: 356px" height=356 alt=r_getInfo.GIF src="http://www.blogjava.net/images/blogjava_net/wilsonny/1104/r_getInfo.GIF" width=640 border=0><BR><BR>我用nasm编写了一个Bin文件，利用VMware把这个Bin文件作为一个软盘镜像，实际上，这个“软盘”只有512字节。结果我利用BIOS中断得到的这个“软盘”的数据却是......（如上图）。算下来，大概有1.44M的空间，可实际上只有512字节啊。BIOS中断获得磁盘数据究竟是怎么工作的呢？暂时一个谜......</FONT><img src ="http://www.blogjava.net/wilsonny/aggbug/3584.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wilsonny/" target="_blank">小爽</a> 2005-04-21 17:47 <a href="http://www.blogjava.net/wilsonny/archive/2005/04/21/3584.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>INT 0x10，功能号0x0E（显示一个字符）</title><link>http://www.blogjava.net/wilsonny/archive/2005/04/21/3583.html</link><dc:creator>小爽</dc:creator><author>小爽</author><pubDate>Thu, 21 Apr 2005 09:27:00 GMT</pubDate><guid>http://www.blogjava.net/wilsonny/archive/2005/04/21/3583.html</guid><wfw:comment>http://www.blogjava.net/wilsonny/comments/3583.html</wfw:comment><comments>http://www.blogjava.net/wilsonny/archive/2005/04/21/3583.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wilsonny/comments/commentRss/3583.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wilsonny/services/trackbacks/3583.html</trackback:ping><description><![CDATA[<FONT face=Arial size=1>关于显示一个字符到当前屏幕的INT 0x10，功能0x0E：<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;高八位&nbsp;&nbsp;&nbsp;低八位<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;功能&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ASCII号<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AX=&nbsp; 0x0E&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;页号&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;前景色<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BX=&nbsp;&nbsp;0x00？&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;（各个页有什么不同？）</FONT><img src ="http://www.blogjava.net/wilsonny/aggbug/3583.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wilsonny/" target="_blank">小爽</a> 2005-04-21 17:27 <a href="http://www.blogjava.net/wilsonny/archive/2005/04/21/3583.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>