(Translated by https://www.hiragana.jp/)
MMIX - Wikipedia コンテンツにスキップ

MMIX

出典しゅってん: フリー百科ひゃっか事典じてん『ウィキペディア(Wikipedia)』
MMIX
開発かいはつしゃ ドナルド・クヌース
ビットすう 64ビット
デザイン RISC
エンコード Fixed
ブランチ Condition code
エンディアン ビッグエンディアン
オープン 公開こうかいちゅう
レジスタ
汎用はんよう うち32が専用せんようレジスタ
256

MMIX(エムミックス)は、ドナルド・クヌースジョン・ヘネシーMIPSプロセッサ設計せっけいしゃ)や Dick Sites(Alphaプロセッサ設計せっけいしゃ)の協力きょうりょく設計せっけいした命令めいれいセット命令めいれいセットアーキテクチャ、ISA)である。コンピュータプログラミングの「Art」をしるしている大著たいちょThe Art of Computer Programming (TAoCP) において使用しようしていた「MIX」の代替だいたいとなるべく設計せっけいされ、現代げんだいてき特徴とくちょうつ。とう命令めいれいセットを設計せっけいしたのち執筆しっぴつ改訂かいていの TAoCP にてすで使用しようされている。

"MMIX" というつづりはローマ数字すうじとして解釈かいしゃくすると2009であり、前任ぜんにんのMIXのあたまにMをけたものであると同時どうじに、2000年代ねんだいのコンピュータ(プロセッサ)という意味いみけているものとおもわれる(とはいえ、MIXのときの「実在じつざいのコンピュータ 16 しゅ型番かたばんからって平均へいきんした」の1009である、という主張しゅちょうにはかなりこじつけの気配けはいがあったのと同様どうようとく意味いみがあるものではない)。

アーキテクチャ

[編集へんしゅう]

MMIX は二進法にしんほうコンピュータであり(MIXではじゅうしん併用へいようしていた)、64ビット仮想かそうアドレス空間くうかんと32ビットはば命令めいれいセットつ(ビッグエンディアン方式ほうしき)。

命令めいれい

[編集へんしゅう]

命令めいれいは32ビットはばで、一般いっぱんに "OP X, Y, Z" という形式けいしきである。OPは命令めいれいコード、Xに結果けっかかえされ、それぞれのフィールドは8ビットはばである。たとえば、加算かさん命令めいれい (ADD) の命令めいれいコードは32となっている。Xオペランドは通常つうじょう演算えんざん結果けっか格納かくのうするレジスタを指定していする。のオペランドは演算えんざん対象たいしょうのレジスタを指定していする。たとえば、"ADD $0, $1, 3" はレジスタ 1 と即値そくち 3 を加算かさんしてレジスタ 0 に結果けっか格納かくのうする(Zオペランドを即値そくちとしてあつかう ADDI 命令めいれい命令めいれいコードは 33 だが、おなじ ADD というニーモニックを使用しよう)。MMIXプログラムは MMIXALアセンブリ言語げんごかれる。

レジスタ

[編集へんしゅう]

MMIXチップには256ほんのアークテクチャじょう汎用はんようレジスタがあり、$0 から $255 であらわされる。に32ほん専用せんようレジスタをつ。MMIX は後述こうじゅつするレジスタスタック機能きのうつ。レジスタスタックに使用しようするレジスタをローカルレジスタ、任意にんいのルーチンからアクセス可能かのうなレジスタをグローバルレジスタとぶ。ローカルレジスタは $0 からはじまり rL レジスタで指定していされる番号ばんごうのレジスタまで、グローバルレジスタは rG レジスタで指定していされる番号ばんごうのレジスタから $255 までとなっている。ローカルレジスタはサブルーチンしのさい自動的じどうてきえられる(えない方法ほうほうもある)。物理ぶつりてきなレジスタの構成こうせいはMMIXでは規定きていされていないが、たとえばグローバルレジスタを 256-32ほん、ローカルレジスタを512ほん物理ぶつりてき用意よういするなどの構成こうせいかんがえられる。

