﻿<?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-vandalor-随笔分类-自己动手写操作系统</title><link>http://www.blogjava.net/vandalor/category/39886.html</link><description>海纳百川</description><language>zh-cn</language><lastBuildDate>Thu, 28 May 2009 15:06:30 GMT</lastBuildDate><pubDate>Thu, 28 May 2009 15:06:30 GMT</pubDate><ttl>60</ttl><item><title>自己动手写操作系统(1)---启动程序</title><link>http://www.blogjava.net/vandalor/archive/2009/05/11/270102.html</link><dc:creator>vandalor(海纳百川)</dc:creator><author>vandalor(海纳百川)</author><pubDate>Mon, 11 May 2009 12:28:00 GMT</pubDate><guid>http://www.blogjava.net/vandalor/archive/2009/05/11/270102.html</guid><description><![CDATA[<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 128, 128);">&nbsp;1</span>&nbsp;<span style="color: rgb(0, 0, 0);">.code16<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;2</span>&nbsp;<span style="color: rgb(0, 0, 0);">.text&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;3</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">%</span><span style="color: rgb(0, 0, 0);">cs,</span><span style="color: rgb(0, 0, 0);">%</span><span style="color: rgb(0, 0, 0);">ax<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;4</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">%</span><span style="color: rgb(0, 0, 0);">ax,</span><span style="color: rgb(0, 0, 0);">%</span><span style="color: rgb(0, 0, 0);">ds<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;5</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">%</span><span style="color: rgb(0, 0, 0);">ax,</span><span style="color: rgb(0, 0, 0);">%</span><span style="color: rgb(0, 0, 0);">es<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;6</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;&nbsp;&nbsp;&nbsp;DispStr<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;7</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;jmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;8</span>&nbsp;<span style="color: rgb(0, 0, 0);">DispStr:&nbsp;<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;9</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$BootMessage,&nbsp;</span><span style="color: rgb(0, 0, 0);">%</span><span style="color: rgb(0, 0, 0);">ax<br />
</span><span style="color: rgb(0, 128, 128);">10</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">%</span><span style="color: rgb(0, 0, 0);">ax,</span><span style="color: rgb(0, 0, 0);">%</span><span style="color: rgb(0, 0, 0);">bp<br />
</span><span style="color: rgb(0, 128, 128);">11</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$</span><span style="color: rgb(0, 0, 0);">32</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">%</span><span style="color: rgb(0, 0, 0);">cx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#init&nbsp;the&nbsp;length&nbsp;of&nbsp;word.<br />
</span><span style="color: rgb(0, 128, 128);">12</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$</span><span style="color: rgb(0, 0, 0);">0x1301</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">%</span><span style="color: rgb(0, 0, 0);">ax<br />
</span><span style="color: rgb(0, 128, 128);">13</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$</span><span style="color: rgb(0, 0, 0);">0x00c</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">%</span><span style="color: rgb(0, 0, 0);">bx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#page&nbsp;</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">,&nbsp;black&nbsp;backgroud&nbsp;and&nbsp;red&nbsp;word<br />
</span><span style="color: rgb(0, 128, 128);">14</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">%</span><span style="color: rgb(0, 0, 0);">dl<br />
</span><span style="color: rgb(0, 128, 128);">15</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$</span><span style="color: rgb(0, 0, 0);">0x10</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;10h,display&nbsp;the&nbsp;screen<br />
</span><span style="color: rgb(0, 128, 128);">16</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;ret<br />
</span><span style="color: rgb(0, 128, 128);">17</span>&nbsp;<span style="color: rgb(0, 0, 0);">BootMessage:.ascii&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Hays,&nbsp;Welcome&nbsp;to&nbsp;OS&nbsp;world!</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">18</span>&nbsp;<span style="color: rgb(0, 0, 0);">.org&nbsp;</span><span style="color: rgb(0, 0, 0);">510</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">19</span>&nbsp;<span style="color: rgb(0, 0, 0);">.word&nbsp;</span><span style="color: rgb(0, 0, 0);">0xaa55<br />
这段是boot.S，也就是开机程序，基本的思想是将软盘的第一扇区文件加载到内寻的0x7c00地址，nasm可以通过.org 07c00实现，linux通过下面的Hinix.old实现.<br />
<br />
SECTIONS<br />
{<br />
&nbsp;&nbsp;&nbsp; . = 0x7c00;<br />
&nbsp;&nbsp;&nbsp; .text :<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; _ftext = .;&nbsp; /*Program will be loaded to 0x7c00*/<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; } = 0<br />
}<br />
<br />
通过一些文档查阅知道了int 10中断相当于c里面的display()函数，当然前面的一些寄存器设置就是用来为中断进行参数配置了，现在也就知道这么多。感觉吧，进行底层开发要查的硬件手册肯定特别多。<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
</span></div>
<img src ="http://www.blogjava.net/vandalor/aggbug/270102.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vandalor/" target="_blank">vandalor(海纳百川)</a> 2009-05-11 20:28 <a href="http://www.blogjava.net/vandalor/archive/2009/05/11/270102.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>