<?xml version="1.0" encoding="UTF-8"?>

<?xml-stylesheet type="text/xsl" media="screen" href="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=rss.ja.xml" ?>
<rdf:RDF
  xmlns:dc="http://purl.org/dc/elements/1.1/"

  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xml:lang="ja">
 <channel rdf:about="http://thebbl.hideyosi.com/modules/material/index.php">
  <title>The-BBL::資料集</title>
  <link>http://thebbl.hideyosi.com/modules/material/index.php</link>
  <description>xpWiki RecentChanges</description>
  <dc:date>2026-04-05T11:32:33+09:00</dc:date>
  <image rdf:resource="http://thebbl.hideyosi.com/modules/material/index.phpmodule_icon.php" />
  <items>
   <rdf:Seq>
    <rdf:li rdf:resource="http://thebbl.hideyosi.com/modules/material/?C%E8%A8%80%E8%AA%9E%2F%E5%9E%8B%E3%82%AD%E3%83%A3%E3%82%B9%E3%83%88" />
    <rdf:li rdf:resource="http://thebbl.hideyosi.com/modules/material/?%E8%B3%87%E6%96%99%2FASCII%E3%82%B3%E3%83%BC%E3%83%89%E8%A1%A8" />
    <rdf:li rdf:resource="http://thebbl.hideyosi.com/modules/material/?%E8%B3%87%E6%96%99%2F%E3%81%84%E3%82%8D%E3%81%84%E3%82%8D%E3%81%AA%E3%82%A2%E3%82%BB%E3%83%B3%E3%83%96%E3%83%A9" />
    <rdf:li rdf:resource="http://thebbl.hideyosi.com/modules/material/?%E8%B3%87%E6%96%99%2FVESA" />
    <rdf:li rdf:resource="http://thebbl.hideyosi.com/modules/material/?%E8%B3%87%E6%96%99%2FVESA%2F%E3%81%AF%E3%82%8A%E3%81%BC%E3%81%A6" />
    <rdf:li rdf:resource="http://thebbl.hideyosi.com/modules/material/?x86%2F%E4%BB%AE%E6%83%B386%E3%83%A2%E3%83%BC%E3%83%89" />
    <rdf:li rdf:resource="http://thebbl.hideyosi.com/modules/material/?%E3%83%98%E3%83%AB%E3%83%97" />
    <rdf:li rdf:resource="http://thebbl.hideyosi.com/modules/material/?x86%2FEFLAGS" />
    <rdf:li rdf:resource="http://thebbl.hideyosi.com/modules/material/?x86%2F%E3%83%AC%E3%82%B8%E3%82%B9%E3%82%BF" />
    <rdf:li rdf:resource="http://thebbl.hideyosi.com/modules/material/?x86%2F%E3%82%BB%E3%82%B0%E3%83%A1%E3%83%B3%E3%83%88" />
    <rdf:li rdf:resource="http://thebbl.hideyosi.com/modules/material/?THEBBL%2F%E3%83%A1%E3%83%A2%E3%83%AA%E3%83%9E%E3%83%83%E3%83%97" />
    <rdf:li rdf:resource="http://thebbl.hideyosi.com/modules/material/?x86%2Fx86%2F%E3%82%BB%E3%82%B0%E3%83%A1%E3%83%B3%E3%83%88" />
    <rdf:li rdf:resource="http://thebbl.hideyosi.com/modules/material/?WikiEngines" />
    <rdf:li rdf:resource="http://thebbl.hideyosi.com/modules/material/?WikiName" />
    <rdf:li rdf:resource="http://thebbl.hideyosi.com/modules/material/?WikiWikiWeb" />

   </rdf:Seq>
  </items>
 </channel>
 <image rdf:about="http://thebbl.hideyosi.com/modules/material/index.phpmodule_icon.php">
   <title>The-BBL::資料集</title>
   <link>http://thebbl.hideyosi.com/modules/material/index.php</link>
   <url>http://thebbl.hideyosi.com/modules/material/index.phpmodule_icon.php</url>
 </image>