ローカルレジスタスタック

[編集へんしゅう]

ローカルレジスタスタックはレジスタ・ウィンドウているが、具体ぐたいてき実装じっそう方式ほうしき定義ていぎされておらず、あくまでもユーザーからかたのみが定義ていぎされている。ローカルレジスタスタックを使用しようすると、かくサブルーチンは $0 から $(rL-1) までをローカルレジスタとしてつ(rLレジスタは専用せんようレジスタ)。どちらでもない汎用はんようレジスタはマージナルレジスタとばれる。マージナルレジスタをオペランド使用しようすると自動的じどうてきにそのレジスタまでがローカルレジスタとなる(入力にゅうりょくオペランドとして使用しようすると、は 0)。たとえば、ルーチン A が $0 から $4 までをローカルレジスタに使用しようしていて、引数ひきすうを2つつルーチン B を場合ばあい、$5 をルーチン B の結果けっか格納域かくのういきとし、$6 と $7 に引数ひきすう設定せっていしてルーチンBをす。そうするとルーチンBでは$6だった物理ぶつりレジスタが $0、$7だった物理ぶつりレジスタが $1 としてえるようになる。ルーチン B のリターンを $0 に格納かくのうしてルーチン A にもどると、ルーチンA からは $5 にそのリターンえることになる($0 から $4 は B をまえおなじものが復帰ふっきしている)。物理ぶつりレジスタにはかぎりがあるため、ちょんコールスタックをレジスタに保持ほじすることはできない。スタック内容ないようのレジスタからメモリへの移動いどう(またはそのぎゃく)は自動的じどうてきおこなわれ、rO レジスタと rS レジスタがメモリじょうのスタックとレジスタスタックの関連かんれんけをおこなう。

専用せんようレジスタ

[編集へんしゅう]

MMIXには以下いかのような32ほん専用せんようレジスタがある。

