2012年01月13日
川俣晶の縁側ソフトウェア技術雑記total 2639 count

i8086は64Kバイトのセグメントを指定するのだろうか

Written By: 川俣 晶連絡先

http://twitpic.com/85xuteより

i8086ってあるじゃないですか。アドレスが20ビットあるので、1Mバイトの空間をアクセスできる仕様なんですが、実際にはリニアにはアクセスできずに64Kバイト単位のセグメントを指定する方式ですよね

別にそれはいいんですが

物理アドレスの算出にはセグメントレジスタを16倍Lた値と16ピット長のオフセットを加算Lた値なんで実際には64Kパイト単位のアラインじゃないんです。

私ああいうの気持ち悪いんですよね

「なんだi8086ってこの時代錯誤の漫画は」

「時間が止まってるんだよ。よくある病理だ」

「それを言いたいわけ?」

「そうでもない」

「というと?」

「i8086のメモリは64Kバイトのメモリで分割されている、というのがそもそも迷信だからだ」

「でも、64Kバイトまでしか直接アクセスできないじゃないか」

「その場合の直接という言葉の意味は何?」

「えーと、セグメントレジスタの値を変更せずにってことかな?」

「なぜセグメントレジスタの値を変更しないの?」

「なぜって。そうだな。コードは複雑になって遅くなるからかな」

「単にコードサイズやスピードの問題なら、『アクセスできない』とまで言ったら言い過ぎじゃ無いか」

「ええと」

「実際、i8086用の一部C言語の処理系ではhugeポインタというのがあって、64Kバイトに制約されないでそれ以上のメモリも連続して扱えるぞ」

「じゃあ、制約は無いってこと?」

「そうじゃない。制約はある。hugeポインタも万能じゃない。制約だらけでとても使いにくいぞ」

「あれ? 君が何を言いたいのか分からなくなったぞ」

「だからさ。i8086には制約が存在する。これは事実。しかし、その制約が正しく理解されているとはとても言えない」

「えー」

「たとえばメモリは640MBまでとか、メモリは64Kバイトで分割されているとか、そんな説明がけっこう多いけど全部デタラメ」

「じゃあ、真実はなんだよ」

「i8086のメモリは、実際には16バイト単位で分割されていると考えるべきだね。その方が分かり易い」

「なんでだよ」

「絶対アドレスを指定できるセグメントは16バイト単位でしかアドレスを指定できないんだ」

「オフセット付ければ1バイト単位で指定できるだろ?」

「だから、それはオフセットつまり相対アドレスであって絶対アドレスじゃないんだよ」

「えー」

「たとえば、モトローラの6800の場合、インデックスアドレッシングに付くオフセットはインデックス・レジスタに1バイトで付加される0から255だね。でも、誰も256バイト単位でしかアクセスできない、とは言わない」

「なんだよそれ」

「だからさ。オフセットつまり相対アドレスは起点を変えれば同じ値でも違うアドレスを指し示す。これ当たり前」

「まさか」

「そうさ。i8086でも、セグメントの値を変えれば特定のオフセットが指し示す絶対アドレスがいくらでも変化する。そもそもオフセットとはそういう意味だ」

「1[0]と0[1]は等価ってことだね」

「そうだ。そのことを誰も気持ち悪いとは言わない。相対アドレスとはそういうものだからだ」

「じゃあ、この人は何が気持ち悪いのかな?」

「さあな。知らん」

「知らんって……」

「他人の心など分かるわけ無いだろ」

「じゃあ、君は気持ちが悪いとは思わないの?」

「不便とか効率が悪いとか分かりにくいとか言うのは分かるが、気持ち悪いとまでは思わないな」

「なぜ受け止め方に差があるの?」

「とりあえず、インテルとx86の悪口言っておけば『周囲からそうだよね』って言ってもらえる安心感があるからじゃないか?」

「じゃあ、それほど真剣に考えてないってこと?」

「だろうな。本当にi8086の気持ちになって物事を真剣に考えていれば、こんな安直な解釈では終わらないだろう」

Facebook

キーワード【 川俣晶の縁側ソフトウェア技術雑記
【技術雑記】の次のコンテンツ
2012年
01月
13日
お手軽すぎたAll-In-One Code Framework
3days 0 count
total 2302 count
【技術雑記】の前のコンテンツ
2012年
01月
12日
続・今の時代は1980年頃に不気味なほどよく似ている
3days 0 count
total 2295 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

http://mag.autumn.org/tb.aspx/20120113142643
サイトの表紙【技術雑記】の表紙【技術雑記】のコンテンツ全リスト 【技術雑記】の入手全リスト 【技術雑記】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.33 (Alpha-Test) Copyright (c) 2004-2018 Pie Dey.Co.,Ltd.