<item rdf:about="http://thebbl.hideyosi.com/modules/material/index.php?C%E8%A8%80%E8%AA%9E%2F%E5%9E%8B%E3%82%AD%E3%83%A3%E3%82%B9%E3%83%88">
 <title>C言語/型キャスト</title>
 <link>http://thebbl.hideyosi.com/modules/material/?C%E8%A8%80%E8%AA%9E%2F%E5%9E%8B%E3%82%AD%E3%83%A3%E3%82%B9%E3%83%88</link>
 <dc:date>2015-09-22T01:34:09+09:00</dc:date>
 <dc:creator></dc:creator>
 
 <description></description>
 <content:encoded><![CDATA[
 <dl><dt>Changes</dt><dd><div ><table style=""><tbody><tr><td>float??</td><td>4?Х???</td><td>?????򰷤???</td><td colspan="3">?????򰷤????????Ȥ??餷??</td></tr><tr><td>double??</td><td>8?Х???</td><td colspan="4">???????¿??????</td></tr></tbody></table></div></dd></dl><hr /><p><span style="color:red">えーっと！専門家に見てもらったら案の定このページの内容は大間違いだということがわかりましたー！(泣　　そんなわけで再びお勉強＆修正開始〜！</span></p>
<hr />
<p>C言語の変数っていろいろ型がある。で、それらを相互に変換することを<strong>型キャスト</strong>あるいは単純にキャストと言う。</p>
<div>
<div>
 <div>
  ページ内コンテンツ
 </div>
 <div>
  <ul><li> 変数の型 
<ul><li> 豆知識〜 </li></ul></li>
<li> 違う型同士の演算 </li>
<li> キャストの実際 
<ul><li> 単純なもの </li>
<li> ポインタ型のキャスト </li></ul></li>
<li> 現実の型キャスト 
<ul><li> 数値の型キャスト </li></ul></li>
<li> 現実の型キャスト(ポインタ） </li></ul>
 </div>
</div>
<h2>変数の型  <a href="http://thebbl.hideyosi.com/modules/material/?C%E8%A8%80%E8%AA%9E%2F%E5%9E%8B%E3%82%AD%E3%83%A3%E3%82%B9%E3%83%88#p06e0e0f" title="p06e0e0f"><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=anchor.png" alt="anchor.png" height="12" width="12" /></a> <a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=C%E8%A8%80%E8%AA%9E%2F%E5%9E%8B%E3%82%AD%E3%83%A3%E3%82%B9%E3%83%88&amp;paraid=p06e0e0f" title="C言語/型キャスト#p06e0e0f の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" width="9" height="9" alt="Edit" title="C言語/型キャスト#p06e0e0f の編集" /> </a></h2>
<p>そもそも、「型」ってなに？？</p>
<p>普通のコンピュータの素子は1bit(ビット）。0と1しか記憶できない。で、それを8個集めた単位が1byte(バイト）。（つまり8bit=1byteになる）</p>
<div ><table style=""><tbody><tr><td colspan="8" style="text-align:center;">1バイト</td></tr><tr><td>0</td><td>0</td><td>1</td><td>0</td><td>1</td><td>0</td><td>0</td><td>0</td></tr></tbody></table></div>
<div style="text-align:center">↑</div>
<div style="text-align:center">0と1の二つしか表現できない最小単位bit(ビット）。8個集まって1Byte(バイト）になる</div>
<p><br />
<br />
<span style="color:blue">経験則だが、普通多くの言語はこの1バイトを最低単位とする。それ以下のビットは特殊な用途で使用することが多い。ちょうどお金の円と銭みたいな感じ</span>
<br /></p>
<p><br /></p>
<p>C言語でも、<strong>基本的には</strong>変数の最低単位はこの1バイトになる。</p>
<p>1バイトは2進数で00000000〜11111111。10進数に直すと0〜255までとなる。逆に言えば、たった256種類しか表現できない困った単位ともいえる。</p>
<p>でもこれじゃ不便なので、複数のバイトで1個という単位の変数が生まれた。</p>
<p>C言語では大体こんな感じ。</p>
<div ><table style=""><thead><tr><td>型名</td><td>バイト数</td><td>用途</td><td>範囲(10進数)</td><td>範囲(16進数)</td><td>備考</td></tr></thead><tbody><tr><td>char型</td><td>１バイト</td><td>文字（一文字単位)</td><td>-127〜127</td><td>0x00〜0xFF</td><td>「A」だの「i」だの「#」だの</td></tr><tr><td>short型</td><td>2バイト</td><td>すこし大きな整数</td><td>-32768〜32767</td><td colspan="2">0x0000〜0xFFFF</td></tr><tr><td>long型</td><td>4バイト</td><td>かなり大きな整数</td><td>-214783648〜214783647</td><td colspan="2">0x00000000〜0xFFFFFFFF</td></tr><tr><td>int型</td><td>4バイト</td><td>かなり大きな整数</td><td>-214783648〜214783647</td><td>0x00000000〜0xFFFFFFFF</td><td>どうも通常は動作している環境って単位みたい。つまり16bitCPUなら16bit、32bitCPUなら32bitとか(Cコンパイラに依存？)</td></tr><tr><td>float型</td><td>4バイト</td><td>少数を扱える</td><td colspan="3">小数を扱いたい場合使うらしい</td></tr><tr><td>double型</td><td>8バイト</td><td colspan="4">より桁数が多い小数</td></tr><tr><td>ポインタ型</td><td>４バイト</td><td>アドレス変数</td><td colspan="3">アドレスを記憶する</td></tr></tbody></table></div>
<p>・・・こうして見ると、intやfloat、ポインタはみな同じバイト数である。なのでおそらく、実際にメモリ内に記憶されている状態ではまったく同じ状態だと思われる。</p>
<div><pre>int a;
float b;
char *c;

a=0x00FF00FF;
b=0x00FF00FF;
c=0x00FF00FF;

/*この状態で各変数の実際の場所を覗いてみるときっとまったく同じだと思われる*/</pre></div>
<p>しかし、<strong>C言語上では</strong>おのおのは型(タイプ)が違う変数という解釈がされるのだろう。</p>
<!--p06e0e0f--></div>
<div>
<div><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=arrow_up.png" alt="Page Top" width="16" height="16" /></div><h3>豆知識〜  <a href="http://thebbl.hideyosi.com/modules/material/?C%E8%A8%80%E8%AA%9E%2F%E5%9E%8B%E3%82%AD%E3%83%A3%E3%82%B9%E3%83%88#t245203f" title="t245203f"><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=anchor.png" alt="anchor.png" height="12" width="12" /></a> <a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=C%E8%A8%80%E8%AA%9E%2F%E5%9E%8B%E3%82%AD%E3%83%A3%E3%82%B9%E3%83%88&amp;paraid=t245203f" title="C言語/型キャスト#t245203f の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" width="9" height="9" alt="Edit" title="C言語/型キャスト#t245203f の編集" /> </a></h3>
<p>枝豆ってなぁ・・・大豆やねんでぇ？</p>
<ul><li>たとえばchar型。1バイトである。二進数でいえば8桁。扱える範囲は 00000000〜11111111までだ。これを16進数に直すと0x00〜0xFF。10進数だと0〜255までの値を使えるということになる。</li></ul>
<p>ヨミちゃんアカンわ・・・・</p>
<ul><li>しかしこれは間違い。C言語の通常の考え方では、頭の(一番左）のビットは<strong>符号用の印</strong>として扱うようだ。頭の1ビットが0なら正数。1なら負の数ということ。っていうことは、char型が数字の値として扱えるのは残りの7ビットだけということになるわけ。7ビット(0000000〜1111111）だと、0〜127まで。で、符号があるから、char型が扱える数値の範囲は　-127〜127　ということになる。ポインタを除く普通の変数はみなこの法則になる。</li></ul>
<p>それは豆知識やのーて豆の知識や〜て言わなアカンやろ</p>
<ul><li>しかしそれだと不便だという場合もあるよね？。50+40+80なんて計算をしたい場合、char型では正の数は最大で128。たかが170なんて値を計算したのにint型(4バイト)を使わなくてはいけなくなる。これじゃメモリの無駄だよね。なので、<strong>unsigned</strong>というオプションがある。ただの char a; だと、変数aは-127〜127という範囲になるけど、unsigned char a;　って宣言すると、最初の１ビットを符号とするのをやめてくれる。なので変数aは、　0〜255　を扱える変数になるわけ。</li></ul>
<p><span style="color:BLUE">多くのコンピュータの変数等は「0」という値をもっている。なので大抵<strong>0〜xxx</strong>という感じになる。16進数で0x00〜0xFFは、10進数で0〜255となる。最大の値は255だが、0も1個と数えられるので、個数・種類という目でみると1個増える。</span></p>
<ul><li><span style="color:BLUE"><strong>例:</strong>　1バイトは0〜255までの数字を扱える。なので、<strong>256種類</strong>の色を表現できる</span></li></ul>
<!--t245203f--></div>
<div>
<div><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=arrow_up.png" alt="Page Top" width="16" height="16" /></div><h2>違う型同士の演算  <a href="http://thebbl.hideyosi.com/modules/material/?C%E8%A8%80%E8%AA%9E%2F%E5%9E%8B%E3%82%AD%E3%83%A3%E3%82%B9%E3%83%88#db169d62" title="db169d62"><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=anchor.png" alt="anchor.png" height="12" width="12" /></a> <a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=C%E8%A8%80%E8%AA%9E%2F%E5%9E%8B%E3%82%AD%E3%83%A3%E3%82%B9%E3%83%88&amp;paraid=db169d62" title="C言語/型キャスト#db169d62 の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" width="9" height="9" alt="Edit" title="C言語/型キャスト#db169d62 の編集" /> </a></h2>
<p><span style="color:red">ここは厳密には間違っているが、概念の理解のため大雑把に端折って考える</span></p>
<p>当たり前だが現実の世界の計算でも、型やタイプがバラバラなもの同士の演算はできないし、困る。</p>
<div><pre>X = sing60(ピタゴラス+マジンガーZ)</pre></div>
<p>とか。</p>
<p>同じようにC言語の変数でも、違う型同士だと演算や代入はできない。intとfloatがたまたま同じ4バイトだからと言っても、とにかく型が違うんだからできない。ましてやchar型+int型なんて、バイト数も違うんだからなおさらである。</p>
<div><pre>int a,aa,aaa;
unsegned int b;
char c;
float d;
double e;

aaa = aa + a;    /*同じint同士。足し算も代入もOK。*/

a = b - aa;      /*おいおい！ bとaaは型が違うだろ同じ4バイトでも！*/

aaa = e;         /*うわ！aaaとeじゃ型が違うしそもそもバイト数も・・・*/

aa = e + d -b;   /*もうなにがなんだか・・・*/</pre></div>
<p><strong>そこで！！！</strong></p>
<p>型キャスト（型の変換）が必要になってくるというわけ。</p>
<!--db169d62--></div>
<div>
<div><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=arrow_up.png" alt="Page Top" width="16" height="16" /></div><h2>キャストの実際  <a href="http://thebbl.hideyosi.com/modules/material/?C%E8%A8%80%E8%AA%9E%2F%E5%9E%8B%E3%82%AD%E3%83%A3%E3%82%B9%E3%83%88#r83bdef1" title="r83bdef1"><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=anchor.png" alt="anchor.png" height="12" width="12" /></a> <a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=C%E8%A8%80%E8%AA%9E%2F%E5%9E%8B%E3%82%AD%E3%83%A3%E3%82%B9%E3%83%88&amp;paraid=r83bdef1" title="C言語/型キャスト#r83bdef1 の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" width="9" height="9" alt="Edit" title="C言語/型キャスト#r83bdef1 の編集" /> </a></h2>
<!--r83bdef1--></div>
<div>
<div><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=arrow_up.png" alt="Page Top" width="16" height="16" /></div><h3>単純なもの  <a href="http://thebbl.hideyosi.com/modules/material/?C%E8%A8%80%E8%AA%9E%2F%E5%9E%8B%E3%82%AD%E3%83%A3%E3%82%B9%E3%83%88#h2426baf" title="h2426baf"><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=anchor.png" alt="anchor.png" height="12" width="12" /></a> <a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=C%E8%A8%80%E8%AA%9E%2F%E5%9E%8B%E3%82%AD%E3%83%A3%E3%82%B9%E3%83%88&amp;paraid=h2426baf" title="C言語/型キャスト#h2426baf の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" width="9" height="9" alt="Edit" title="C言語/型キャスト#h2426baf の編集" /> </a></h3>
<p>こんな式を妄想してみます。</p>
<div><pre>char a;
int b;
int c:

a = 18;
b = 38632;

c = a + b;</pre></div>
<p>さて、これは問題です。まず、 a+b　の時点で、char型+int型です。型が合いません。</p>
<p>これを暗算すると、38650になります。計算の結果はint型の変数cに収まります。代入はまあ、問題ないでしょう。</p>
<p>じゃあどうしたらいいかというと、こんなふうにしてchar型のaをint型に変換します。</p>
<div><pre>char a;
int b,ab;
int c:

a = 18;
b = 38632;

ab = (int)a;    /*こうすると、char型aの値(18)はそのままに、int型に変換してくれる*/

c = ab + b;     /*当然int同士の足し算。そして結果をint型に代入なので、問題なし！*/</pre></div>
<p>さて、上の式を見ると、変数abは一時的に型キャストした変数aを収めているだけですね。こんなことでいちいち変数を使うのはもったいないし行数も増える。ちょっといや〜ん。</p>
<p>そこでこんなふうに書くことができます。</p>
<div><pre>char a;
int b;
int c:

a = 18;
b = 38632;
c = (int)a + b;</pre></div>
<p>なるほど！。簡単で単純ですね！</p>
<p>・・・ちなみに、この型キャストはあくまでも一時的に式の内部で変換をしただけです。なので、変数aそのものがint型に変化したわけではないことに注意。</p>
<!--h2426baf--></div>
<div>
<div><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=arrow_up.png" alt="Page Top" width="16" height="16" /></div><h3>ポインタ型のキャスト  <a href="http://thebbl.hideyosi.com/modules/material/?C%E8%A8%80%E8%AA%9E%2F%E5%9E%8B%E3%82%AD%E3%83%A3%E3%82%B9%E3%83%88#aa70e23e" title="aa70e23e"><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=anchor.png" alt="anchor.png" height="12" width="12" /></a> <a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=C%E8%A8%80%E8%AA%9E%2F%E5%9E%8B%E3%82%AD%E3%83%A3%E3%82%B9%E3%83%88&amp;paraid=aa70e23e" title="C言語/型キャスト#aa70e23e の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" width="9" height="9" alt="Edit" title="C言語/型キャスト#aa70e23e の編集" /> </a></h3>
<p>これがややこしいですね。整理して単純化して考えてみます。</p>
<p>たとえばですが、メモリの0x0010番地〜0x0014番地になんらかの方法で22〜26までの値を代入してあるとします。（どうやるかはちょっとここでは考えない）</p>
<div><pre>とりあえず今はこういう状態だと仮定する。
                              ：            ：
　　　　　　　　　　　　　　　├──────┤
                  0x0010番地  │   22 (0x16)│  
　　　　　　　　　　　　　　　├──────┤
                  0x0011番地  │   23 (0x17)│  
　　　　　　　　　　　　　　　├──────┤
                  0x0012番地  │   24 (0x18)│  
　　　　　　　　　　　　　　　├──────┤
                  0x0013番地  │   25 (0x19)│  
　　　　　　　　　　　　　　　├──────┤
                  0x0014番地  │   26 (0x1A)│  
　　　　　　　　　　　　　　　├──────┤
                              ：            ：</pre></div>
<p>ここでたとえば、「0x0010番地〜0x0014番地に入っている値を表示しなさい！」という指令を受けたとします。どういうプログラムになるでしょう？</p>
<div><pre>char *p;
char a;
int i;


for(i = 0ｘ0010; i = 0x0014; i = i+1)
   {
       p = i;
       printf(&quot;データは %d  16進数だと %x だよーん！\n&quot;,*p);

   }</pre></div>
<p>これで、0x0010番地〜0x0014番地の内容が次々と表示されるはずです。</p>
<div><pre>データは 22  16進数だと 0x16 だよーん！
データは 23  16進数だと 0x17 だよーん！
データは 24  16進数だと 0x18 だよーん！
データは 25  16進数だと 0x19 だよーん！
データは 26  16進数だと 0x1A だよーん！</pre></div>
<p>さて、このプログラム。コンパイルするとエラーというか、警告が出てきます。型が合わないんです。いったいどこが？？？？</p>
<div><pre>p = i;</pre></div>
<p>なんと！ここです。おかしいですね？。pはアドレス変数として宣言しています。pに数値を入れればその数値の番地の内容が*pで取り出せるはずです。だからアドレス変数pに、変数i(0x0010〜0x0014まで変化してくれる値）を代入したのですが・・・</p>
<p>実はC言語では、同じ4バイトの変数や値と<strong>アドレス変数</strong>というのはまったく別で特別なものと考えられているようです。</p>
<p>普通の型の変数でもバイト数が違ったりすると問題なのはわかりますよね?。アドレス変数はもっとまったく別で、<strong>数値ですらない</strong>くらいまったく別なんです。</p>
<p>こんなふうに考えるとわかります。アドレス。文字通り、<strong>住所・番地</strong>です。</p>
<ul><li>たとえばアナタの住んでいる所。住所がありますよね？。で、その住所。数字も使われているでしょう？</li>
<li>日本国 東京都 葛飾区 亀有 5丁目 18番地　とか。</li>
<li>こういう住所の数字に対して、「なあ？お前の家の住所の三倍ってなに？」ともし聞かれたらどう答えますか？</li>
<li>「まずよく寝ろ！話はそれからだ」が正しいですね？　＜はぁ？？？</li>
<li>つまり、住所にはたまたま数字が使われていますが、これは倍にしたり割り算したりするようなものではない。つまり、<strong>数字は使っているけど数値ではない</strong>となります。</li></ul>
<p>上記の例がエラーになるのはこれが理由です。int(4バイト)だろうがchar(1バイト）だろうが、これらは数値なのです。なので、「住所の番地に数を代入しようとしてるぞ！おかしいぞ！」と、こういうことでエラーになってしまうのです。</p>
<p>そのため、こういう代入をしたい場合は、数値であるiを<strong>型キャスト</strong>して、一時的にアドレス変数タイプに転換してから代入してやる必要があります。</p>
<p>この場合、何型にキャストしてあげればいいでしょう。pと同じにしてあげればいいのです。変数pはchar型です。しかも、*がついています。char型のアドレス変数(ポインタ）です。なので、</p>
<div><pre>char *p;
char a;
int i;


for(i = 0ｘ0010; i = 0x0014; i = i+1)
   {
       p = (char *)i;　　　　/*　←ここに注目！*/
       printf(&quot;データは %d  16進数だと %x だよーん！\n&quot;,*p);

   }</pre></div>
<p>こうしてあげれば、int変数であるiは一時的にアドレス変数pと同じ型に変化します。よって代入が可能になり、エラーが出なくなります。</p>
<p>もう一度書きますが、アドレス変数(ポインタ)は、たまたま数字を使っているだけの住所番地です。よって、足したり割ったり掛け算したりできる<strong>数値</strong>とはまったく違う型なのです。</p>
<ul><li><span style="color:BLUE">ちょっとまて！それはおかしいぞ！ この状態で p = p + 1 等の演算をしてもエラーにならないはず。アドレス変数だって計算が出来る<strong>数値</strong>じゃないのか？？</span></li></ul>
<ul><li><span style="color:red">大変すばらしい問いです。ほんとですね。アドレス変数であるpに対して、足し算・引き算を行うことはできますしエラーにはなりません。やっぱりアドレス変数も<strong>数値</strong>なのでしょうか？？？</span></li>
<li><span style="color:red">では、実験してください。p = p * 3 等、掛け算や割り算をしてみてください。ほらね？エラーになるでしょう？？。これはいったいどういうことなのでしょうか？</span></li>
<li><span style="color:red">難しく考えることじゃありません。たとえば最初に出した、実際の住所・番地で考えてください。</span>
<ul><li><span style="color:red">あなたの住所は「日本国 東京都 葛飾区 亀有 5丁目 18番地」です。この住所に対して、「お前の住所の2倍」というのは成り立ちません。</span></li>
<li><span style="color:red">しかし、「お前の住所の次」はどうですか？</span></li>
<li><span style="color:red">「お前の住所の3軒前の家」ならどうでしょうか？。</span></li>
<li><span style="color:red">そう。成り立ちますね？</span></li></ul></li>
<li><span style="color:red">つまり、アドレス変数が足し算引き算はできても掛け算割り算ができないのはこういう理由なのです。そしてこの理屈なら、足し算ができたってやっぱりアドレス変数は<strong>数値</strong>ではないということも矛盾しないでしょう？</span></li>
<li><span style="color:red">もっと言えば、アドレス変数(ポインタ)を　p = p + 2 などとしているのは「2軒後のお家」と言っているだけで、そもそも<strong>足し算ではない</strong>とさえ言えます</span></li></ul>
<!--aa70e23e--></div>
<div>
<div><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=arrow_up.png" alt="Page Top" width="16" height="16" /></div><h2>現実の型キャスト  <a href="http://thebbl.hideyosi.com/modules/material/?C%E8%A8%80%E8%AA%9E%2F%E5%9E%8B%E3%82%AD%E3%83%A3%E3%82%B9%E3%83%88#x0b20a5e" title="x0b20a5e"><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=anchor.png" alt="anchor.png" height="12" width="12" /></a> <a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=C%E8%A8%80%E8%AA%9E%2F%E5%9E%8B%E3%82%AD%E3%83%A3%E3%82%B9%E3%83%88&amp;paraid=x0b20a5e" title="C言語/型キャスト#x0b20a5e の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" width="9" height="9" alt="Edit" title="C言語/型キャスト#x0b20a5e の編集" /> </a></h2>
<p>さて、これまで書いたことは、あくまでも概念と理屈の理解のためです。実際のCでは上記そのままではありません。（もちろん理屈そのものは合っているはずです）</p>
<!--x0b20a5e--></div>
<div>
<div><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=arrow_up.png" alt="Page Top" width="16" height="16" /></div><h3>数値の型キャスト  <a href="http://thebbl.hideyosi.com/modules/material/?C%E8%A8%80%E8%AA%9E%2F%E5%9E%8B%E3%82%AD%E3%83%A3%E3%82%B9%E3%83%88#k48737ef" title="k48737ef"><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=anchor.png" alt="anchor.png" height="12" width="12" /></a> <a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=C%E8%A8%80%E8%AA%9E%2F%E5%9E%8B%E3%82%AD%E3%83%A3%E3%82%B9%E3%83%88&amp;paraid=k48737ef" title="C言語/型キャスト#k48737ef の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" width="9" height="9" alt="Edit" title="C言語/型キャスト#k48737ef の編集" /> </a></h3>
<p>たとえばこんな式を考えます。</p>
<div><pre> char z;
 char c;

 z = 0x44;
 c = 0x22;

 c = c + z;

 printf(&quot;data is %x\n&quot;,c);</pre></div>
<p>答えは暗算できますね。結果は0x66になります。もちろんエラーも出ません。同じ型同士の足し算を同じ型に代入したのですから当然ですね。</p>
<p>ではこんな式はどうでしょう？</p>
<div><pre> int i;

 char z;
 char c;

 z = 0x44;
 c = 0x22;

 i = c + z;

 printf(&quot;data is %x\n&quot;,i);</pre></div>
<p>これまで説明してきた「概念」ではこれはおかしいはずです。だって、変数zと変数cはchar型。しかし代入しているiはint型。型が合わないはずです。<strong>ところが・・・</strong></p>
<p>あれれれ〜？　これをコンパイルすると、ちゃんと<strong>エラーもなく</strong>、さらに実行してもちゃんと答えが出てきます。どういうこと？？？</p>
<p>実はこれは、厳密には概念通り、型が合わないのです。しかしCコンパイラは、「この程度ならよく使うし、いちいち型キャストの警告出しててもうっとぉしいだろうなぁ。この程度は容認してあげよう」と考えるように調整されているのです。</p>
<ul><li><span style="color:blue">もちろん、  i = (int)c + (int)z; と書いても当然エラーにはなりません。むしろこれが正しいのです。<strong>本来の概念</strong>で言えば。</span></li></ul>
<p>もちろん「許容」にもちゃんと法則があります。
<br />
許容の法則は一般にちょっとややこしい説明がされていることが多いのですが、こんな風に分けて考えればそうむずかしくありません。</p>
<p>まず、左辺と右辺に分けて考えるといいです。</p>
<ul><li>まず右辺内
<ol><li>混在する一番大きな型に合わせて自動調整される</li>
<li>ただし、int以下のものは全てintに強制変換される</li>
<li>以上の法則で、「とりあえず右辺内」の値が出来上がる</li></ol></li>
<li>次に左辺
<ol><li>右辺の値や型がなんだろうと左辺の型に強制変換される</li>
<li>もしはみ出た場合は切り捨てられる</li></ol></li></ul>
<p>基本的にはこれを上から順番に行い、最後に左辺の値が決まると考えてもらってOKです。</p>
<p>実際の場合を思考実験してみましょう。たとえばこんな式の場合。</p>
<div><pre> char c;
 int i;

 c = 0xf3;
 i = 0x12;
 
 c = c + i;

 printf(&quot;data is 0x%X\n&quot;,c);</pre></div>
<p>これは暗算できますね？。答えは0x105になるはずです。しかしこれを実際にコンパイルして実行すると、答えは0x5になります。はて？？？</p>
<div><pre> c = c + i;    /*　← ここがどう処理されているのか？　*/</pre></div>
<ol><li><ol><li>まず右辺。</li>
<li>おぉ？ iはintだけど、cはcharじゃないか！。型が違うぞ！</li>
<li>仕方がない。自動的に許容しよう。</li>
<li>右辺で一番大きいのは・・・int型(変数i）だな！</li>
<li>よし、全ての変数を無理やりint型として考えよう！</li>
<li>結果、この式は、c = 0x000000f3(int型。4バイト) + 0x00000012 (int型。4バイト)に変換だ！</li>
<li>よし！計算できたぞ！。結果はこうだ！　c = 0x00000105(int型。4バイト)　だ！。</li>
<li>これで右辺は終了だ！。今度は左辺への代入処理だ！</li>
<li>左辺への代入の場合、右辺が何だろうと左辺の型に強制変換だ！</li>
<li>むむむ！　なんていうことだ！　左辺はchar型。右辺はint型。左辺の型のほうが小さいぞ！</li>
<li>・・・しかし、「右辺が何だろうと左辺の型に強制変換」は決まっている！。これは崩せない！</li>
<li>仕方がない。はみ出す部分は残念だが<strong>切捨て</strong>てしまおう！</li>
<li>右辺をこう切り捨てる。　c = 0x05　（右辺の頭の3バイトが切り捨てられた）</li>
<li>よし！　左辺 c に代入できるぞ。代入！</li></ol></li></ol>
<p>こういう内部処理が行われて、結果、暗算の結果である0x105は0x05に切り捨てられ、cに代入が完成し、計算が終わるのです。</p>
<p>この、自動型調整はややこしいといわれますが、とにかくポイントは、上記の8番の部分。<strong>「式の処理は、一旦右辺の中で全部解決して、それが終わったら改めて左辺への代入に移る」</strong>というところでしょうか？</p>
<ul><li><span style="color:blue">少数の場合はどうなるの？？？</span></li>
<li><span style="color:red">・・・いや申し訳ない。少数を扱う場合も勉強してみたのですが、どうも整理しきれませんでした。またここはオイラが<strong>OSを作る</strong>ために勉強して整理しているサイトなので、このページとしては少数型はこれ以上はツッこまないことにしようかと・・・</span></li></ul>
<!--k48737ef--></div>
<div>
<div><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=arrow_up.png" alt="Page Top" width="16" height="16" /></div><h2>現実の型キャスト(ポインタ）  <a href="http://thebbl.hideyosi.com/modules/material/?C%E8%A8%80%E8%AA%9E%2F%E5%9E%8B%E3%82%AD%E3%83%A3%E3%82%B9%E3%83%88#j3516d0b" title="j3516d0b"><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=anchor.png" alt="anchor.png" height="12" width="12" /></a> <a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=C%E8%A8%80%E8%AA%9E%2F%E5%9E%8B%E3%82%AD%E3%83%A3%E3%82%B9%E3%83%88&amp;paraid=j3516d0b" title="C言語/型キャスト#j3516d0b の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" width="9" height="9" alt="Edit" title="C言語/型キャスト#j3516d0b の編集" /> </a></h2>
<p>これは「現実」とは言っても、ほぼ概念通りと考えてもらってかまわないと思います。</p>
<p>アドレス変数(ポインタ)は特別にして唯一無比の型なので、とにかくこれに代入しようとした場合はほぼ<strong>かならず型キャストして代入する</strong>で問題ないでしょう。</p>
<ul><li><span style="color:blue">少ない桁数の変数から型キャストした場合どうなるのか？</span></li></ul>
<p>こういうのは実験しちゃうのが早いですよ？</p>
<div><pre>int main(void){

 char *p;
 char c;

 c = 0x33;
 p = c;

 printf(&quot;data is 0x%X\n&quot;,p);

}</pre></div>
<p>さて、これをコンパイルすると・・・</p>
<p>おっと！いけない！型キャストを忘れていました。</p>
<div><pre>int main(void){

 char *p;
 char c;

 c = 0x33;
 p = (char *)c;

 printf(&quot;data is 0x%X\n&quot;,p);

}</pre></div>
<p>・・・実は、これもエラーが出ます。「キャストはいいけどサイズが合わんぞ。サイズくらい合わせろよ！」ってとこでしょうか？</p>
<p>しかし警告エラーは無視してコンパイルし、これを実行すると、答えは0x33と表示されます。おそらくこういう場合、足りないケタ数は0で埋められてしまうようです。</p>
<p>では、char型の変数の値をアドレス変数に当て込むにはどういう手法が正しいのでしょうか？</p>
<p>正しい呼び名はわかりませんが、おそらくこういう「二段キャスト」でよいはずです。</p>
<div><pre> p = (char *)(int)c;</pre></div>
<p><span style="color:blue">上記。理解のため無理にchar型を使っていますが、やっぱり理想は、せめてint型にしてから、あるいはアドレス変数への代入が予想されるような値は最初からint型で定義して使うというのが本流なのでしょう。きっと。</span></p><!--j3516d0b--></div>


 ]]></content:encoded>
 <dc:identifier>http://thebbl.hideyosi.com/modules/material/index.php?C%E8%A8%80%E8%AA%9E%2F%E5%9E%8B%E3%82%AD%E3%83%A3%E3%82%B9%E3%83%88</dc:identifier>

</item>
<item rdf:about="http://thebbl.hideyosi.com/modules/material/index.php?%E8%B3%87%E6%96%99%2FASCII%E3%82%B3%E3%83%BC%E3%83%89%E8%A1%A8">
 <title>資料/ASCIIコード表</title>
 <link>http://thebbl.hideyosi.com/modules/material/?%E8%B3%87%E6%96%99%2FASCII%E3%82%B3%E3%83%BC%E3%83%89%E8%A1%A8</link>
 <dc:date>2012-10-23T14:58:13+09:00</dc:date>
 <dc:creator></dc:creator>
 
 <description>10進数16進数文字備考000x00NUL（null文字)制御文字。通常は画面表示でははじく10x01SOH（ヘッダ開始）20x02STX（テキスト開始）30x03ETX（テキスト終了）40x04EOT（転送終了）50x05ENQ（照会）60x06ACK（受信ＯＫ）70x07BEL（警告）80x08BS（後退）90x09HT（水平タブ）100x0aLF（改行）110x0bVT（垂直タブ）120x0cFF（改頁）130x0dCR（復帰）140x0eSO（シフトアウト）150x0fSI（シフトイン）</description>
 <content:encoded><![CDATA[
 <div ><table style=""><thead><tr><td>10進数</td><td>16進数</td><td>文字</td><td>備考</td></tr></thead><tbody><tr><td>0</td><td>00x00</td><td>NUL（null文字)</td><td rowspan="32">制御文字。通常は画面表示でははじく</td></tr><tr><td>1</td><td>0x01</td><td>SOH（ヘッダ開始）</td></tr><tr><td>2</td><td>0x02</td><td>STX（テキスト開始）</td></tr><tr><td>3</td><td>0x03</td><td>ETX（テキスト終了）</td></tr><tr><td>4</td><td>0x04</td><td>EOT（転送終了）</td></tr><tr><td>5</td><td>0x05</td><td>ENQ（照会）</td></tr><tr><td>6</td><td>0x06</td><td>ACK（受信ＯＫ）</td></tr><tr><td>7</td><td>0x07</td><td>BEL（警告）</td></tr><tr><td>8</td><td>0x08</td><td>BS（後退）</td></tr><tr><td>9</td><td>0x09</td><td>HT（水平タブ）</td></tr><tr><td>10</td><td>0x0a</td><td>LF（改行）</td></tr><tr><td>11</td><td>0x0b</td><td>VT（垂直タブ）</td></tr><tr><td>12</td><td>0x0c</td><td>FF（改頁）</td></tr><tr><td>13</td><td>0x0d</td><td>CR（復帰）</td></tr><tr><td>14</td><td>0x0e</td><td>SO（シフトアウト）</td></tr><tr><td>15</td><td>0x0f</td><td>SI（シフトイン）</td></tr><tr><td>16</td><td>0x10</td><td>DLE（データリンクエスケープ）</td></tr><tr><td>17</td><td>0x11</td><td>DC1（装置制御１）</td></tr><tr><td>18</td><td>0x12</td><td>DC2（装置制御２）</td></tr><tr><td>19</td><td>0x13</td><td>DC3（装置制御３）</td></tr><tr><td>20</td><td>0x14</td><td>DC4（装置制御４）</td></tr><tr><td>21</td><td>0x15</td><td>NAK（受信失敗）</td></tr><tr><td>22</td><td>0x16</td><td>SYN（同期）</td></tr><tr><td>23</td><td>0x17</td><td>ETB（転送ブロック終了）</td></tr><tr><td>24</td><td>0x18</td><td>CAN（とりけし）</td></tr><tr><td>25</td><td>0x19</td><td>EM（メディア終了）</td></tr><tr><td>26</td><td>0x1a</td><td>SUB（置換）</td></tr><tr><td>27</td><td>0x1b</td><td>ESC（エスケープ）</td></tr><tr><td>28</td><td>0x1c</td><td>FS（フォーム区切り）</td></tr><tr><td>29</td><td>0x1d</td><td>GS（グループ区切り）</td></tr><tr><td>30</td><td>0x1e</td><td>RS（レコード区切り）</td></tr><tr><td>31</td><td>0x1f</td><td>US（ユニット区切り）</td></tr><tr><td>32</td><td>0x20</td><td colspan="2">（スペース）</td></tr><tr><td>33</td><td>0x21</td><td colspan="2">!</td></tr><tr><td>34</td><td>0x22</td><td colspan="2">&quot;</td></tr><tr><td>35</td><td>0x23</td><td colspan="2">#</td></tr><tr><td>36</td><td>0x24</td><td colspan="2">$</td></tr><tr><td>37</td><td>0x25</td><td colspan="2">%</td></tr><tr><td>38</td><td>0x26</td><td colspan="2">&amp;</td></tr><tr><td>39</td><td>0x27</td><td colspan="2">'</td></tr><tr><td>40</td><td>0x28</td><td colspan="2">(</td></tr><tr><td>41</td><td>0x29</td><td colspan="2">)</td></tr><tr><td>42</td><td>0x2a</td><td colspan="2">*</td></tr><tr><td>43</td><td>0x2b</td><td colspan="2">+</td></tr><tr><td>44</td><td>0x2c</td><td colspan="2">,</td></tr><tr><td>45</td><td>0x2d</td><td colspan="2">-</td></tr><tr><td>46</td><td>0x2e</td><td colspan="2">.</td></tr><tr><td>47</td><td>0x2f</td><td colspan="2">/</td></tr><tr><td>48</td><td>0x30</td><td colspan="2">0</td></tr><tr><td>49</td><td>0x31</td><td colspan="2">1</td></tr><tr><td>50</td><td>0x32</td><td colspan="2">2</td></tr><tr><td>51</td><td>0x33</td><td colspan="2">3</td></tr><tr><td>52</td><td>0x34</td><td colspan="2">4</td></tr><tr><td>53</td><td>0x35</td><td colspan="2">5</td></tr><tr><td>54</td><td>0x36</td><td colspan="2">6</td></tr><tr><td>55</td><td>0x37</td><td colspan="2">7</td></tr><tr><td>56</td><td>0x38</td><td colspan="2">8</td></tr><tr><td>57</td><td>0x39</td><td colspan="2">9</td></tr><tr><td>58</td><td>0x3a</td><td colspan="2">:</td></tr><tr><td>59</td><td>0x3b</td><td colspan="2">;</td></tr><tr><td>60</td><td colspan="3">0x3c</td></tr><tr><td>61</td><td>0x3d</td><td colspan="2">=</td></tr><tr><td>62</td><td>0x3e</td><td colspan="2">　&gt;</td></tr><tr><td>63</td><td>0x3f</td><td colspan="2">?</td></tr><tr><td>64</td><td>0x40</td><td colspan="2">@</td></tr><tr><td>65</td><td>0x41</td><td colspan="2">A</td></tr><tr><td>66</td><td>0x42</td><td colspan="2">B</td></tr><tr><td>67</td><td>0x43</td><td colspan="2">C</td></tr><tr><td>68</td><td>0x44</td><td colspan="2">D</td></tr><tr><td>69</td><td>0x45</td><td colspan="2">E</td></tr><tr><td>70</td><td>0x46</td><td colspan="2">F</td></tr><tr><td>71</td><td>0x47</td><td colspan="2">G</td></tr><tr><td>72</td><td>0x48</td><td colspan="2">H</td></tr><tr><td>73</td><td>0x49</td><td colspan="2">I</td></tr><tr><td>74</td><td>0x4a</td><td colspan="2">J</td></tr><tr><td>75</td><td>0x4b</td><td colspan="2">K</td></tr><tr><td>76</td><td>0x4c</td><td colspan="2">L</td></tr><tr><td>77</td><td>0x4d</td><td colspan="2">M</td></tr><tr><td>78</td><td>0x4e</td><td colspan="2">N</td></tr><tr><td>79</td><td>0x4f</td><td colspan="2">O</td></tr><tr><td>80</td><td>0x50</td><td colspan="2">P</td></tr><tr><td>81</td><td>0x51</td><td colspan="2">Q</td></tr><tr><td>82</td><td>0x52</td><td colspan="2">R</td></tr><tr><td>83</td><td>0x53</td><td colspan="2">S</td></tr><tr><td>84</td><td>0x54</td><td colspan="2">T</td></tr><tr><td>85</td><td>0x55</td><td colspan="2">U</td></tr><tr><td>86</td><td>0x56</td><td colspan="2">V</td></tr><tr><td>87</td><td>0x57</td><td colspan="2">W</td></tr><tr><td>88</td><td>0x58</td><td colspan="2">X</td></tr><tr><td>89</td><td>0x59</td><td colspan="2">Y</td></tr><tr><td>90</td><td>0x5a</td><td colspan="2">Z</td></tr><tr><td>91</td><td>0x5b</td><td colspan="2">[</td></tr><tr><td>92</td><td>0x5c</td><td colspan="2">\</td></tr><tr><td>93</td><td>0x5d</td><td rowspan="2" colspan="2">]</td></tr><tr><td>94</td><td>0x5e</td></tr><tr><td>95</td><td>0x5f</td><td colspan="2">_</td></tr><tr><td>96</td><td>0x60</td><td colspan="2">`</td></tr><tr><td>97</td><td>0x61</td><td colspan="2">a</td></tr><tr><td>98</td><td>0x62</td><td colspan="2">b</td></tr><tr><td>99</td><td>0x63</td><td colspan="2">c</td></tr><tr><td>100</td><td>0x64</td><td colspan="2">d</td></tr><tr><td>101</td><td>0x65</td><td colspan="2">e</td></tr><tr><td>102</td><td>0x66</td><td colspan="2">f</td></tr><tr><td>103</td><td>0x67</td><td colspan="2">g</td></tr><tr><td>104</td><td>0x68</td><td colspan="2">h</td></tr><tr><td>105</td><td>0x69</td><td colspan="2">i</td></tr><tr><td>106</td><td>0x6a</td><td colspan="2">j</td></tr><tr><td>107</td><td>0x6b</td><td colspan="2">k</td></tr><tr><td>108</td><td>0x6c</td><td colspan="2">l</td></tr><tr><td>109</td><td>0x6d</td><td colspan="2">m</td></tr><tr><td>110</td><td>0x6e</td><td colspan="2">n</td></tr><tr><td>111</td><td>0x6f</td><td colspan="2">o</td></tr><tr><td>112</td><td>0x70</td><td colspan="2">p</td></tr><tr><td>113</td><td>0x71</td><td colspan="2">q</td></tr><tr><td>114</td><td>0x72</td><td colspan="2">r</td></tr><tr><td>115</td><td>0x73</td><td colspan="2">s</td></tr><tr><td>116</td><td>0x74</td><td colspan="2">t</td></tr><tr><td>117</td><td>0x75</td><td colspan="2">u</td></tr><tr><td>118</td><td>0x76</td><td colspan="2">v</td></tr><tr><td>119</td><td>0x77</td><td colspan="2">w</td></tr><tr><td>120</td><td>0x78</td><td colspan="2">x</td></tr><tr><td>121</td><td>0x79</td><td colspan="2">y</td></tr><tr><td>122</td><td>0x7a</td><td colspan="2">z</td></tr><tr><td>123</td><td>0x7b</td><td colspan="2">{</td></tr><tr><td>124</td><td>0x7c</td><td colspan="2">｜</td></tr><tr><td>125</td><td>0x7d</td><td colspan="2">}</td></tr><tr><td>126</td><td>0x7e</td><td colspan="2">〜</td></tr><tr><td>127</td><td>0x7f</td><td>DEL（削除）</td><td>制御文字。通常は画面表示でははじく</td></tr></tbody></table></div>

 ]]></content:encoded>
 <dc:identifier>http://thebbl.hideyosi.com/modules/material/index.php?%E8%B3%87%E6%96%99%2FASCII%E3%82%B3%E3%83%BC%E3%83%89%E8%A1%A8</dc:identifier>

</item>
<item rdf:about="http://thebbl.hideyosi.com/modules/material/index.php?%E8%B3%87%E6%96%99%2F%E3%81%84%E3%82%8D%E3%81%84%E3%82%8D%E3%81%AA%E3%82%A2%E3%82%BB%E3%83%B3%E3%83%96%E3%83%A9">
 <title>資料/いろいろなアセンブラ</title>
 <link>http://thebbl.hideyosi.com/modules/material/?%E8%B3%87%E6%96%99%2F%E3%81%84%E3%82%8D%E3%81%84%E3%82%8D%E3%81%AA%E3%82%A2%E3%82%BB%E3%83%B3%E3%83%96%E3%83%A9</link>
 <dc:date>2012-10-23T14:58:11+09:00</dc:date>
 <dc:creator></dc:creator>
 
 <description>NOWSMART ASSEMBLER
MASM32
nask
nasm
</description>
 <content:encoded><![CDATA[
 <p>NOWSMART ASSEMBLER</p>
<p><a href="http://www.masm32.com/" title="www.masm32.com/">MASM32</a></p>
<ul><li>nask</li></ul>
<ul><li>nasm</li></ul>

 ]]></content:encoded>
 <dc:identifier>http://thebbl.hideyosi.com/modules/material/index.php?%E8%B3%87%E6%96%99%2F%E3%81%84%E3%82%8D%E3%81%84%E3%82%8D%E3%81%AA%E3%82%A2%E3%82%BB%E3%83%B3%E3%83%96%E3%83%A9</dc:identifier>

</item>
<item rdf:about="http://thebbl.hideyosi.com/modules/material/index.php?%E8%B3%87%E6%96%99%2FVESA">
 <title>資料/VESA</title>
 <link>http://thebbl.hideyosi.com/modules/material/?%E8%B3%87%E6%96%99%2FVESA</link>
 <dc:date>2012-10-23T14:58:11+09:00</dc:date>
 <dc:creator></dc:creator>
 
 <description>
 
  ページ内コンテンツ
 
 
   VESAから帰ってくる情報の情報 
 最初の一手 
 OEM Name 
 0x4f01 
 豆知識！ 
 戯言 
 
VESAから帰ってくる情報の情報    
VESA BIOSが搭載されているのかいないのか。また、搭載されていた場合、どこまで使えるのか。そういう手の情報はある程度BIOSから返される。ではどんなものなのか？？
最初の一手    
16bit（リアルモード）時、以下のBIOSコールを行うといろいろ調べることができる。
		MOV	AX</description>
 <content:encoded><![CDATA[
 <div>
<div>
 <div>
  ページ内コンテンツ
 </div>
 <div>
  <ul><li><ul><li> VESAから帰ってくる情報の情報 
<ul><li> 最初の一手 </li>
<li> OEM Name </li></ul></li></ul></li>
<li> 0x4f01 
<ul><li><ul><li> 豆知識！ </li></ul></li>
<li> 戯言 </li></ul></li></ul>
 </div>
</div>
<h3>VESAから帰ってくる情報の情報  <a href="http://thebbl.hideyosi.com/modules/material/?%E8%B3%87%E6%96%99%2FVESA#kaa620c0" title="kaa620c0"><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=anchor.png" alt="anchor.png" height="12" width="12" /></a> <a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=%E8%B3%87%E6%96%99%2FVESA&amp;paraid=kaa620c0" title="資料/VESA#kaa620c0 の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" width="9" height="9" alt="Edit" title="資料/VESA#kaa620c0 の編集" /> </a></h3>
<p>VESA BIOSが搭載されているのかいないのか。また、搭載されていた場合、どこまで使えるのか。そういう手の情報はある程度BIOSから返される。ではどんなものなのか？？</p>
<!--kaa620c0--></div>
<div>
<div><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=arrow_up.png" alt="Page Top" width="16" height="16" /></div><h4>最初の一手  <a href="http://thebbl.hideyosi.com/modules/material/?%E8%B3%87%E6%96%99%2FVESA#c1d0768a" title="c1d0768a"><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=anchor.png" alt="anchor.png" height="12" width="12" /></a> <a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=%E8%B3%87%E6%96%99%2FVESA&amp;paraid=c1d0768a" title="資料/VESA#c1d0768a の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" width="9" height="9" alt="Edit" title="資料/VESA#c1d0768a の編集" /> </a></h4>
<p>16bit（リアルモード）時、以下のBIOSコールを行うといろいろ調べることができる。</p>
<div><pre>		MOV	AX,0x4f00      ;AXにファンクション番号である0x4f00を

 		MOV	AX,0x9000      ;ここはようするに、ES:DIに0x9000:0を
		MOV	ES,AX          ;書き込みたいだけ。ESは直接代入できない
		MOV	DI,0           ;のでこうしているだけ

		INT		0x10   ;BIOSコール！</pre></div>
<p>このコールの結果、各レジスタやES:DIで指定したアドレスに情報が帰ってくる</p>
<ul><li>AL　：　0x4Fが帰ってきたら成功。（とりあえずVESA BIOSは存在する？）</li>
<li>AH　：　各種詳細情報
<ul><li>0x00　：　成功。問題なし</li>
<li>0x01　：　明確に「ダメ」。（VESAはない？あっても使えない？）</li>
<li>0x02　：　VESAは存在するっぽいんだけど、BIOS設定等でカットされてて使えない？</li>
<li>0x03　：　VESAは存在するっぽいんだけど、なんらかの理由でまともには使えない？</li></ul></li>
<li>結果、
<div><pre>CMP        AX,0x004f
JNE        scrn320</pre></div>
等とすることでVESAを使うかVGAの元来の機能で我慢するかを分岐できる</li></ul>
<p>さらに、例のES:DIアドレスに以下の情報が書き込まれる</p>
<div ><table style=""><tbody><tr><td>0x9000</td><td>4バイト</td><td>「VESA」の文字。つまり0x56、0x45、0x53、0x41</td></tr><tr><td>0x9004</td><td>2バイト</td><td>VESAのバージョンナンバー</td></tr><tr><td>0x9006</td><td>4バイト</td><td>OEM名（メーカー名？）の文字が入っているアドレス？<a href="http://thebbl.hideyosi.com/modules/bwiki/index.php?VESA#n6902f3f" title="thebbl.hideyosi.com/modules/bwiki/index.php?VESA#n6902f3f">ここ</a>参照のこと</td></tr><tr><td>0x900A</td><td>4バイト</td><td style="text-align:left;">性能？                  Bit  0  Set if the DAC can switch width, clear if it is                            fixed 6bits per primary color                             1  (VBE2) non-VGA controller             2  (VBE2) Programmed DAC with blank bit</td></tr><tr><td>0x900E</td><td>4バイト</td><td>サポートするモードの一覧表のアドレス（文字列のポインタ？）終端が   0xFFFFの文字列らしい</td></tr><tr><td>0x9012</td><td>2バイト</td><td>VRAMの大きさ・・・かな？</td></tr></tbody></table></div>
<p>以降はVESA 2.0以降の場合。</p>
<div ><table style=""><tbody><tr><td>0x9014</td><td>2バイト</td><td>ソフトウェアのバージョン？なんの？</td></tr><tr><td>0x9016</td><td>4バイト</td><td>製造業者の名前のアドレス（やっぱポインタかな？）</td></tr><tr><td>0x901A</td><td>4バイト</td><td>製品名のアドレス</td></tr><tr><td>0x901E</td><td>4バイト</td><td>製品のリビジョンナンバー？</td></tr><tr><td>0x901F</td><td>225バイト</td><td>ここから0x9100まではメーカーの自由な領域？？？</td></tr></tbody></table></div>
<hr />
<!--c1d0768a--></div>
<div>
<div><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=arrow_up.png" alt="Page Top" width="16" height="16" /></div><h4>OEM Name  <a href="http://thebbl.hideyosi.com/modules/material/?%E8%B3%87%E6%96%99%2FVESA#n6902f3f" title="n6902f3f"><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=anchor.png" alt="anchor.png" height="12" width="12" /></a> <a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=%E8%B3%87%E6%96%99%2FVESA&amp;paraid=n6902f3f" title="資料/VESA#n6902f3f の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" width="9" height="9" alt="Edit" title="資料/VESA#n6902f3f の編集" /> </a></h4>
<p>この4バイトの数字がどこかを指し示すポインタらしい。そこにはメーカー名かなんかが入っていると思われる。</p>
<p>ちなみに、qemuで試したら、</p>
<div><pre>+06  0x78
+07　0x00
+08　0x00
+09　0xc0</pre></div>
<p>ボロノート（<span>DynaBook<a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=DynaBook&amp;refer=%E8%B3%87%E6%96%99%2FVESA" title="DynaBook の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" alt="編集" height="9" width="9" /></a></span> GT475）(VGA Chips 65520？）だと、</p>
<div><pre>+06  0xdf
+07　0x33
+08　0x00
+09　0xe0</pre></div>
<p>となった。</p>
<p>これが動作している時点では16bitモードなので、4バイト(32ビット）でのアドレス指定は出来ないはずなので、例の[セグメント：オフセット]形式として使うものと思われる。</p>
<p>実験の結果、qemuの場合は
0xc0078番地から文字が。終端は0で終わる文字列だった。
<strong>Bochs VBE v2.0</strong>という名前だった。</p>
<!--n6902f3f--></div>
<div>
<div><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=arrow_up.png" alt="Page Top" width="16" height="16" /></div><h2>0x4f01  <a href="http://thebbl.hideyosi.com/modules/material/?%E8%B3%87%E6%96%99%2FVESA#o45e3a87" title="o45e3a87"><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=anchor.png" alt="anchor.png" height="12" width="12" /></a> <a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=%E8%B3%87%E6%96%99%2FVESA&amp;paraid=o45e3a87" title="資料/VESA#o45e3a87 の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" width="9" height="9" alt="Edit" title="資料/VESA#o45e3a87 の編集" /> </a></h2>
<p>上記、0x4f00ファンクションの後に行うらしい。VESAの有無を確認したら、望みのビデオモードが動くかどうかを確認するものらしい。</p>
<div><pre>		MOV	AX,0x4f01      ;AXにファンクション番号である0x4f01を
 		MOV	CX,0x101       ;使いたいモード番号を代入
 		MOV	AX,0x9000      ;ここはようするに、ES:DIに0x9000:0を
		MOV	ES,AX          ;書き込みたいだけ。ESは直接代入できない
		MOV	DI,0           ;のでこうしているだけ

		INT		0x10   ;BIOSコール！</pre></div>
<p>このコールの結果、各レジスタやES:DIで指定したアドレスに情報が帰ってくる</p>
<ul><li>AL　：　0x4Fが帰ってきたら成功。（とりあえずVESA BIOSは存在する？）</li>
<li>AH　：　各種詳細情報
<ul><li>0x00　：　成功。問題なし</li>
<li>0x01　：　明確に「ダメ」。（VESAはない？あっても使えない？）</li></ul></li>
<li>結果、
<div><pre>CMP        AX,0x004f
JNE        scrn320</pre></div>
等とすることでVESAを使うかVGAの元来の機能で我慢するかを分岐できる</li></ul>
<p>さらに、例のES:DIアドレスに以下の情報が書き込まれる</p>
<ul><li>0x90000
<ul><li>2バイト:各種モードのフラグ。
<ul><li>bit 0: mode supported if set</li>
<li>1: optional information available if set</li>
<li>2: BIOS output supported if set</li>
<li>3: set if color, clear if monochrome</li>
<li>4: set if graphics mode, clear if text mode</li>
<li>5: (VBE2) non-VGA mode</li>
<li>6: (VBE2) No bank swiotching supported</li>
<li>7: (VBE2) Linear framebuffer mode supported</li></ul></li></ul></li></ul>
<ul><li>0x90002：１バイト： window A の属性
<ul><li>bit 0: exists if set</li>
<li>1: readable if set</li>
<li>2: writable if set</li>
<li>bits 3-7 reserved</li></ul></li>
<li>0x90003：1バイト：window B の属性。上記Aと同じフォーマット
<div><pre>04h   WORD     window granularity in K
06h   WORD     window size in K
08h   WORD     start segment of window A
0Ah   WORD     start segment of window B
0Ch   DWORD -&gt; FAR window positioning function (equivalent to AX=4F05h)
10h   WORD     bytes per scan line</pre></div>
<ul><li><ul><li>remainder is optional for VESA modes, needed for OEM modes---</li></ul></li></ul></li>
<li>0x90012：2バイト： 画面のX方向のサイズ（ピクセル単位）</li>
<li>0x90014：2バイト： 画面のY方向のサイズ（ピクセル単位）</li>
<li>0x90016：1バイト： １文字のX方向のサイズ（ピクセル単位）。高解像度テキスト用？</li>
<li>0x90017：1バイト： １文字のY方向のサイズ（ピクセル単位）。高解像度テキスト用？</li>
<li>0x90018：1バイト： プレーンの数？（たとえば4なら赤青黄輝とか？）</li>
<li>0x90019：1バイト： 画面の1ピクセルが何ビットで構成されているか？</li>
<li>0x9001A：1バイト： バンクの数。　？？</li></ul>
<ul><li>0x9001B
<ul><li>1バイト:メモリーモデルタイプ。0x04だと256色パレットタイプ。0x06だとダイレクトカラー？
<ul><li>0 Text</li>
<li>1 CGA graphics</li>
<li>2 Hercules Graphics</li>
<li>3 EGA 16 color</li>
<li>4 Packed pixels</li>
<li>5 Non chain 4 256 color modes</li>
<li>6 Direct 15/16/24 bit</li>
<li>7 YUV (luminance-chrominance, alos called YIQ)</li>
<li>8-0Fh Reserved for VESA</li>
<li>10h-0FFh Reserved for OEM</li></ul></li></ul></li></ul>
<ul><li>0x9001C：1バイト: バンクの大きさ（KB単位）
<div><pre>1Dh   BYTE     number of image pages</pre></div></li>
<li>0x9001E：1バイト： 予約らしい。常に1になっているらしい
<ul><li><ul><li><ul><li><ul><li><ul><li>VBE v1.2+ --------------------------
<div><pre>1Fh   BYTE     Red mask size
20h   BYTE     Red mask position
21h   BYTE     Green mask size
22h   BYTE     Green mask position
23h   BYTE     Blue mask size
24h   BYTE     Blue mask position
25h   BYTE     Reserved mask size
26h   BYTE     Reserved mask position
27h   BYTE     Direct Screen mode info
               Bit  0  If set the color ramp is programmable, if clear fixed
                    1  If set the reserved field (as defined by Bytes 25-26h)
                       can be used by the application, if clear the field is
                       truly reserved.</pre></div></li></ul></li></ul></li></ul></li>
<li>VBE v2.0 ---</li></ul></li></ul></li>
<li>0x90028：4バイト：リニアフレームバッファ時のVRAMの開始番地。
<div><pre>2Ch   DWORD    Pointer to start of offscreen memory
30h   WORD     Offscreen memory in Kbytes</pre></div>
The buffer is defined as 256bytes</li></ul>
<!--o45e3a87--></div>
<div>
<div><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=arrow_up.png" alt="Page Top" width="16" height="16" /></div><h4>豆知識！  <a href="http://thebbl.hideyosi.com/modules/material/?%E8%B3%87%E6%96%99%2FVESA#nb8254f8" title="nb8254f8"><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=anchor.png" alt="anchor.png" height="12" width="12" /></a> <a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=%E8%B3%87%E6%96%99%2FVESA&amp;paraid=nb8254f8" title="資料/VESA#nb8254f8 の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" width="9" height="9" alt="Edit" title="資料/VESA#nb8254f8 の編集" /> </a></h4>
<ul><li>枝豆ってやぁ〜・・・大豆やねんでぇ（コラなぜ殴る痛いじゃないか）</li></ul>
<ul><li><span style="color:red">VESAではバンク切り替えのバンクをウィンドゥと呼称するらしい！！</span></li></ul>
<!--nb8254f8--></div>
<div>
<div><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=arrow_up.png" alt="Page Top" width="16" height="16" /></div><h3>戯言  <a href="http://thebbl.hideyosi.com/modules/material/?%E8%B3%87%E6%96%99%2FVESA#d7a92b74" title="d7a92b74"><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=anchor.png" alt="anchor.png" height="12" width="12" /></a> <a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=%E8%B3%87%E6%96%99%2FVESA&amp;paraid=d7a92b74" title="資料/VESA#d7a92b74 の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" width="9" height="9" alt="Edit" title="資料/VESA#d7a92b74 の編集" /> </a></h3>
<p>むむむ・・・？
ウチのVESA1.2のボロノートは256パレットもリニアフレームバッファもサポートしていないのではりぼては動かせない・・・
ではこのモードで描画するにはどうしたらいいのか？？？？
・・・どうも、バンク切り替え？というような方法で行うような感じがしてきた。
ようするに、赤青黄などの成分に分けて、色ごとになんらかの方法で切り替えを行って描画する・・・そんな方式のような気がしてきた・・・</p>
<p>もちろんこれはそれなりに煩雑なのだろうけど、なんか思ったより大変じゃないような気がしてくる・・・どうなんだろうか？</p>
<p>少なくともVGAのように１ドットが１ビットなんてややこしい方式でなければ・・・・</p><!--d7a92b74--></div>


 ]]></content:encoded>
 <dc:identifier>http://thebbl.hideyosi.com/modules/material/index.php?%E8%B3%87%E6%96%99%2FVESA</dc:identifier>

</item>
<item rdf:about="http://thebbl.hideyosi.com/modules/material/index.php?%E8%B3%87%E6%96%99%2FVESA%2F%E3%81%AF%E3%82%8A%E3%81%BC%E3%81%A6">
 <title>資料/VESA/はりぼて</title>
 <link>http://thebbl.hideyosi.com/modules/material/?%E8%B3%87%E6%96%99%2FVESA%2F%E3%81%AF%E3%82%8A%E3%81%BC%E3%81%A6</link>
 <dc:date>2012-10-23T14:58:11+09:00</dc:date>
 <dc:creator></dc:creator>
 
 <description>はりぼてではVESA2.0でないと高解像度化できない。
・・・なんでじゃぁ？？？　というわけで。
（まぁ、よーするに。ウチで実験に使ってるボロノートがVESA1.2なんだよねぇ。なので、コイツで高解像度化ってできないもんかと思って・・・）
 
  ページ内コンテンツ
 
 
   はりぼて上のチェック 
 画面モードの切り替え 
 オベンキョ 
 Linear framebuffer mode 
 
はりぼて上のチェック    
はりぼてでは、asmhead.nas内で起動時にVESAのチェック</description>
 <content:encoded><![CDATA[
 <p>はりぼてではVESA2.0でないと高解像度化できない。
・・・なんでじゃぁ？？？　というわけで。</p>
<p>（まぁ、よーするに。ウチで実験に使ってるボロノートがVESA1.2なんだよねぇ。なので、コイツで高解像度化ってできないもんかと思って・・・）</p>
<div>
<div>
 <div>
  ページ内コンテンツ
 </div>
 <div>
  <ul><li> はりぼて上のチェック </li>
<li> 画面モードの切り替え </li>
<li> オベンキョ 
<ul><li><ul><li> Linear framebuffer mode </li></ul></li></ul></li></ul>
 </div>
</div>
<h2>はりぼて上のチェック  <a href="http://thebbl.hideyosi.com/modules/material/?%E8%B3%87%E6%96%99%2FVESA%2F%E3%81%AF%E3%82%8A%E3%81%BC%E3%81%A6#h8b59345" title="h8b59345"><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=anchor.png" alt="anchor.png" height="12" width="12" /></a> <a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=%E8%B3%87%E6%96%99%2FVESA%2F%E3%81%AF%E3%82%8A%E3%81%BC%E3%81%A6&amp;paraid=h8b59345" title="資料/VESA/はりぼて#h8b59345 の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" width="9" height="9" alt="Edit" title="資料/VESA/はりぼて#h8b59345 の編集" /> </a></h2>
<p>はりぼてでは、asmhead.nas内で起動時にVESAのチェックを行っている。
（つまり、ただ単にVESA2.0かどうかだけをチェックしてるわけじゃないんだよね）</p>
<p>えっと・・・コードを読んでみると・・・</p>
<ul><li>0x4f00でBIOSコール
<ul><li>そもそもこれが不成功ならscrn320へジャンプ</li>
<li>VESAのバージョンチェック。2.0以下(1.02とか)ならscrn320へジャンプ</li></ul></li>
<li>0x4f01でBIOSコール。（CXに要求の画面モード）
<ul><li>そもそもこれが不成功ならscrn320へジャンプ</li>
<li>帰ってきた情報のうち、0x19バイト目をチェック。これは画面の1ピクセルが何ビットで構成されているのかという情報。これが8じゃなかったらscrn320へジャンプ</li>
<li>次に0x1bバイト目をチェック。これはメモリーモデルタイプ？を表す。これが4(Packed pixels)でなければscrn320へジャンプ</li>
<li>最後に0x00バイト目をチェック。ここのbit7が立っているかどうか。つまり、（Linear framebuffer mode supported）かどうかをチェック。ダメだったらscrn320へジャンプ</li></ul></li></ul>
<p>・・・っとまぁ、こういうチェックをしているわけだね。</p>
<!--h8b59345--></div>
<div>
<div><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=arrow_up.png" alt="Page Top" width="16" height="16" /></div><h2>画面モードの切り替え  <a href="http://thebbl.hideyosi.com/modules/material/?%E8%B3%87%E6%96%99%2FVESA%2F%E3%81%AF%E3%82%8A%E3%81%BC%E3%81%A6#i86e2dec" title="i86e2dec"><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=anchor.png" alt="anchor.png" height="12" width="12" /></a> <a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=%E8%B3%87%E6%96%99%2FVESA%2F%E3%81%AF%E3%82%8A%E3%81%BC%E3%81%A6&amp;paraid=i86e2dec" title="資料/VESA/はりぼて#i86e2dec の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" width="9" height="9" alt="Edit" title="資料/VESA/はりぼて#i86e2dec の編集" /> </a></h2>
<p>はりぼてでは全てのチェックを終え、正常だといよいよ画面の切り替えを行う。
この場合、AXに0x4f02をセット。さらにBXに画面モードをセットするんだけど、
単純にそのままセットではない。</p>
<p>BXにセットする値はビットごとに意味があるようだ。</p>
<ul><li>0〜13ビットまでが画面モード。ここに0x101(640x480x256）だの0x105(1024x768x256）だのをセットする。</li>
<li>14ビット目はリニアアクセスモード要請（1で要請） -- ただし VESA 2.0以降</li>
<li>15ビット目がVRAMクリア省略（1で省略）</li></ul>
<p>はりぼてではBXに対し、0x4000 + 画面モード という値をセットしている。つまり、</p>
<div><pre>画面モード101(640x480x256）にしたい場合

ビット0〜13       0000000100000001         0x101    モード番号
ビット14          0100000000000000        0x4000    リニアアクセスを要請する
ビット15          0000000000000000        0x0000    VRAMクリアを省略しない</pre></div>
<p>こういうことのよーでする・・・</p>
<!--i86e2dec--></div>
<div>
<div><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=arrow_up.png" alt="Page Top" width="16" height="16" /></div><h2>オベンキョ  <a href="http://thebbl.hideyosi.com/modules/material/?%E8%B3%87%E6%96%99%2FVESA%2F%E3%81%AF%E3%82%8A%E3%81%BC%E3%81%A6#rd345145" title="rd345145"><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=anchor.png" alt="anchor.png" height="12" width="12" /></a> <a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=%E8%B3%87%E6%96%99%2FVESA%2F%E3%81%AF%E3%82%8A%E3%81%BC%E3%81%A6&amp;paraid=rd345145" title="資料/VESA/はりぼて#rd345145 の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" width="9" height="9" alt="Edit" title="資料/VESA/はりぼて#rd345145 の編集" /> </a></h2>
<!--rd345145--></div>
<div>
<div><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=arrow_up.png" alt="Page Top" width="16" height="16" /></div><h4>Linear framebuffer mode  <a href="http://thebbl.hideyosi.com/modules/material/?%E8%B3%87%E6%96%99%2FVESA%2F%E3%81%AF%E3%82%8A%E3%81%BC%E3%81%A6#mf3f927c" title="mf3f927c"><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=anchor.png" alt="anchor.png" height="12" width="12" /></a> <a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=%E8%B3%87%E6%96%99%2FVESA%2F%E3%81%AF%E3%82%8A%E3%81%BC%E3%81%A6&amp;paraid=mf3f927c" title="資料/VESA/はりぼて#mf3f927c の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" width="9" height="9" alt="Edit" title="資料/VESA/はりぼて#mf3f927c の編集" /> </a></h4>
<p>リニアフレームバッファモードと読む。リニアフレームバッファとはなにかというと、えーーっと。ようするに、「普通にデータを書き込めるフレームバッファ」ということらしい。</p>
<p><strong>普通</strong>とはなにかというと、はりぼてで全般的に採用されている方式。つまり、0xa0000に0x08を書き込むと、画面の左上にポツンと赤い点が表示されるような動作をするもの。</p>
<p>分かりやすくするために<strong>普通ではない</strong>モード。つまりノンリニアなものを説明。
プレーンと呼ばれる下敷きがあって、そこに別々にデータを打ち込むことで画面に点が表示される。よくあるパターンは、赤青黄等の3色以上に分かれているパターン。こういうのに点を打ちたい場合、まず赤のプレーンに点を打ち、次に青のプレーンに切り替えてからまた点を打ち・・・と、プレーンを切り替えて色を表現するようなパターン。
比較的遅く、またプログラムも煩雑になるのはわかるだろう。</p><!--mf3f927c--></div>


 ]]></content:encoded>
 <dc:identifier>http://thebbl.hideyosi.com/modules/material/index.php?%E8%B3%87%E6%96%99%2FVESA%2F%E3%81%AF%E3%82%8A%E3%81%BC%E3%81%A6</dc:identifier>

</item>
<item rdf:about="http://thebbl.hideyosi.com/modules/material/index.php?x86%2F%E4%BB%AE%E6%83%B386%E3%83%A2%E3%83%BC%E3%83%89">
 <title>x86/仮想86モード</title>
 <link>http://thebbl.hideyosi.com/modules/material/?x86%2F%E4%BB%AE%E6%83%B386%E3%83%A2%E3%83%BC%E3%83%89</link>
 <dc:date>2012-10-23T14:58:10+09:00</dc:date>
 <dc:creator></dc:creator>
 
 <description>386以降のCPUが持っているモード。
 
  ページ内コンテンツ
 
 
   オベンキョ！ 
 具体的に！！！ 
 セグメントの簡単な復習 
 問題点！ 
 
オベンキョ！    
いろいろ細かいことがあるが、ようするに、32ビット化（プロテクトモード）したマシンで、あるセグメントを「お前は8086と同じ動作をしろ！」と命令することができるモード。
CPUは起動時には16ビット状態（リアルモード）である。この状態だとMS-DOS等が動かせる。また、BIOS等、リアルモードでないと動作しないも</description>
 <content:encoded><![CDATA[
 <p>386以降のCPUが持っているモード。</p>
<div>
<div>
 <div>
  ページ内コンテンツ
 </div>
 <div>
  <ul><li> オベンキョ！ 
<ul><li> 具体的に！！！ 
<ul><li> セグメントの簡単な復習 </li>
<li> 問題点！ </li></ul></li></ul></li></ul>
 </div>
</div>
<h2>オベンキョ！  <a href="http://thebbl.hideyosi.com/modules/material/?x86%2F%E4%BB%AE%E6%83%B386%E3%83%A2%E3%83%BC%E3%83%89#ma1079d4" title="ma1079d4"><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=anchor.png" alt="anchor.png" height="12" width="12" /></a> <a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=x86%2F%E4%BB%AE%E6%83%B386%E3%83%A2%E3%83%BC%E3%83%89&amp;paraid=ma1079d4" title="x86/仮想86モード#ma1079d4 の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" width="9" height="9" alt="Edit" title="x86/仮想86モード#ma1079d4 の編集" /> </a></h2>
<p>いろいろ細かいことがあるが、ようするに、32ビット化（プロテクトモード）したマシンで、あるセグメントを「お前は8086と同じ動作をしろ！」と命令することができるモード。</p>
<p>CPUは起動時には16ビット状態（リアルモード）である。この状態だとMS-DOS等が動かせる。また、BIOS等、リアルモードでないと動作しないものも動く。</p>
<p>しかし一旦プロテクトモードになるとこうはいかない。処々細かい意見はあるだろうが、CPUがいきなり変わってしまったのと同じくらい変化してしまうので、MS-DOS、またそれ上で動くようプログラムされたソフトは動かなくなってしまう。
（PS2でゲームをやっていた。あるスイッチを押すと、中身がポン！とX-BOXに変わってしまうようなもの。当然中に入っていて今まで動いていたバイオハザードは動かなくなってしまうよね？）</p>
<p>BIOSも同じである。</p>
<p>どうしても16ビット用のソフトを動かしたい、BIOSを呼び出したいと言う場合。普通に考えれば、32ビットモードから再び16ビットモードに戻ればいいということになる。
しかしこれそのものは可能だが、BIOSなりMS-DOSのソフトなりを実行し終えたあと、再び32ビットモードに戻したとしても、元には戻らない。つまり、電源スイッチを押したのよりちょっとだけ早いと、そんな程度である。</p>
<p>そこで386CPUは32ビットになった時、あるセグメントにあるスイッチを入れておくと、そこだけが16ビットとして動く。そんな仕組みを搭載している。これが仮想86モード。</p>
<p>ちょうど、WindowsVISTAのある窓でMSXのシュミレータが動いている。そんな感じを想像してもらうとわかりやすいかも。</p>
<!--ma1079d4--></div>
<div>
<div><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=arrow_up.png" alt="Page Top" width="16" height="16" /></div><h3>具体的に！！！  <a href="http://thebbl.hideyosi.com/modules/material/?x86%2F%E4%BB%AE%E6%83%B386%E3%83%A2%E3%83%BC%E3%83%89#d6f6b06e" title="d6f6b06e"><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=anchor.png" alt="anchor.png" height="12" width="12" /></a> <a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=x86%2F%E4%BB%AE%E6%83%B386%E3%83%A2%E3%83%BC%E3%83%89&amp;paraid=d6f6b06e" title="x86/仮想86モード#d6f6b06e の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" width="9" height="9" alt="Edit" title="x86/仮想86モード#d6f6b06e の編集" /> </a></h3>
<!--d6f6b06e--></div>
<div>
<div><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=arrow_up.png" alt="Page Top" width="16" height="16" /></div><h4>セグメントの簡単な復習  <a href="http://thebbl.hideyosi.com/modules/material/?x86%2F%E4%BB%AE%E6%83%B386%E3%83%A2%E3%83%BC%E3%83%89#c2aefb11" title="c2aefb11"><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=anchor.png" alt="anchor.png" height="12" width="12" /></a> <a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=x86%2F%E4%BB%AE%E6%83%B386%E3%83%A2%E3%83%BC%E3%83%89&amp;paraid=c2aefb11" title="x86/仮想86モード#c2aefb11 の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" width="9" height="9" alt="Edit" title="x86/仮想86モード#c2aefb11 の編集" /> </a></h4>
<ul><li>386以降CPU（以下x86と呼称）はCPUそのものにマルチタスクを行うための機能が搭載されている。</li>
<li>しかし、マルチタスクは別に並行して同時に動作をできるわけではないのだ。別々の処理を高速に切り替えて行えるというだけである。</li>
<li>たとえばメモリが0x0000〜0xFFFFまで搭載されていたとする。</li>
<li>そんなマシンで萌え絵を描きながら（<span>PhotoShop<a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=PhotoShop&amp;refer=x86%2F%E4%BB%AE%E6%83%B386%E3%83%A2%E3%83%BC%E3%83%89" title="PhotoShop の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" alt="編集" height="9" width="9" /></a></span>）、鉄人タイガーセブンの歌を聞きながら（Winamp）、愛と勇気とかしわもち(パズルゲーム）をやりたいとする。</li>
<li>0x0000〜0x0FFFまではOSが使用する。そうなると、ソフトが使うことができるメモリは0x1000〜0xFFFFとなる。</li>
<li>ならば、0x1000〜0x1FFFを<span>PhotoShop<a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=PhotoShop&amp;refer=x86%2F%E4%BB%AE%E6%83%B386%E3%83%A2%E3%83%BC%E3%83%89" title="PhotoShop の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" alt="編集" height="9" width="9" /></a></span>が。0x2000〜0x2FFFをWinampが。0x3000〜0x3FFFをカシワモチが使う。そしてOSは、これを高速に切り替えてくれる。これなら3つのソフトはまるで同時に動いているように扱える。ばんざーーい！</li></ul>
<p>・・・・・　orz　・・・・　問題発生 ・・・・・・</p>
<!--c2aefb11--></div>
<div>
<div><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=arrow_up.png" alt="Page Top" width="16" height="16" /></div><h4>問題点！  <a href="http://thebbl.hideyosi.com/modules/material/?x86%2F%E4%BB%AE%E6%83%B386%E3%83%A2%E3%83%BC%E3%83%89#d54213d7" title="d54213d7"><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=anchor.png" alt="anchor.png" height="12" width="12" /></a> <a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=x86%2F%E4%BB%AE%E6%83%B386%E3%83%A2%E3%83%BC%E3%83%89&amp;paraid=d54213d7" title="x86/仮想86モード#d54213d7 の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" width="9" height="9" alt="Edit" title="x86/仮想86モード#d54213d7 の編集" /> </a></h4>
<ul><li>使う番地が固定じゃ困る!
<ul><li>上記の方法だと、カシワモチはかならず0x3000に読み込まれないといけない。だって、プログラムする時困るじゃない！</li>
<li>「カシワモチは0x3000」と決められちゃうと、カシワモチをやらない人のマシンは困る！　どんなに新型のマシンを買ってきてメモリを増やしても、0x3000〜0x3FFFはポカーンと空いたまま、だれにも使われない。</li></ul></li>
<li>侵略された！
<ul><li>0x1000〜0x1FFFを使っている<span>PhotoShop<a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=PhotoShop&amp;refer=x86%2F%E4%BB%AE%E6%83%B386%E3%83%A2%E3%83%BC%E3%83%89" title="PhotoShop の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" alt="編集" height="9" width="9" /></a></span>。大きな画像を扱っているので、つい、0x2100まで使っちゃった！　さあ大変。いままで動いていたWinampが急におかしくなっちゃった！</li></ul></li></ul>
<p>・・・こんなふうに、ちょっと考えただけでも大問題発生。そこでこういったことをなんとかしようとしてOSが進化して行った。同時にそんなOSの動きを補助しようとCPUにもそういった命令が搭載されていった。</p><!--d54213d7--></div>


 ]]></content:encoded>
 <dc:identifier>http://thebbl.hideyosi.com/modules/material/index.php?x86%2F%E4%BB%AE%E6%83%B386%E3%83%A2%E3%83%BC%E3%83%89</dc:identifier>

</item>
<item rdf:about="http://thebbl.hideyosi.com/modules/material/index.php?%E3%83%98%E3%83%AB%E3%83%97">
 <title>ヘルプ</title>
 <link>http://thebbl.hideyosi.com/modules/material/?%E3%83%98%E3%83%AB%E3%83%97</link>
 <dc:date>2012-10-23T14:58:10+09:00</dc:date>
 <dc:creator></dc:creator>
 
 <description>
 
  ページ内コンテンツ
 
 
   PukiWiki って 何なの? 
 新しいページを作成するには? 
 リンクについてる(3m)とかは? 
 掲示板と違う? 
 誰かが書き込みを消してまう? 
 ブラウザやプロクシのキャッシュで人の変更消してしまう? 
 
FAQ(pukiwiki.org)(日本語)
テキスト整形のルール (このページの後ろにも挿入してあります。)
プラグインヘルプ
PukiWiki って 何なの?    
すべてのページが誰でも編集できます。変更したいページでペー</description>
 <content:encoded><![CDATA[
 <div>
 <div>
  ページ内コンテンツ
 </div>
 <div>
  <ul><li><ul><li><ul><li> PukiWiki って 何なの? </li>
<li> 新しいページを作成するには? </li>
<li> リンクについてる(3m)とかは? </li>
<li> 掲示板と違う? </li>
<li> 誰かが書き込みを消してまう? </li>
<li> ブラウザやプロクシのキャッシュで人の変更消してしまう? </li></ul></li></ul></li></ul>
 </div>
</div>
<ul><li><ul><li><a href="http://pukiwiki.sourceforge.jp/?PukiWiki%2FFAQ" title="pukiwiki:PukiWiki/FAQ">FAQ(pukiwiki.org)</a>(日本語)</li>
<li><span>テキスト整形のルール<a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=%E6%95%B4%E5%BD%A2%E3%83%AB%E3%83%BC%E3%83%AB&amp;refer=%E3%83%98%E3%83%AB%E3%83%97" title="整形ルール の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" alt="編集" height="9" width="9" /></a></span> (このページの後ろにも挿入してあります。)</li>
<li><span>プラグインヘルプ<a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E3%83%98%E3%83%AB%E3%83%97&amp;refer=%E3%83%98%E3%83%AB%E3%83%97" title="プラグインヘルプ の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" alt="編集" height="9" width="9" /></a></span></li></ul></li></ul>
<div>
<h4><a href="http://thebbl.hideyosi.com/modules/material/?PukiWiki" title="PukiWiki (19h)">PukiWiki</a> って 何なの?  <a href="http://thebbl.hideyosi.com/modules/material/?%E3%83%98%E3%83%AB%E3%83%97#vf801b51" title="vf801b51"><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=anchor.png" alt="anchor.png" height="12" width="12" /></a> <a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=%E3%83%98%E3%83%AB%E3%83%97&amp;paraid=vf801b51" title="ヘルプ#vf801b51 の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" width="9" height="9" alt="Edit" title="ヘルプ#vf801b51 の編集" /> </a></h4>
<p>すべてのページが誰でも編集できます。変更したいページでページ上部の「編集」をクリックするとそのページが編集できます。編集内容は、整形ルールに従って整形されます。<br />
<span>練習用ページ<a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=%E7%B7%B4%E7%BF%92%E7%94%A8%E3%83%9A%E3%83%BC%E3%82%B8&amp;refer=%E3%83%98%E3%83%AB%E3%83%97" title="練習用ページ の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" alt="編集" height="9" width="9" /></a></span>は基本的にどのように手を加えても問題ないので、結果を恐れず編集してみてください。</p>
<!--vf801b51--></div>
<div>
<div><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=arrow_up.png" alt="Page Top" width="16" height="16" /></div><h4>新しいページを作成するには?  <a href="http://thebbl.hideyosi.com/modules/material/?%E3%83%98%E3%83%AB%E3%83%97#n2c2eb75" title="n2c2eb75"><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=anchor.png" alt="anchor.png" height="12" width="12" /></a> <a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=%E3%83%98%E3%83%AB%E3%83%97&amp;paraid=n2c2eb75" title="ヘルプ#n2c2eb75 の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" width="9" height="9" alt="Edit" title="ヘルプ#n2c2eb75 の編集" /> </a></h4>
<p>すでにあるページ(例えば<span>練習用ページ<a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=%E7%B7%B4%E7%BF%92%E7%94%A8%E3%83%9A%E3%83%BC%E3%82%B8&amp;refer=%E3%83%98%E3%83%AB%E3%83%97" title="練習用ページ の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" alt="編集" height="9" width="9" /></a></span>など)で、ページのどこかに<a href="http://thebbl.hideyosi.com/modules/material/?WikiName" title="WikiName (19h)">WikiName</a>(大文字と小文字混合)か<a href="http://thebbl.hideyosi.com/modules/material/?BracketName" title="BracketName (19h)">BracketName</a>([[]]で囲う)を入力すると入力した部分の後ろに ? というリンクがつきます。そこをクリックすると新しいページの編集画面が用意されるので、あとは普通のページ変更と同様に書き込むことができます。</p>
<!--n2c2eb75--></div>
<div>
<div><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=arrow_up.png" alt="Page Top" width="16" height="16" /></div><h4>リンクについてる(3m)とかは?  <a href="http://thebbl.hideyosi.com/modules/material/?%E3%83%98%E3%83%AB%E3%83%97#aeb02253" title="aeb02253"><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=anchor.png" alt="anchor.png" height="12" width="12" /></a> <a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=%E3%83%98%E3%83%AB%E3%83%97&amp;paraid=aeb02253" title="ヘルプ#aeb02253 の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" width="9" height="9" alt="Edit" title="ヘルプ#aeb02253 の編集" /> </a></h4>
<p>3mは3分前くらい、5hは5時間前くらい、8dは8日前くらいに更新された、という意味です。</p>
<!--aeb02253--></div>
<div>
<div><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=arrow_up.png" alt="Page Top" width="16" height="16" /></div><h4>掲示板と違う?  <a href="http://thebbl.hideyosi.com/modules/material/?%E3%83%98%E3%83%AB%E3%83%97#qf09daf7" title="qf09daf7"><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=anchor.png" alt="anchor.png" height="12" width="12" /></a> <a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=%E3%83%98%E3%83%AB%E3%83%97&amp;paraid=qf09daf7" title="ヘルプ#qf09daf7 の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" width="9" height="9" alt="Edit" title="ヘルプ#qf09daf7 の編集" /> </a></h4>
<p>ページに手を加えても誰がその変更をしたかわからなくなります。不安な場合は、手を加えた部分に自分の名前を書いておきましょう。 -- <span>hogehoge<a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=hogehoge&amp;refer=%E3%83%98%E3%83%AB%E3%83%97" title="hogehoge の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" alt="編集" height="9" width="9" /></a></span> ←こんなかんじで。</p>
<!--qf09daf7--></div>
<div>
<div><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=arrow_up.png" alt="Page Top" width="16" height="16" /></div><h4>誰かが書き込みを消してまう?  <a href="http://thebbl.hideyosi.com/modules/material/?%E3%83%98%E3%83%AB%E3%83%97#k1149f33" title="k1149f33"><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=anchor.png" alt="anchor.png" height="12" width="12" /></a> <a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=%E3%83%98%E3%83%AB%E3%83%97&amp;paraid=k1149f33" title="ヘルプ#k1149f33 の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" width="9" height="9" alt="Edit" title="ヘルプ#k1149f33 の編集" /> </a></h4>
<p><span>WikiClone<a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=WikiClone&amp;refer=%E3%83%98%E3%83%AB%E3%83%97" title="WikiClone の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" alt="編集" height="9" width="9" /></a></span>とはそういうものです。誰でもどこでも汚したり、消したり、荒らしたりできます。が、<a href="http://thebbl.hideyosi.com/modules/material/?PukiWiki" title="PukiWiki (19h)">PukiWiki</a>には定期的にバックアップを取る機能があるので無駄といえば無駄かもしれません。不完全ではありますが、復旧もできると思います。</p>
<!--k1149f33--></div>
<div>
<div><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=arrow_up.png" alt="Page Top" width="16" height="16" /></div><h4>ブラウザやプロクシのキャッシュで人の変更消してしまう?  <a href="http://thebbl.hideyosi.com/modules/material/?%E3%83%98%E3%83%AB%E3%83%97#zee20d44" title="zee20d44"><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=anchor.png" alt="anchor.png" height="12" width="12" /></a> <a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=%E3%83%98%E3%83%AB%E3%83%97&amp;paraid=zee20d44" title="ヘルプ#zee20d44 の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" width="9" height="9" alt="Edit" title="ヘルプ#zee20d44 の編集" /> </a></h4>
<p>ページを編集する以上、編集時の状態から手を加える形になります。しかし、もし編集中に誰かが更新していてしまっていたらどうします? 安心してください。<a href="http://thebbl.hideyosi.com/modules/material/?PukiWiki" title="PukiWiki (19h)">PukiWiki</a>には、更新時のページの更新日時と元データの更新日時を比較して一緒かどうかチェックします。</p>
<p>異なる場合には「更新の衝突」が起きるので、その場合は更新されていたページをリロードして編集しなおしてください。</p>
#include(): No such page: 整形ルール<br />
<!--zee20d44--></div>


 ]]></content:encoded>
 <dc:identifier>http://thebbl.hideyosi.com/modules/material/index.php?%E3%83%98%E3%83%AB%E3%83%97</dc:identifier>

</item>
<item rdf:about="http://thebbl.hideyosi.com/modules/material/index.php?x86%2FEFLAGS">
 <title>x86/EFLAGS</title>
 <link>http://thebbl.hideyosi.com/modules/material/?x86%2FEFLAGS</link>
 <dc:date>2012-10-23T14:58:09+09:00</dc:date>
 <dc:creator></dc:creator>
 
 <description>CPU内にある、ある特別なレジスタ。
大雑把に言えば、他のレジスタはそれひとつが値となる。しかしこのレジスタだけは各ビットに意味と役割があると考えればいいか・・・
このレジスタは16ビットモード時は16ビット、32ビット時は32ビットとなる。
（え？当たり前だって？　いやいや。そうでもないんだよ？）
16ビット時（リアルモード時）    
ビット名称機能0CFキャリーフラグ111 (未使用)2PFパリティフラグ (演算結果の下位8ビット)300 (未使用)4AF補助キャリーフラグ(BCD演算用)</description>
 <content:encoded><![CDATA[
 <p>CPU内にある、ある特別なレジスタ。</p>
<p>大雑把に言えば、他のレジスタはそれひとつが値となる。しかしこのレジスタだけは各ビットに意味と役割があると考えればいいか・・・</p>
<p>このレジスタは16ビットモード時は16ビット、32ビット時は32ビットとなる。</p>
<p>（え？当たり前だって？　いやいや。そうでもないんだよ？）</p>
<div>
<h2>16ビット時（リアルモード時）  <a href="http://thebbl.hideyosi.com/modules/material/?x86%2FEFLAGS#gdc9b0ef" title="gdc9b0ef"><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=anchor.png" alt="anchor.png" height="12" width="12" /></a> <a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=x86%2FEFLAGS&amp;paraid=gdc9b0ef" title="x86/EFLAGS#gdc9b0ef の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" width="9" height="9" alt="Edit" title="x86/EFLAGS#gdc9b0ef の編集" /> </a></h2>
<div ><table style=""><tbody><tr><td>ビット</td><td>名称</td><td>機能</td></tr><tr><td>0</td><td>CF</td><td>キャリーフラグ</td></tr><tr><td>1</td><td>1</td><td>1 (未使用)</td></tr><tr><td>2</td><td>PF</td><td>パリティフラグ (演算結果の下位8ビット)</td></tr><tr><td>3</td><td>0</td><td>0 (未使用)</td></tr><tr><td>4</td><td>AF</td><td>補助キャリーフラグ(BCD演算用)</td></tr><tr><td>5</td><td>0</td><td>0 (未使用)</td></tr><tr><td>6</td><td>ZF</td><td>ゼロフラグ</td></tr><tr><td>7</td><td>SF</td><td>サインフラグ</td></tr><tr><td>8</td><td>TF</td><td>トラップフラグ、トレースフラグ</td></tr><tr><td>9</td><td>IF</td><td>割り込みフラグ</td></tr><tr><td>10</td><td>DF</td><td>ディレクションフラグ</td></tr><tr><td>11</td><td>OF</td><td>オーバーフローフラグ</td></tr><tr><td>12</td><td rowspan="2">IOPL</td><td rowspan="2">I/O特権レベル</td></tr><tr><td>13</td></tr><tr><td>14</td><td>NT</td><td>ネストタスクフラグ</td></tr><tr><td>15</td><td>0</td><td>0 (未使用)</td></tr></tbody></table></div>
<!--gdc9b0ef--></div>
<div>
<div><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=arrow_up.png" alt="Page Top" width="16" height="16" /></div><h2>32ビット時（プロテクトモード時）  <a href="http://thebbl.hideyosi.com/modules/material/?x86%2FEFLAGS#m73919bb" title="m73919bb"><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=anchor.png" alt="anchor.png" height="12" width="12" /></a> <a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=x86%2FEFLAGS&amp;paraid=m73919bb" title="x86/EFLAGS#m73919bb の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" width="9" height="9" alt="Edit" title="x86/EFLAGS#m73919bb の編集" /> </a></h2>
<div ><table style=""><tbody><tr><td>ビット</td><td>名称</td><td>機能</td></tr><tr><td>0</td><td>CF</td><td>キャリーフラグ</td></tr><tr><td>1</td><td>1</td><td>1 (未使用)</td></tr><tr><td>2</td><td>PF</td><td>パリティフラグ (演算結果の下位8ビット)</td></tr><tr><td>3</td><td>0</td><td>0 (未使用)</td></tr><tr><td>4</td><td>AF</td><td>補助キャリーフラグ(BCD演算用)</td></tr><tr><td>5</td><td>0</td><td>0 (未使用)</td></tr><tr><td>6</td><td>ZF</td><td>ゼロフラグ</td></tr><tr><td>7</td><td>SF</td><td>サインフラグ</td></tr><tr><td>8</td><td>TF</td><td>トラップフラグ、トレースフラグ</td></tr><tr><td>9</td><td>IF</td><td>割り込みフラグ</td></tr><tr><td>10</td><td>DF</td><td>ディレクションフラグ</td></tr><tr><td>11</td><td>OF</td><td>オーバーフローフラグ</td></tr><tr><td>12</td><td rowspan="2">IOPL</td><td rowspan="2">I/O特権レベル</td></tr><tr><td>13</td></tr><tr><td>14</td><td>NT</td><td>ネストタスクフラグ</td></tr><tr><td>15</td><td>0</td><td>0 (未使用)</td></tr><tr><td>16</td><td>RF</td><td>デバッグレジスタの命令ブレイクポイントを(1回のみ)無効にする</td></tr><tr><td>17</td><td>VM</td><td>1=仮想86モード</td></tr><tr><td>18</td><td>AC</td><td>変更可能であれば、i486、Pentium以降のCPUである</td></tr><tr><td>19</td><td>VIF</td><td>仮想割り込みフラグ (Pentium以降)</td></tr><tr><td>20</td><td>VIP</td><td>仮想割り込みペンディングフラグ (Pentium以降)</td></tr><tr><td>21</td><td>ID</td><td>変更可能であれば、CPUID命令に対応している</td></tr><tr><td>22</td><td>0</td><td>0 (未使用)</td></tr></tbody></table></div><!--m73919bb--></div>


 ]]></content:encoded>
 <dc:identifier>http://thebbl.hideyosi.com/modules/material/index.php?x86%2FEFLAGS</dc:identifier>

</item>
<item rdf:about="http://thebbl.hideyosi.com/modules/material/index.php?x86%2F%E3%83%AC%E3%82%B8%E3%82%B9%E3%82%BF">
 <title>x86/レジスタ</title>
 <link>http://thebbl.hideyosi.com/modules/material/?x86%2F%E3%83%AC%E3%82%B8%E3%82%B9%E3%82%BF</link>
 <dc:date>2012-10-23T14:58:09+09:00</dc:date>
 <dc:creator></dc:creator>
 
 <description>
16ビット時（リアルモード）    
汎用レジスタ正式名称用途備考AXアキュムレータ汎用BXベースレジスタ汎用アドレス指定の使用に向いているCXカウントレジスタ汎用ループ時のカウンタとして使用するのに向いているDXデータレジスタ汎用インデックスレジスタ正式名称用途備考SIソースインデックス汎用ストリング命令に使用すると便利？DIディスティネーションインデックス汎用特殊レジスタ正式名称用途備考BPベースポインタSPスタックポインタスタックアドレスのオフセット値を示すIPインストラクションポインタ</description>
 <content:encoded><![CDATA[
 <div>
<h2>16ビット時（リアルモード）  <a href="http://thebbl.hideyosi.com/modules/material/?x86%2F%E3%83%AC%E3%82%B8%E3%82%B9%E3%82%BF#cd32a989" title="cd32a989"><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=anchor.png" alt="anchor.png" height="12" width="12" /></a> <a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=x86%2F%E3%83%AC%E3%82%B8%E3%82%B9%E3%82%BF&amp;paraid=cd32a989" title="x86/レジスタ#cd32a989 の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" width="9" height="9" alt="Edit" title="x86/レジスタ#cd32a989 の編集" /> </a></h2>
<div ><table style=""><tbody><tr><th>汎用レジスタ</th><th>正式名称</th><th>用途</th><th>備考</th></tr><tr><td>AX</td><td>アキュムレータ</td><td colspan="2">汎用</td></tr><tr><td>BX</td><td>ベースレジスタ</td><td>汎用</td><td>アドレス指定の使用に向いている</td></tr><tr><td>CX</td><td>カウントレジスタ</td><td>汎用</td><td>ループ時のカウンタとして使用するのに向いている</td></tr><tr><td>DX</td><td>データレジスタ</td><td colspan="2">汎用</td></tr><tr><th>インデックスレジスタ</th><th>正式名称</th><th>用途</th><th>備考</th></tr><tr><td>SI</td><td>ソースインデックス</td><td>汎用</td><td rowspan="2">ストリング命令に使用すると便利？</td></tr><tr><td>DI</td><td>ディスティネーションインデックス</td><td>汎用</td></tr><tr><th>特殊レジスタ</th><th>正式名称</th><th>用途</th><th>備考</th></tr><tr><td>BP</td><td colspan="3">ベースポインタ</td></tr><tr><td>SP</td><td colspan="2">スタックポインタ</td><td>スタックアドレスの<strong>オフセット値</strong>を示す</td></tr><tr><td>IP</td><td colspan="2">インストラクションポインタ</td><td>次に実行すべき命令の番地の<strong>オフセット値</strong>を示す</td></tr><tr><th>セグメントレジスタ</th><th>正式名称</th><th>用途</th><th>備考</th></tr><tr><td>CS</td><td colspan="2">コードセグメント</td><td>次に実行すべき命令の番地の<strong>セグメント値</strong>を示す</td></tr><tr><td>DS</td><td colspan="3">データセグメント</td></tr><tr><td>ES</td><td colspan="3">エクストラセグメント</td></tr><tr><td>SS</td><td colspan="2">スタックセグメント</td><td>スタックアドレスの<strong>セグメント値</strong>を示す</td></tr><tr><th>フラグレジスタ</th><th>正式名称</th><th>用途</th><th>備考</th></tr><tr><td colspan="4">--<a href="http://thebbl.hideyosi.com/modules/bwiki/index.php?%BB%F1%CE%C1%2Fx86%2FEFLAGS#gdc9b0ef" title="thebbl.hideyosi.com/modules/bwiki/index.php?%BB%F1%CE%C1%2Fx86%2FEFLAGS#gdc9b0ef">FLAGS参照のこと</a></td></tr></tbody></table></div><!--cd32a989--></div>


 ]]></content:encoded>
 <dc:identifier>http://thebbl.hideyosi.com/modules/material/index.php?x86%2F%E3%83%AC%E3%82%B8%E3%82%B9%E3%82%BF</dc:identifier>

</item>
<item rdf:about="http://thebbl.hideyosi.com/modules/material/index.php?x86%2F%E3%82%BB%E3%82%B0%E3%83%A1%E3%83%B3%E3%83%88">
 <title>x86/セグメント</title>
 <link>http://thebbl.hideyosi.com/modules/material/?x86%2F%E3%82%BB%E3%82%B0%E3%83%A1%E3%83%B3%E3%83%88</link>
 <dc:date>2012-10-23T14:58:08+09:00</dc:date>
 <dc:creator></dc:creator>
 
 <description>多分合ってないぞ！！！。いま一生懸命勉強中だ！ (T∀T)）間違ってるとこみつけたら、板にツッコミ入れよう！）
・・・ふっ・・・　所詮笑われてナンボじゃい！。 (T∀T)　
16bit(8086）のセグメント    
セグメントとはなんじゃらほい？
8086は16bitですね。内部には沢山のレジスタがありますが、ほぼどれも最大16bitです。
CPUがメモリにアクセスする場合、当然メモリの番地を指定しなくてはなりませんが、そのためのレジスタも16bitです。
ん？おかしいですね？。メモリの番地を</description>
 <content:encoded><![CDATA[
 <p><span style="color:red">多分合ってないぞ！！！。いま一生懸命勉強中だ！ (T∀T)）間違ってるとこみつけたら、板にツッコミ入れよう！）</span></p>
<p><span style="color:red">・・・ふっ・・・　所詮笑われてナンボじゃい！。 (T∀T)　</span></p>
<div>
<h2>16bit(8086）のセグメント  <a href="http://thebbl.hideyosi.com/modules/material/?x86%2F%E3%82%BB%E3%82%B0%E3%83%A1%E3%83%B3%E3%83%88#qbded341" title="qbded341"><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=anchor.png" alt="anchor.png" height="12" width="12" /></a> <a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=x86%2F%E3%82%BB%E3%82%B0%E3%83%A1%E3%83%B3%E3%83%88&amp;paraid=qbded341" title="x86/セグメント#qbded341 の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" width="9" height="9" alt="Edit" title="x86/セグメント#qbded341 の編集" /> </a></h2>
<p>セグメントとはなんじゃらほい？</p>
<p>8086は16bitですね。内部には沢山のレジスタがありますが、ほぼどれも最大16bitです。</p>
<p>CPUがメモリにアクセスする場合、当然メモリの番地を指定しなくてはなりませんが、そのためのレジスタも16bitです。</p>
<p>ん？おかしいですね？。メモリの番地を指定するためのレジスタも16bit。（16進数で4桁です。）そうなると・・・</p>
<div><pre>0x0000〜0xffff</pre></div>
<p>です。最大0xffffということは、十進数に直すと・・・65,535・・・え？ <strong>最大</strong>64KB？？？</p>
<p>そうです。CPUの素直な仕組みで考えると、16bitのCPUは、最大64KBしかメモリをアクセスすることができません。・・・しかし、8086は最大1MBを活用することができるのです。いったいどうやって？？？</p>
<p>8086CPUは大きなメモリ空間を64KBごとに区切り、各区切りを別の16bitのレジスタで指定することによって、事実上20bit（16進数で5桁）でメモリ番地を指定することができます。この64KBの区切りを<strong>セグメント</strong>と言います。</p>
<div><pre>メモリ番地を20ビットで表現。これなら、0x00000〜0xFFFFF。つまり、1,048,575バイト。1MBとなる。</pre></div>
<p>具体的には、「セグメントアドレス」+「オフセット値」でアドレスを表現する。</p>
<p>セグメントアドレスもやはり16ビットでしか表現できない。で、それ＋何番地ずれているかを表現する。</p>
<p>たとえば、物理的に0x21000番地のメモリにアクセスしたいとする。その場合、レジスタはみな16ビットではあるが、</p>
<div><pre>セグメントアドレスに：0x2000　　(セグメントベースという）
オフセットアドレスに：0x1000　　(オフセット値という）</pre></div>
<p>とセットすると、</p>
<div><pre>0x2000x16 = 0x20000
               +
             0x1000
--------------------
            0x21000</pre></div>
<p>こう解釈して内部回路に信号を送り、0x21000番地のメモリにアクセスしてくれる。</p>
<p>図にする・・・</p>
<div><pre>物理アドレス
 0x00000   ┌──────┐
         　│セグメント  │
           │　（64kb）　│　　┌───　ここを読みたい！
 0x10000 　├──────┤　　│
         　│セグメント  │　　│        0x21000とかの指定はできない。
         　│　　　　　　│　　│　　　　(だってレジスタが16bitだもん）
 0x20000   ├──────┤　　│
           │セグメント  │　　│        そこで、セグメントレジスタにセグメント
           │　　　　　　│←─┘　　　　のベース番地を指定する。(頭4桁だけ）
 0x30000 　├──────┤
         　│セグメント  │              0x2000:0x1000 (セグメントベース:アドレス）　　　　　　　
        　 │　　　　　　│　　　　　　　これで0x21000にアクセスしてくれる
 0x40000 　├──────┤
    :    　│セグメント  │
 　 :　　　：　　　　　　：　　　
 　 :　　　：　　　　　　：　　　
 0xE0000 　├──────┤
         　│セグメント  │
        　 │　　　　　　│
 0xF0000 　├──────┤
         　│セグメント  │
        　 │　　　　　　│
 0xFFFFF 　└──────┘
  (1MB)</pre></div>
<p>※少々乱暴な考え方をすれば、この16bit(8086時）のセグメントはとても変則的で無茶な方法といえるかも。整合性や理屈で考えれば、16bitのまま無理に1MBを使えるようにするより、20bitのCPUを開発するというのが本当といえないか。（もちろんあくまでも後付のお評論家的な話ってことで。）</p>
<!--qbded341--></div>
<div>
<div><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=arrow_up.png" alt="Page Top" width="16" height="16" /></div><h2>32bit(i386）のセグメント  <a href="http://thebbl.hideyosi.com/modules/material/?x86%2F%E3%82%BB%E3%82%B0%E3%83%A1%E3%83%B3%E3%83%88#p6116747" title="p6116747"><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=anchor.png" alt="anchor.png" height="12" width="12" /></a> <a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=x86%2F%E3%82%BB%E3%82%B0%E3%83%A1%E3%83%B3%E3%83%88&amp;paraid=p6116747" title="x86/セグメント#p6116747 の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" width="9" height="9" alt="Edit" title="x86/セグメント#p6116747 の編集" /> </a></h2>
<p>セグメントは元来は、上記の通り16bitでなんとか1MBのメモリを使うための変則的手法だったが、32bitになると使用法や意味合い・存在意義が変化する。</p>
<p>32bit状態になると、BXレジスタ(主にアドレスを指定する）も32bit化してEBXレジスタに変化する。32bitなのだから、0x00000000〜0xffffffffまで。すなわち4GBまで番地を直接指定できる。普通に考えればもうセグメントなど必要ではない。</p>
<p>しかし、32bit状態(i386）のCPUはマルチタスク（いくつものプログラムが平行して動作する）を意識している。そのため、この「セグメント」というメモリ分割管理の仕組みをうまく別の用途に転用することにしたようだ。</p>
<p>まず、GDTという、メモリ分割場所の表を用意する。この表はプログラム（主にOS）で設定する必要がある。GDT表はこんな感じになる。</p>
<div ><table style=""><thead><tr><td>セグメント番号</td><td>セグメントの大きさ</td><td>セグメントの開始番地</td><td>セグメントの属性</td></tr></thead><tbody><tr><td>0</td><td>1MB</td><td>0x30000000</td><td>書き込み禁止</td></tr><tr><td>1</td><td>32MB</td><td>0xA0000000</td><td>OS専用</td></tr><tr><td>2</td><td>7MB</td><td>0x43880000</td><td>実行禁止</td></tr><tr><td>3</td><td>512KB</td><td>0xBA500000</td><td>OS専用,書き込み禁止</td></tr><tr><td>4</td><td>2MB</td><td>0x90000000</td><td>特になし</td></tr><tr><td colspan="4" style="text-align:center;">：</td></tr><tr><td>8,191</td><td>2MB</td><td>0xCF8600000</td><td>書き込み禁止</td></tr></tbody></table></div>
<p>※逆に言えば、GDTを設定しておかないとセグメントが使えない
<br />
<br />
この状態で、セグメントレジスタに「4」を入れ、EBXレジスタに0x00001111を入れてアクセスしたとする。するとCPUは、</p>
<ul><li><ul><li>えーっと。セグメント番号は4かぁ。</li>
<li>じゃ、GDTの4番を見に行こう。ええと、開始番地は0x90000000だね。</li>
<li>大きさは2MBだから、EBXの値も問題ないね。</li>
<li>属性も特に問題はないか。</li>
<li>ええと、そうすると、0x90000000+0x00001111だから・・・</li>
<li>そうか。物理的な0x90001111番地にアクセスすればいいのか！</li></ul></li></ul>
<p>と、こう判断して動作を実行する。</p>
<p>特にアプリケーションプログラムなどでは、作る段階では</p>
<ul><li>とにかくこのプログラムは、0x00000000番地に読み込まれてスタートするのだ！</li></ul>
<p>という想定で作ればよい。OS側が適切にセグメントをセット＆選択してくれるので、上記のような物理アドレスの位置をプログラムが意識しなくてもちゃんと動作してくれる。</p>
<!--p6116747--></div>
<div>
<div><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=arrow_up.png" alt="Page Top" width="16" height="16" /></div><h2>お勉強中  <a href="http://thebbl.hideyosi.com/modules/material/?x86%2F%E3%82%BB%E3%82%B0%E3%83%A1%E3%83%B3%E3%83%88#ncdea12a" title="ncdea12a"><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=anchor.png" alt="anchor.png" height="12" width="12" /></a> <a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=x86%2F%E3%82%BB%E3%82%B0%E3%83%A1%E3%83%B3%E3%83%88&amp;paraid=ncdea12a" title="x86/セグメント#ncdea12a の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" width="9" height="9" alt="Edit" title="x86/セグメント#ncdea12a の編集" /> </a></h2>
<p>合ってないと思う。勉強中</p><!--ncdea12a--></div>


 ]]></content:encoded>
 <dc:identifier>http://thebbl.hideyosi.com/modules/material/index.php?x86%2F%E3%82%BB%E3%82%B0%E3%83%A1%E3%83%B3%E3%83%88</dc:identifier>

</item>
<item rdf:about="http://thebbl.hideyosi.com/modules/material/index.php?THEBBL%2F%E3%83%A1%E3%83%A2%E3%83%AA%E3%83%9E%E3%83%83%E3%83%97">
 <title>THEBBL/メモリマップ</title>
 <link>http://thebbl.hideyosi.com/modules/material/?THEBBL%2F%E3%83%A1%E3%83%A2%E3%83%AA%E3%83%9E%E3%83%83%E3%83%97</link>
 <dc:date>2012-10-23T14:58:08+09:00</dc:date>
 <dc:creator></dc:creator>
 
 <description>P171
はりぼてからいろいろ進化させたいBBLなので、メモリマップをもう一度ちゃんと書いて整理＆把握しておこう！
番地標準用途備考0x00000000○空きリアルモード時いろいろ使った。今は反省している　：　 (1MB)0x000fffff0x00100000○フロッピーディスクの内容記憶用いずれいらなくなる？　：　 (1440KB)0x00267fff0x00268000○空き　：　 (30KB)0x0026f7ff0x0026f800○IDT　：　 (2KB)0x0026ffff0x002</description>
 <content:encoded><![CDATA[
 <p>P171</p>
<p>はりぼてからいろいろ進化させたいBBLなので、メモリマップをもう一度ちゃんと書いて整理＆把握しておこう！</p>
<div ><table style=""><thead><tr><td>番地</td><td>標準</td><td>用途</td><td>備考</td></tr></thead><tbody><tr><td>0x00000000</td><td rowspan="3">○</td><td rowspan="3">空き</td><td rowspan="3">リアルモード時いろいろ使った。今は反省している</td></tr><tr><td>　：　 (1MB)</td></tr><tr><td>0x000fffff</td></tr><tr><td>0x00100000</td><td rowspan="3">○</td><td rowspan="3">フロッピーディスクの内容記憶用</td><td rowspan="3">いずれいらなくなる？</td></tr><tr><td>　：　 (1440KB)</td></tr><tr><td>0x00267fff</td></tr><tr><td>0x00268000</td><td rowspan="3">○</td><td rowspan="3" colspan="2">空き</td></tr><tr><td>　：　 (30KB)</td></tr><tr><td>0x0026f7ff</td></tr><tr><td>0x0026f800</td><td rowspan="3">○</td><td rowspan="3" colspan="2">IDT</td></tr><tr><td>　：　 (2KB)</td></tr><tr><td>0x0026ffff</td></tr><tr><td>0x00270000</td><td rowspan="3">○</td><td rowspan="3" colspan="2">GDT</td></tr><tr><td>　：　 (64KB)</td></tr><tr><td>0x0027ffff</td></tr><tr><td>0x00280000</td><td rowspan="3">○</td><td rowspan="3" colspan="2">bootpack.hrb</td></tr><tr><td>　：　 (512KB)</td></tr><tr><td>0x002fffff</td></tr><tr><td>0x00300000</td><td rowspan="3">○</td><td rowspan="3" colspan="2">スタックなど</td></tr><tr><td>　：　 (1MB)</td></tr><tr><td>0x003fffff</td></tr><tr><td>0x00400000</td><td rowspan="3">○</td><td rowspan="3" colspan="2">空き</td></tr><tr><td style="text-align:left;">　：　</td></tr><tr><td>　：</td></tr></tbody></table></div>
<hr />
<p>頭1MB(0x00000000〜0x0000ffff）が曲者。いろいろと入り込んでいる。確実に使ってよいところといけないところとを、ちゃんと洗いなおしておかないと！</p>
<div ><table style=""><thead><tr><td>番地</td><td>用途</td><td>備考</td><td>32bit後</td><td>他用途転用</td></tr></thead><tbody><tr><td>00000</td><td rowspan="3">INTベクタ</td><td rowspan="3">割り込み用のベクタテーブル</td><td rowspan="3" colspan="2">→0x0026f800？</td></tr><tr><td style="text-align:center;">：(1KB)</td></tr><tr><td>003ff</td></tr><tr><td>00400</td><td rowspan="3">BIOS用ワークエリア？</td><td rowspan="3" colspan="2">ROMかあるいはI/Oポートに使われているので勝手には使えないエリア</td><th>No!</th></tr><tr><td style="text-align:center;">：(256B)</td><th>　</th></tr><tr><td>004ff</td><th>　</th></tr><tr><td>00500</td><td rowspan="3">？？？？</td><td rowspan="3" colspan="2">MBR等が使っているようだが良くわからないらしい。いくらもないので、リスクを犯してまで使うほどじゃないという感じ</td><th>No!</th></tr><tr><td style="text-align:center;">：</td><th>　</th></tr><tr><td>007ff</td><th>　</th></tr><tr><td>00800</td><td rowspan="3">？？？</td><td rowspan="3" colspan="3">たぶんだいじょうぶ？</td></tr><tr><td style="text-align:center;">：</td></tr><tr><td>07bff</td></tr><tr><td>07c00</td><td rowspan="3" colspan="2">ブートセクタが読み込まれるアドレス　（ここって、ブートが終わった後は勝手に使ってもいいところなのかな？それとも？？</td><td rowspan="3" colspan="2">→0x00100000</td></tr><tr><td style="text-align:center;">：(512B)</td></tr><tr><td>07dff</td></tr><tr><td>07e00</td><td rowspan="3" colspan="4">？？？</td></tr><tr><td style="text-align:center;">：(512B)</td></tr><tr><td>07fff</td></tr><tr><td>08000</td><td rowspan="3" colspan="4">ブートセクタ内容移転用？？？</td></tr><tr><td style="text-align:center;">：(512B)</td></tr><tr><td>081ff</td></tr><tr><td>08200</td><td rowspan="3">はりぼてのカーネルが読み込まれる部分。</td><td rowspan="3">理由は特になし。むしろ上が問題</td><td rowspan="3" colspan="2">→0x00100200</td></tr><tr><td style="text-align:center;">：(512B)</td></tr><tr><td>083FF</td></tr><tr><td>08400</td><td rowspan="3" colspan="4">フリー？</td></tr><tr><td style="text-align:center;">：(606KB)</td></tr><tr><td>9efff</td></tr><tr><td>9f000</td><td rowspan="3" colspan="3">下記参照。</td><th>No？</th></tr><tr><td style="text-align:center;">：</td><th>　</th></tr><tr><td>9fbff</td><th>　</th></tr><tr><td>9fc00h</td><td rowspan="3">ACPI用ワークエリア（の場合がある）</td><td rowspan="3" colspan="2">使えることも少なくないが、このエリアを使うBIOSが増えてきているらしいので、使わないのが確実</td><th>No？</th></tr><tr><td style="text-align:center;">：</td><th>　</th></tr><tr><td>9ffff</td><th>　</th></tr><tr><td>A0000</td><td rowspan="3">VGA RAM　？なんだろ？これ。 どうもグラフィックモード時に使うようだ。</td><td rowspan="3" colspan="2">仮にVGAとして使われていなくても、VRAM以外の用途で使用してはならないエリア</td><th>No!</th></tr><tr><td style="text-align:center;">：</td><th>　</th></tr><tr><td>AFFFF</td><th>　</th></tr><tr><td>B0000</td><td rowspan="3">VGA RAM ？なんだろ？これ。 MDA　テキストモード？？？</td><td rowspan="3" colspan="2">仮にVGAとして使われていなくても、VRAM以外の用途で使用してはならないエリア</td><th>No!</th></tr><tr><td style="text-align:center;">：</td><th>　</th></tr><tr><td>B7FFF</td><th>　</th></tr><tr><td>B8000</td><td rowspan="3">VGA RAM ？なんだろ？これ。 VGA テキストモード時使用？&quot;</td><td rowspan="3" colspan="2">仮にVGAとして使われていなくても、VRAM以外の用途で使用してはならないエリア</td><th>No!</th></tr><tr><td style="text-align:center;">：</td><th>　</th></tr><tr><td>BFFFF</td><th>　</th></tr><tr><td>C0000</td><td rowspan="3">予約領域？　</td><td rowspan="3" colspan="3">なにを予約してるの?????</td></tr><tr><td style="text-align:center;">：</td></tr><tr><td>DFFFF</td></tr><tr><td>E0000</td><td rowspan="3" style="text-align:right;">ROM BIOS？</td><td rowspan="3" colspan="2">まずROMなので、どっちにしても使うことはできないエリア</td><th>No!</th></tr><tr><td style="text-align:center;">：</td><th>　</th></tr><tr><td>FFFFF</td><th>　</th></tr></tbody></table></div>

 ]]></content:encoded>
 <dc:identifier>http://thebbl.hideyosi.com/modules/material/index.php?THEBBL%2F%E3%83%A1%E3%83%A2%E3%83%AA%E3%83%9E%E3%83%83%E3%83%97</dc:identifier>

</item>
<item rdf:about="http://thebbl.hideyosi.com/modules/material/index.php?x86%2Fx86%2F%E3%82%BB%E3%82%B0%E3%83%A1%E3%83%B3%E3%83%88">
 <title>x86/x86/セグメント</title>
 <link>http://thebbl.hideyosi.com/modules/material/?x86%2Fx86%2F%E3%82%BB%E3%82%B0%E3%83%A1%E3%83%B3%E3%83%88</link>
 <dc:date>2012-10-23T14:58:08+09:00</dc:date>
 <dc:creator></dc:creator>
 
 <description>いろいろと難しいが、とにかくまずは、アドレスを指定する時には二つのレジスタが必要と理解しよう。
 
  ページ内コンテンツ
 
 
   なぜ二つ？　普通は一個でしょ？？ 
 具体的には？？？？ 
 そんなわけで・・・ 
 ウソつけ！32ビットでもセグメントあるじゃん！ 
 
なぜ二つ？　普通は一個でしょ？？    
まったくその通りである。通常のCPUはそういうのが多い。
・・・しかし、ちょっとここで仮定してみる。16ビットCPUである8086が仮にセグメントなんていうややこしい仕組みを持って</description>
 <content:encoded><![CDATA[
 <p>いろいろと難しいが、とにかくまずは、<strong>アドレスを指定する時には二つのレジスタが必要</strong>と理解しよう。</p>
<div>
<div>
 <div>
  ページ内コンテンツ
 </div>
 <div>
  <ul><li><ul><li> なぜ二つ？　普通は一個でしょ？？ 
<ul><li> 具体的には？？？？ </li></ul></li>
<li> そんなわけで・・・ </li></ul></li>
<li> ウソつけ！32ビットでもセグメントあるじゃん！ </li></ul>
 </div>
</div>
<h3>なぜ二つ？　普通は一個でしょ？？  <a href="http://thebbl.hideyosi.com/modules/material/?x86%2Fx86%2F%E3%82%BB%E3%82%B0%E3%83%A1%E3%83%B3%E3%83%88#je7bb9b5" title="je7bb9b5"><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=anchor.png" alt="anchor.png" height="12" width="12" /></a> <a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=x86%2Fx86%2F%E3%82%BB%E3%82%B0%E3%83%A1%E3%83%B3%E3%83%88&amp;paraid=je7bb9b5" title="x86/x86/セグメント#je7bb9b5 の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" width="9" height="9" alt="Edit" title="x86/x86/セグメント#je7bb9b5 の編集" /> </a></h3>
<p>まったくその通りである。通常のCPUはそういうのが多い。</p>
<p>・・・しかし、ちょっとここで仮定してみる。16ビットCPUである8086が<strong>仮に</strong>セグメントなんていうややこしい仕組みを持っていないとしよう。</p>
<div><pre>よし！　メモリを全部読んでみる実験だ！

START:
        MOV    BX,0x0000           ;開始する番地
        MOV    CX,0xFFFF           ;ループする回数
        JMP    LOOP
 
FORNEXT:
        MOV    AX,[BX]             ;BX番地のメモリの内容をAXに読んでみる
        ADD    BX,0x0001           ;BXの番地をひとつ増やす
        LOOP   FORNEXT             ;CXの値をひとつ減らしてFORNEXT部にジャンプ</pre></div>
<p>さぁこれで全部のメモリを読むことはできたよね？</p>
<p>・・・全部のメモリって、いくつ？　・・・・</p>
<p>0x0000番地〜0xFFFF番地まで。0xFFFFバイト。10進数に直すと65,535バイト。これを1024で割り算してKB単位にすると・・・・約64KB・・・えぇぇ！！　たった64KB！？？？</p>
<p><strong>そう！</strong>、セグメントなんてややこしいことを排除するとシンプルになるけど、16ビットでは扱えるメモリが猛烈に小さくなってしまうんです！！！</p>
<p>参考までに。<br />
32ビット。16ビットのたった2倍だよね？。上記と同じように計算してみると・・・<br />
0x00000000番地〜0xFFFFFFFF番地まで。0xFFFFFFFFバイト。10進数に直すと4,294,967,295バイト。これを1024で割り算してKB単位にすると・・・4,194,304KB・・・さらに1024で割り算してMB単位にすると・・・4096MB・・・もういいよね？　なんと、4GB！！！<br />
こんなに贅沢に沢山のメモリを使えるので、32ビットの時にはセグメントなんてない。というか、そんなややこしいことしなくてもいいわけ。<a href="http://thebbl.hideyosi.com/modules/bwiki/index.php?%BB%F1%CE%C1%2Fx86%2F%A5%BB%A5%B0%A5%E1%A5%F3%A5%C8#j65cbf7c" title="thebbl.hideyosi.com/modules/bwiki/index.php?%BB%F1%CE%C1%2Fx86%2F%A5%BB%A5%B0%A5%E1%A5%F3%A5%C8#j65cbf7c">(注1）</a></p>
<p>そう。CPUのビット数だけ見ると、たかだか倍なのでたいしたことないように見えるかもしれないけど、16ビットと32ビットじゃ、こんなに巨大な差があるんだ！</p>
<p>「じゃ、全部32ビットにすりゃいいじゃん！」と考える人がいたら多分その人はあまり頭がよくないと思うよ。</p>
<p>江戸時代の人に向かって「バカだなぁ。トラック使えばお城なんて簡単に作れるのに」と言っているのと同じだからね。</p>
<p>8086はたった64KBしか扱えないという制限を何とかしたかった。そのため、<strong>メモリ番地の指定だけは二つの16ビットレジスタを使うようにしてなんとか凌ごう！</strong>という方法を取ったわけ。</p>
<p>メモリの番地を指定する時だけは、　セグメントレジスタ ＆ オフセットレジスタ　という、二つのレジスタが使われるようにした。これがセグメントの考え方。</p>
<!--je7bb9b5--></div>
<div>
<div><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=arrow_up.png" alt="Page Top" width="16" height="16" /></div><h4>具体的には？？？？  <a href="http://thebbl.hideyosi.com/modules/material/?x86%2Fx86%2F%E3%82%BB%E3%82%B0%E3%83%A1%E3%83%B3%E3%83%88#k1355799" title="k1355799"><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=anchor.png" alt="anchor.png" height="12" width="12" /></a> <a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=x86%2Fx86%2F%E3%82%BB%E3%82%B0%E3%83%A1%E3%83%B3%E3%83%88&amp;paraid=k1355799" title="x86/x86/セグメント#k1355799 の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" width="9" height="9" alt="Edit" title="x86/x86/セグメント#k1355799 の編集" /> </a></h4>
<p>ここに、物理的にメモリを1MB搭載したマシンがあるとする。1MBということは、だいたい0x00000〜0xFFFFFまでメモリが搭載されていることになるよね？。</p>
<p>例えば、上記の、<strong>セグメントなんてない16ビットCPU</strong>の場合。番地を指定するのもレジスタだよね？。それが16ビットしかないんだから、0x0000〜0xFFFFまでの値しか指定できない。たとえ物理的に何GBメモリを搭載していても・・・。</p>
<div><pre>    ;このマシンは1MB搭載機だ！0xFFFFFまでメモリが使えるぞ！
    ;さっそく一番最後のメモリを読んでみよう！
         MOV    BX,0xFFFFF       ;BXに読みたいメモリの番地を代入
         MOV    AX,[BX]          ;BX番地のメモリの内容をAXに代入
    ;わーい！　これで1MBの所を読めたぞ！</pre></div>
<p>これは大間違いでしょ？　(^^;</p>
<p>BXは16ビットだもん。0xFFFFFなんて値、桁がないので代入できないよ！（よく見て。5桁あるでしょ？）</p>
<p>ここでセグメントレジスタの出番となるわけ。</p>
<p>上記の間違いプログラムと同じことをしたい場合こうなる。先に見てみて。</p>
<div><pre>    ;このマシンは1MB搭載機だ！0xFFFFFまでメモリが使えるぞ！
    ;さっそく一番最後のメモリを読んでみよう！
         MOV    DS,0xF000       ;セグメントレジスタの一つ、DSにセグメントを
         MOV    BX,0xFFFF       ;BXに読みたいメモリのオフセット値を
         MOV    AX,[DS:BX]      ;こんなことすると、0xFFFFF番地を読める！
    ;わーい！　これで1MBの所を読めたぞ！</pre></div>
<p>原理はややこしく書いてあることが多いけど、ようは<strong>一桁ずらす</strong>だけ。</p>
<div><pre>       MOV       DS,0xF000    ;DSにセグメント値を入れる。
       MOV       BX,0xFFFF    ;BXに読みたいメモリのオフセット値を

       DSの値        F000     ;←１桁左にずれる
       BXの値  +      FFFF
                      ↓
       MOV       AX,[DS:BX]
                      ↓
       MOV       AX,0xFFFFF   ;←こうしたのと同じことになる</pre></div>
<p><strong>備考</strong></p>
<p>例えば。ここに1MBを搭載したPCがある。で、なんらかの方法で0x12345番地に0x10を書き込んだとする。</p>
<p>この場合、以下は同じ0x12345番地を読むことになる。</p>
<div><pre>;---- コードA ------------
   MOV    DS,0x1000       ;セグメントレジスタであるDSに0x1000を代入
   MOV    BX,0x2345       ;BXレジスタにオフセット値0x2345を代入
   MOV    AX,[DS:BX]      ;AXには物理的に0x12345番地の値（0x10）が入る</pre></div>
<div><pre>;---- コードB ------------
   MOV    DS,0x1230       ;セグメントレジスタであるDSに0x1230を代入
   MOV    BX,0x0045       ;BXレジスタにオフセット値0x0045を代入
   MOV    AX,[DS:BX]      ;AXには物理的に0x12345番地の値（0x10）が入る</pre></div>
<p><strong>豆知識〜</strong>
枝豆ってや〜</p>
<p>このちょっと変則的な方法（二つの16ビットを組み合わせて指定する）。前の方の値を<strong>セグメント</strong>といい、後ろの値を<strong>オフセット</strong>と言う。</p>
<p>セグメントというのは英語で断片とか分割とかいうような意味。</p>
<p>さらにオフセットとは、ずれている量みたいな意味合いになる。</p>
<p>こういった名づけから、セグメント：オフセットは、以下のような説明がなされることが多い。</p>
<ul><li><strong>セグメント値：</strong>メモリを分割して64KB単位で扱う場合の先頭アドレス（開始番地）</li>
<li><strong>オフセット値：</strong>セグメント値を基点（スタート位置）にして、そこから何バイト後ろにずれているか</li></ul>
<!--k1355799--></div>
<div>
<div><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=arrow_up.png" alt="Page Top" width="16" height="16" /></div><h3>そんなわけで・・・  <a href="http://thebbl.hideyosi.com/modules/material/?x86%2Fx86%2F%E3%82%BB%E3%82%B0%E3%83%A1%E3%83%B3%E3%83%88#bd10221e" title="bd10221e"><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=anchor.png" alt="anchor.png" height="12" width="12" /></a> <a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=x86%2Fx86%2F%E3%82%BB%E3%82%B0%E3%83%A1%E3%83%B3%E3%83%88&amp;paraid=bd10221e" title="x86/x86/セグメント#bd10221e の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" width="9" height="9" alt="Edit" title="x86/x86/セグメント#bd10221e の編集" /> </a></h3>
<p>8086、あるいはその互換であるリアルモード時のCPUは、<strong>ことアドレスを指定する場合は必ず２つで指定する</strong>と覚えておけばとりあえずは原理を理解できると思う。</p>
<p>アドレスを指定するっていうのはなにもプログラム・プログラマの話だけではないよ。</p>
<p>CPUが動作する場合に必要な部分でも全てこの法則に当てはめれば、別の形で整理できるんじゃないかな？</p>
<p>例えば・・・・</p>
<ul><li>プログラム上でのアドレス指定
<ul><li>これまで説明してきたからわかるよね？</li></ul></li>
<li>インストラクションポインタ
<ul><li>これはCPUが<strong>次の命令のアドレス</strong>としているもの。</li>
<li>なので、[CS:IP]という２つのレジスタが必要</li></ul></li>
<li>スタック
<ul><li>CPUが一時的に使う変数とかを保持しておくための場所を示している。</li>
<li>なので、[SS:SP]という２つのレジスタが必要</li></ul></li></ul>
<hr />
<!--bd10221e--></div>
<div>
<div><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=arrow_up.png" alt="Page Top" width="16" height="16" /></div><h2>ウソつけ！32ビットでもセグメントあるじゃん！  <a href="http://thebbl.hideyosi.com/modules/material/?x86%2Fx86%2F%E3%82%BB%E3%82%B0%E3%83%A1%E3%83%B3%E3%83%88#j65cbf7c" title="j65cbf7c"><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=anchor.png" alt="anchor.png" height="12" width="12" /></a> <a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=x86%2Fx86%2F%E3%82%BB%E3%82%B0%E3%83%A1%E3%83%B3%E3%83%88&amp;paraid=j65cbf7c" title="x86/x86/セグメント#j65cbf7c の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" width="9" height="9" alt="Edit" title="x86/x86/セグメント#j65cbf7c の編集" /> </a></h2>
<p>・・・実はその通り。</p>
<p>・・・でも、これがややこしさに拍車をかけている要因。</p>
<p><strong>16ビット時と32ビット時は、セグメントという言葉の意味合いがぜんぜん変わってしまう</strong>んだ！</p>
<p>ちょっとこの図を見てみて。ややこしいけど解るでしょ？「エロマンガ」という言葉についての図。</p>
<div><pre>         ┌─ 日本人 ──── エロマンガ ──── 「うっしっし！」
         │       
人類 ──┤
         │
         └─ フィリピン人 ─ エロマンガ ──── 「美しい島だ」</pre></div>
<p>これと同じくらい、同じ言葉でもその意味合いが違うんですよぇね。</p>
<div><pre>        ┌─ 16ビット時 ──── セグメント ──── これで1MBアクセスできる！
        │       
x86 ──┤
        │
        └─ 32ビット時 ──── セグメント ──── マルチタスクでは必要だ！</pre></div><!--j65cbf7c--></div>


 ]]></content:encoded>
 <dc:identifier>http://thebbl.hideyosi.com/modules/material/index.php?x86%2Fx86%2F%E3%82%BB%E3%82%B0%E3%83%A1%E3%83%B3%E3%83%88</dc:identifier>

</item>
<item rdf:about="http://thebbl.hideyosi.com/modules/material/index.php?WikiEngines">
 <title>WikiEngines</title>
 <link>http://thebbl.hideyosi.com/modules/material/?WikiEngines</link>
 <dc:date>2012-10-23T14:58:06+09:00</dc:date>
 <dc:creator></dc:creator>
 
 <description>
WikiEngines    
WikiEngines は、WikiWikiWeb のようなものを実現するプログラムのことです。もともとは WikiWikiWeb のことを言いましたが、現在ではそのクローンが多く存在するためにそれらを WikiEngines と呼びます。
</description>
 <content:encoded><![CDATA[
 <div>
<h2><span>WikiEngines</span>  <a href="http://thebbl.hideyosi.com/modules/material/?WikiEngines#w25f7760" title="w25f7760"><img src="http://thebbl.hideyosi.com/modules/material/skin/loader.php?src=anchor.png" alt="anchor.png" height="12" width="12" /></a> <a href="http://thebbl.hideyosi.com/modules/material/?cmd=edit&amp;page=WikiEngines&amp;paraid=w25f7760" title="WikiEngines#w25f7760 の編集"><img src="http://thebbl.hideyosi.com/modules/material/image/paraedit.png" width="9" height="9" alt="Edit" title="WikiEngines#w25f7760 の編集" /> </a></h2>
<p><span>WikiEngines</span> は、<a href="http://thebbl.hideyosi.com/modules/material/?WikiWikiWeb" title="WikiWikiWeb (19h)">WikiWikiWeb</a> のようなものを実現するプログラムのことです。もともとは <a href="http://thebbl.hideyosi.com/modules/material/?WikiWikiWeb" title="WikiWikiWeb (19h)">WikiWikiWeb</a> のことを言いましたが、現在ではそのクローンが多く存在するためにそれらを <span>WikiEngines</span> と呼びます。</p><!--w25f7760--></div>


 ]]></content:encoded>
 <dc:identifier>http://thebbl.hideyosi.com/modules/material/index.php?WikiEngines</dc:identifier>

</item>
<item rdf:about="http://thebbl.hideyosi.com/modules/material/index.php?WikiName">
 <title>WikiName</title>
 <link>http://thebbl.hideyosi.com/modules/material/?WikiName</link>
 <dc:date>2012-10-23T14:58:06+09:00</dc:date>
 <dc:creator></dc:creator>
 
 <description>&amp;quot;WikiName&amp;quot; のように大文字で始まる単語を二つ以上連結したものは(自動的に)ページ名として扱われます*1。そのページが存在していない場合は Dangling link (未決定のリンク) が表示されます。
</description>
 <content:encoded><![CDATA[
 <p>&quot;<span>WikiName</span>&quot; のように大文字で始まる単語を二つ以上連結したものは(自動的に)ページ名として扱われます*1。そのページが存在していない場合は Dangling link (未決定のリンク) が表示されます。</p>

 ]]></content:encoded>
 <dc:identifier>http://thebbl.hideyosi.com/modules/material/index.php?WikiName</dc:identifier>

</item>
<item rdf:about="http://thebbl.hideyosi.com/modules/material/index.php?WikiWikiWeb">
 <title>WikiWikiWeb</title>
 <link>http://thebbl.hideyosi.com/modules/material/?WikiWikiWeb</link>
 <dc:date>2012-10-23T14:58:06+09:00</dc:date>
 <dc:creator></dc:creator>
 
 <description>Cunningham &amp;amp; Cunningham, Inc.
</description>
 <content:encoded><![CDATA[
 <p><a href="http://c2.com/" title="c2.com/">Cunningham &amp; Cunningham, Inc.</a></p>

 ]]></content:encoded>
 <dc:identifier>http://thebbl.hideyosi.com/modules/material/index.php?WikiWikiWeb</dc:identifier>

</item>

</rdf:RDF>