rB(g[0])
ブートストラップレジスタ(トリップ)
トリップ、rB ← $255 および $255 ← rJ がおこなわれる。 したがって rJ が汎用はんようレジスタにセーブされる。
rD (g[1])
じょすうレジスタ
符号ふごう整数せいすう除算じょざんで 128ビットじょすう上位じょうい64ビットとして使用しようされる。
rE (g[2])
イプシロンレジスタ
浮動ふどう小数点しょうすうてんすうのイプシロンにかんする比較ひかく使用しよう
rH (g[3])
乗算じょうざん上位じょういレジスタ
符号ふごう整数せいすう乗算じょうざんで 128ビットのせき上位じょうい64ビットを格納かくのう
rJ (g[4])
リターンジャンプレジスタ
PUSH命令めいれいつぎ命令めいれいアドレスを格納かくのうし、のちに POP 命令めいれいもどさい使用しようする。
rM (g[5])
多重たじゅうマスクレジスタ
MUX命令めいれい使用しよう($X ← ($Y & rM)|($Z & ~rM))
rR (g[6])
剰余じょうよレジスタ
整数せいすう除算じょざん剰余じょうよ格納かくのう
rBB (g[7])
ブートストラップレジスタ(トラップ)
トラップ、rBB ← $255 および $255 ← rJ がおこなわれる。したがって rJ が汎用はんようレジスタにセーブされる。
rC (g[8])
サイクルカウンタ
サイクルごとにインクリメントされる。
rN (g[9])
シリアル番号ばんごう
プロセッサの識別しきべつ番号ばんごう
rO (g[10])
レジスタスタックオフセット
レジスタスタック実装じっそうよう
rS (g[11])
レジスタスタックポインタ
レジスタスタック実装じっそうよう
rI (g[12])
インターバルカウンタ
サイクルごとにデクリメントされる。ゼロになるとみを発生はっせい
rT (g[13])
トラップアドレスレジスタ
トラップハンドラのアドレス
rTT (g[14])
動的どうてきトラップアドレスレジスタ
外部がいぶ割込わりこのトラップハンドラアドレス
rK (g[15])
みマスクレジスタ
特定とくていみのイネーブルとディセーブル
rQ (g[16])
要求ようきゅうレジスタ
発生はっせいしたみの記録きろく
rU (g[17])
使用しようりょうカウンタ
実行じっこう命令めいれいすうのカウント
rV (g[18])
仮想かそう変換へんかんレジスタ
仮想かそう物理ぶつりアドレス変換へんかんのためのレジスタ。セグメントのサイズとおおきさ、ページテーブルの位置いち仮想かそう空間くうかん番号ばんごうなどを保持ほじ
rG (g[19])
グローバル閾値レジスタ
$(rG)から R255までをグローバルレジスタとして使用しよう
rL (g[20])
ローカル閾値レジスタ
$0から$(rL-1)までをローカルレジスタとして使用しよう
rA (g[21])
数値すうち演算えんざん状態じょうたいレジスタ
オーバフローやゼロ除算じょざんなどの算術さんじゅつ例外れいがい記録きろくおよびイネーブル/ディセーブル設定せってい
rF (g[22])
フェイルアドレスレジスタ
障害しょうがい発生はっせいした命令めいれいのアドレスを格納かくのう
rP (g[23])
予測よそくレジスタ
コンペア・アンド・スワップ命令めいれい使用しよう
rW (g[24])
箇所かしょレジスタ(トリップ)
トリップつぎ命令めいれいのアドレスを保持ほじ
rX (g[25])
実行じっこうレジスタ(トリップ)
トリップ現在げんざい命令めいれいそのものを保持ほじ
rY (g[26])
Yオペランド(トリップ)
トリップ現在げんざい命令めいれいのYオペランドを保持ほじ
rZ (g[27])
Zオペランド(トリップ)
トリップ現在げんざい命令めいれいのZオペランドを保持ほじ
rWW (g[28])
箇所かしょレジスタ(トラップ)
トラップつぎ命令めいれいのアドレスを保持ほじ
rXX (g[29])
実行じっこうレジスタ(トラップ)
トラップ現在げんざい命令めいれいそのものを保持ほじ
rYY (g[30])
Yオペランド(トラップ)
トラップ現在げんざい命令めいれいのYオペランドを保持ほじ
rZZ (g[31])
Zオペランド(トラップ)
トラップ現在げんざい命令めいれいのZオペランドを保持ほじ

トリップとはユーザーレベルの例外れいがい処理しょり機構きこうであり、トリップが発生はっせいするとユーザー空間くうかん固定こていアドレス(0番地ばんち)にジャンプする。トラップはオペレーティングシステム機構きこうである。上記じょうき専用せんようレジスタの説明せつめいに「トリップ」とあるのはトリップ発生はっせい使用しようされるコンテキスト保持ほじのレジスタ、「トラップ」とあるのはトラップ発生はっせい使用しようされるコンテキスト保持ほじのレジスタである。

参考さんこう文献ぶんけん

[編集へんしゅう]
  • Knuth, Donald E. (1999). MMIXware: A RISC Computer for the Third Millennium. Heidelberg: Springer-Verlag. ISBN 978-3-540-66938-8  (errata).
  • ドナルド・クヌース しる滝沢たきざわとおる やく『MMIXware だいさん千年紀せんねんきのためのRISC コンピュータ』エスアイビー・アクセス、府中ふちゅう (東京とうきょう)、2001ねん12月。ISBN 4434012398 
  • Knuth, Donald E. 有澤ありさわまことやく (2006). The Art of Computer Programming Volume 1, Fascicle 1 MMIX - A RISC Computer for the New Millennium. アスキー. ISBN 4-7561-4712-7 

外部がいぶリンク

[編集へんしゅう]