JPH0192840A - データ処理装置 - Google Patents
データ処理装置Info
- Publication number
- JPH0192840A JPH0192840A JP25021687A JP25021687A JPH0192840A JP H0192840 A JPH0192840 A JP H0192840A JP 25021687 A JP25021687 A JP 25021687A JP 25021687 A JP25021687 A JP 25021687A JP H0192840 A JPH0192840 A JP H0192840A
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- bit
- dest
- bits
- size
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Abstract
め要約のデータは記録されません。
Description
み処理の例外処理および内部割り込み命令であるトラッ
プ命令を統合して行うデータ処理装置を提案するもので
ある。 [従来技術] 従来、割り込み処理機構、例外処理機構および内部割り
込み命令処理機構のようなEIT処理機構を備えたデー
タ処理装置においては、ε1丁処理の要求が発生し、そ
れが受は付けられてEIT処理を起動した時に内部状態
を示す情報を外部記憶装置に退避した後、あらかじめデ
ータ処理装置の機能として定められている内部状態変数
の値に内部のレジスタ値を自動的に書換えて処理を行っ
ていた。第388図に従来のEIT処理起動方法のフロ
ーチャートを示す。第388図の1007でEIT処理
要求が受は付けられると、100Bでデータ処理装置内
でEIT処理ハンドラの先頭アドレスが格納されている
外部記憶装置のアドレスが生成され、1009でEIT
処理ハンドラの先頭アドレスを読み込むと共にデータ処
理装置の内部状態を示すデータを格納するプログラムス
テータスワード(以後PSWと記す)がデータ処理装置
においてEIT処理用のあらかじめ定められている値に
更新される。例えば、外部割り込みが受は付けられた時
など、その受は付けられた外部割り込みより高い優先度
の外部割り込みの受付をそのEIT処理が終了するまで
禁止するような目的でPSW中のEIT処理の受付優先
度を示す変数を自動的に′8き換える処理を行う。次に
、第388図中の1010でプロセッサ情報のスタック
への退避を行った後1011でそのEITの内容に対し
てあらかじめプログラムされているEIT処理ハンドラ
を起動する。 [発明が解決しようとする問題点コ しかしこの方式では、EIT処理ハンドラを起動すると
きのデータ処理装置の内部状態が一意的に定まっている
のでプログラム作成者にとって制約が大きく、特に多重
にεIT処理を行わせるような時のデータ処理装置にお
ける状態設定がプログラム作成者にとって困難であった
。即ち前述した如〈従来はEIT処理ハンドラを起動す
る際、データ処理装置によって予め定まった内部状態の
もとてしか行うことができず、プログラム作成者にとっ
て1つのプログラム作成上の制約となっていた。また、
プログラム作成者はEIT処理ハンドラ起動時のデータ
処理装置の内部状態を十分認識しなければならず、場合
によっては内部状態変数を自ら設定し直す必要もあり、
処理が煩雑であ)た。 本発明におけるデータ処理装置は上記のような問題を解
決すべくなされたものであって、EIT処理が起動され
て外部の記憶装置よりεIT処理ハンドラの先頭アドレ
スを読み込むとき、同時に通常PSWに格納されている
データ処理装置の内部状態変数のいくつかも読み込むよ
うにし、それらの情報をもとにEIT処理ハンドラ起動
時のデータ処理装置の内部状態を設定できるようにし、
また、同時に複数のEIT処理要求が発生した場合、E
IT処理の内容を判断し、その処理の優先度にもとづく
処理順序を決定する多重EIT処理手段を備えると共に
1つのEIT処理ハンドラから復帰した時、その後のE
IT処理受11条件を特別扱いする手段を持たせるよう
にして、プログラム作成を容易にしたデータ処理装置を
提供することを目的とする。 [問題点を解決するための手段] 本発明に係るデータ処理装置は、 複数の命令からなるプログラムを処理するデータ処理装
置において、各命令処理の境界で、その外部から割り込
み要求信号を受けて割り込み処理を検出する手段と、 命令の例外事象を検出する手段と、 内部割り込み命令の実行であるトラップ処理を検出する
手段とを備え、 上記3種類の処理のいずれか1つに分類される複数のE
IT処理がそれぞれ固有の優先度及び処理方法を持ち、 上記優先度に応じて検出されたEITのうちいずれのE
IT処理を起動するかを選択する手段と、上記選択され
たEIT処理が起動された時点の状態であり、EIT処
理起動時に書換えス]象となる第1の情報群を含む内部
状態を外部の記憶装置に格納する手段と、 上記選択されたEIT処理に夕・1応する一連の処理を
実行すべきEIT処理ハンドラの先頭番地が格納されて
いる上記外部記憶装置の番地を上記選択されたEIT処
理各々について1 ′i!J1に生成する手段とを有し
、 更に上記生成された外部記憶装置の番地に、上記EIT
処理ハンドラの先頭番地とともに上記EIT処理ハンド
ラの実行開始時の新たな内部状態の一部又は全部となる
べき候補である第2の情報群を、上記選択されたEIT
処理の一部又は全部の各々について1対1に格納してあ
ることを特徴とする。 [作用コ 本発明におけるデータ処理装置ではEIT処理ハンドラ
の先頭アドレスと共にデータ処理装置の内部状態変数も
外部の記憶装置から読み込むことができるので、各EI
T処理に対してプログラム作成者はあらかじめEIT処
理ハンドラの先頭アドレスと共に各EIT処理を行うと
きのデータ処理装置の内部状態変数を1対1に書き込ん
でおくことによって各EIT処理個別にデータ処理装置
の内部状態等をプログラムすることができる。またこの
内部状態変数がEIT処理ハンドラの先頭アドレスと隣
接する位置にあり、EIT処理時に自動的に読み込まれ
るので、EIT処理のたびに内部状態変数を古き換える
指定をプログラム作成者は個々にする必要がない。また
この機能により格納する内部状態変数の中にEIT処理
の優先度の指定情報を含めておくことにより多重にEI
T処理が発生したようなとき、優先度の高いEIT処理
によって優先度の低いEIT処理の起動を禁止すること
ができる。上記のようにプログラム作成者にとって容易
に幅広い処理の指定をすることができる。また、EIT
処理後にEIT処理の検出処理を特別扱いする機能をイ
11^えることによって、例外処理によりシングルステ
ップ実行をするようなとき、同−EIT処理が繰り返し
て発生し、命令の実行が進まないような状態を回避する
ことができる。 [実施例コ 第389図に本発明の一実施例であるデータ処理装置に
おけるEIT処理起動方法のフローチャー1・を示ず。 まず1001でEIT処理の要求が受は付けられると、
1002で受は付けられたEIT処理の内容に応じてE
ITベクトル番号が生成され、そのEITベクトル番号
を8倍した値にEIT処理ハンドラが格納されているE
ITテーブルの糸底アドレス(1α(EITVTR)を
加えて、EIT処理ハンドラの先頭アドレスおよびPS
Wの一部(以後EITVTEと記す)が格納されている
外部記憶装置のアドレスが生成される。1003でその
アドレスのデータであるEITVTEが読み込まれ、1
004でEIT処理発生時のp s’wの値と一部比較
され更新される。更新されたPSWの値で指定されたデ
ータ処理装置の内部状態のもとで、プロセッサ情報のス
タック退避(1005)とEIT処理ハンドラの起動(
1006)が行われる。 第390図に本発明の一実施例であるE I TVTE
のフォーマットを示す。第390図で示ずEITVTE
は8バイト構成になっており、そのうち4バイトがEI
T処理ハンドラの先頭アドレスであるvPC(1025
)の値を、2バイトがpswの一部を指定するようにな
っており、残りの2バイトは自由度と拡張性を考慮して
あけである。図1003においてVS (1020)は
EIT処理ハンドラ起動時のスタックポインタ使用モー
ドの指定用の1ビツトのデータ、VA(1021)はE
IT処理ハンドラ起動時のコンテキストのデータサイズ
が32ビツトか64ビツトかを示す1ビツトのデータ、
VAT (1022)はεIT処理ハンドラ起動時のア
ドレス変換モードの指定を示す2ビツトのデータ、VD
(1023)はEIT処理ハンドラ起動時のデバッグ
モードの有無を示す1ビツトのデータ、V IMASK
(1024) はEIT処理ハンドラ起動時の割り込
み受付レベルの指定を行う4ビツトのデータである。 EIT処理起動時にPS%I!中のこれら5つのフィー
ルドが更新可能である。またこれらのフィールドは単純
に更新するのではなく、一部のフィールドではEITV
TE中の値とEIT検出時の値を比較してから更新する
かどうかを判断することもできる。例えば、割り込み受
付レベル指定フィールドは、外部割り込み以外の時はE
I TVTE中の値と更新前の値のレベルが高い(値
が小さい)方が新しい値となり、外部割り込みでは発生
した外部割り込みの優先度とEITVTE中のレベルが
高い(値が小さい)方が新しい値となる。 第391図に本発明のデータ処理装置においてEIT処
理が起動されたときスタックポインタの指す外部記憶装
置に退避されるデータ処理装置の内部状態を示す情報群
の一実施例を示したものである。 図中1026はEIT処理が起動された時点のデータ処
理装置のPSW、1027はEIT処理の種類に応じた
スタックフォーマットの種類を示す1バイトのデータ、
1028はEIT処理の種類を示す1バイトのデータ、
1029はEITベクトル番号を示すlOビットのデー
タ、1030はEIT処理が起動された時点のデータ処
理装置のPCの値を格納する4バイトの領域、1031
はEIT処理の種類に応じたいろいろな追加情報を格納
する数バイトの領域をそれぞれ示す。 第392図に本発明の一実施例であるデータ処理装置に
おけるEIT処理の種類に応じたスタックフォーマット
を示す。図中1032はフォーマット0の、1033は
フォーマットlの、1034はフォーマット2の、10
35はフォーマット3のそれぞれEIT処理におけるス
タックフォーマットを示す0本実施例では各スタックフ
ォーマットにおいて追加情報の内容が異なフている。 第393図に本発明の一実施例であるデータ処理装置に
おいて多重EIT処理を行ったときに更新される内部状
態変数と形成されるスタックフレームを示、したもので
ある。第393図においては内部割り込み命令であるト
ラップ命令(TRAP)と外部割り込み要求りEl)が
多重に発生した例を示す。第393図の例におけるデー
タ処理装置ではトラップ命令の方が外部割り込み要求よ
りも優先度の高いEIT処理なので、まずトラップ命令
に対するEIT処理を起動し、その後外部割り込みに対
するEIT処理を起動する。従って上記多重EIT処理
受付後、1036のPCには外部割り込みに対するEI
T処理ハンドラの先頭アドレスが取り込まれ、1037
のPSWには外部割り込み処理において取り込まれるE
ITVTEによって比較、更新された値が古き込まれる
。また、上記多重EIT処理によって形成されるスタッ
クフレームについて最初に格納される内容、すなわち高
いアドレスのほうに格納される内容から説明していく。 まず、1044にはトラップ命令が発生した時点のPC
値(EXPC)を、1043にはトラップ命令の次の命
令のP Cf+Wを、1042にはトラップ命令の図1
004に示ず1027.1028.1029に相当する
EIT処理情報を、1041にはトラップ命令実行前の
PSWのあたいを、1040にはトラップ命令に対する
EIT処理ハンドラの先頭アドレスを、1039には外
部割り込みのEIT処理情報を、1038にはトラップ
命令のEITVTEによって比較、設定されたP S
’vVの値をそれぞれ格納していく。上記のように格納
することによって、EIT処理ハンドラが起動されたと
き、まず外部割り込みに対するEIT処理ハンドラがつ
いでそのスタックフレームの情報からトラップ命令に対
するEIT処理ハンドらが起動され、多ffi E I
Tが処理できる。 以下本発明のさらに詳しい実施例であるデータ処理につ
いて説明する。説明は長大であるので目次を付し、また
詳細な説明を必要とする部分は、付録の形で記載した。 EITに関することは特に付録9で多く述べられている
。 目次 1、本発明装置の特徴 1−1.基本設計思想 1−2.05向きアーキテクチャ 1−3.チューニングされた命令セット1−4.コンパ
イラ向きの命令セット 2、本発明装置32と本発明装置64 3、本発明装置仕様のクラス分け 4、レジスタセット 5、データタイプ 5−1.ビット 5−2.ビットフィールド 5−3.整数 5−4.浮動小数 5−5.10進数 5−6.ストリング 5−7.キュー 6、命令フォーマット 6−1.2オペランド短縮形 6−1−1.レジスターメモリ間 (S−format、L−format)6−1−2.
レジスターレジスタ間 (R−format) 6−1−3.リテラル−メモリ間(Q−format)
6−1−4.イミディエート−メモリ間(1−form
at) 6−2.1オペランド−船形(Gl−format)6
−3.2オペランド−船形 6−3−1.第一オペランドはメモリ読みだしくG−f
ormat) 6−3−2.第一オペランドは8ビツトイミデイエート
(E−format) 6−3−3.第一オペランドはアドレス計算(GA−f
ormat) 6−3−4.その他の2オペランド命令6−4.ショー
トブランチ 6−5.その他 7、アドレッシングモード ?−1,Pビット 7−2.フォーマット中で使われる記号7−3.レジス
タ直接 7−4.レジスタ間接 7−5.レジスタ相対間接 7−6、イミディエート 7−7.7ブソリユート ?−8,PC相対間接 7−9.スタックポツプ ?−10,スタックブツシュ ?−11.レジスタ相対付加モード ?−12,PC相対付加モード ?−13,絶対付加モード ?−14,FP相対間接 ?−15,SP相対間接 ?−16.付加モードのフォーマット ?−17.付加モード仕様のレベル 8、インプリメント関連事項 8−1.仮想記憶のサポート 8−2.プログラムによる命令の書き換え9、 EI
T処理 10、PSWの構成 10−1.PSSの構成 10−2.PS)lの構成 10−3.フラグの変化 11、命令セットの記述について 11−1.記述形式の概要 11−2.命令ビットパターンとアセンブラ表記 11−3.フィールド名 11−4.オペランドフィールド名 11−5.アドレッシングモードに関する制限 11−6.解説に関する注意 12、本発明装置の命令セット 12−1.データ転送命令 12−2.比較、テスト命令 12−3.算術演算命令 12−4.論理演算命令 12−5.シフト命令 12−6.ビット操作命令 12−7.固定長ビットフィールド操作命令12−8.
任意長ビットフィールド操作命令12−9.10進演算
命令 12−10.ストリング命令 12−11.キュー命令 12−12.ジャンプ命令 12−13.マルチ、プロセッサ用の命令12−14.
制御空間、物理空間操作命令12−15.O5関連命令 12−16.MMU関運命運 命令10本発明装置命令セットレファレンス付録20本
発明装置のアセンブラ表記について 付録31本発明装置メモリ管管理式概要付録40本発明
装置のフラグ変化 付録5.異種サイズ間の演算について 付録6.高級言語向きサブルーチンコール付録7.制御
レジスタと制御空間 付録80本発明装置のCTXB 付録90本発明装置のEIT処理 付録10.本発明装置の命令セットパターン付録11.
高機能命令の詳細仕様と終了時のレジスタ値 付録12.オペランドが干渉した場合の動作付録13.
キャッシュやTLBの整合性確保1、Hの 1−1.ぜ甲 ・本発明装置はRISCではない。基本命令の高速実行
を第一目標とし、さらに高機能命令を追加した。 ・32ビツト版の本発明装置32と64ビツト版の本発
明装置64を同時に設計し、32ビツト版と64ビツト
版のチップをシリーズ化した。したがって、64ビツト
デ −タ、64ビツトアドレツシングへの拡張が始めか
ら考慮されている。 −O5と込みで開発し、リアルタイムO5であるlTR
0N(Industorial−TRON)とワークス
テーション用のO5であるBTRON(Bus i n
ess−TRON)を高速で実行することを目脂した。 本発明装置はTR0N<<LIR>>仕様を満たし、特
に実記憶環境での高速処理に重点を置く。 ・将来のASICLSIの核となるマイクロプロセッサ
とする。 1−2. O5a −” ・ビットマツプ操作サポート命令 BTRONで必要となるビットマツプの移動、演算を行
なう命令 φコンテキストスイッチ命令 lTR0Mにおいて高速のタスク切り替えを行なうため
の命令 ・キュー操作命令 lTR0Nのレディキュー、ウェイトキューの操作を行
なう命令 ・2レベルのリング保護によるメモリ管理(将来の拡張
用にさらに2レベルのリングを用意している。) 1−3. ユーニン たa”セ・・・頻度の高
い命令、アドレッシングモードが短い命令となるように
チューニング レジスタ間演算、リテラル演算の命令 長を短縮 1−4.コゝパ −a のロ セ%1 ・直交化された命令セット ・データの保持、アドレスの保持、インデクス値の保持
といった各種の目的に使用できる16本の汎用レジスタ ・強力なアドレッシングモード 付加モードにより、任意段数のインデクス加算と間接参
照が可能。 ・異なるデータサイズ間での演算が可能ソースオペラン
ドとデスティネーションオペランドのサイズを別々に指
定可能。 ・高級言語向きの高機能ジャンプ命令 2、+1”J−32と H64 本発明装置では、32ビツト版の本発明装置32と64
ビツト版の本発明装置64をシリーズ化して扱フており
、64ビツト版への拡張が始めから考慮されているのが
大きな特徴である。本発明装装置64では、64ビツト
のリニアアドレスの空間が提供される。 また、本発明装置64では、本発明装置32で扱うデー
タタイプに加えて、64ビツト整数を扱うことができる
。 本発明装置64での32ビット/64ビット切り替え方
法は次のようになっている。 ・オペランドのデータサイズについて 各命令、各オペランド毎に存在するサイズ指定ビットに
より、命令単位、オペランド単位で32ビツト764ビ
ツトを選択する。データサイズの場合は、32ビツト、
64ビツトのほかに8ビツト、16ビツトも利用できる
ので、4つのサイズの選択を2ビツトのフィールドで指
定する。 本発明装置32では、64とットデータを扱ゎず、64
ビツトのデータサイズを指定した命令はエラーとする。 φポインタのサイズについて 通常は本発明装置32で32ビツトポインタ、本発明装
置64で64ビツトポインタを使用するが、本発明装置
64で本発明装置32用のオブジェクトコードを実行す
るため、本発明装置64にはポインタサイズを32ビツ
トにするモードを設ける。このモードはPSW中で指定
されるので、コンテキスト(プロセスやタスク)単位で
32ビツト用のプログラムと64ビツト用のプログラム
を混在させることは可能である。 このほか、64ビツトアドレツシングを行なうための拡
張用ビットとして、メモリアクセスを伴なうオペランド
毎に「Pビット」と呼ばれる予約ビットが設けられてい
る。 ポインタサイズの32ビット764ビット切り替えを命
令単位とせず、モードにしたのは、次のような理由によ
る。 ポインタの場合、異種のサイズのものを混在させること
は本質的に無理がある。というのは、ポインタというの
は場所を区別するものであるため、一つでも64ビツト
のものがあれば、全体を64ビツトのポインタにしない
と区別できないからである。 したがって、32ビツトポインタと64ビツトポインタ
を命令毎に切り替え、混在できるようにしたとしても、
大部分はコンテキスト単位で同じ指定を繰り返すだけに
なり、ビット割り当てとしては効率の悪いものになる。 そのような状況では、モードの方が適当である。 モードを便りで32/84を切り替える場合、モードを
いつ設定するか、本発明装置32と本発明装置64の互
換性が大丈夫かといった疑問が生ずるかもしれない。し
かし、デフォルトが32ビツトポインタとなるようにし
ておき、64ビツトアドレスを使用する時にモード変更
するという形態にすれば、本発明装置64でも本発明装
置32用のプログラムをそのまま走らせることができる
。また、32ビツトポインタと64ビツトポインタの切
り替えをモードではなく命令単位にしたとしても、O5
がスタックをどこに設定するか、システムコールのパラ
メータが32ビツト764ビツトのどちらか、といった
ことを判断するために、O5は各コンテキストが32ビ
ツトか64ビツトかということを認識しておく必要があ
る。 その場合には、 (スタックに退避された) psw中
のモードを見て32ビツト/64ビツトを判断できる方
が便利なことがある。 3、El の−ζ 本発明装置では、64ビツト版への拡張、シリーズ化、
多様な用途への適応、などといった要求に対応するため
、インプリメントするかどうかオプションとなっている
機能がある。このような「オプション機能」の位置付け
を明確にするため、本発明装置の仕様を次のようにクラ
ス分けする。 <(Log>仕様(Level O)本発明装置とし
て必ず満たさなければならない仕様である。 <<IQ>>仕様の例は、ユーザプログラムから見たプ
ログラミングモデル(ISPの大部分、汎用レジスタ、
PSH)、機械語のビットパターンなどである。 仕様書中では、特に何も書いてない部分が<<シQ>>
仕様となる。 <<Ll>>仕様(Level 1)インプリメント
しておくのが原則であるが、特に用途の限定された軽い
仕様のプロセッサを作りたい場合には、必ずしもインプ
リメントしなくてもよい仕様である。 <<Ll>>仕様になるのは、ストリング命令、付加モ
ード、キュー操作命令、ビットマップ命令といった高機
能命令などであるが具体的にどの命令を<<Ll>>仕
様とするかは別に定める。 <<LIR>>仕様(Level I Real)
<<Ll>>仕様から命令再実行間係の機能とMMU間
係の機能を削除した仕様であり、lTR0NとμBTR
ONなどを実記憶ベースで効率よく動かすための仕様で
ある。 <<LIR>>の命令セットは<cll>>とほぼ同じ
であり、コンパイラやユーザプログラムは共通に使用で
きるようにする。ただし、MMU間係(MOVPAなど
)、O5間係(JRNGなと)の一部の命令については
、サポートしないものがある。 <<L2>>仕様(Level 2)将来のハードウ
ェア量の増加にしたがって導入される予定の仕様である
。 命令の対称性を高めるための仕様と、演算の高速化に対
応して新たに追加する命令の仕様とがある。 前者の例としてはBVSC)I命令の2/B’オプシヨ
ン、ストリング命令での複雑な終了条件、無限段数の付
加モードなどがあり、後者の例としてはINDEX命令
などがある。 仕様書中では、<<L2>>仕様の部分を<<L2>>
て示す。 <<LX>>仕様(eXtension)本発明装置6
4への拡張にしたがフて導入される予定の仕様である。 L2仕様と同様の意味を持つが、本発明装置64への対
応ということで別のクラスとして扱う。 <<(、x>>仕様の例は、64ビツト演算命令などで
ある。 仕様書中では、<<LX>>仕様の部分を<<LX>>
で示す。 <<LU>>仕様(Undefined)将来の拡張に
よって導入される予定の仕様であるが、現段階ではまだ
具体的な仕様まで提示されていないものである。 <<1v>>仕様(Variable)各メーカーが全
く自由に仕様を決めてよい部分である。 チップのビン配置、パイプラインの段階や性能に関する
仕様、各メーカーに割り当てられた命令のビットパター
ン、制御レジスタの使い方などが<<Lv>>仕様の例
である。 このうち、各メーカーに割り当てられた命令ビットパタ
ーンについては、ビットパターンのレファレンス中でL
Vreservedにより示されている。 <<LA>>仕様(Alternative)本発明装
置としての標準仕様が提示されている(あるいは、提示
される予定がある)が、他にやむを得ない理由があれば
変更してもよいという仕様である。もちろん、仕様を変
更した部分に間しては互換性の失われる場合がある。<
<LA>>仕様は、TR0Nとしての互換性を保証しな
い仕様である。 <<LA>>仕様の例は、メモリ管理方式、制御レジス
タと特権命令の一部などであり、主にO5の関係する部
分である。 本発明装置はMMUを内蔵せず、特に実記憶環境での高
速処理を目指す。従フてメモリ管理に関する<<LA>
>仕様の大部分は本発明装置でサポートされない。 4、レジ セt1 ・本発明装置32では32ビツト長の汎用レジスタが1
6本、本発明装置64では64ビツト長の汎用レジスタ
が16本存在する。 争スタ・ンクポインタ(Stack Po1nter
−SP)、フレームポインタ(Frame Po1nt
er −FP)は汎用レジスタに含まれる。SPは
R15、FPはR14となる。 −プログラムカウンタ(Program Counte
r −PC)は汎用レジスタに含まれない。 ・汎用レジスタは、データ保持、ベースアドレス保持、
あるいはインデクス レジスタとして、各種の目的に使
用できる。 ・プロセッサの状態を保持するレジスタ(Proces
sor 5tatus Word −PSW)を持つ。 第1図は、本発明装置64の場合<<LX>>のレジス
タセットを示す。 ・SPはコンテキスト(リング番号、割り込み処理中)
に応じて切り替わる。 ・PS繋よ4バイトからなる。下位第一バイトがステー
タスの表示(Processor 5tatus By
te −PSB)、下位第二バイトがユーザのモード設
定(PSBと合わせてProcessor 5tatu
s Halfword −PSH)% 上位の2バイ
トがシステムの状態表示用、となる。 ・本発明装置はいわゆるbig−endianのチップ
であり、レジスタ上のデータについては、8ビツト、1
6ビツトのデータをLSB側に詰めて配置する。したが
って、データサイズとは無関係な絶対的なビット番号を
定義することができない。ビット番号を議論する場合に
は、必ずデータサイズと組にして扱う必要がある。これ
を「ビット位置」と呼ぶ。 ・レジスタ上の8ビツトデータに対しては、ビット位置
はMSB側から0.1.、、.7と付けられる。また、
レジスタ上の16ビツトデータに対しては、ビット位置
はMSB側から0.1.、、.15と付けられ、レジス
タ上の32ビツトデータに対しては、ビット位置はMS
B側から0.1.、、.31と付けられる。したがって
、8ビツトデータのビット位置70ビツト、16ビツト
データのビット位置150ビツト、32とットデータの
ビット位置310ビツトが物理的には同一のビットとな
る。 ・レジスタをデスティネーションオペランドとする命令
において、レジスタ側のデータサイズが8ビツト、16
ビツトであった場合には、上位バイトは影響を受けず、
無変化となる。これは、メモリ上で演算を行なフた場合
の仕様と合わせたものである。上位ビットにまで影響を
与えたい場合は、異種サイズ間の演算を利用する。 c例コ MOV #)l’12345678.RO,WM
OV #)l’aa、Ro、8RO=H’ 12
3456aaとなる。 ・レジスタ上に8ビツト、16ビツトのデータを置く場
合には、LSB側に詰められるので、例えば、MOV、
W #l(’12345678. RONOV、B
#H’aa、 RO NOV、W RO,R1 の結果はR1=H’123456aaとなる。一方、メ
モリに対して同じことを行な)た場合 NOV、W #H’12345678. @RONO
V、B #H’aa、 @RO M0V、W @RO,R1 には、8ビツト、16ビツトのデータのMSB側が揃う
ことになるので、RI=H’aa345878となる。 レジスタ上とメモリ上で結果が異なるので、注意が必要
である。 旦、j〉2L乞Lブ 本発明装置では、いわゆるbig−endjanを採用
している。すなわち、バイトアドレスの指定、ビット番
号の指定とも、小さい番号(アドレス)の方がMSB(
Most 51gn1ficant Bit/Byte
)となっている。 big−endianでは、メモリ上のあるデータにつ
いて、それを8ビツトデータとして見る時と16(32
)とットデータとして見る時のアドレスが異なってくる
ため、注意が必要である。例えば、address:
N N+I N+2 N+3data
: 0 0 0 H’12といった
場合に、32ビツトデータとしてのアドレスHの内容は
H’00000012であるが、 (H’は16進を表
わす)、同じ内容のデータを8ビツトデータとして扱う
ときは、アドレスN+3を参照しなければならない。 ただし、レジスタ上のデータに関しては、8ビツトデー
タ、16ビツトデータカ几SB側に詰めて配置されるた
め、レジスタ上に置かれたデータを、そのまま別のサイ
ズのデータとして扱うことができる。例えば、 MOV #O,RO,W MOV #)l’12.Ro、8 間V RO,讐、R1,讐 の結果はR1=H’0OO00012となる。(命令の
意味については本文参照) 一方、メモリに対して同じことを行なった場合MOV
#O,@RO,W 間V #H’12.@RO,B MOV @RO,W、R1,W には、8ビツトデータH′12と32とットデータのM
SB側が揃うことになるので、R1=H’120000
00となる。 本発明装置でサポートしているデータタイプを以下に説
明する。 正二上、旦ユ上 第2図のように太線内が対象ビットである。 メモリ上のビット操作の場合、offsetは任意レジ
スタ上のビット操作の場合、offsetは一つのレジ
スタ内に限定 (offsetの上位ビットを無視する)ビットの指定
は、base−addressの指定、base−ad
d ressのサイズの指定、offsetの指定の組
によって行なわれる。 メモリ上のビットを対象とした場合には、base−a
ddressで示されるメモリアドレスのMSBがof
fset=0のビットとなる。この時、base−ad
d ressのサイズの指定は、実際に操作されるビッ
トには影響しない。ビット操作命令では、メモリに対し
てread−modify−writeを行なうアクセ
スサイズを指定するためにtrase−address
のサイズの指定が利用されるが、アクセスサイズが異な
っても実際に操作されるビットは同じである。 一方、レジスタ上のビットを対象とした場合には、ba
se−addressのサイズとして指定されたデータ
サイズでのMSBがoffset=oのビットとなる。 base addressのサイズが異なれば、実際に
操作されるビットも異なったものになるので、注意が必
要である。 5−2.ビ〜・ −ル′ ・符号付きビットフィールド 第3図に示すように太線内が対象ビットフィールドであ
る。 0 < Width ≦ 32 (<<LX>
> O< width ≦S:符号ビット base−addressのMSBから、対象ビットフ
ィールドのMSB (符号ビット)までのビットの隔た
りがoffsetとなる。 8F:G命令によるメモリ上のビットフィールド操作の
場合、offsetは任意。 8F:E命令によるメモリ上のビットフィールド操作、
およびレジスタ上のビットフィールド操作の場合5ba
se−addressの1ワード(10ングワード)を
はみ出した部分のビットフィールドについて、動作を保
証しない。 ・符号なしビットフィールド 第4図に示すように太線内が対象ビットフィールドであ
る。 0 < width ≦ 32 (<<LX>
> O< width ≦base−addre
ssのMSBから、対象ビットフィールドのMSBまで
のビットの隔たりがoffsetとなる。 BF:G命令によるメモリ上のビットフィールド操作の
場合、offsetは任意。 8F:E命令によるメモリ上のビットフィールド操作、
およびレジスタ上のビットフィールド操作の場合、ba
se−addressの1ワード(10ングワード)を
はみ出した部分のビットフィールドについて、動作を保
証しない。 ・任意長ビットフィールド offset、 widthとも任意。ただしwidt
h > 0゜旦二旦工且致 第5図に整数のデータタイプを示す。 旦二生工1丈座玉 浮動小数点の演算は、コプロセッサで扱う。 浮動小数点の形式はl EEE規格である。詳細は別に
定める。 ・単精度32ビツト浮動小数 くくコプロセッサ〉〉 ・倍精度64ビツト浮動小数 くくコプロセッサ〉〉 ・80ビツト浮動小数 〈くコプロセッサ〉〉 反二旦、迎這激 多倍長の10進数の四則演算は、コプロセッサで扱う。 本発明装置のメインプロセッサでは、以下に示すような
固定長の符号なしPACKED形式lO進形式l上進数
号付きPACにEO形式10進数を扱う。ただし、符号
付きPACKED形式lO進形式l上進数は、すべて<
<L2>>である。第6図にデータタイプをしめす。 5−8. 1− 第7図にストリングの場合のデータタイプを示す。 旦二1よ−LL二 第8図にダブルリンクでつながれた線形リストのデータ
タイプを示す。 6.1+1 −マ・・ 命令は16ビツト単位で可変長となフており、奇数バイ
ト長の命令はない。 2オペランド命令には、大きくわけて、4バイト+拡張
部の構成をもち、すべてのアドレッシングモード(Ea
)が利用できる一般形、および頻度の高い命令とアドレ
ッシングモード(Sh)のみを使用できる短縮形、02
つのフォーマットがある。必要となる命令機能とコード
サイズに合わせて、より適した方を選択することができ
る。 本発明装置の命令フォーマットは、細かい点まで気をつ
ければかなり多くの種類に分かれる。しかし、理解を容
易にするため、ここでは本発明装置の命令フォーマット
を大まかに分類して説明を行なう。命令フォーマットの
詳細については、付録10を参照のこと。 フォーマット中に現われる記号の意味は次の通りである
。 オペコードの入る部分 # リテラル、またはイミディエート値の入る部分 Ea 8ビツトで指定する一般形のアドレッシングモ
ード Sh 6ビツトで指定する短縮形のアドレッシングモ
ード Rn レジスタの指定を行なう部分 フォーマットの記述は、右側がLSB側で、かつ高いア
ドレスになフている。(big−endian)フォー
マットの記述例を第9図に示す。 アドレスNとアドレスN+1の2バイトを見ないと命令
フォーマットが判別できないようになっているが、これ
は、命令が必ず16ビツト(2バイト)単位でフェッチ
、デコードされることを前提としたためである。 いずれのフォーマットの場合も、各オペランドのEaま
たはShの拡張部は、必ずそのEaまたはshの基本部
を含むハーフワードの直後に置かれる。これは、命令に
より暗黙に指定されるイミディエートデータや、命令の
拡張部に優先する。したがって、4バイト以上の命令で
は、Eaの拡張部によって命令のオペコードが分断され
る場合がある。 また、付加モードなどによって、Eaの拡張部にさらに
拡張部が付く場合にも、次の命令オペコードよりもそち
らの方が優先される。 例えば、第一ハーフワードにEatを含み、第二ハーフ
ワードにEa2を含み、第三ハーフワードまである6バ
イト命令の場合を考える。Ealに付加モードを使用し
たため、普通の拡張部のほかに付加モード拡張部もつく
ものとする。 この時、実際の命令ビットパターンは 命令の第一ハーフワード (Ealの基本部を含む) Eatの拡張部 Ealの付加モード拡張部 命令の第二ハーフワード (Ea2の基本部を含む) Eatの拡張部 命令の第三ハーフワード の順となる。 なお、アライメントの関係で16ビツトのフィールドの
うちの8ビツトのみを使用するケースでは、使用する8
ビツトは下位順(アドレスの大きい方)に詰めて置かれ
るものとする。 これに該当するのは、オペランドサイズが8ビツトで、
EaR,ShRに#imm−dataのモードを指定し
た場合、I−formatでオペランドサイズが8ビツ
トの場合、8RA:G、Bcc:G、BSR:Gで5S
=00の場合、などである。
」例えば、 MOV:1.B 1tH’12. @ROjの場合、第
一バイトがMOV:1.Bのオペコード、第二バイトが
オペコードの一部とShW<@RO)の指定、第三バイ
トは0、第四バイトがH′12となり、ビットパターン
は第1O図のようになる。 この場合、16ビツトのフィールドの上位側(アドレス
の小さい方)の8ビツトには必ず0を入れておかなけれ
ばならない。上位8ビツトがOでない場合は、これによ
って表現されるデータがインプリメント依、存の不定値
になるものとする。つまり、l−format、#im
m−dataモードの場合はそのオペランドがインプリ
メント依存の値になり、BRA:G、Bee:G、BS
R:G命令の場合は、ジャンプ先が不定となる。いずれ
の場合も、EIT (、例外)とはしない。 3−1.2オペーン゛−乏 3−1− 、しぐ − モi 。 −or at −fo m 第11図にその例を示す。 L−format、S−formatの命令には、サイ
ズ指定のできるも(7)(MOV:L、MOV:S、C
MP:L)とサイズ指定のできないもの(ADD:L、
Sue:L)がある。 サイズ指定のできる命令では、RR等によるサイズ指定
はメモリ側のみに適用され、レジスタ側のサイズは32
ビツト固定となっている。 レジスタ側とメモリ側のサイズが異なる場合には、ソー
ス側のサイズが小さい場合に符号拡張が、デスティネー
ション側のサイズが小さい場合に上位バイトのカットと
オーバーフローのチエツクが行なわれる。 一方、サイズ指定のできないADD:L、Sue:L命
令では、レジスタ側、メモリ側のオペランドサイズとも
32ビツト固定である。 レジスタ側のサイズを32ビツト固定としたのは、本発
明装置において、 「レジスタ上のデータは、できる限
り32ビット符号付き整数として扱う」という原則を設
けているためである。この原則は、L−format、
S−format命令のほか、ビットフィールド命令や
高機能命令でレジスタ上にオペランドを置く場合にも適
用される。 6−1−2. レジ −レジ βR−forlT
Iat第12図にその例を示す。 6−1−3.1−−ルー モ’ n Q−format
第13図にその例を示す。 第14図にその例を示す。 1−formatのイミディエート値のサイズは、デス
ティネーション側のオペランドのサイズと共通に8.1
6,32.64ビツトとなり、ゼロ拡張、符号拡張は行
なわれない。 6−2.1オペーン゛−’ Gl−format第15
図にその例を示す。 6−3.2 ペー゛−I ここに含まれるのは、8ビツトで指定する一船形アドレ
ッシングモードのオペランドが2つ存在する命令である
。オペランドの総数は3つ以上になる場合がある。 第16図にその例を示す。 6−3−2. − ベーン゛は8ビ・・ ミー盈二]
工肚り田啄り 第17図にその例を示す。 このフォーマットとイミディエート−メモリ間のフォー
マツ) (1−format)とは機能的には似たもの
であるが、考え方の点では大きく違っている。E−fo
rmatはあくまでも2オペランド−船形(G−for
mat)の派生形であり、ソースオペランドのサイズが
8ビツト固定、ディスティネーションオペランドのサイ
ズが8/IS/32/64ビツトから遍択となっている
。つまり、異種サイズ間の演算を前提とし、destの
サイズに合わせて8ビツトのsrcがゼロ拡張または符
号拡張される。 一方、I−formatは、特にNOV、CMPで頻度
の多いイミディエートのパターンを短縮形にしたもので
あり、ソースとディスティネーションのサイズは等しい
。 包と違旧阻Ω 第18図にその例を示す。 6−3−4.その の2 ベーン′。Δ第19図にその
例を示す。 6−4.ぐヨー −゛ 第20図にその例を示す。 旦二旦ヨ土少犯 以上の外に第21図に示すようなものがある。 7、゛し・・シン モー゛ 本発明装置のアドレッシングモードには、レジスタを含
めて6ビツトで指定する短縮形(Sh)と、8ビツトで
指定する一般形(Ea)がある。 未定義のアドレッシングモードを指定した場合や、意味
的に考えて明らかにおかしなアドレッシングモードの組
み合わせを指定した場合には、未定義命令を実行した場
合と同じく予約命令例外(RIE)を発生し、例外処理
を起動する。 これに該当するのは、destinationがイミデ
ィエートモードの場合、アドレス計算の命令でイミディ
エートモードを使用した場合などである。 ヱニニLユ」二にシLE 本発明装置では、毎回のメモリアクセスに対応して1ビ
ツトのオプション機能指定ビットを割り当てることがで
きるようになっており、このビットをPビットと呼ぶ。 Pビットは、メモリアクセスに伴って何らかの別の意味
を加えたい場合に使用するビットである。 Pビットは、毎回のメモリアクセス毎に独立に指定する
。したがって、レジスタ間接アドレッシング、アブソリ
ュートアドレッシングなどの場合はオペランドに対応し
て一つのPビットを指定するが、付加モードを使用した
多段間接のアドレッシングモードでは、その段数分だけ
のPビットを指定することになる。 Pビットの用途としては、タグのチエツク、論理空間の
切り替え、32ビツトアドレツシングと64ビツトアド
レツシングの切り替えなどがあるが、これらはすべて将
来の拡張用であり、現在の仕様ではPビットはrese
rVedとなっている。 命令フォーマットの説明では、Pビットの部分をlpl
で表示しであるが、ここは必ず0にしておかなければな
らない。PビットがOになっていなかった場合には、予
約命令例外(RIE)、が発生する。 Pビットに関する機能は<<LU>>仕様である。 7−2. −マ・・ −わ 雪 0Rn
レジスタ指定 PPビット(0でなければならない) mem[:EAI EAて示されるアドレスのメモリ内
容以下点線で囲まれた部分は、拡張部を示す。 7−3.しゆ 官 アセンブラ表記: n オペランド: n フォーマット: 第22図に示す。 7−4.レジ 。 アセンブラ表記: @Rn オペランド: mem[Rnコ フォーマット: 第23図に示す。 7−6、し9 ・μ アセンブラ表記: オペランド: mem[disp + Rnn コツオーマット 第24図に示す。 なおdispは符号付きとして扱う。 7−6、 ミ′ ニー アセンブラ表記: #imm−data オペランド: imm−data フォーマット: 第25図に示す。 なおimm−dataのサイズは、オペランドサイズと
して命令中で指定される。 7−7、 〜τユニ ーセンブラ表記: @abs @abs:16 @abs:32 @abs:64 <<LX>>オペランド: mem[abs] フォーマット: 第26図に示す。 なお32ビツトアドレツシングの時は、abs :16
で指定したアドレスは32ビツトに符号拡張される。ま
た、64ビツトアドレツシングの時は、abs:16.
abs:32で指定したアドレスは64ビツトに符号拡
張される。 7−8. PC・。 アセンブラ表記: @(dJsp、 pc) @(dJsp:18.PC) @(disp:32.PC) オペランド: mem[disp + PC] フォーマット: 第27図に示す。 PC相対間接モードにおいて参照されるPCの値は、そ
のオペランドを含む命令の先頭アドレスである。したが
って、例えば無限ループはJMP @(0,PC) という命令によって実現される。 付加モードにおいてPCの値が参照される場合にも、同
じように命令先頭のアドレスをPC相対の基準値として
使用する。 7−、 ・ 、−・ アセンブラ表記: @SP+ オペランド: mem[SP] SPをインクリメント フォーマット: 第28図に示す。 9SP+のモードでは、オペランドサイズだけSPをイ
ンクリメントする。例えば、本発明装置64で64ビツ
トデータを扱う時には、SPが+8だけ更新される。B
、Hのサイズのオペランドに対する@SP十の指定も可
能であり、それぞれSPが+1.+2だけ更新される。 ただし、スタックのアラインメントがくずれて速度低下
の原因にになるため、使用上は注意した方がよい。 オペランドに対して@SP十のモードが意味を持たない
ものに対しては、予約命令例外(RIE)を発生する。 具体的に予約命令例外(RIE)となるのは、writ
eオペランド、read−mod ify−write
オペランドに対する0SP+である。 7’−10,−−’ゞユ アセンブラ表記: @−SP オペランド: SPをデクリメント mem[:SP] フォーマット: 第29図に示す。 @−5Pのモードでは、オペランドサイズだけSPをデ
クリメントする。例えば、本発明装置64で64ビツト
データを扱う時には、SPが−8だけ更新される。B、
Hのサイズのオペランドに対する@−SPの指定も可能
であり、それぞれSPが−l、−2だけ更新される。た
だし、スタックのアラインメントがくずれて速度低下の
原因になるため、使用上は注意した方がよい。オペラン
ドに対して@−5Pのモードが意味を持たないものに対
しては、予約命令例外(RI E)を発生する。具体的
に予約命令例外(RIE)となるのは、readオペラ
ンド、read−modify−writeオペランド
に対する@−5Pである。 7−11. レジ ・・ ロモー゛オペランド: Rn ==> tmp 付加モード処理 フォーマット: 第30図に示す。 付加モードについては、後の章でまとめて説明する。 ′″ 2・ ・・ −〇 オペランド: PC==> tmp 付加モード処理 フォーマット: 第31図に示す。 −3,、・・ モー゛ オペランド: 0 ==> tmp 付加モード処理 フォーマット: 第32図に示す。 7−14.FP 文・□ アセンブラ表記: @(disp、FP) @(disp:4.FP) オペランド: mem[d4 * 4 + FPコ(disp
= d4 * 4) フォーマット: 第33図に示す。 d4は符号付きとして扱い、オペランドのサイズとは関
係なく必ずd4を4倍して使用する。したがって、この
モードにより(FP −8* 4)から(FP + 7
* 4)までの4の倍数のメモリアドレスが参照可能
である。アセンブラで記述する場合には、ディスプレー
スメントとして4倍した値の方を書く。 このアドレッシングモードは<<L2>>である。本発
明装置ではFP相対間接モードは実装しないので、この
アドレッシングモードが指定された場合は、予約命令例
外(RIE)となる。 このアドレッシングモードは短縮形で利用できないので
、例えば、 MOV @(disp、FP)、R1といった場合
に、 MOV : G、讐@(disp:4.FP)、RIM
OV:L、W @(disp:16.FP)、R1がと
もに4バイトとなり、コードの選択に曖昧さが生じると
いう問題点がある。 このモードが<<L2>>となフているのは、このよう
な理由による。このモードは、本発明装置64になって
短縮形の割合が減った時に、有効に利用することを狙っ
たものである。 @(d4:4.FP)、@(d4:4.SP)のモード
では、オペランドサイズにかかわらずd4を4倍して使
用するため、8ビツト、16ビツト、32ビツトのロー
カル変数をスタックフレーム上に混在した場合に@(d
4:4.FP)、@(d4:4.SP)のモードを利用
しようとすると、本発明装置がbig−endianで
ある関係上、各変数のMSB側をワード境界に合わせて
配置する必要がある。これによって特に問題が起きるわ
けではないが、注意が必要である。 @(d4:4.FP)、@(d4:4.SP)%−ドを
利用するためのローカル変数配置の例を第34図に示す
。 7−15.SP 対13F アセンブラ表記: @(disp、SP) @(disp:4.SP) オペランド: mem[d4 * 4 + SPコ(disp
= d4ネ4) フォーマット: 第35図に示す。 d4は符号付きとして扱い、オペラン ドのサイズとは関係なく必ずd4を4 倍して使用する。ただし、d4が負の 値であった場合の動作は規定されて いない。したがって、このモードに より(SP)から(SP + 7 * 4)までの4の
倍数のメモリアドレスが参照可能 である。アセンブラで記述する場合 には、ディスプレースメントとして 4倍した値の方を書く。 このアドレッシングモードは<<L2>>である。本発
明装置ではFP相対間接 モードは実装しないので、このアド レッシングモードが指定された場合 は、予約命令例外(RIE)となる。 このモードも、@(disp:4.FP)と同様に、本
発明装置64になって短縮形の 割合が減った時に、有効に利用する ことを狙ったものである。 ?−16,・ ロモー゛の −マツ 複雑なアドレッシングも、基本的に は加算と間接参照の組み合わせに分 解することができる。したがって、 加算と間接参照のオペレーションを アドレッシングのプリミティブとし て与えておき、それを任意に組み合 わせることができれば、どんな複雑 なアドレッシングモードをも実現す ることができる。 付加モードはこのような考え方にた ったアドレッシングモードである。 複雑なアドレッシングモードは、モ ジュール間のデータ参照やA1言語の 処理系に特に有用である。 ただし、本発明装置ではメモリ間接 アドレッシングモードが多用された 場合処理速度が低下する場合がある ので、メモリ間接アドレッシングモ ードを使用に際しては十分な注意が 必要である。 付加モードの指定は、16ビツトを単 位としており、これを任意回繰り返 す。1段の付加モードにより、 定数(d isplacement)の加算インデクス
レジスタのスケーリ ングと加算 スケーリングは×1、×2、 ×4、×8 メモリの間接参照 を行なう。N段の付加モードにより、 N+1段までの間接参照ができる。 基本的な付加モードの処理: tmp + Rx * 5cale + d4 * 4
==> jmp I=o、o=oの時tmp
+ Rx * 5cale + dispx==>
tmp l=0.D=1の時mem[tmp
+ Rx * 5cale + d4* 4] ==>
tmp I=1.D=Oの時mem[tmp +
Rx * 5cale + dispxコ==> t
mp I=1.D=1の時基本フォーマット: 第36図に示す。 E l =00 間接参照なし、付 加モード継続 tmp + disp 十Rx * 5cale ::> tlImp EI=01 間接参照あり、付 加モード継続 mem[tmp + disp + Rx * 5cale] ==> tmp El=10 間接参照なし、付 加モード終了 tmp + disp + Rxネ 5cale ==> address of operand EI=11 間接参照あり、付 加モード終了 mem[tmp + disp + Rx * 5calel ==> address of operand M=0 <Rx>をインデクス として使用 門=1 特殊なインデクス <Rx>=Oインテ クスを加算しない (Rx=0) <Rx>=I PCをイ ンデクスRxとして 使用 (Rx=PC) <Rx>=2〜 reser ed D=0 付加モード中の4 ビットのd4を4倍 してdispとし、こ れを加算する。d 4は符号付きとし て扱い、オペラン ドのサイズとは関 係なく必ずd4を4 倍して使用する。 D=1 付加モードの拡張 部で指定されたd ispx (16/32/64ビ ツト)をdispとし、 これを加算する。 拡張部のサイズは d4フィールドで指 定する。 d4=0001 dtsp Xは16ビツト d4=oo10 disp Xは32ビツト d4=0011 disp Xは64ピツ ト く( LX〉〉 ×× インデクスのスケ ール(scale = 1/ 2/4/8) S インデクスレジス タのサイズ S=O<Rx>は32 ビットを符号拡張 S=1 <Rx>は64 ピッ ト <<LX>> PPビット <<11>> ・Pビットは付加モードの各段 に入る。 Pビットは「すべてのメモリ 参照で独立に指定できるピッ ト」となフている。 ・間接参照をする場合としない 場合を選択できる。 間接参照しない段は、多段の ペースレジスタ、インデクス レジスタの加算に用いる。( mem[R1+R2+R3コなど)これは、ニーf レ
ヘ)Et テrelocation base reg
isterなどを導入したい時に使用することがある。 ・インデクスレジスタのサイズ 64ビットアドレス使用時でも 32ビツトデータがかなりの頻 度で出てくると 予想される ため、付加モードの各段で32 764のサイズ切り替えができる ようになっている。 ・レジスタ相対間接の@(disp:64、Rn)やメ
モリ間接のアドレッ シングモードも付加モード を使用して実現する。 −pccz対しi”X2、×4、×8 のスケーリングを行なフた場 合には、その段の処理終了後 の中間値(tmp)として、インプ リメントに依存した不定値が 入る。この付加モードによっ て得られる実効アドレスは予 測できない値となるが、例外 は発生しない。マニュアル等 では、PCに対する×2、×4、 ×8のスケーリングの指定は 行なわないように、注意して おく必要がある。 フォーマットのバリエーション 第37.38図に示す。 ?−17,〜 モー′ のレベル 付加モー゛ドの利用方法としては、 普通の間接参照、オブジェクト コードのモジュール化のための 外部変数のテーブル参照、A1向 は命令の実行などがあり、この うち、A1向けの用途ではかなり 多くの段数の間接参照を使うこ とがあるが、普通の用途では、 3〜4段までの間接参照で十分 なことが多い。 任意段数の付加モードが利用で きれば、コンパイラの中で段数 による場合分けが不要になるの で、コンパイラの負担が軽減さ れるというメリットがある。多 段の間接参照の頻度が非常に少 ないとしても、コンパイラとし ては必ず正しいコードを発生で きなければならないからである。 しかし、インプリメントの方か ら考えると、任意の段数を許し て実行中の割り込みを受は付け るようにするのはかなり重くな るため、全体のバランスとしで ある程度の段数制限をするのは やむを得ない。 そこで、本発明装置としては4 段(付加モード基本フォーマツ トの4つ分)までの付加モード が利用できるものを<<l l >>仕様とし、任意段
数の付加モードの インプリメントは<<L2>>仕様と してクラス分けする。<<Ll>>仕 様でも、5回のメモリ間接参照 まで可能である。5段(5ハー フワード)以上の付加モードに 対しては、予約命令例外(RIE)が 起動される。ただし、フォーマ ブト上は任意の段数が可能にな っているので、将来はそのまま のフォーマットで段数を拡張す ることができる。 本発明装置では任意段数の付加 モードを許す。ただし、本発明 装置では付加モードをもちいて メモリ間接アドレッシングを多 用した場合、処理速度が低下す ることがあるので注意を要する。 特に第2オペランドで多段の付 加モードが用いられた場合、付 加モード処理中は割り込みが受 は付けられない場合があるので 注意を要する。 また、本発明装232でも浮動小 数点を扱うことを考え、′×8 ′のスケーリングをインプリメ ントする。′×8′のスケーリ ングは<<l×>>仕様ではなく <<11〉〉仕様で
ある。 8、 ン i ン 1−8−1.
” の 昌− (本発明装置では 仮想記憶のサポートは行わない。) 仮想記憶を実現するため、命令の実行途中で発生したペ
ージフォールトに対してうまく回復処理を行なう必要が
ある。本発明装置では、原則として命令再実行方式を採
用する。 命令再実行方式でページフォールトが起こった場合には
、それまでに変更したレジスタ類をプロセッサがすべて
もとに戻してから、ページインの処理ルーチンを起動す
る。したがって、処理再開後に命令の始めより再実行し
ても矛盾は生じない。 命令再実行方式では、原則として実行途中の状態を保持
する必要がないので、実現機構は比較的簡単である。ま
た、本発明装置では、命令再実行のことを考慮し、処理
の途中で副作用を残す命令やアドレッシングモード(オ
ートインクリメントなど)を極力避けるようにしている
。ただし、ページフォールトからの再実行では余分なメ
モリアクセスが起こることがあり、O5で入出力装置を
操作する場合などには注意が必要である。 例えば、−船形の命令において、第一オペランドで17
0のリードを行ない、第二オペランドでページフォール
トを起こした場合、命令の再実行でもう一度110のリ
ードを行なうため、Iloの種類によっては矛盾を起こ
す。したがって、リードによって副作用のある110を
アクセスする場合は、その命令のもう一方のオペランド
でページフォールトを起こさないように注意し、マニュ
アルにも明記する必要がある。 具体的には、もう一方のオペランドが必ずレジスタか常
駐ページであればよい。 また、MOV命令などでソースオペランドとデスティネ
ーションオペランドが一部重なっていた場合、単なる再
実行では矛盾を生じることがあるので、この点に対する
注意も必要である。 例:2バイトのデータを1バイトずらす。 デスティネーションがページ境界にまたがる。 第39図で、NOV、l(命令により[N−2:N−1
]を[N−1:Nコに移す場合、デスティネーションの
書き込み バスサイクルは2回に分かれる。 まず[:N−2]のデータが[:N−11に書かれ、次
に[元のN−1コが[Nコに 書かれるものとする。[N−1]への 書き込みの際にpage M−1がフォ−ルトを起こす
と、ページイン 後[N−2:N−1コー> [N−1:Nコを再試行し
ようとしても、N−1の内容が 既に書き変わっているので、矛 盾を起こす。 さらに、LDMのような複数のデータ転送を行なう命令
でも、転送元と転送 先が重なっていた場合に、命令の再 実行で矛盾が生じないようにする必 要がある。例えば、 LDM @Re、(R6−RIO)の場合、R6,
R7をロードした後でR8を読んだ時にページフォール
トが起き ると、再実行した時に既にR6が書き 替わっており、本当に命令の最初か ら実行すると、矛盾を生じる。これ を避けるためには、以下のような対 策をとる必要がある。 ・命令の最初でページフォールトが 起きないことを確認する。 ・ページフォールト時に転送中のア ドレスを示すテンポラリ値をスタ ツクにセーブする。 く一種の命令 継続実行方式) ・R6の初期値を記憶しておき、ペー ジフォールト発生時にはこれをも との値に戻す。 STMやその他の命令についても同様である。 なお、命令の再実行を矛盾なく行な うため、LDM 、 STM 、 LDCTXでは付加
モードを禁止している。また、ENTER,EXIT、
JRNGでは、メモリアクセスを伴うようなアドレッシ
ングモードをすべ て禁止している。 8−2.プロゲームによる一へ〇 き ストアドブログラム方式の計算機で は、一般に、これから自分の実行す る命令プログラム自体をプログラム によフて書き変えることが可能であ る。しかし、命令のブリフェッチや 命令キャッシュなどを持つ最近の高 性能プロセッサでは、プログラムで 命令を書き変えた場合の動作を保証 しようとすると、ハードウェアの負 担が極めて大きくなる。また、この 機能は必要性が少なく、ソフトウェ アの教育上も好ましくない。したが って、本発明装置では、ソフトウェ アによってこれから実行する命令コ ードの書き換えを行なうことは原則 として禁止し、そのような場合には 動作を保証しないものとしている。 ただし、O5からユーザまで含めたシ ステム全体の動作を見ると、どこか でプログラムのロードル実行といっ た流れを含んでいるため、すべての 場合にわたフて「動作を保証しない」 とするわけにはいかない。また、特 殊な用途では、ユーザプログラムで 命令コードを生成し、それを実行し たいという場合もある。したがって、 何らかの条件が満たされた時には、 ソフトウェアによって書き換えられ た命令コードの実行動作を保証する 必要がある。 そこで、本発明装置では、命令コー ドを書き換えたということをプロセ ッサに知らせる命令PIBを用意し、この命令を実行す
ることにより、以後、 書き換えられた命令コードの実行動 作を保証することにしている。この 命令は、これから実行すべき命令コ ードが、以前(リセット時あるいは 前回のPIB命令実行時)から変更されている可能性が
あるということを、 プロセッサに通知するために使用す る。インプリメント上は、この命令 によってバイブライン、命令キュー、 命令キャッシュのパージを行なうこ とになる。 9、EIT処旦 本発明装置では、プログラムの実行の流れとは非同期に
行なわれる処理を総称して、EIT処理と呼んでいる。 EIT処理は、通常、例外処理や割り込み処理と呼ばれ
ているものである。EIT処理には、次のようなものが
含まれる。 ・内部割り込み(リング間コール、トラップ)システム
コール発行などの際に、プ ログラマが意識して発生させる。 その時に実行中のコンテキストとは 関連がある。 ・例外割り込み(例外) 一般の命令の実行中に、何らかのエ ラーが起った場合に発生する。 その時に実行中のコンテキストとは 関連がある。 ・外部割り込み(割り込み) 外部からのハードウェア的な信号に より発生する。 その時に実行中のコンテキストとは 全く関連がない。 EITとはException (例外割り込み)、I
nterrupt (外部割り込み)、Trap (内
部割り込み)の頭文字を合わせた名称である。EIT処
理に間する詳細は付録9を参照のこと。 1、 W 本発明装置のpsυ(Processor 5tatu
s Word)は32ビツトである。PSWの下位16
ビツト(PSH−Processor 5tatus
)lalfword)はユーザプログラム用であり、ユ
ーザプロセスから自由に操作可能である。PSWの上位
16ビツト(PSS −Processor 5tat
us halfword for System)はシ
ステム用であり、ユーザプログラム(リング3)からは
操作できない。PSHのうち、上位8ビツトは各種モー
ドの設定を行なう部分であり、PSM(Process
or 5tatus byte for Mode)と
呼ぶ。また、PSHの下位8ビツトは各種ステータスや
演算結果の表示を行なう部分であり、PSB(Proc
essor 5tatus Byte)と呼ぶ。第40
図に示す。 10−1.PSSの 第41図に示す。 20′にreserved ′1′を書き込もうとし た場合には、予約機能 例外(RFE)が発生する。 SM、RNG = 000 ringoで外部割り
込みスタックポインタ(SP 1)使用 SM、RNG = 001 reservedSM
、RNG = 010 reservedSM、R
NG = 011 reservedSM、RNG
= 100 ringOでリングO用スタックポ
インタ(SPO)使 用 SM、RNG = 101 reserved (
ringl用)SM、RNG = 110 res
erved (ring2用)SM、RNG = 11
1 ring3でリング3用スタツクポインタ(S
P3)使 用 SM、RNGは<<LA>> XA = 0 32ビツトコンテキストXA
= 1 64ビツトコンテキスト<<LX>> AT = 00 アドレス変換なしAT =
01 アドレス変換あり(本発明装置標準のM
MU仕 様) AT = 10 アドレス変換なし、アドレス
によるメモリ保 護 (<<LIR>>) AT = 11 reserved(Add
ress Translati。 n mode) DB = Oデバッグ中でないコン テキスト DB = 1 デバッグ中コンテキスト 団ASに 外部割り込み、DI(DeIaye
d Interrupt)を禁止する割り込み優先度 IMASK = 0000 NMI (優先度Oの
マスク不能割り込み)のみ受 は付け IMASに= 0001 優先度1までマスク(結
果的にNMIのみ受は 付けとなる) IMASK = 0010 優先度2までマスクI
MASにの示す割り込み より優先度の高い割り 込みのみ受は付ける IMASK = 1110 優先度14までマスク
団ASK = 1111 マスクしない・本発明装
置では、<<LA>>仕様として4レベルのリング保護
によるメモリ管理を行なう(付録参照)。本発明装置で
は2レベルのリング保護によるメモリ管理を行なう。 RNGフィールドは、現在プロセッサがどのリングにい
るかという状態を示すものである。 リング保護を行なわない場合にも、例えばスーパバイザ
、ユーザモードの切り換え用にこのフィールドを使用す
る。 ・XAビットは、本発明装置32ではrese rve
dであり、1を書き込もうとすると例外が発生する。 ・トレースなどデバッグ間係の情報については、その詳
細まで統一するのは難しいため、別の制御レジスタ(O
CR−Debug ControlReg 1ster
)に分離し ている。ただし、デバッグ中がどうかを示
す情報のみDBとしてPS君こ入れる。 ・本発明装置の外部割り込みは、低い優先度の方が大き
な数字になる。外部割り込みの優先度は、0〜607レ
ベルであり、優先度0はマスク不能割り込み (NMI
)である。 ・キャッシュやMMUの制御情報は完全な統一が難しい
ため、PSWとは分離している。 ・AT(アドレス変換指定フィールド)をPS虞こ入れ
たことによって、コンテキスト毎にアドレス変換やメモ
リ保護の方法を変えたり、EIT処理ハンドラ実 行中
のみ一時的にアドレス変換を止めたりすることが可能に
なっている。 なお、LDC,REIT、LDCTX、EIT起動など
によって、PSW中のAT(アドレス変換ビット)が0
0から01に変更された場合には、TLBやキャッシュ
のパージが自動的に行なわれ、TLBや論理キャッシュ
の整合性が保証されるものとする。また、ATが01か
ら00に変更された場合にも、キャッシュ(この場合は
論理キャッシュ兼物理キャッシュ)の整合性が保証され
るものとする。 10−2.PS)Iの 第42図に示す。 20′にreserved 21′を書き込もう とした場合には、 予約機能例外 (RFC)が発生する。 PRNG このリングに入る一つ前の状態
のリ ング番号 PRNGは<<LA>> p P−bit ErrorFlag
<<LUG> P−bit6!能の関連 でエラーが起きた ときにセットされ、 他の場合にはクリ アされる。 現在はOにreserv d F General Flag高機能
命令の終了 要因の判定などに 用いる。 X、 Extension Flag多
倍長多倍長計算 上がりなどを示す。 V Overflow Flagオーバ
ーフローが 発生したことを示 す。 L Lower Flag比較命
令などにお いて、第一オペラ ンドの方が小さい ことを示す。 (符 号付き演算、符号 なし演算とも) M MSB Flag 演算結果のMSBが 1であることを示 す。 l Zero Flag演算結果が
0にな ったことを示す。 ・PRNGフィールドで「一つ前のリング」とは、「一
つ外側のリング」あるいは、「そのリングにサービスを
依願したリ ング」を表わすものである。したがっ て、EIT発生時のPRNGの変化は、PSW<RNG
> ==> PSW<PRNG>リターン時(RE
IT命令)でのPRNGの変化は、 スタック==> PS冒(RNG、PRNGを含む) となる。リターン時はRNGよりコピーするのではなく
、必ずスタックより復帰 する必要がある。常にRNG≦PRNGが成立する。P
RNGは、AC5命令などでの参照を目的としたもので
、実際のリング遷 移はあくまでもRNGの情報を使用する。 ・本発明装置以外のプロセッサでは、比較〜条件ジャン
プ、といった命令の流 れをとる場合に、符号付きと符号なし の区別を比較命令ではなく条件ジャン プ命令で行なうのが普通である。例え ば、符号なし整数の比較を CMP 5rcl、 5rc2 BLTS next Branch Lower Than(Singned
)で、符号付き整数の比較を CMP 5rcl、 5rc2 BLTU next Branch Lower Than(Unsigne
d)で行なう。したがって、フラグの表現 する情報として、大小の区別のほかに、符号付きと符号
なしの区別も必要であ る。 しかし、本発明装置では、符号付きと 符号なしの区別がCMP命令、CMPU命令といフたよ
うに命令側になっており、条 件ジャンプ命令は符号付きも符号なし も共通である。したがって、フラグ構 成を簡単にすることができる。 ・通常のプロセッサで使用するCarryFlagは、
符号なし整数の大小関係を表わすという意味と、多倍長
演算の桁上 がりを表わすという意味がある。しか し、後者に関しては本発明装置では XJlagを使用するため、Carry Flagは整
数の大小関係を表わすという意味で のみ用いられる。したがって、TR0NCHIPではこ
のフラグを大小関係を表わすフラグであると定義し、名
前をL− flag(Lower Flag)としている。このフ
ラグは、符号なし演算の場合には従来 のCarry Flagと同じ振る舞いをするが、符号
付き演算の場合には従来のCarryFlagとは異な
り、オーバーフローまで考慮した真の大小間係を表現す
る。 ・そのほか、ストリング命令やキューの命令の終了条件
を示すためのFJlag(General Flag)
とPビットのエラーを表現するためのPJIag(P−
bit ErrorFlag)を設ける。PJIagは
、現在の仕様では′0′にreservedとなってい
る。 ・通常のプロセッサでは、シフト命令ではみだしたビッ
トを入れるためにCarry Flagを用いているが
、本発明装置ではCarry flagの代わりにLJ
lagを実装しているため、はみだしたビットはX−f
lagに入れることにする。 10−3. −グのパ 加減算命令、比較命令、論理演算命令は2オペランド命
令であり、 dest 、op、 src ==> destの形を
とる。destと5rcOサイズが異なる場合には、小
さいサイズの方が大きいサイズに合わせて符号拡張(A
DDU、5LIBtJ。 CMPUではゼロ拡張)された上で演算され、演算結果
がdestのサイズに変換されてからdestに格納さ
れる。 CMP、CMPU、SUB、5UBUの場合、L−fl
agは、前の演算で第一オペランドの方が値が小さかっ
たことを示す。符号なし演算CMPU。 5UBUの場合には、L−flagは通常のプロセッサ
のCarry(Borrow)Flagと同じ意味にな
る。符号付き演算の場合には、Ljlagは単なるMj
lagのコピーとは異なり、オーバーフローまで含めた
真の大小関係を表現する。ADD命令の場合には、LJ
Iagは結果が負であることを示す。これも、単なるM
JIagのコピーとは異なり、オーバーフローまで含め
た真の正負を示す。ADDUの場合には、結果が必ず正
になるため、し−flagはOとなる。 VJlagは、演算の結果がdestで指定されたサイ
ズでは表現できなかったということを示す。つまり、演
算結果がdestのすイズの符号付き整数(ADDU、
5UBuでは符号なし整数)で表現できない時に、v−
flagがセットされる。CMP、CMPLI命令では
、V−flagは不変である。 XJIagは、多倍長の演算を行なう場合に、桁上がり
の状態を保持するために使用する。符号付き演算でも符
号なし演算の時と同じような変化をする。これは、通常
のプロセッサのCarry Flagとほぼ同じ意味で
あるが、XJIagを変化させる命令は加減算命令やシ
フト命令などに限られている。 CMP命令とSUB命令、およびCMPU命令と5uB
U命令のL−flaHの変化は全く同じである。 XJIagは、Sue、5UBU、5UBX命令では変
化するが、CMP、CMPU命令では変化しない。 MOV、 MOVU、ADD、ADDU、ADDX、S
uB、5UBU。 5UBX命令の場合、M−flagとZ−flagは、
演算結果をdestのサイズに変換した後の値を基準に
して変化する。したがって、 srcのサイズよりもdestOサイズの方が小さい時
は、演算結果が0でなくてもZ−f la8がセットさ
れることがありうる。一方、CMP、CMPU命令の場
合のZ−flagは、演算結果そのものの値を基準にし
て変化し、destのサイズには関係しない。 例: @dest、8 = 1の時 Sue #)l’lo1.W、@dest、B=;
〉演算結、果1− )!’lo1 は0でないが、dest がOになるのでZJl agはセットされる。 CMP #H’lO1,W、@dest、B==〉
演算結果1− H’lO1 はOでないため、2− flagはクリアされる。 ADDX、5U8X命令のフラグの変化は、多少変則的
になっている。これは、符号なし整数の拡張演算に令符
号付き整数の拡張演算にも対処するためである。この場
合、条件ジャンプ命令のニモニックとの対応がうまくと
れなくなるが、拡張演算自体が頻度も少なく、変則的な
面を持っているので、やむを得ない。 LJ l ag 符号付き演算としての大小間係(
SUBX)、正負(ADD X)を示す。 VJlag 符号付き演算としてのオーバーフロー
を示す。 Xjlag ADDXの場合はdest + sr
c+ XJlagの演算における destのサイズからの桁上 がり、5usxの場合は、de st −src −Xjlagの演算 におけるdestのサイズか らの桁下がりを表わす。 ただし、いずれの場合も、 SrCのサイズがdestのサイ ズよりも小さい場合には、 srcが符号拡張される。 5tJBXにおいて、srcとdes tのサイズが等しい場合に は、結果的に、XJIagが 符号なしデータとしての 比較結果を表わすこと になる。 ADDX、5UBXで異種サイズ間の演算を行なう場合
には、サイズの短い方が符号拡張される。しかし、符号
拡張後の値を符号付きの数とみて演算するか、符号なし
の数とみて演算するかはフラグによって異なる。 MOV命令、MOVU命令および論理演算命令では、X
JIag、L−flagは変化しない。論理演算命令で
は、VJIagも変化しない。 各命令に対応したフラグの変化は、命令セットの説明の
中に示されている。 ′☆ゝは要注意個所である。 11、OAセツ の!述につい 11−1.口述乏工の 【ニモニック】 その命令の名前にニモニック)を示す。 【命令の機能】 その命令の機能の概要を示す。 【命令オプション】 その命令で使用できる命令オプションの種類を示す。 命令オプションは、命令の機能の細かい点を変更するた
めに用いるものであり、アセンブラ表記では’/xxx
ゝにより記述する。 【命令ビットパターンとアセンブラ表記】命令のビット
パターン、そのアセンブラ表記、使用できるサイズの種
類などを示す。本発明装置では、一つの命令ニモニック
に対して一般形や短縮形といった複数の命令フォーマッ
トが存在する場合があり、それぞれ使用できるアドレッ
シングモードやサイズが異なっている。この項では、命
令フォーマット別にそういった内容を明らかにする。 【フラグ変化】 命令実行後のステータスフラグ(PSB)の変化を示す
。 【解説】 その命令の機能を解説する。 なお、説明の中で現れるアセンブラニモニックの詳細に
ついては、巻末の付録を参照のこと。 11−2.。Δビ・・ パ −ゝ セゝ 1命令
ビツトパターンとアセンブラ表記の部分は、フォーマッ
ト別ニモニック、オペランド名、オペランドフィールド
名、命令ビットパターンから成る。 記述例: 第43図に示す。 AMONG−−フォーマット別ニモニック説明を行なう
命令ビットパターンのフ ォーマット別ニモニック(付録参照) を示す。 3rc、dest−−オペランド名 その命令の機能を説明するために使用 する変数である。この変数は、 「命令の機能」 「解
説」で参照される。ここで記述されたオペランドの順番
が、そ のままアセンブラにおけるオペランド の順番になる。 EaR,EaM−−オペランドフィールド名オペランド
フィールド名は、ビットパ ターンとの対応、使用できるオペラン ドサイズやアドレッシングモード、メ モリアクセス方法、その他の制約事項 などの情報をまとめて表わすものであ る。オペランドフィールド名を表わす 文字とその意味との間には一定の原則 を設けておき、いろいろな意味を簡潔 に表現できるようにしている。 枠でかこまれた部分−命令ビットパタ ーン 命令ビットパターン中では、オペラン ドフィールドやサイズ指定フィールド の位置、命令のオペコードなどを示す。 ′*′で示されるビットは、don’t careのビ
ットである。このビットの071は、命令デコードには
影響しない。 1− j 、 + +T 、 j =+ 、 ) #
tで示されるビットは、現在のところ、命令機能やオペ
ランド の区別には使用されていないビットで ある。ただし、ユーザプログラムでは ξ9.′:′の部分にはOを、+ 49 、 j #
9の部分にはlを入れておかなければならな い。′−9のビットがOでない場合やゝ+2のビットが
1でない場合は、予約命令 例外(RFE)となる。 ′:′のビットが0でない場合や2#ゝのビットが1で
ない場合は、単に無視され る。つまり、ハード的にはl*j、′;l、l#2は同
等の意味を持つ。しかし、将来の拡張のために、ユーザ
向けのマニュア ルにはゝ=t、I11を′0′、′1′としておくよう
に明記しておかなければなら ない。 11−3. −ル゛ 命令ビットパターン中には、オペラン ドフィールドのほかに、オプションフ ィールド、サイズ指定フィールドがあ る。本発明装置で使用しているオプシ ョンフィールド名、サイズ指定フィー ルド名には、次のようなものがある。 ・サイズ指定フィールド名 RRreadアクセスを行なうオペラ ンドのサイズ指定 WW writeアクセスを行なうオペランドのサ
イズ指定 MM read−modify−writeアクセ
スを行なうオペランドのサイズ指 定 8B ビット操作命令でのメモリアクセスサイズ XX 上記以外の一般的なサイズ指定 特にレジスタサイズの指定を 行なう場合 SS 上記以外の一般的なサイズ指定 ディスプレースメントのサイ ズ、CMPの第二オペランド、暗 黙でオペランドを指定するス トリング命令、暗黙でスタブ ゛ りを指定するMOVA:U命令などに使用 必ず同じ文字(大文字)を反復する。 ただし、32ビツトと64ビツトの指定しかできない場
合には、このうちの −文字のみを使う。 ・オプションフィールド名 命令オプションの指定を行なうオプ ションビットの名前としては、主と して小文字を使う。 (Pビット関係を除く) オプションフィールド名には、以下 に示すようなものがある。いずれの 場合にも、最初に記述した方(オプ ション値が0. 00.、の方)がアセンブラでのデフ
ォルトになる。 cccc Bcc、TRAP/ccでの条件指定e
eee ストリング命令、QSCII命令での終了
条件指定 P、Q、、 Pビット指定(Q9.は、Pビットの
必要なオペランドが複 数の場合) b /F=0./B=1 (BSCH,BVSC
)I。 BVMAP、BVCPY、SCMP、5M0V。 ascH) r /F=O,/R=1 (SSCH)c
/N=0./S=1 (C)lに)−CHK。 change 1ndex valueの′C2d
10=O,/1=1 (BSCH,BVSC)I)
−−dataのldj m /NM=O,/MR=1 (QSCI()
−−maskの1m1 p /AS=O,/5S=1 (PTLB、PS
TLB。 LDATE) −−PTLB、5Peci fic
5paceのjpj ttt /PT=000./5T=OO1,/AT
=110゜/reserved=010〜101,11
1 (PSTLB、LDATE、5TATE)xx
/LS=OO,/C3=01 reserved=
=10.11 (LDCTX、5TCTX)以上の項目
に当てはまらないフィー ルド名は、オペランドフィールド名 を示すものになる。できるだけ、同 じ文字が複数の意味を表わさないよ うにしている。 11−4.オペーン′ −ル′ オペランドフィールド名を表わす文 字には、以下のような意味を持たせ ている。オペランドフィールド名は これらの文字の組み合わせによって 構成されるため、フィールド名だけ で、使用できるアドレッシングモー ド、オペランドサイズ、アクセス方 法などの情報を得ることができる。 ・基本となるアドレッシングモード Ea 8ビツトの一船形アドレッシングモードを使
用 Sh 6ビツトの短縮形アドレッシングモードを使
用 # リテラル 旧 イミディエート #d ディスプレースメント Rg レジスタ Ll レジスタリスト(LDM用)Ls レジ
スタリスト(57M用)Ln レジスタリスト(E
NTER用)しX レジスタリスト(EXITD用)
・アクセス方法 一部の基本アドレッシングモードで は、以下のようなアクセス方法がデ フォルトとして決まっている。この 場合には、特にアクセス方法を示す 文字を付けない。 #、#i、#d 命令空間からのreadLs、L
n レジスタのreadしI、Lx レジ
スタへのりriteその他の基本アドレッシングモード については、以下に示す文字を使用 してアクセス方法を示す。 Rread W write M read−modify−writeなお、フ
ィールド名を短縮する ため、RgRftRRに、Rg讐をR讐に、RgMをR
Mに省略することがある。 (OF命令、C5I命令) A アドレス計算のみを行なう。 f ビットオフセットとの組み合わ せによって実際に操作を行なう メモリアドレスが決まる。 (R 2Mのサフィックス) 例二ビット操作命令 fq ビットオフセットが付くが、ビットオフセット
はバイト境界を 越えない。アクセスすべきアド レスは、オフセットを見なくて も確定している。 (R,Hのサフ ィックス) 例:短縮形のビット操作台 令 bf ビットオフセットやビットフィールド幅との組
み合わせによっ て実際に操作を行なうメモリア ドレスと範囲が決まる。 (R,M のサフィックス) 例:固定長ビットフィール ド操作命令 q キュー命令による複雑なアクセ スを行なう。 (他のアクセス方 法のサフィックス) 例: QINS、QDEL命令 i バスのインタロックによるアク セスを行なう。 (Mのサフィッ クス) χ 制御空間、物理空間などの特殊 空間のアクセスを行なう。 (R 、W、Mのサフィックス) d 2つのデータ(double)に対する操作を行
なう。 (Rのサフィッ クス) 例: CHK命令 li 複数のデータ(multiple)に対する
操作を行なう。 (R,Wのサフ ィックス) 例: LDM、57M命令 ・アドレッシングモードに対する制限 基本アドレッシングモードとアクセ ス方法が決まると、自動的にアドレ ッシングモードに対する制限(EaWtこ対するイミデ
ィエートモードの禁止 など)が決まる。ただし、それ以外 に命令特有の制限事項がある場合に は、以下の文字を後ろに付ける。 !1 イミディエートモードの禁止 例: CMP命令の第二オペラ ンド !門 メモリ対象アドレッシングモ ードの禁止 例: ENTER:G命令のl oca lオペランド !A 付加モードの禁止 例: LDCTX命令のctxaddrオペランド !S スタックポツプ、スタックブ ツシュモードの禁止 例: QDEL命令のdestオペラ ンド ・サイズ指定 サイズ指定は、原則として以下に示 すフィールドによって行なう。 アクセス方法がR RRフィールド アクセス方法力稼 四フィールド アクセス方法が門 間フィールド アクセス方法がRlI 、R1門、R25Sフイールド アクセス方法が*f B8フィールド ただし、これ はメモリ操作 のアクセス サイズを意味 する。 アクセス方法がA サイズは指定 されない。 これより例外がある場合には、以下 の文字を付は加えることにより区別 する。原則として、数字と小文字が 固定サイズを表わし、大文字は可変 サイズを表わす。例えば、′lは32ビツト(ワード)
固定のサイズを示す のに対して、′Vは四フィールドによ リサイズが指定されることを示す。 W オペランドサイズは必ず32ビツト 例: MUL:R命令 h オペランドサイズは必ず16ビツト 例: I/AIT命令 b オペランドサイズは必ず8ビツ ト 例: MOV:E命令の5rc S8 オペランド(ディスプレースメント)のサイズ
は、SSフィール ドにより指定される。ただし、 このオペランド指定フィールド を使うのは、5S=OO(8bit指定)の時に限られ
る。それ以外の場 合には、拡張部によってオペラ ンドが指定され、このフィール ドは無視される。(0にしてお くこと) 例:BF:l命令の5rc S オペランド(ディスプレースメ ント)のサイズは、SSフィール ドにより指定される。 例: BRA:G命令 Rオペランドサイズは、もう一方 のオペランドのサイズと共通に RRフィールドにより指定される。 例: CMP:l命令 讐 オペランドサイズは、もう一方 のオペランドのサイズと共通に 四フィールドにより指定される。 例: MOV:l命令 阿 オペランドサイズは、もう一方 のオペランドのサイズと共通に 間フィールドにより指定される。 例::1フオーマツトの命令 し オペランドサイズとして8ビツ トまたは16ビツトを指定するた めのビットパターンが割り当て られていないため、32ビツトま たは64ビツトのオペランドのみ が指定できる。サイズ指定は、 RR,四、MM、BBフィールドではなく、R,M、シ
、Bフィールドにより 行なわれる。 P ポインタを扱うため、命令中で はサイズ指定を行なわない。実 際のサイズ指定は、Pビットま たはモード(PS讐中のXAビット) 等によって行なわれる。 例: QINS、QDEL命令 × オペランドサイズは、x×Xフィールドより指定
される。 例: Ace、SCB命令のxreg Xw オペランドサイズは、Xフィールドにより他の
オペランドと共 通に指定される。これは、BF命 令のWi6th指定用である。 Xs オペランドサイズは、Xフィールドにより他の
オペランドと共 通に指定される。これは、BF命 令のsrc指定用である。 Xd オペランドサイズは、Xフィールドにより他の
オペランドと共 通に指定される。これは、BF命 令のdest指定用である。 Cオペランドサイズは、RRフィー ルドにより他のオペランドと共 通に指定される。これは、CSI 命令の比較値指定用である。 3 3ビツトのリテラル 4 4ビツトのリテラル 例: TRAPA命令 6 6ビツトのリテラル 8 8ビツトのディスプレースメン ト 例: BRA:8命令 1616ビツトのディスプレースメン ト 例: MOVA:R命令 なお、ストリング命令などの高機能 命令において、命令によって暗黙に 指定されるオペランドのサイズを指 定する場合には、フィールド名とし てSSを使用する。任意長ビットフィ ールド命令では、Xも使用される。 ・その他 2 リテラルで、ビットパターン の0をオペランド値の0(zer。 )に対応させる場合を示す。 ビットパターンとオペランド 値との対応は、以下のように なる。 (Nはリテラルのピッ ト数) o、、、ooo 。 O,、、OOl 1 0、、.010 2 1、、.110 2=N−2 1、、,1112”N−1 例: BTST:Qのoffset n リテラルで、ビットパターン の0をオペランド値の2“Nに対 応させる場合を示す。ビット パターンとオペランド値との 対応は、以下のようになる。 (Nはリテラルのビット数) 0、、.000 2”N o、、、ooi i O,、,0102 1、、,1102−N−2 !、、、111 2”N−1 例: MOV:Qの5rc Cリテラルで、ビットパターン が2の補数(complement)を現わす場合を示
す。ビットパタ ーンとオペランド値との対応 は、以下のようになる。 (H はリテラルのビット数) 0、、.000 −2=N。 0、、.001 −(2〜N−1) 0、、.010 −(2°N−2) 1、、.110 −2 1、、.111 −1 例: SHA:C,SHL:Cで右シフトの場合のシフ
トカラ ント 1.2.、、一つの命令の中で、同じアクセス方法を持
つオペランドが 複数存在した場合に、それら を区別するために使用する。 なお、サイズに関する種々の制限事 項のうち、命令機能に大きな関係を 持つものについては、オペランドフ ィールド名やサイズ指定フィールド 名ではなく、各命令の説明のところ でその制限を示す。これには、シフ トカウントで8ビツト以外のサイズを 指定した場合や、異種サイズ間の論 理演算などが含まれる。 オペランドフィールド名のうち、次 のものは、使用できるアドレッシン グモードに制限が設けられている。 EaR,ShR @−5Pは利用できない。 Ea讐、Sh讐 #imm−data、@SP+は利用できない。 EaM、ShM #imm−data、@−5P、@SP+は利用できな
い。 aA @SP+、@−5P、Rn、#imm−dataは利用
できない。 このほか、各命令の説明のところで もアドレッシングモードに関する制 限が述べられている。 11−6. ・に る5、 スタック操作の命令では、TO5によりスタックトップ
を示している。↑TO 5はスタックからのポツプ、↓TO5はスタックへのブ
ツシュである。 2オペランドの基本命令(MOV 、MOVU 。 ADD、ADDU、ADDX、Sue、5UBU、5U
BX、AND。 OR,XOR,CMP、CMPU)テは、次のような記
法でそのオペレーションを説明し ている。 dest(src2)のサイズ(ビット数)をdで、5
rc(srcl)のサイズ(ビット数)をSで表わし、
5rc(srcl)、dest(src2)をビット分
解した値を00,01.、、、Dd−1,50,Sl、
、、、5s−1で表わす。したがフて、 dest(src2) = CDO,Dl、、、。 Dd−2,Dd−1コ 5rc(srcl) = [SO,Sl、、、。 5s−2,5s−1] と書ける。[1,コは2進数による 表示を、′、′は各桁の区切りを意 味する。この時、演算結果によ ってdestに設定される値を dest 、op、 src = result =[
RO,R1,、、、Rd−2,Rd−1]で表わす。M
OV、MOVU、CMP、CMPU以外の命令では、r
esu + tがdestにセットされる。またsad
の場合 は、一般に演算結果の下位ピッ トのみをdestに設定することに なる。この時、演算結果の上位 ビットをカットする前の値を result = [FO,Fl、、、。 Fs−2,Fs−1] で表わす。Rのビット数はdSF のビット数はSである。 表f るイ リ、2で わす ま た、そのビ・・ト列を 寸きPA 同じように、固定長ビットフィール ド命令の説明では、 bitfield = [Bo、Bo+1.、、。 Bo+w−2,Bo+w−1] といった記法でビット単位の詳細な オペレーションを説明している。 略記法として、 [Sn、Sn+t、、、。 Sm−2,5m−1] [Sn〜m−11 で表わし、 [SO,Sl、、、。 5d−2,5d−1コ =[SO〜S−1] を単に [S] で表わすことがある。[:D]、[:Rコ、[8]。 [F]についても同様である。 12、 r II の口Δセラ 12−1.−−−”口Δ 【ニモニック】 MOV src、dest 【命令の機能】 src ==> dest データの移動と符号拡張 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第44図(a
)に示す。 【フラグ変化】 第44図(b)に示す。 【解説】 ソースオペランドsrcをデスティネーションオペラン
ドdestに転送する。 ソースオペランドのサイズがデスティネーションオペラ
ンドのサイズよりも小さい時は、ソースが符号拡張され
る。 デスティネーションの方がサイズが小さく、ソースの値
がデスティネーションのサイズの符号付き整数として表
現できない時は、VJlagがセットされる。 MOV : Zはいわゆるclear命令であるが、動
作やフラグ変化が同じであるため、NOVの短縮形の一
つとして扱っている。 MOV、ADD、MOV、 CMP命令は符号付きの演
算を行なう命令であるが、MOV:Q、ADD:Q、S
ue:Q、CMP:Qで利用できるリテラルの範囲は1
〜8(オペランドフィールド名#3n)となフており、
正の範囲しか含んでいないので、注意が必要である。M
OV、MOVU命令でsrcがイミディエート値である
場合に、そのイミディエート値と利用できるフォーマッ
トとの関係をまとめると、次のようになる。 [:MOV] :Z 5rc=:0 :Q 1≦src≦8 :E −128≦src≦127 :l srcは任意 :G srcは任意 [MOVU] 二E O≦src≦255 :G srcは任意 ADD、Sue、CMP命令も同様である。 (d≧Sの時) [50,Sl、、、、5s−2,5s−1コ ==〉[
5O1so、、、、、、、、、so。 SO,Sl、、、、5s−2,5s−1コ ==〉d−
sビットだけ符号拡張 (:RO,R1,、、、、Rd−s+1.Rd−s、R
d−s+1.、、、Rd−2゜Rd−1コ(destに
設定される) (dosの時) [SO,Sl、、、、、5s−d−1,5s−d。 5s−d+1.、、.5s−2,5s−1] ==>[
:5s−d、5s−d+1.、、.5s−2゜5s−1
] ==> SO,Sl、、、、、5s−d−1 s−dビットがカットされる。 [RO,R1,Rd−2,Rd−1] (destに設定される) MJIag RO ZJIag [RO〜d−1コ = 0VJl
ag☆ S[:Sl < −2°(d−1) 、or。 SCSコ ≧ +2°(d−1) つまり、d≧Sであればクリアされ、 d<sであれば、 So = Sl 、、1.、= : 5s−d
−1= 5s−d(:RO)の時クリア、それ以外の場
合にセットとなる。 【プログラム例外】 ・予約命令例外 ・RR=’ll’のとき ・讐−=’ll’のとき ・EaR,ShRが@−5Pのとき ・EaW、Sh勤1#imm−data、、@SP+の
とき【ニモニック】 MOVU src、dest 【命令の機能】 zex(src) ==> dest データの移動とゼロ拡張 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第45図に示
す。 【フラグ変化】 第46図に示す。 【解説】 ソースオペランドsrcをデスティネーションオペラン
ドdestに転送する。 ソースオペランドのサイズがデスティネーションオペラ
ンドのサイズよりも小さい時は、ソースがゼロ拡張され
る。 デスティネーションの方がサイズが小さく、ソースの値
がデスティネーションのサイズの符号なし整数として表
現できない時は、VJlagがセットされる。 (d≧Sの時) [SO,Sl、、、、5s−2,5s−1] ”>[0
,O,、、、、、、、、、O,So、 Sl、、、
、5s−2゜5s−1] ==> d−sビットだけゼロ拡張 [RO,R1,、、、、Rd−s+1.Rd−s、Rd
−s+1.、、、Rd−2゜Rd−1コ(des tに
設定される)(d<sの時) [SO,Sl、、、、、5s−d−1,5s−d、5s
−d+1.、、.5s−2゜5s−1コ ==〉 [5s−d、5s−d+1.、、.5s−2゜5s−1
] ==> SO,Sl、 、、、、5s−d−1 s−dビットがカットされる。 [RO,R1,Rd−2,Rd−1 (destに設定される) MJIag RO Zjlag [RO〜d−11= OVjlag
☆ U[Sコ ≧ +2°dつまり、d≧Sであれ
ばクリアされ、dosであれば、 50 = 51 =、、、、、=Ss−d−1 = 0
の時クリア、それ以外の場合にセットとなる。 【プログラム例外] ・予約命令例外 ・RR=’ll’のとき ・W讐=′ll′のとき ・EaRが@−5Pのとき φEaWが#imm−data、@SP十のとき【ニモ
ニック】 PUSfl src 【命令の機能】 push to 5tack スタックにブツシュ 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第47図に示
す。 【フラグ変化】 第48図に示す。 【解説】 ソースオペランドsrcをスタックにブツシュする。 この命令は、MOVネ、 @−5Pの短縮形と考えるこ
ともできるが、フラグ変化をしないこと、およびPOP
との対称性により、別命令となってぃsrc/EaRL
で指定されるアドレッシングモードでは、eSP+のモ
ードは使用できない。これは、POP命令のdest/
EaWLで@−5Pのモードが使用できないのに合わせ
たものである。 Pu5)l SPなど、srcオペランドにSPを含む
場合の命令動作規定については、付録12を参照のこと
。 【プログラム例外】 ・予約命令例外 ・R=’1.’のとき 争EaRLが@SP+、@−SPのとき【ニモニック】 POP dest 【命令の機能】 pop from 5tack スタックからポツプ 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第49図に示
す。 【フラグ変化】 第50図に示す。 【解説】 スタックからポツプした値をdestに転送する。 この命令は、MOV @SP+、 *の短縮形と考える
こともできるが、srcにSPを含んだ場合の動作がM
OV @SP十とは異なること、およびフラグ変化をし
ないこと、によって別命令となフている。 dest/EaWLで指定されるアドレッシングモード
では、@−5Pのモードを使用することは禁止されてお
り、指定した場合には予約命令例外RIEとなる。これ
は、POP @−5Pという命令を実行した場合に、S
P更新がいつ行なわれるかという点について誤解を生じ
やすいためである。 pop spなと、destオペランドにSPを含む場
合の命令の動作規定については、付録12を参照のこと
。 【プログラム例外】 ・予約命令例外 ・W=’l’のとき ・EaWLが#imm−data、@SP+、@−5P
のとき【ニモニック】 LDM src、reglist 【命令の機能】 1oad multiρle registers複数
レジスタのロード 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第51図に示
す。 【フラグ変化】 第52図に示す。 【解説】 複数のレジスタをメモリからロードする。ロードするレ
ジスタはビットマツプregl ist/LIRL (
、レジスタリスト)で指定する。LIRLは、EaRm
Lの拡張部よりも後に置かれる。 ロードするレジスタリスト(regl 1st)のビッ
トマツプ指定は、第53図に示すように行なう。 EaR畦で@SP十のアドレッングモードを指定した場
合は、小さい番号のレジスタから順にポツプされ、SP
はロードしたレジスタ数の4倍(または8倍)だけ増加
する。それ以外のアドレッシングモードを指定した場合
は、得られた実効アドレスがレジスタにロードすべきメ
モリデータの先頭を指す。いずれの場合にも、メモリ中
では小さい番号のレジスタの方が低いアドレスに置かれ
る。 ロードするレジスタのビットマツプのフォーマットは、
BSC)l/F 、 BVSC)I/F命令で使用する
回路(次に出現する20′またはゝl′のビットをMS
B方向にサーチする回路)と同じ回路によって、次に転
送するレジスタを見付けられるように決めたものである
。したがって、LDM @SP+の場合は小さな番号の
レジスタから転送するためにレジスタ番号の小さな方が
MSB側となフている。それ以外のアドレッシングモー
ドの場合にも、レジスタ退避ブロックの先頭アドレスを
実効アドレスとしているため、やはりレジスタ番号の小
さい方から転送するのがよく、LDM @SP+と同じ
フォーマットになる。 なお、これらのフォーマットはレジスタの転送順序まで
考えて決めたものであり、ハードウェア資源が少ない場
合には、ここで説明したような転送順序にするのが最適
と考えられる。しかし、実際の転送の順序はr本発明装
置」で規定されたものではなく、インプリメント側の自
由である。 EaRmLのアドレッシングモードでは、@−5P、
レジスタ直接モードRn、 イミディエートモード
#imm−data、付加モードの指定はイリーガルと
する。付加モードを禁止するのは、LDMやSTMによ
って退避、復帰したレジスタやレジスタ退避エリアと、
付加モードで使用するレジスタやメモリの間にオーバー
ラツプがあった場合に、命令の再実行が難しくなるため
であレジスタリストがオール00時は、何もせずに命令
を終了する。 く特にエラーとはしない)LDM @S
P+でレジスタリストにSPが含まれる場合の動作規定
については、付録12を参照のこと。 【プログラム例外】 ・予約命令例外 ・R=’l’のとき ・EaRmLがRn、#imm−data、@−5P、
付加モードのとき 【ニモニック】 STM reglist、dest【命令の機能】 5tore multiple registers複
数レジスタのストア 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第54図に示
す。 【フラグ変化】 第55図に示す。 【解説】 複数のレジスタをメモリにセーブする。セーブするレジ
スタはビットマツプregl ist/LsWL(レジ
スタリスト)で指定する。LsWLは、EaWmLの拡
張部よりも後に置かれる。 ストアするレジスタリスト(regl 1st)のビッ
トマツプ指定は、EaWmLが@−5Pモードの時、第
56図に示すように、またその他のモードの時、第57
図に示すように行う。 EaWmLに@−5Pのアドレッシングモードを指定し
た場合は、大きい番号のレジスタから順にブツシュされ
、SPはセーブしたレジスタ数の4倍(または8倍)だ
け減少する。それ以外のアドレッシングモードを指定し
た場合は、得られた実効アドレスがレジスタをセーブす
べきメモリ領域の先頭を指す。いずれの場合にも、メモ
リ中では小さい番号のレジスタの方が低いアドレスに置
かれる。 このフォーマットは、BSCI(/F、 BVSCH/
F命令で使用する回路(次に出現する′0′または′l
′のビットをMSB方向にサーチする回路)と同じ回路
によって、次に転送するレジスタを見付けられるように
決めたものである。したがって、STM @−5Pの時
は大きな番号のレジスタから転送するためにレジスタ番
号の大きな方がMSB側となる。それ以外のアドレッシ
ングモードの場合には、レジスタ退避ブロックの先頭ア
ドレスを実効アドレスとしているため、レジスタ番号の
小さい方から転送するのがよく、レジスタ番号の小さな
万力fMsB側となっている。 なお、これらのフォーマットはレジスタの転送順序まで
考えて決めたものであり、ハードウェア資源が少ない場
合には、ここで説明したような転送順序にするのが最適
と考えられる。しかし、実際の転送の順序はr本発明装
置」で規定されたものではなく、インプリメント側の自
由である。 [:aWmLのアドレッシングモードでは、@SP+、
レジスタ直接モードRn、イミディエートモード#im
m−data、付加モードの指定はイリーガルとする。 付加モードを禁止するのは、LDMやS耐によって退避
、復帰したレジスタやレジスタ退避エリアと、付加モー
ドで使用するレジスタやメモリの間にオーバーラツプが
あった場合に、命令の再実行が難しくなるためである。 しDM 、 STM命令では、転送しないレジスタに対
するメモリ領域は割り当てない。例えば、STM、W
(R1,R3,R9)、@−5Pの場合は次のような
動作を行なう。 (ただし、命令実行前のSP値をi
n i tSPとする。)R9==> mem[1n
itsP −4コR3==> mem[1nitSP
−8]R1==> mem[1nitsP −1
2コ1nitsP −12==> SP レジスタリストがオールOの時は、何もせずに命令を終
了する。 (特にエラーとはしない)STM @−SP
でレジスタリストにSPが含まれる場合の動作規定につ
いては、付録12を参照のこと。 【プログラム例外】 ・予約命令例外 ・−=′1′のとき ・EaWmLがRn、#imm−data、@SP+、
付加モードのとき 【ニモニック】 MOVA 5rcacldr、dest【命令の機
能】 address of src ==> dest実効
アドレスを得る 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第58図に示
す。 【フラグ変化】 第59図に示す。 【解説】 ソースオペランドの実効アドレスなデスティネーション
オペランドに転送する。 この命令のオペレーションそのものは、MOV命令など
で代用可能であるが、高級言語での左辺値のアドレス計
算やポインタ演算にすなおに使用できること、アドレス
計算用の回路を使用するため、より高速な演算が期待で
きること、により別命令となっている。 短縮形の MOVA:R@(disp:16.Rs)、Rdは、実
質的には3オペランド加算命令 Rs + disp:16−> Rd となるが、フラグ変化をおこさないためMOVA命令に
分類されている。 5rcaddrにPC相対間接モードを指定し、pc相
対のディスプレースメントを0とした場合には、現在の
PC値、つまりMOVA命令の先頭アドレスをdest
に格納することになる。また、PC相対のディスプレー
スメントとしてMOVA命令の命令長を指定した場合に
は、MOVA命令の次の命令のアドレスをdestに格
納することになる。 これらの機能は、ユーザプログラムのレベルでコル−チ
ン処理を行なう時に有効である。 アセンブラでは、くオペレーション〉またはdest側
でサイズ指定を行なう。5rcaddr側はアドレス計
算のみなので、サイズの指定はしない。 EaAで指定されるアドレッシングモードでは、イミデ
ィエート、@SP+、 @−5Pのモードは使用でき
ない。 【プログラム例外】 ・予約命令例外 ・+:20′のとき ・W=’l’のとき −EaAがRn、#imm−data、@SP+、@−
5Pのとき・Eawが#imm−data、@SP十の
とき【ニモニック】 Pu5)IA 5rcaddr 【命令の機能】 push address to 5tack−実効ア
ドレスをスタックにブツシュ 【命令オプション】 なし 【命令ビットパターンとアセンブラ記法】第60図に示
す。 【フラグ変化】 第61図に示す。 【解説】 ソースオペランド5rcaddrの実効アドレスをスタ
ックにブツシュする。 この命令は、MOVA *、 l1l−5Pの短縮形と
考えることもできるが、実行速度の向上や、MOV命令
〜PUSH命令の区別との対応をとるために、別命令と
なフている。 SrCにSPを含んだ場合の動作規定については、付録
12を参照のこと。 【プログラム例外】 ・予約命令例外 ・S=’l’のとき ・EaAがRn、#imm−data、@SP+、@−
5Pのとき12−2. 、− 口 Δ【ニ
モニック】 CMP 5rcl、s’rc2 【命令の機能】 5rc2−5rcl、 flags affected
比較、符号拡張と比較 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第62図に示
す。 【フラグ変化】 第63図に示す。 【解説】 5rclオペランドをs rc2オペランドと比較し、
その結果によりPSB(LJIag、Z−flag)を
セットする。 5rclオペランドのサイズと5rc2オペランドのサ
イズが異なる時は、サイズの小さい方のオペランドが符
号拡張された上で比較される。 なお、EaRl l 、5hR1Iのモードではイミデ
ィエートを禁止しているが、O5P+は可能である。 CMP @SP+、 @SP十の場合、スタックポイン
タはオペランドサイズの2倍だけ変化し、他の命令と比
較すると変則的であるが、この命令はスタックマシンを
シミュレートする場合に使用することがある。 CMP:Zはいわゆるtes を命令であるが、動作や
フラグ変化が同じであるため、CMPの短縮形の一つと
して扱っている。 以下では、 5rcl = [:SO,Sl、、、、、5s−2
,5s−1コ5rc2 = [DO,Dl、、、、、D
d−2,0d−1]によってオペレーションを説明する
。 (d≧Sの時) [DO,Dl、、、、、Dd−s−1,Dd−s、Dd
−s+1.、、、Dd−2゜0d−1コ − [SO,SO,、、、、、、、、SO,So、 S
l、、、、5s−2゜5s−1] ==> d−sビットだけ符号拡張 [:RO,R1,、、、、Rd−s−1,Rd−s、R
d−s+1.、、、Rd−2゜Rd−1コ(どこにも設
定されない) (d<sの時) [DO,DO,、、、、、、、、DO,DO,Dl、、
、、Dd−2゜Dd−1コ − s−dビットだけ符号拡張 [SO,Sl、、、、、5s−d−1,5s−d、5s
−d+1 、、、.5s−2゜5s−1] ==> [FO,Fl、、 、、、Fs−d−1,Fs−d、F
s−d+1.、、、Fs−2゜Fs−11(どこにも設
定されない) LJIag☆ S[Dコ < S[S]SUB命
令と同じ ZJlag [:RO〜d−1] = 0(d≧S
の時) ☆ [FO〜s−1コ = 0 (dosの時) 【プログラム例外】 ・予約命令例外 φRR=’ll’のとき φ5S=jll’のとき ・EaR,ShRが@−5Pのとき 争EaR11,5hR1Iが# imm−data、l
i!−5Pのとき【ニモニック】 CMPU 5rcl、5rc2 【命令の機能】 5rc2− srd、 flags affected
ゼロ拡張と比較 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第64図に示
す。 【フラグ変化】 第65図に示す。 【解説】 5rclオペランドを゛5rc2オペランドと比較し、
その結果によりPSB(LJIag、Z−flag)を
セットする。 src!オペランドのサイズと5rc2オペランドのサ
イズが異なる時は、サイズの小さい方のオペランドがゼ
ロ拡張された上で比較される。 EaRIIのモードではイミディエートを禁止している
が、@SP+は可能である。 以下では、 5rcl =[SO,Sl、、、、、5s−2,5s−
1]5rc2 = [DO,Dl、、、、、Dd−
2,Dd−11によってオペレーションを説明する。 (d≧Sの時) [DO,Dl、、、、、Dd−s−1,Dd−s、Dd
−s+1.、、、Dd−2゜0d−1] − C0,0,、、、、、、、、、、OSO,Sl、、、、
5s−2゜5s−1コ ==〉 d−sビットだけゼロ拡張 [RO,R1,、、、、Rd−s−1,Rd−s、Rd
−s+1.、、、Rd−2゜Rd−1] (どこにも設
定されない)(d<sの時) [0,O,、、、、、、、、,0,Do、 Dl、
、。、Dd−2゜0d−1] − 5−dビットだけゼロ拡張 [50,Sl、、、、 、5s−d−1,5s−d、5
s−d+1.、、.5s−2゜5s−1] ==> [:FO,Fl、、、、、Fs−d−1,Fs−d、F
s−d+1.、、、Fs−2゜Fs−11(どこにも設
定されない) LJIag☆ U[Dコ < U[Sコ5ueu
命令と同じ ZJIag [RO〜d−11= 0(d≧Sの時
) ☆ CFO〜s−1] 二〇 (d<sの時) 【プログラム例外】 ・予約命令例外 ・RR=211′のとき ・SS=’ll’のとき ・EaRが@−5Pのとき ・EaRllが#imm−data、@−5Pのとき【
ニモニック】 CIlに bound 、 +ndex、xreg【
命令の機能】 check upper and lower bou
nds配列の範囲のチエツク 【命令オプション】 /S 下限値を引く IN 下限値を引かない(デフォルト)【命令ビット
パターンとアセンブラ表記】第66図に示す。 【フラグ変化】 第67図に示す。 【解説】 配列のインデクスの範囲のチエツクとレジスタへのロー
ドを行なう。 boundの指すアドレスには上限値と下限値が組みに
なって置かれており、その上限値、下限値と1ndex
によりフェッチされた比較値オペランドが比較される。 boundの実効アドレスに置かれているのが上限値で
あり、 (boundの実効アドレス+オペランドサイ
ズ)のアドレスに置かれているのが下限値である。比較
は符号付き整数として行なわれる。比較値が上限値と下
限値の間に入っていない場合には、VJlagがセット
されるので、続けてTRAP命令を実行することにより
、例外処理を起動することができる。 /Sを指定した場合、比較値から下限値を引いたものが
レジスタxregにロードされる。/Sを指定しない場
合、比較値はそのままレジスタxregにロードされる
。比較値をレジスタに口−ドするのは、次にそれを配列
のインデクスのアドレス計算に使うことが多いためであ
る。 オペレーション: tip = mem[address−of−boun
d+ operancjsize] if (index ≧ mem[address
−of−bound]、or、 1ndex < tm
p) hen set ’Jflag; if (A == 1) hen index −tmp ==> xreg1se index ==> xreg ただし、’address−of−’は’mem[、、
]’の逆演算子であり、boundとmem[addr
ess−of−bound]が同じ意味になる。 下限の方は、値が一致した場合に範 囲内と見なされるが、上限の方は、 値が一致した場合には範囲外と見な される。例えばboundのメモリが(0゜100)と
なっていると、C)IKで範囲内となるのはi nde
xがO〜99の場合である。 し−flag、 ZJlagは、下限値とi ndex
との比較結果にしたがってCMPと同様にセットされる
が、し−flag=1となるのは、 i ndex <下限値 の場合である。つまり、第68図のようになる ■上限値〈下限値の場合には、下限値との比較によりl
になることもある。 この場合、1ndex−下限値の演算結果によってフラ
グがセットされることになる。次の3つの命令は、すべ
て第二オペランドが第一オペランド(CHKでは第一オ
ペランドboundの下限値)よりも小さい時にLJl
agがセットされるという仕様である。 CMP 5rcl、5rc2 SLJB src、dest CHK bound、1ndex、xregCHに
命令では、上限値≧下限値のチエツクは特に行なわない
。上限値と下限値の大小にかかわらず、 「オペレーシ
ョン」に書かれたものと等価の動作を行なうものとする
。 EaRdRで指定されるアドレッシングモードでは、レ
ジスタ直接Rn、(’SP、 li!SP+、 #
imm−dataのモードは使用できない。どうしても
レジスタ上の値と比較したい場合には、CHKではなく
CMPを2回行なえばよい。 【プログラム例外] ・予約命令例外 ・RR=’ll’のとき ・EaRが@−SPのとき ・EaRdRがRn 、 # i mm −data
、 @SP+ 、 @−5Pのとき12−3.
′7+、Δ 【ニモニック】 ADD src、dest 【命令の機能】 dest + src ==> dest加算、符号拡
張と加算 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第69図に示
す。 【フラグ変化】 第70図に示す。 【解説】 ソースオペランドをデスティネーションオペランドに加
算する。 ソースオペランドのサイズがデスティネーションオペラ
ンドのサイズよりも小さい時は、ソースが符号拡張され
た上で加算される。 デスティネーションのサイズが小さく、演算結果がデス
ティネーションのサイズの符号付き整数として表現でき
ない時は、VJIagがセットされる。 なお、L−formatのADD:L @SP+、SP
については、ADD:G @SP+、SPと同じく (initSP+4)+@1nitSP==>SPの動
作を行なうのが望ましい。しかし、インプリメント上、
L−forn+atてはこのような動作を行なうのが難
しい場合があるので、ADD:L@SP+ 、 SPの
動作についてはインプリメント依存トスル。コレは、S
UB:L、CMP:L、 INDEXも同様である。 詳しくは付録!2を参照のこと。 (d≧Sの時) [DO,Dl、、、、、Dd−s−1,Dd−s、Dd
−s+1.、、、Dd−2゜Dd−1] + [SO,SO,、、、、、、、、SO,SO,Sl、、
、、5s−2゜5s−1コ ==〉 d−Sビットだけ符号拡張 [RO,R1,、、、、Rd−s−1,Rd−s、Rd
−s+1.、、、Rd−2゜Rd−11(destに設
定される) (d<sの時) [DO,DO,、、、、、、、、DO,Do、 D
l、、、、Dd−2゜Dd−1コ + s−dビットだけ符号拡張 ISO,Sl、、、、 、5s−d−1,5s−d、5
s−d+1 、、、.5s−2゜5s−1コ ==〉 [:FO,Fl、、、、、Fs−d−1,Fs−d、F
s−d+1.、、、Fs−2゜Fs−1] ==> [: RO,R1,、、、Rd−2゜Rd−1コ(d
es tに設定される)FO,Fl、、、、、Fs−d
−1 s−dビットがカットされる し−flag☆ S[Dl + SOSコ く
0結果が負になることを表わす。 (MJlagも結果の正負を表わすが、MJlagが正
しい正負を表示する のはオーバーフローのない時に 限られる。) MJIag RO ZJIag [RO〜d−1コ = OVjl
ag S[Dコ + S[Sコ < −2
−(d−1) 、or。 S[Dl + S[S]≧+2−(d−1)X−fla
g☆ いずれの場合も、destのサイズからの桁上げ
がXjlagにセットされ る。 (d≧Sの時) U[DO,Dl、、、、、Dd−s−1,Dd−s。 Dd−s+1.、、、Dd−2,Dd−1] +U[鐸
、so、、、、、、、、、so、 so。 Sl、、、、5s−2,5s−1] ≧ +2°dd
−sビットだけ符号拡張 (d<sの時) U[DO,Dl、、、、Dd−2,Dd−1]+U[5
s−d 、5s−d+1 、、、.5s−2,5s−1コ ≧ +2″′dSO,
Sl、、、、、5s−d−1 s−dビットがカットされる 【プログラム例外] ・予約命令例外 ・RR=’ll’のとき ・MM=’ll’のとき ・εaR,ShRwが@−5Pのとき ・EaM、ShMが#imm−data、li!SP+
、@−5Pのとき【ニモニック】 ADDU src、dest 【命令の機能】 dest + src ==> destゼロ拡張
と加算 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第71図に示
す。 【フラグ変化】 第72図に示す。 【解説】 ソースオペランドをデスティネーションオペランドに加
算する。 ソースオペランドのサイズがデスティネーションオペラ
ンドのサイズよりも小さい時は、ソースがゼロ拡張され
た上で加算される。 デスティネーションのサイズが小さく、演算結果がデス
ティネーションのサイズの符号なし整数として表現でき
ない時は、VjIagがセットされる。 ADDUのL−flagは、結果が正になるという意味
で、必ず0にリセットされるものとする。 (d≧Sの時) [DO,Dl、、、、、Dd−s−1,Dd−s、Dd
−s+1.、、、Dd−2゜0d−1コ + [0,O,、、、、、、、、,0,50,Sl、、、、
5s−2゜5s−1コ ==〉 d−sビットだけゼロ拡張 [RO,R1,、、、、Rd−s−1,Rd−s、Rd
−s+1.、、、Rd−2゜Rd−1] (destに
設定される)(d<sの時) [0,O,、、、、、、、、,0,Do、 Dl、
、、、Dd−2゜0d−1] + s−dビットだ6ナゼa拡張 [:SO,Sl、、、、、5s−d−1,5s−d、5
s−d+1.、、.5s−2゜5s−1コ ==〉 [FO,Fl、、、、、Fs−d−1,Fs−d、Fs
−d+1.、、 、Fs−2゜Fs−1コ =:〉 [RO,R1,、、、Rd−2゜ Rd−1] (destに設定される)FO,Fl、、
、、、Fs−d−1 s−dビットがカットされる。 Ljlag O 門−flag RO ZJIag [RO〜d−1コ = OV−f
lag U[:Dl + u[sコ ≧
+2″dXJIag☆ いずれの場合も、destの
サイズからの桁上げがXJIagにセットされ る。 (d≧Sの時) U[DO,Dl、、、、、Dd−s−1,Dd−s、D
d−s+1、、、、Dd−2,0d−13+ U[0,帆、、、、、、、、、O,SO。 Sl、、、、5s−2,5s−1コ ≧ +2″dd−
sビットだけゼロ拡張 ADDU命令のV−flagと同じ (d<sの時) [DO,Dl 、、、、Dd−2,Dd−1コ + U[:5s−d 、5s−d+ 1、、、.5s−2,5s−1]≧ +2″dSO,S
l、、、、、5s−d−1 s−dビットがカットされる 【プログラム例外】 ・予約命令例外 ・RR=’ll’のとき ・聞=’ll’のとき ・EaRが@−5Pのとき ・EaMil#imm−data、@SP+、@−SP
のとき【ニモニック】 ADDX src、dest 【命令の機能】 dest + src + XJlag ==> de
stキャリーを含めた加算 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第73図に示
す。 【フラグ変化】 第74図に示す。 【解説】 ソースオペランドとキャリーをデスティネーションオペ
ランドに加算する。 ソースオペランドのサイズがデスティネーションオペラ
ンドのサイズよりも 小さい時は、ソースが符号拡張された上で加算される。 ZJlagでは、フラグ値を累積できるようになってい
る。また、ADDXとADDのフラグ変化は、符号拡張
/ゼロ拡張を含めてほとんど同じである。ADDとAD
DXでフラグ変化の異なるのは、Zjlagのみである
。 なお、ADDX、 5UBXの累積サイズ間演算につい
ては、例えば8バイトの数dest2〜dest 1に
4バイトの数srcを加える場合、 ADD @src、W、@dest1.WADDX
#0.@dest2.W のADDX:E R0といった形で利用することがある
。 (d≧Sの時) [DO,Dl、、、、、Dd−s−1,Dd−s、Dd
−s+1.、、、Dd−2゜0d−1]÷ [SO,SO,、、、、、、、、SO,So、
Sl、、、、5s−2゜5s−1] + XJIag
==> d−sビットだけ符号拡張 [RO,R1,、、、、Rd−s−1,Rd−s、Rd
−s+1.、、、Rd−2゜Rd−1] (destに
設定される)(dosの時) [D、DO,、、、、、、、、DO,DO,Dl、、、
、Dd−2゜0d−1] + s−dビットだけ符号拡張 [SO,Sl、、、、、5s−d−1,5s−d、5s
−d+1.、、.5s−2゜5s−1コ + X−fl
ag ==>[FO,Fl、、、、、Fs−d−1,
Fs−d、Fs−d+1.、、、Fs−2゜Fs−1]
==> [RO,R1,、、、Rd−2゜ Rd−1] (destに設定される)FO,Fl、、
、、、Fs−d−t s−dビットがカットされる。 し−flag☆ S[:Dl + S[:Sl
+ X−flag < 0符号付きの数と見
て演算を行ない、 結果が負になることを表わす。 d−I−8の場合には、オペランドが符号拡張されてか
ら比較される。 (MJlagも結果の正負を表わすが、Mjlagが正
しい正負を表示する のはオーバーフローのない時に 限られる。) 町flag RO Zjlag [RO〜d−1] = O、and、
previousjlag V−flag S[Dl + S[Sl +X−f
lag < −2’″(d−1) 、or。 S[Dコ + SCSコ + XJlag ≧ +2
′(d−1) 符号付きの数と見て演算を行ない、 結果がオーバーフローすることを 表わす。d≠Sの場合にはオペラン ドが符号拡張される。 XJlag☆ いずれの場合も、destのサイズから
の桁上げがXJlagにセットされ る。 (d≧Sの時) U[DO,Dl、、、、、Dd−s−1,0d−s、D
d−s+1.、。 Dd−2,0d−1] + u[so、so、、、、、、、、、so、 so、
st、、。 5s−2,5s−1] + X−flag ≧ +2−
dd−sビットだけ符号拡張 dosの場合には符号拡張を行なう。 これは、destや他のフラグの設定 の処理と共通化したためである。 しかし、符号拡張後の演算、比較 ではオペランドが符号なしの数と して扱われる。 (dosの時) (ICDo、 01.、、。 Dd−2,Dd−1] + U[:5s−d、5s−d+1 、 、 、 。 5s−2,5s−1] + X−flag≧ +2−d
SO,Sl、、、、、5s−d−1 s−dビットがカットされる 【プログラム例外】 ・予約命令例外 ・RR=’ll’のとき ・M門=’ll’のとき ・EaRが@−5Pのとき * Ea勃イ#imm−data、@sP+、@−5P
のとき【ニモニック】 Sue 、src、dest 【命令の機能】 dest −src ==> dest減算、符号拡張
と減算 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第75図に示
す。 【フラグ変化】 第76図に示す。 【解説】 ソースオペランドをデスティネーションオペランドから
減する。 ソースオペランドのサイズがデスティネーションオペラ
ンドのサイズよりも小さい時は、ソースが符号拡張され
に上で減算される。 デスティネーションのサイズが小さく、演算結果がデス
ティネーションのサイズの符号付き整数として表現でき
ない時は、VJlagがセットされる。 (di=sの時) [DO,Dl、、、、、Dd−s−1,0d−s、Dd
−s+1. 、 、 、Dd−2゜Dd−1] − [SO,SO,、、、、、、、、SO,SO,Sl、、
、、5s−2゜5s−1] ==> d−sビットだけ符号拡張 [RO,R1,、、、、Rd−s−1,Rd−s、Rd
−s+1.、、 、Rd−2゜Rd−1コ(destに
設定される) (d<sの時) [:DO,DO,、、、、、、、、DO,DO,Dl、
、、、Dd−2゜0d−11− 5−dビットだけ符号拡張 [SQ、Sl、、、、、5s−d−1,5s−d、5s
−d+1.、、.5s−2゜5s−1コ :=〉 (:FO,Fl、、、、、Fs−d−1,Fs−d、F
s、−d+1.、、、Fs−2゜Fs−1コ ==) [RO,R1,、、、Rd−2゜ Rd−1コ(destに設定される) FO,Fl、、、、、Fs−d−1 s−dビットがカットされる。 LJIag☆ s[o]−s[s] < 0結果が負に
なることを表わす。 (MJIagも結果の正負を表わすが、MJIagが正
しい正負を表示する のはオーバーフローのない時に 限られる。) 町flag RO ZJlag [RO〜d−1] :OVjlag
S[Dコ − S[Sl < −2−(
d−1) 、Or。 S[Dコ − S[Sコ ≧ +2−(d−1)Xjl
a、!i☆ いずれの場合も、destのサイズからの
桁下げがXjlagにセットされ る。 (d≧Sの時) U[DO,Dl、、、、、Dd−s−1,0d−s、D
d−s+1、、、、Dd−2,0d−1] − U[SO,SO,、、、、、、、、SO,So、
Sl、、、、5s−2,5s−1コ く 0d−sビッ
トだけ符号拡張 (dosの時) uc oo、 oi 、、、、Dd−2,0d−1コ − U[:5s−d、5s−d+1 、、、.5s−2,5s−1コ く O20,Sl、、
、、、5s−d−1 s−dビットがカットされる 【プログラム例外] ・予約命令例外 ・RR=’ll’のとき φ聞=’ll’のとき ・EaR,ShRwが@−5Pのとき ・EaM、ShMが#imm−data、@SP+、@
−5Pのとき【ニモニック】 5UBU src、dest 【命令の機能】 dest −src ==> destゼロ拡張と減算 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第77図に示
す。 【フラグ変化】 第78図に示す。 【解説】 ソースオペランドをデスティネーションオペランドから
減する。 ソースオペランドのサイズがデスティネーションオペラ
ンドのサイズよりも小さい時は、ソースがゼロ拡張され
た上で減算される。 デスティネーションのサイズが小さく、演算結果がデス
ティネーションのサイズの符号なし整数として表現でき
ない時は、Vjlagがセットされる。 (d≧Sの時) [DO,Dl、、 、 、 、Dd−s−1,Dd−s
、Dd−s+1 、 、、 、Dd−2゜Dd−1コ
− [0,0,、、、、、、、、、O,So、 Sl、
、、、5s−2゜5s−11==> d−sビットだけゼロ拡張 [RO,R1,、、、、Rd−s−1,Rd−s、Rd
−s+1.、、、Rd−2゜Rd−11(destに設
定される) (dosの時) [0,0,、、、、、、、、、O,Do、 Dl、
、、、Dd−2゜0d−11− 5−dビットだけゼロ拡張 [SO,Sl、、、、、5s−d−1,5s−d、5s
−d+1.、、.5s−2゜5s−1] ==> [FO,Fl、、、、、Fs−d−1,Fs−d、Fs
−d+1.、、、Fs−2゜Fs−1] ==> [RO,R1,、、、Rd−2゜ Rd−tl (destに設定される)FO,Fl、、
、、、Fs−d−1 s−dビットがカットされる。 LJIag☆ U[D] −U[Sコ く O結
果が負になることを表わす。 (Lflagも結果の正負を表わすが、Mjlagが正
しい正負を表示する のはオーバーフローのない時に 限られる。) 門−flag RO ZJlag [:RO−d−1] = OVJIa
g U[Dコ − U[Sコ く 0sue
u命令のL−flagと同じ Xjlag☆ いずれの場合も、destのサイズから
の桁下げがXjlagにセットされ る。 (d≧Sの時) U[DO,DI 、 、、 、 、Dd−s−1、0d
−s、Dd−s+1、、、、Dd−2,0d−1]
− U[0,帆、、、、、、、、、O,So、 Sl、
、、5s−2,5s−1コ く 0 d−sビットだけゼロ拡張 SUB命令のXjlag、 5UBU命令のLJIag
、V−flagと同じ (d<sの時) U[DO,Dl、、、、Dd−2,0d−1] −U[
:5s−d、5s−d+1 、、、.5s−2,5s−11< O 20,Sl、、、、、5s−d−1 s−dビットがカットされる 【プログラム例外] ・予約命令例外 ・RR=’ll’のとき φ聞=’ll’のとき ・EaRが@−SPのとき ・EaMが#imm−data、1ilsP+、@−5
Pのとき【ニモニック】 5UBX src、dest 【命令の機能】 dest −src −XJIag ==> dest
キャリーを含めた減算 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第79図に示
す。 【フラグ変化】 第80図に示す。 【解説】 ソースオペランドとキャリーをデスティネーションオペ
ランドから減する。 ソースオペランドのサイズがデスティネーションオペラ
ンドのサイズよりも小さい時は、ソースが符号拡張され
た上で減算される。 ZJIagではフラグ値を累積できるようになっている
。また、5uBXとSUBのフラグ変化は、符号拡張/
ゼロ拡張を含めてほとんど同じである。SUBと5UB
Xでフラグ変化の異なるのは、Zflagのみである。 (d≧Sの時) [DO,Dl、、、、、Dd−s−1,0d−s、Dd
−s+1.、、 、Dd−2゜0d−1] − [SO,SO,、、、、、、、、SO,So、 S
l、、、、5S−2゜5s−1] −X−flag =
=> d−sビットだけ符号拡張 [RO,R1、、、、、Rd−s−1、Rd−s、Rd
−s+1.、、、Rd−2゜Rd−1] (destに
設定される)(d<sの時) [DO,DO,、、、、、、、、DO,DO,Dl、、
、、Dd−2゜Dd−1] − 5−dビットだけ符号拡張 ISO,Sl、、、、、5s−d−1,5s−d、5s
−d+1.、、.5s−2゜5s−1] −X−fla
g ==> [FO,Fl 、 、 、、 、Fs−d−1、Fs−
d、Fs−d+1 、 、 、 、Fs−2゜Fs−1
] ==> [RO,R1,、、、Rd−2゜ Rd−1] (destに設定される)FO,Fl、、
、、、Fs−d−1 s−dビットがカットされる。 LJIag☆ S[Dl −,5ESE −X−fla
g < 0符号付きの数と見て演算を行ない、 結果が負になることを表わす。 dosの場合にはオペランドが符号 拡張されてから比較される。 (Mjlagも結果の正負を表わすが、町flagが正
しい正負を表示する のはオーバーフローのない時に 限られる。) 一−flag RO Zjlag [:RO〜d−1] = 0 、an
d、 previousjlag VJIag S[Dl−5[Sコ − X−
flag < −2−(d−1) 、or。 S[Dl −S[51−X−flag≧+2−(d符号
付きの数と見て演算を行ない、 結果がオーバーフローすることを 表わす。d≠Sの場合にはオペラン ドが符号拡張される。 る。 (d≧Sの時) U[DO,Dl、、、、、Dd−s−1,0d−s、D
d−s+1、、、、Dd−2,Dd−1コ − υ[SO,SO,、、、、、、、、SO,So、
51、、、.5s−2,5s−11−XJIag <
0d−sビットだけ符号拡張 dosの場合には符号拡張を行なう。 これは、destや他のフラグの設定 の処理と共通化したためである。 しかし、符号拡張後の演算、比較 ではオペランドが符号なしの数と して扱われる。 (dosの時〉 U[Do、 Dl、、、、Dd−2,Dd−1
コ −U[5s−d、5s−d+1 、、、.5s−2,5s−1] −X−flag <
050.51.、、、.5s−d−1 S司ビツトがカットされる 【プログラム例外】 ・予約命令例外 ・RR=’ll’のとき ・MM=’ll’のとき 11EaRが@−5Pのとき * EaMが# imm−data、@SP+、Ii!
−5Pのとき【ニモニック】 MUL src、dest 【命令の機能】 dest * src ==> dest乗算 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第81図に示
す。 【フラグ変化】 第82図に示す。 【解説】 ソースオペランドをデスティネーションオペランドに乗
する。乗算は符号付きで行われ、オペランドも符号付き
整数とみなされる。 この命令は、被乗数のサイズと結果のサイズが等しいた
め、高級言語向きである。 デスティネーションのサイズが小さく、演算結果がデス
ティネーションのサイズの符号付き整数として表現でき
ない時は、VJlagがセットされる。オーバーフロー
が生じた場合にも、destにセットされるデータ(正
しい結果の下位ビット)が基準となってMJIag。 ZJlagがセットされる。例えば、RO=H’ 10
000で MUL、W It)1’1oooo、ROを実行した
場合、積がH’ 100000000となるため、RO
=O(下位ビット) 、 V−flag=1. Z−
flag=1となる。 【プログラム例外】 ・予約命令例外 ・RR=’ll’のとき ・M門=’ll’のとき ・EaRが@−5Pのとき ・EaMが#imm−data、@SP+、@−5Pの
とき【ニモニック】 MULU src、dest 【命令の機能】 dest * src ==> dest符号なし乗算 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第83図に示
す。 【フラグ変化】 第84図に示す。 【解説】 ソースオペランドをデスティネーションオペランドに乗
する。乗算は符号なしで行われ、オペランドも符号なし
整数とみなされる。 デスティネーションのサイズが小さく、演算結果がデス
ティネーションのサイズの符号なし整数として表現でき
ない時は、v−f l agがセットされる。 【プログラム例外】 ・予約命令例外 ・RR=’ll’のとき ・開=’ll’のとき ・EaRが@−5Pのとき 会Ea勃t#imm−data、@SP+、@−5Pの
とき【ニモニック】 MULX src、dest、tmp【命令の機能
】 destネsrc ==> reg&dest (do
uble 5ize)拡張乗算、サイズが大きくなる 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第85図に示
す。 【フラグ変化】 第86図に示す。 【解説】 ソースオペランドをデスティネーションオペランドに乗
する。この命令は、積が倍長で得られるため、srcと
destのほかに、積の上位ビットを入れるためのテン
ポラリレジスタtmpを指定する。サイズは32ビツト
に固定(32/64から選択)とする。乗算は符号なし
で行われ、積のサイズは被乗数のサイズの2倍になる。 [MuLXのオペレーション] dest[0:31コ X src[o:31コ =
=> tmpl[0:63コ tmp1[32:63コ ==> tmpj:0:3
1コtmpl[:O:31コ ==> dest[:
0:31コ間しXでは、得るべき結果がdest、
tmpの二つあるので、両者が重なった場合(dest
でtmpと同じレジスタを指定した場合)の処置が問題
となる。一般に、tmp (MULXの上位桁)の方は
次の桁への桁上がりとして用いられることが多いので、
最終桁の計算などでは使用しないこともある。したがっ
て、両者が重なった場合には、destに設定すべき値
(MULXの下位桁〉の方が残るものとする。 (付録
12参照)1’1ULXの町flag、 Z−fla
gのフラグ変化は、destを基準とする。tmpに設
定される値は、これらのフラグには影響しない。このよ
うな仕様になったのは、次のような理由による。 ・ADDX、 5UBXなどのフラグ変化の仕様に合わ
せたため。 (ADDX、 5UBXテは、X−fl
agがセットされていても、destが0であればZJ
Iagがセットされる。)・多倍長演算を考えた場合に
は、 tmp&destのみでフラグを変化させてもあまり意
味がない。フラグ本来の意味 で変化させるためには、全体の値を通 して判定することが必要であり、個々 の命令だけでは対処できない。tmp&destでフラ
グ変化を行なったとしても、結局中途半端である。 例: [実行前コ R1=H’0OO00000dest=)l’2000
0000src=H’40000000 門υLX @src、@dest、R1[実行後コ tmp=8 ’ 0800000000000000R
1dest destに設定される値が0なので、 Zjlagがセットされる。 なお、MULX、 DIVXテは、ADOX、 5
(JBXとは異なり、Zjlagは累積した変化をする
わけではない。 FJlagによってt+np=00テストが可能である
。 !二0の場合は、動作を保証しない。 実際「本発明装置」ては!=0の場合、srcサイズを
、!R(8ビツトまたは16ビツト)としてオペランド
のフェッチを行ない、それを32ビツトに符号拡張して
命令が実行される。 ただし、dest、tmpは!Rによらず常に32ビツ
トとして扱われる。 【プログラム例外】 ・予約命令例外 ・+R=’ll’のとき 注)!二0のときは予約命令例外としては検出しない。 ・EaRが@−5Pのとき −EaMRが#imm−data、@SP+、@−5P
のとき【ニモニック】 DIV src、dest 【命令の機能】 dest / src ==> dest除算 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第87図に示
す。 【フラグ変化】 第88図に示す。 【解説】 ソースオペランドでデスティネーションオペランドを割
る。除算は符号付きで行われ、オペランドも符号付き整
数とみなされる。 この命令は、被除数のサイズと結果のサイズが等しいた
め、高級言語向きである。 商は0方向に丸められ、余りの符号は被除数と同じにな
る。 例: 1013 → 商=3. 剰余=1(−
10)/3 → 商=(−3)、 剰余=(−
1)10/(−3) → 商(−3)t 剰余
=1src=0の場合には、ゼロ除算例外(ZDE)と
なる。 ゼロ除算の場合、VJIagがセットされて例外処理が
起動されるが、destの値は変化しない。 このとき、destのライトアクセスを行なうかどうか
、すなわち、同じ値を書き込むか、何も書き込まないか
は規定しないものとする。 また、Vjlag以外のフラグも変化しない。これは、
destに合わせたため、および、例外処理プログラム
で例外発生要因を解析するためには、できるだけ以前の
状態(フラグを含めて)が保存されている方が望ましい
ためである。 DIVで0除算以外の場合にオーバーフローが発生ずる
のはく最小負数)÷(−1)の場合のみである。DIV
は旧vxとは異なり、コンパイラの生成する普通の演算
命令であるため、できるだけ他の演算命令と同じ仕様に
する方が望ましい。そこで、この場合のフラグの変化は
、それぞれのフラグの意味を生かして、 V、、flag=1 、L−flag=o、M−fla
g=1.Z−flag=0(最小負数÷(−1)の時) とする。オーバーフローするのは(最小負数÷(−1)
)に限るので、正しい結果の下位ビットがdestにセ
ットされると考えても、結局destは変化しない。正
しい結果の下位ビットになったと考えても結局同じ値で
ある。 例: 5rc=H’ffff=(−1)、dest=)l’3
000=(−32768)でDIV、Hを実行した場合 ==> dest=H’8000.V−flag=1d
estの8’8000は、正しい結果(H’ 、、、0
08000=32768)の下位ビットと考えることも
できるし、dest が変化しなかったと考えることも できる。 【プログラム例外】 ・予約命令例外 φRR=’ll’のとき ・聞=’ll’のとき ・EaRが@−5Pのとき ・EaMが#imm−data、[i!SP+、@−S
Pのとき・ゼロ除算例外 ・5rc=00とき 【ニモニック] DIVU src、dest 【命令の機能】 dest / src =:=> dest符号なし除
算 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第89図に示
す。 【フラグ変化】 第90図に示す。 【解説】 ソースオペランドでデスティネーションオペランドを割
る。除算は符号なしで行われ、オペランドも符号なし整
数とみなされる。 5rc=:Oの場合には、ゼロ除算例外(ZDE)とな
る。 ゼロ除算の場合、VJIagがセットされて例外処理が
起動されるが、destは変化しない。このとき、de
stのライトアクセスを行なうかどうか、すなわち、同
じ値を書き込むか、何も書き込まないかは規定しないも
のとする。また、Vjlag以外のフラグも変化しない
。これは、destに合わせたため、および、例外処理
プログラムで例外発生要因を解析するためには、できる
だけ以前の状態(フラグを含めて)が保存されている方
が望ましいためである。 DIVLI命令では、0除算以外の場合に、オーバーフ
ローが発生してVJlagがセットされることはない。 したがって、0除算以外の場合は必ずVJlagがクリ
アされる。 【プログラム例外】 ・予約命令例外 ・RR=911’のとき ・M台=’ll’のとき ・EaRが@−5Pのとき ・EaMが#imm−data、@SP+、@−5Pの
とき・ゼロ除算例外 φ5rc=oのとき 【ニモニック】 DIVX src、dest、tmp【命令の機能
】 reg&dest / src ==> dest、r
eg (quotient、remainder) 拡張除算、サイズが小さくなる、剰余を出す【命令オプ
ション】 なし 【命令ビットパターンとアセンブラ表記】第91図に示
す。 【フラグ変化】 第92図に示す。 【解説】 ソースオペランドでデスティネーションオペランドを割
る。この命令は、多倍長除算のプリミティブとなるため
、srcとdestのほかに、拡張演算のためのテンポ
ラリ値(剰余)を置くレジスタを指定する。サイズは3
2ビツトに固定(32/64から選択)とする、除算は
符号なしで行われ、被除数のサイズは除数のサイズの2
倍になる。 [DIVXのオペレーション] concatinate(tmp[0:31コ、des
t[0:31コ)==> t+apl[o:63コ quo(tmpl[0:63]、src[o:311)
==> dest[0:31] rem(tmpl[0:63]、src[o:31])
==> tip[0:31] DIVXでは、得るべき結果がdest、 tipの
二つあるので、両者が重なった場合(destT:tm
pと同じレジスタを指定した場合)の処置が問題となる
。一般に、tip (DIVXの剰余)の方は次の桁へ
の桁下がりとして用いられることが多いので、最終桁の
計算などでは使用しないこともある。したがって、両者
が重なった場合には、destに設定すべき値(DIV
Xの商)の方が残るものとする。 なお、DIVXは被除数が多倍長の場合に使用できる命
令であるが、除数が多倍長になフた場合には、DIVX
が使用できず、プログラムによってシフトや減算を繰り
返しながら割り算を進めなければならない。この際、多
倍長のシフト演算が必要になる。多倍長のシフトを実現
するため、XJIagを通したローティト命令(St(
XR,5)IXL)が用意されている。 DIVXのMjlag、 Z−flagのフラグ変化
は、dest(商)を基準とする。tmpに設定される
値(剰余)は、これらのフラグには影響しない。ただし
、FJlagによってtmp=oのテストが可能である
。 MULX、 DIVXテはADDX、 5UBXと
は異なり、Z−flagは累積した変化をするわけでは
ない。 DIVXで結果がオーバーフローした場合、MOV。 ADD、 SUB、 MULでのオーバーフローと仕様
を合わせるという意味では、正しい結果の下位ビットが
destに設定されるのが望ましい。しかし、ADD、
Sueのように、オーバーフローの時も自然に正しい
結果の下位ビットが得られるものと違って、除算の場合
には上位ビットから計算を行なうため、アルゴリズムの
関係で正しい結果の下位ビットを得るのが難しい。 したがって、DIVXのオーバーフローの場合には、d
estを変化させないという仕様にする。 DIVXで商がdestに入らず、オーバーフローが発
生した場合には、VJlag以外のフラグは変化しない
。これは、otvxでオーバーフローが発生した場合に
、destが変化しないことに合わせたものである。 5rc=oの場合には、ゼロ除算例外(ZDE)となる
。 ゼロ除算の場合dest、tmpは変化しない。このと
き、destのライトアクセスを行なうかどうか、すな
わち、同じ値を書き込むか、何も書き込まないかは規定
しないものとする。また、VJIag以外のフラグも変
化しない。これは、destに合わせたため、および、
例外処理プログラムで例外発生要因を解析するためには
、できるだけ以前の状態(フラグを含めて)が保存され
ている方が呈ましいためである。 !=0の場合は、動作を保証しない。 実際r本発明装置」では!=00場合、srcサイズを
、!R(8ビツトまたは16ビツト)としてオペランド
のフェッチを行ない、それを32ビツトに符号拡張して
命令が実行される。 ただし、dest、tmpは!Rによらず常に32ビツ
トとして扱われる。 【プログラム例外】 ・予約命令例外 ・IR=’ll’のとき 注)!=0のときは予約命令例外としては検出しない。 ・EaRが@−5Pのとき ・EaMRが#imm−data、@SP+、@−5P
のとき・ゼロ除算例外 ・5rc=0のとき 【ニモニック】 REM src、dest 【命令の機能】 dest X src ==> dest剰余 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第93図に示
す。 【フラグ変化】 第94図に示す。 ランドを割り、その剰余を求める。除算は符号付きで行
われ、オペランドも符号付き整数とみなされる。 この命令は、被除数のサイズと剰余のサイズが等しいた
め、高級言語向きである。 商は0方向に丸められ、余りの符号は被除数と同じにな
る。 例: 10/3 → 商=3. 剰余=1(−
10)/3 → 商=(−3)、 剰余=(−
1)10/(−3) → 商=(−3)、 剰
余=1s rc=oの場合には、ゼロ除算例外(ZDE
)となる。 ただし、REMで0除算を行なった場合には、オーバー
フローをクリアして例外処理を起動するようにする。R
EM命令では、DIV命令とは異なり、0除算をしても
dest (剰余)がオーバーフローするわけではない
ので、VJlagはクリアしておく方が合理的である。 また、VJlagをクリアしておくと、例外処理の中で
DIVによるエラーかREMによるエラーかが判定しや
すい。 0除算の場合、destは無変化である。destに対
してメモ1ジアクセスを行なうか(readまたは同じ
値でread−mod ify−wri te)、アク
セスを行なわないか、については、インプリメント方法
を縛ることになるので、規定しない。 【プログラム例外】 ・予約命令例外 ・RR=’ll’のとき 伺門=’ll’のとき ・EaRが@−5Pのとき φEa勃t#imm−data、[i!SP+、@−5
Pのとき・ゼロ除算例外 @5rC=0のとき 【ニモニック] REMU src、dest 【命令の機能】 destχsrc ==> dest 符号なし除算による剰余 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第95図に示
す。 【フラグ変化】 第96図に示す。 【解説】 ソースオペランドでデスティネーションオペランドを割
り、その剰余を求める。除算は符号なしで行われ、オペ
ランドも符号なし整数とみなされる。srcとdest
のサイズの違う場合にはゼロ拡張が行なわれる。 この命令は、被除数のサイズと剰余のサイズが等しいた
め、高級言語向きである。 5rc=:Oの場合には、ゼロ除算例外(ZDE)とな
る。 0除算の場合の処置はREMと同様である。 【プログラム例外】 ・予約命令例外 ・RR=’ll’のとき ・朋=’ll’のとき ・EaRが@−5Pのとき ・Ea勃1#imm−data、@SP+、@−5Pの
とき・ゼロ除算例外 ・5rc=0のとき 【ニモニック】 NEG dest 【命令の機能】 0− dest ==> dest 補数演算 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第97図に示
す。 【フラグ変化】 第98図に示す。 【解説】 オペランドの符号を反転する。 LJIag 命令実行後のdestの値が負のとき
、すなわちdestの初期値が正のとき セットされる。 町flag 命令実行後のdestのMSBが1の
とき、すなわちdestの初期値が正または 最小負数のときセットされる。 ZJIag 命令実行後のdestの値がOのとき
、すなわちdestの初期値が0のときセットされる。 V、、flag destの初期値が最小負数(M
SBのみ1で他のビットはallo)のみセッ トされる。 【プログラム例外】 ・予約命令例外 番MMが111のとき ・EaMが#imm−data、l!SP+、@−5P
のとき【ニモニック】 INDEX 1ndexsize、5ubscri
pt、xreg【命令の機能】 calculate address of arra
y多次元配列のアドレス計算 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第99図に示
す。 【フラグ変化】 第100図に示す。 【解説】 多次元配列を一次元配列に展開するためのアドレス計算
として、スケールの乗算とインデクスの加算を行なう。 5ubscriptのサイズがx regのサイズより
も小さい時は、5ubscriptが符号拡張される。 xreg。 1ndexsize、 5ubscriptは符号付き
の整数と考え、乗算および加算は符号付きで行なう。乗
算または加算でオーバーフローを検出した場合には、V
JIagをセットする。 1ndexsizeは固定値(immediate)で
済むことが多いが、メモリ上に配・列のディスクリブタ
を作ることを考え、汎用アドレッシングとしている。 INDEX命令がCHK命令の後で実行されるならば、
5ubscriptはレジスタのみの指定でよい。しか
し、高級言語の仕様によっては範囲をチエツクしない(
C)IK命令を実行しない)こともあるので、メモリ上
の変数を5ubscriptとして使用できるように、
5ubscriptも汎用アドレッシングとしている。 [INDEXのオペレーションコ xreg * 1ndexsize + 5ubscr
ipt ==> xregINDEX命令では、オペラ
ンドxreg、 1ndexsize。 5ubscriptは、すべてポインタではなく符号付
きの数として扱われる。負であってもそのまま演算し、
EITなどの特別な動作はしない。また、フラグ変化(
VJIag、L−flag、M−flag、Z−fla
g)も一般の算術演算命令に準じたものになっている。 これに関して若干補足しておく。 INDEXで扱うオペランドは、ポインタというよりも
配列のインデクスであり、INDEXでは配列のインデ
クスを一次元に展開するという°処理を行なう。インデ
クスがポインタになるのは、付加モードのスケーリング
で(×4)などを行なった後である。したがって、IN
DEXで扱うデータを符号付きと考えても特に不自然は
ないし、インデクスが負になると困るような言語では、
それをチエツクすることもできる。 !:00ときは、動作を保証しない。 実際r本発明装置」では!=0の場合、1ndexsi
zeサイズを!R(8ビツトまたは16ビツト)として
オペランドのフェッチを行ない、それを32ビツトに符
号拡張して命令が実行される。ただし、xregは!R
によらず常に32ビツトとして扱われる。 【プログラム例外】 ・予約命令例外 拳t*=’ttゝのとき ・ss=’tt’のとき 注) !=’0’のときは予約命令例外としては検出し
ない。 ・EaR,EaR2が@−SPのとき 12−4. 弘 口Δ 【ニモニック】 AND src、dest 【命令の機能】 dest 、and、 src ==> dest論理
積 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第101図に
示す。 【フラグ変化】 第102図に示す。 【解説】 ソースオペランドとデスティネーションオペランドとの
論理積をとる。 ソースオペランドのサイズがデスティネーションオペラ
ンドのサイズと異なる異種サイズ間の演算(AND:G
のRR≠朋、AND:Eの聞≠00)になった場合、命
令はそのまま実行され、予約命令例外とはならないが、
destに設定される結果は保証できない(インプリメ
ント依存になる)ものとする。 r本発明装置」の仕様
としては、異種サイズ間の論理演算を規定していないの
で、この機能をソフトウェアで利用してはいけない。異
種サイズ間の論理演算はあまり意味のない命令であるが
、これを予約命令例外としないのは、インプリメントの
負担が大きく、実行速度に影響が出るためである。 町flag RO Zjlag [RO−d−1コ = 0【プログ
ラム例外] ・予約命令例外 ・RR=’ll’のとき ・開=’ll’のとき ・EaRがg−spのとき ・EaMが#imm−data、@SP+、@−5Pの
とき【ニモニック】 ORsrc、dest 【命令の機能】 dest 、or、 src =:=> dest論理
和 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第103図に
示す。 【フラグ変化】 第104図に示す。 【解説】 ソースオペランドとデスティネーションオペランドとの
論理和をとる。 ソースオペランドのサイズがデスティネーションオペラ
ンドのサイズと異なる異種サイズ間の演算(OR:Gの
RR≠門、OR:Eの聞≠00)になった場合、命令は
そのまま実行され、予約命令例外とはならないが、de
stに設定される結果は保証できない(インプリメント
依存になる)ものとする。 門−flag RO ZJIag [RQ 〜d−1コ = 0【プロ
グラム例外] ・予約命令例外 ・RR=’ll’のとき ・開=’ll’のとき ・EaRがトSPのとき ・EaMが#imm−data、@SP+、@−5Pの
とき【ニモニック】 XORsrc、dest 【命令の機#!】 dest 、xor、 src =:=> dest排
他的論理和 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第106図に
示す。 【フラグ変化】 第106図に示す。 【解説】 ソースオペランドとデスティネーションオペランドとの
排他的論理和をとる。 ソースオペランドのサイズがデスティネーションオペラ
ンドのサイズと異なる異種サイズ間の演算(XOR:G
(7)RR6MM、XOR:E(7)MM#00)にな
った場合、命令はそのまま実行され、予約命令例外とは
ならないが、destに設定される結果は保証できない
(インプリメント依存になる)ものとする。 門−flag RO ZJIag [:RO−d−1] = 0【プログ
ラム例外】 ・予約命令例外 ・RR=’ll’のとき ・聞=’ll’のとき ・EaRが@−5Pのとき ・EaMが#imm−data、@SP+、IニーSP
のとき【ニモニック】 NOT dest 【命令の機能】 dest ==> dest 全ビット反転 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第107図に
示す。 【フラグ変化】 第108図に示す。 【解説】 オペランドの各ビットの1とOを反転する。 Mjlag 命令実行後のdestのMSBが1の
とき、すなわちdestの初期値のMSBがOのときセ
ットされる。 ZJIag 命令実行後のdestの値が0のとき
、すなわちdestの初期値が00ときセットされる。 【プログラム例外】 ・予約命令例外 ・聞=’ll’のとき ・EaMが#imm−dataJsP+、@−SPのと
き12−5. ぐ 。Δ 【ニモニック】 SHA count、dest 【命令の機能】 5hift arithmetic 算術シフト 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第109図に
示す。 【フラグ変化】 第110図に示す。 【解説】 デスティネーションオペランドdestをソースオペラ
ンドcountて指定されたビット数だけ算術シフトす
る。−船形の命令では、countの符号によってシフ
ト方向を指定する。countが正の時左シフト、負の
時右シフトとなる。 算術シフトであるため、右シフトの場合にはデスティネ
ーションのMSB (符号ビット)が変化せず、同じ値
が右側のビットにコピーされていく。左シフトの場合に
は、LSBにOが入り、0が左側のビットにコピーされ
ていく。 正負によるシフト方向の指定は、浮動小数点演算のエミ
ュレーションなどに有効な場合がある。 左シフトの場合はSHAの短縮形がないが、フラグ変化
がSHAと異なってもよければ、SHLの短縮形5)I
L:Qで代用できる。 [左シフト(count> O)の場合]第111図に
示す。 [右シフト(count< O)の場合]第112図に
示す。 なお、count=00場合は、X−flag=oとな
る。 5)IA命令では、countのサイズとして8ビツト
のみが有効である。RR≠00の場合動作を保証しない
。RR≠00の機能が利用できないのは、主としてイン
プリメント上の制約によるものである。 RR≠00の場合には、 「本発明装置」では、サイズ
RRでcountオペランドのフェッチを行ない〜co
untの下位8ビツトのみを有効としてそのまま命令を
実行する。 SHAは算術演算なのでL−f l agをセットする
が、これはdestのはじめの値の符号(MSB)を反
映する。これは、Ljlagが、オーバーフローやアン
ダーフローが発生した場合にも、常に正しい計算結果の
符号を反映するという性質を持っているためである。シ
フト命令の場合、オーバーフローが起こらなければ、d
estの符号は変化しない。右シフトの場合、または左
シフトでオーバーフローがなかフた場合にはL−fla
g=門−flagとなるが、左シフトでオーバーフロー
が発生した場合には、LJIagと遣flagが異なる
変化をすることがある。 r本発明装置」はbig−endianのチップである
ため、countをビット位置の増減の意味で考えるか
、2の累乗の意味で考えるかによって、シフト方向が逆
になってしまう。すなわち、前者の考え方では count>Oの時右シフトとすべきであるのに対して
、後者の考え方では、l1ttfe−endianの場
合と同じように、count>oの時左シフトとなる。 しかし、シフト命令はビット操作関係の命令よりも算術
演算関係の命令に近いものであるから、 countをビット位置の増減の意味で考えるよりは、
2の累乗の意味で考える方が自然である。したがって、
r本発明装置」ではcount>0の時左シフトとい
う仕様になっている。 5)IL、5)IAでは、countの絶対値が(de
stのサイズ+1)を越えた場合にも、指定された数だ
けそのままシフトを続ける。結果的に、countの絶
対値が(destのサイズ+1)の場合と同じ動作にな
る。例えば、次のような動作をする。 SHA #33.dset、W ;dest=
XJlag:0 5HL #33.clest、W ;dest
=X−f Iag=0 5)IA It−33,dest、リ ;des
t=XJ Iag=旧destのMSB SHL #−33.dest、%J ;de
st=X−flag=0 なお、X−flagを除けば、countの絶対値が(
destのサイズ)に等しい場合も同じ結果になる。 【プログラム例外】 ・予約命令例外 ΦRR=’ll’のとき ・M門=211ゝのとき φEaRが@−5Pのとき ・EaM、ShMがlt imm−data、@SP+
、訃SPのとき 【ニモニック】 5)IL count、dest 【命令の機能】 5hift logical 論理シフト 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第113図に
示す。 【フラグ変化】 第114図に示す。 【解説】 デスティネーションオペランドをソースオペランドco
untで指定されたビット数だけ論理シフトする。−膜
形の時、シフト方向はcountの符号で指定する。c
ou n tが正の時左シフト、負の時右シフトとなる
。 右シフトの場合には、MSBに0が入り、0が右側のビ
ットにコピーされていく、また、左シフトの場合には、
LSBに0が入り、0が左側のビットにコピーされてい
く。 〔左シフト(count> 0)の場合]第115図に
示す。 [右シフト(count< O)の場合]第116図に
示す。 なお、count=0の場合は、X−flag=0とな
る。 5)IL命令では、countOサイズとして8ビツト
のみが有効である。 RR≠00の場合、動作を保証し
ない。RR≠00の機能が利用できないのは、主として
インプリメント上の制約によるものである。RR≠00
の場合には、 「本発明装置」ではサイズRRでcou
ntオペランドのフェッチを行ない、countの下位
8ビツトのみを有効としてそのまま命令を実行する。 【プログラム例外】 ・予約命令例外 ・RR=’ll’のとき ・MM=’ll’のとき φEaRが@−5Pのとき 争EaM、ShMが#imm−data、@SP+、@
−SPのとき 【ニモニック】 ROT count、dest 【命令の機能】 otate 回転 r命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第117図に
示す。 【フラグ変化】 第118図に示す。 【解説】 デスティネーションオペランドをソースオペランドco
untで指定されたビット数だけ回転する。すなわち、
LSB(MSB)から溢れたビットをMSB(LSB)
に詰めながらシフトを行なう。 回転方向はcountの符号で指定する。countが
正の時左回転、負の時右回転となる。 回転の際、フラグは通さない。 [左回転(count>0)の場合] 第119図に示す。 [右回転(count< 0)の場合]第120図に示
す。 なお、count=00場合は、X−flag=oとな
る。 ROT命令では、countOサイズとして8ビツトの
みが有効である。RR#OOの場合、動作を保証しない
。RR≠00の機能が利用できないのは、主としてイン
プリメント上の制約によるものである。RR≠00の場
合には、r本発明装置」ではサイズRRでcountオ
ペランドのフェッチを行ない、countの下位8ビツ
トのみを有効としてそのまま命令を実行する。 ROTでcountの絶対値が(destのサイズ)を
越えた場合にも、指定された数だけそのままローティト
を続ける。結果的に、countを(destのサイズ
)で割った剰余をcountとした場合と同じ動作にな
る。ただし、countが(destのサイズ)の整数
倍(≠0)の場合には、MSBまたはLSBに応じてX
−f lagのセットされる点が、count=00場
合とは異なる。例えば、データサイズと同じビット数だ
け回転した場合、データの値そのものは変化せず、de
stはcount=0の時と同じ値になる。しかし、フ
ラグにはもとのデータのしSBがコピーされるため、フ
ラグ変化はcount=oの時とは異なったものになる
。 【プログラム例外】 ・予約命令例外 ・RR=’ll’のとき ◆朋=’ll’のとき ・EaRが@−5Pのとき ・EaMが#imm−data、@SP+、@−5Pの
とき【ニモニック】 5)IXL dest 【命令の機能】 5hift 1eft with extend拡張左
シフト 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第121図に
示す。 【フラグ変化】 第122図に示す。 【解説】 destを1ビツト左にシフトし、元のXfla、gの
内容をLSBに詰める。MSBからあふれたビットはX
flagに入る。この命令は、複数ワードの1ビツトシ
フトを行なうためのプリミティブとして専用化したもの
であり、シフト対象のサイズを32ビツトに固定してい
る点、1ビットのシフトしかできない点、などにおいて
5)IA、5)IL、ROTとはかなり仕様が異なる。 DIVXは被除数が多倍長の場合に使用できる命令であ
るが、除数が多倍長になフた場合には、DIVXが使用
できず、プログラムによってシフトや減算を繰り返しな
がら割り算を進めなければならない。その際、多倍長の
シフト演算が必要になる。この命令は、このような場合
に使用することを目的とした命令である。第123図に
これを示す。 【プログラム例外】 ・予約命令例外 ・+=′O′のとき ・−=212のとき ・X=’l’のとき −EaMXが#imm−data、@SP+、@−SP
のとき【ニモニック】 5HXRdest 【命令の機能】 5hift right with extend拡張
右シフト 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第124図に
示す。 【フラグ変化】 第126図に示す。 【解説】 destを1ビツト右にシフトし、元のX flagの
内容をMSBに詰める。LSBからあふれたビットはX
flagに入る。この命令は、複数ワードの1ビツトシ
フトを行なうためのプリミティブとして専用化したもの
であり、シフト対象のサイズを32ビツトに固定してい
る点、1ビツトのシフトしかできない点、などにおいて
5)IA、SHL、ROTとはかなり仕様が異なる。 DIVXは被除数が多倍長の場合に使用できる命令であ
るが、除数が多倍長になった場合には、DIVXが使用
できず、プログラムによってシフトや減算を繰り返しな
がら割り算を進めなければならない。その際、多倍長の
シフト演算が必要になる。この命令は、このような場合
に使用することを目的とした命令である。第126図に
これを示す。 【プログラム例外】 ・予約命令例外 ・+=′0′のとき ・−=′1′のとき ・x=’t’のとき −EaMXが# imm−data、@SP+、@−5
Pのとき【ニモニック】 RVBV src、dest 【命令の機能】 reverse byte orderバイト順の逆転 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第127図に
示す。 【フラグ変化】 第128図に示す。 【解説】 srcのバイト順を逆転したものをdestに転送する
。 srcよりもdestのサイズの方が大きい場合には、
srcをdestのサイズにまでゼロ拡張した後、de
stのサイズでバイト順を逆転する。 srcよりもdestのサイズの方が小さい場合には、
srcの上位バイトをカットしてdestのサイズとし
た後、destのサイズでバイト順を逆転する。 (srcのアドレスをずらした上でSrCとdestを
同じサイズとしても、結果は同じになる)例: src = I(’1234 RVBY src、H,dest、H==> des
t =14’3412 RVBY src、H,dest、W ==> de
st =H’ 34120000 RVBV src、H,dest、B ==> de
st =H’34 (Hゝ12ではない) この命令は、endianの変換に対するオーバーヘッ
ドを削減することを目的とした命令である。 【プログラム例外】 ・予約命令例外 ・RR=’ll’のとき φ四=’ll’のとき φEaRが@−5Pのとき φEaWが#imm−data、@SP十のとき【ニモ
ニック】 RVBI src、dest 但しく<L2>> 【命令の機能】 reverse bit order ビット順の逆転 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第129図に
示す。 【フラグ変化】 第130図に示す。 【解説】 srcのビット順を逆転したものをdestに転送する
。 srcよりもdestのサイズの方が大きい場合には、
srcをdestのサイズにまでゼロ拡張した後、de
stのサイズでビット順を逆転する。 srcよりもdestのサイズの方が小さい場合には、
SrCの上位バイトをカットしてdestのサイズとし
た後、destのサイズでビット順を逆転する。 (srcのアドレスをずらした上でsrcとdestを
同じサイズとしても、結果は同じになる)乙の命令は、
6ndianの変換に対するオーバーヘッドを削減する
ことを目的とした命令である。ビットマツプの処理を考
えると、ビットを逆順にするビットリバース命令RVB
+もあった方がよいが、バイトリバース命令RVBYよ
りも頻度が少ないこと、追加のハードウェアが必要とな
る可能性が強いこと、により、RVB +命令は<<L
2>>とする。 【プログラム例外】 ・予約命令例外 ・RR=’ll’のとき ・四=’ll’のとき ・EaRが@−5Pのとき ・εaWが#imm−data、@sP+のとき12−
6. ピッ 。Δ 「本発明装置」のビット操作命令では、次の図のように base(base address)offset(
bit address)の2つのパラメータにより操
作対象となるビットを指定する。レジスタ上のビットを
操作する場合には、このほかにbaseのサイズも対象
ビットの指定に影響する。 [メモリ上のビット操作をする場合] 第131図に示す。 r本発明装置」の−膜形のビット操作命令では、off
setの値に制限がなく、offsetがバイト境界を
越えてもよいようになっている。offsetは、符号
付き整数として扱われる。 ビット操作命令では、BBフィールドによりメモリアク
セスの範囲を指定できるようになっている。これは、B
TSTでreadを行なうメモリアドレスの範囲、およ
びBSET、BCLR,BNOTでread −mod
i fy−wr i teを行なうメモリアドレスの
範囲を意味するものである。アクセスされるメモリアド
レスの範囲は、入出力やマルチプロセッサを使用した場
合に問題となることがある。 しかし、実際には、バイト単位のアクセス(’、B’)
のみが使用できればほとんどの場合に十分であるため、
ハーフワード、ワード単位のアクセスは<<L2>>と
する(ただしレジスタに対するビット操作命令を除く)
。また、ハーフワード、ワード単位のアクセスが意味を
持つのは、アライメントのとれたハーフワードやワード
をアクセスする場合に限られているので、ハーフワード
、ワード単位のアクセスの機能を利用するためには、b
aseとして必ずアライメントのとれたアドレスを指定
しなければならないという制限を設ける。これは、アク
セス範囲の指定に間するインプリメントを容易にするた
めである。したがって、アライメントのとれたハーフワ
ードの単位で、対象ビットを含むメモリアクセスを行な
いたい場合には、baseとして20倍数を指定する必
要がある。また、アライメントのとれたワードの単位で
、対象ビットを含むメモリアクセスを行ないたい場合に
は、baseとして40倍数を指定する必要がある。o
ffsetの値については制限はない。baseとして
アライメントのとれていないアドレスを指定した場合の
アクセス範囲は、インプリメントに依存するものとする
。 r本発明装置」では、<<L2>>となっているメモリ
に対するハーフワード、ワード単位のアクセスのインプ
リメントを行なう。またbaseとしてアラインメント
のとれていないアドレスを指定した場合にも、アクセス
範囲はアラインメントのとれたハーフワード、ワード単
位でアクセスを行なう。 [例] BSET、B 1tH’84.@)l’100offs
et 1 B = 4; base + offset
/8 = H’llOなので、H’llOのbit4を
セットする。 H’llOの1バイトについてread −modif
y−writeが行なわれる。 BSET、B #)l’7c、@H’1O1offse
t !、、8 = 4; base + offset
/8 : H’llOでアクセスサイズがバイトなので
、BSET、B #H’84.@)I’100と全く同
じ動作をする。 BSET、W #)l’84.@H’100offse
t X 8 = 4; base + offset/
8 = H’llOなので、H’llOのbit4をセ
ットする。 baseが4の倍数になっているので、H’100〜)
l’103のアライメントのとれた32ビツトについて
read−modify−writeを行ない、対象ビ
ットをセットする。 BSET、W #H’7c、@H’101offset
X 8 = 4 ;base + offset/8
= )I’llOなので、おなじようにH’llOの
bit4をセットする。 しかし、baseが4の倍数ではないので、read−
modify−writeを行なうアクセス範囲につい
てはインプリメ ント依存である。 なお、8Bで示されるサイズは、 「どの範囲に対して
read−modify−writeを行なうか?jと
いうことであり、オフセッ トの範囲(例えば、zBゝであればオフセットが8より
小さくなる、など)を 規定するものではない。 レジスタに対するビット操作命令では、アクセスのサイ
ズ(baseのサイズ)によってoffset=o(M
SB)のビット位置が変わるため、baseのサイズは
重要な意味を持つ* baseがレジスタ直接Rnの場
合は、baseのサイズj、HzJtも<<Ll>>で
ある。 レジスタRn@ baseとしたビット操作命令の場合
、offsetはゝ、B′の時下位3ビツト、′、H′
の時下位4ビツト、′6%Il′の時下位6ビツト、′
、L′の時下位6ビツトのみが有効であり、上位ビット
、は無視される。上位ビットが0でなくても、エラー、
EITとはしない。アーキテクチャ面から見ると、上位
ビットを無視す るよりも、BF命令のwidthなどと同じように、き
ちんとoffsetの範囲をチエツクする方が望ましい
が、チエツクを行 なうことにより命令の実行時間が増大 するため、offsetはアクセスサイズのビット数で
moduloをとって使用することにしている。 レジスタ上に8ビツトデータ、16ビツトデータ、32
ビツトデータを置いた場合では、それぞれのデータで同
じビッ ト位置を持つビットであっても、実際 には異なったビットに対応することに なるので、注意が必要である。仕様が 複雑化するのを避けるため、アセンブ ラのデフォルトはメモリ対象、レジス タ対象とも、Bとする。また、短縮形も、Bの仕様であ
る。したがフて、短縮形でアクセスできるレジスタ上の
範囲は、2°0〜2°7のビットである(第132図参
N)。 [例] BSET:Q $1.rOでは、BSE
Tの場合にデフォルトが 、Bなので、 ro、Bのビット1がセットさ れる。 このビットは、ro、Wのビッ トlとは異なったものであ り、ro、Wのビット25に対応 する。 例えば、2°17のビットをアク セスするつもりで BTST #14.RO と書くと、実際は BTST、B #14. RO と解釈され、offsetは上位ビ ットを無視するので、結局 2−1のビットが対象となる。正 しくは、 BTST、誓#14. RO と書かなければならない。こ のような場合には、アセンブ ラで警告を出すのが呈ましい であろう。 【ニモニック】 BTST offset、base【命令の機能】 −bit −> Z−flag ビットのテスト 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第133図に
示す。 【フラグ変化】 第134図に示す。 【解説】 指定されたビットの値を反転したものをZ−flagに
コピーする。 EaRf 、 5hRfqで指定されるアドレッシング
モードでは、イミディエートモードl$imm−dat
a。 @−5P、 @SP+は使用できない。また、Rnのモ
ードを使用した場合、offsetの上位ビットの値は
無視される。 アセンブラ表記では、メモリアクセスのサイズをbas
eのサイズとして指定する。BTST:Qでは、メモリ
アクセスのサイズは8ビツトに固定されており、サイズ
は′、B′のみを書くことができる。 【プログラム例外】 ・予約命令例外 ΦRR=’ll’のとき ・BB=’ll’のとき 壷EaRがトSPのとき φEaRf、5hRfqが#imm−data、@SP
+、@−5Pのとき 【ニモニック】 BSET offset、base【命令の機能】 ”bit −> Z−flag、1−> bitビット
のセット 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第135図に
示す。 【フラグ変化】 第136図に示す。 【解説】 指定されたビットの値を反転したものをZ−f lag
にコピーし、その後そのビットを1にセットする。 EaMf 、 ShMfqで指定されるアドレッシング
モードでは、イミディエートモード旧mmJata。 @−5P、 @SP+ハ使用テキナイ。マタ、Rn(
D −E −ドを使用した場合、offsetの上位ビ
ットの値は無視される。 アセンブラ表記では、メモリアクセスのサイズをbas
eのサイズとして指定する。BSET:Qでは、メモリ
アクセスのサイズは8ビツトに固定されており、サイズ
は2.B′のみを書くことができる。 【プログラム例外] ・予約命令例外 ・RR=’ll’のとき −BB=’ll’のとき ・EaRが@−SPのとき ・EaMf、ShMfqが#imm−datas@SP
+、@−SPのとき 【ニモニック】 BCLRoffset、base 【命令の機能】 −bit −> Z−flag、O−> bitビット
のクリア 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第137図に
示す。 【フラグ変化】 第138図に示す。 【解説】 指定されたビットの値を反転したものをZ−flagに
コピーし、その後そのビットな0にクリアする。 EaMf、ShMfqで指定されるアドレッシングモー
ドでは、イミディエートモードltimm−data。 @−5P、 @SP+は使用できない。また、Rnのモ
ードを使用した場合、offsetの上位ビットの値は
無視される。 アセンブラ表記では、メモリアクセスのサイズをbas
eのサイズとして指定する。BCLR:Qでは、メモリ
アクセスのサイズは8ビツトに固定されており、サイズ
はゝ、B′のみを書くことができる。 【プログラム例外】 ・予約命令例外 ・RR=’ll’のとき ・BB=’ll’のとき ・EaRが@−5Pのとき ・EaMf、ShMfqが#imm−data、@SP
+、@−5Pのと【ニモニック】 BNOT offset、base【命令の機能】 ”−bit −> Z−flag、−bit −> b
itビットの反転 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第139図に
示す。 【フラグ変化】 第140図に示す。 【解説】 指定されたビットの値を反転したものを2−flagに
コピーし、その後そのビットも反転する。 EaMfで指定されるアドレッシングモードでは、イミ
ディエートモード#imm−data、 @−SP、
@SP+は使用できない。また、Rnのモードを使用
した場合、offsetの上位ビットの値は無視される
。 アセンブラ表記では、メモリアクセスのサイズをbas
eのサイズとして指定する。 【プログラム例外】 ・予約命令例外 φRR=’ll’のとき ・BB=’ll’のとき ・EaRが@−5Pのとき −EaMfが#imm−data、@SP+、@−5P
のとき【ニモニック】 B5Cl data、offset【命令の機能】 find first ’O’ or ’l’ in
the bitfield(within a wor
d) 0または1のサーチ(1ワード内) 【命令オプション】 70′0ゝをサーチ(デフォルト) 71′1′をサーチ /F ビット番号の増加方向にサーチ(デフォルト
) /8 ビット番号の減少方向にサーチ<<L2>>
(M32でサポートする)【命令ビットパターンとア
センブラ表記】第141図に示す。 【フラグ変化】 ゛ 第142図に示す。 【解説】 ワード中にあるtO′または21′のビットをサーチす
る。 サーチを開始するビット番号(bit offset)
をoffsetオペランドにセットしてこの命令を実行
すると、命令実行後、サーチ結果のビット番号がoff
setオペランドにセットされている。 offsetはread−modify−writeと
なフている。0ffsetをread−modify−
Writeの形にしたのは、ビットの検索を繰り返して
行なうことを想定したためである。 サーチの行なわれるビット位置の範囲は、dataオペ
ランド00〜(dataのサイズ)に限られており、ワ
ード境界を越えることはできない。 offsetとしてはすべてのサイズが性用可能である
が、offsetの初期値の上位ビットはサーチの際に
は無視される。これは、上位ビットに・ ワード境界を
越えた分のビットオフセットや実効アドレスなどといっ
た、別の情報が入フていることが多いと考えられるため
である。また、BSCHの仕様を軽くして高速化するた
めである。なお、/Fの時dataのサイズを表わす数
、/Bの時(−1)となる。 「上位ビット」とは、l
og2 (dataのビット数)よりも上位のビットを
示す。dataが32ビツトであれば、2“5〜2−3
1のビットが上位ビットである。 サーチはビット番号の大きな方向へ向かって、つまり、
big−endianのr本発明装置」ではLSBの方
向へ向かって行なわれるのが標準の仕様<<IQ>>で
あり、/Fオプションにより実現される。逆方向のサー
チ/Bオプションは<<L2>>仕様となフている。こ
れは、正方向のサーチと逆方向のサーチで全く別のハー
ドウェアが必要なためである。また、サーチされるda
taのサイズのうち、8ビツトと16ビツト(RR=O
O101)の指定は<<12>シとなっている。 「本
発明装置」では、<<L2>>となっている/Bオプシ
ョン、8ビツトと16ビツトのデータサイズ(RR=0
0.01)もサポートする。 BSC)lはビット操作命令と同じ分類にしているが、
かなり異なった性質をもっている。BSCH命令でも、
他のビット操作命令と同じようにオフセットを自由に設
定できる方が使いやすいという考え方があるが、その目
的でBVSC)I命令が別に設けられているため、BS
CHとしてはできるだけ軽い仕様に絞り、オフセットの
範囲を制限している。オフセットの有効範囲は、他のビ
ット操作命令でレジスタ直接モードRnを指定した場合
と同じ範囲である。また、−般のビット操作命令ではo
ffsetがread−only。 baseがread−mod ify−wr i te
となっているのに対して、BSCHではそれとは逆にo
ffsetがread−modify−write、
data(base address)がread
−onlyとなっており、注意が必要である。 BSC)l/Fで、指定したビットが見付がらなかった
場合には、サーチを行なった最後のビット(ワード境界
)の次のビットのオフセットがセットされ、V、、fl
ag=1となる。サーチ失敗時にも、EITは起動しな
い。結果的に、サーチを行なったビット数の分だけオフ
セットが加算される。 [例コ @meml = )l’oooooooo、ROe O
,big−endianで BSC)I10/F @meml 、W、RO
を実行==>RO=0(7)まま、V−flagは0@
meml = H’ffff7fff、RO= O,b
ig−endianで BSC)I10/F @meml 、W、RO
を実行==>RO=16となり、V−flagは0@m
eml = )I’ffffffff、RO= 0.b
ig−endianで BSC)I10/F @meml 、W、RO
を実行==>RO=32となり、V−flagは1BS
C)I/Bで、指定したビットが見付からなかった場合
には、offsetに(−1)がセットされる。 この場合もVJIagがセットされるが、EITは起動
されない。 BSCH命令では、offsetの初期値の上位ビット
は無視されるが、命令終了後にセットされるoffse
t値(サーチ結果)については、上位ビットまで意味を
持つ値になっている。つまり、offsetの上位ビッ
トに、ワード境界を越えた分のビットオフセットや実効
アドレスなどといった別の情報が入っていても、BSC
)l命令実行後は、0ffsetの上位ビットも書き換
えられてしまうわけである。サーチ成功の時はoffs
etが0〜31の値をとる(dataが32ピツトの場
合)ので、/F、/Bとも上位ビットは常に〇どなる。 また、/Fでサーチ失敗の場合はoffset=32と
なるため、上位ビットが00.、、.001に、下位ビ
ットがoooooになる。/Bでサーチ失敗の場合はo
ffset=(’1)となるため、上位ビットが11.
、、.111に、下位ビットが11111になる。 [例コ @meml 二H’00000000.RO= H’0
OOOO020テBSCH10/F @III
eml 、W、RO,Wを実行==>RO: )l’0
0000000となる。 (RO= )l’00000020のままではない)相
eml = H’ffff7fff、RO= H’00
000020i?BSCH10/F @mem
l 、W、RO,Wを実行==>RO= )l’ooo
ooo10となる。 (RO= H’0OOOO030ではない)@meml
二〇’ffffffff、RO=)l’123456
78でBS(J110/F @meml 、W
、RO,Wを実行==〉サーチ失敗のため、RO= H
’00000020゜VJIa9g=1となる。 @meml =H’ffffffff、RO:H’0O
000020でBSC)I10/F @mem
l 、讐、RO,Wを実行==〉サーチ失敗のため、V
JIag=1となる。 ROはH’ 00000020のまま。 RO= H’0OO00040(上位に桁上げ伝播)で
はない。 【プログラム例外】 ・予約命令例外 ・RR=’ll’のとき φMM=’ll’のとき ・EaRが@−5Pのとき ・EaMが#imm−data、@SP+、@−5Pの
とき12−7. ビ・・ −ル′ 口Δ
「本発明装置」の一つのデータタイプであるビットフィ
ールドは、ビットフィールド中のMSBの位置、および
ビットフィールドの長さ(width)により指定され
る。ビットフィールドのMSBの位置は、baseとo
ffsetとの組で示される。baseで示されるメモ
リのMSB (第0bit)がoffset=oになる
。 offsetの意味は、ビット操作命令の時と同じ
である。ビットフィールドとtlaSe−offset
、 widthとの関係を下の図に示す。 [メモリ上のビットフィールド操作をする場合] 第143図に示すように太線内が対象ビットフィールド
である。 固定長ビットフィールドの操作命令 (BFEXT、BFEXTU、BFCMP、BFCMP
U、BFINS。 BFINSU)は、A1向き応用のタグ処理(タグの比
較やタグの切り出し)などに特に有効である。 固定長ビットフィールド命令には、次の2つのフォーマ
ットがある。 ・offsetを8ビツトの一船形アドレッシングモー
ドで指定し、widthをレジスタで指定する形式。こ
れを′二〇′フォーマットと呼ぶ。′=G′フォーマッ
トでは、baseにoffset/8の値を加えること
により、実際にアクセスする メモリのアドレスが決まる。28bit以上のビットフ
ィールドで5バイトに またがるビットフィールドを扱うこ ともできる。 +1offSetを8ビツトのイミディエート値で指定
し、讐1dthをリテラルで指定する形式。これを9:
E′フォーマットと呼ぶ。′:E′フォーマットでは、
ワード境界を越えないビットフィール ドのみを対象として速度を上げるた めに、baseの1ワードからはみ出した部分のビット
フィールドについて、 動作を保証しないものとしている。 width + offset≧5izeであってもE
ITは起動しないが、読みだし時、書き込み時とも値が
不定となる。baseの1ワードのみのアクセスでも命
令 仕様を実現することができるので、 offsetとは無関係に、baseのみを見て操作対
象となるビットフィールド のメモリアドレスを決めることが可 能である。したがフて、インプリメ ント次第で命令実行を高速化するこ ともできる。 8F:EとBF:Gのbaseで許されるアドレッシン
グモードは、全く同じである。 BFINS、BFINSU、BFCMP、BFCMPU
では、:G、:Eフォーマットのそれぞれに対して、さ
らに次の二つの形式がある。 ・srcオペランドをレジスタで指定する二Rフォーマ
ット ・srcオペランドをイミディエートで指定する :1
フオーマツト widthO値は、 1〜32 ((<LX>>では1
〜64)に制限されており、命令実行前にO<widt
h≦32(64)のチエツクが行なわれる。 width−0の場合もエラーである。違反した場合に
は、不正オペランド例外(l OE)となる。すべての
命令について、offset。 ν1dthとも符号付きの数として扱われる。 ただし、widthはもともと1〜32(64)の値し
か許されていないため、符号付きと考えるか符号なしと
考えるかは実際の動作には影響せず、仕様書記述上の問
題となっている。また、:Eフォーマットの命令のof
fsetも符号付きとして扱われ、この場合はoffs
etとして−128〜+127の数を表わすことになる
。 (ただし、後で述べるように、:Eフォーマットで
はbaseのアドレスの1ワードbase 〜base
+3からハミ出すビットフィールドについて、ハミ出し
た部分に関する動作を保証していない。)OF命令のビ
ットフィールドでない方のオペランドは、普通の整数と
して扱われる。 したがって、例えば8FEXTの場合は、抽出されたビ
ットフィールドがレジスタの しSB側に詰めてセットされ、MSB方向に符号拡張さ
れる。ビット位置=O(MSB)に合わせてビットフィ
ールドをセットするのではない。 baseとしてレジスタを対象とした場合には、ビット
フィールドは一つのレジスタの範囲内に限られる。レジ
スタ対象の固定長ビットフィールド命令も「本発明装置
」でサポートする。ただしこれは((L2〉〉とな〕て
いる。これは、レレジタを対象としたビットフィールド
操作の場合、現段階では、BF:E命令よりもシフト命
令とAND命令を組み合せて実行する方が速くなる可能
性があるためである。レジスタ対象のビットフィールド
命令(<<L2>>)については、二Gでも次に述べる
:Eと同じように、lワード(レジスタ)からハミ出す
ビットフィールドについて、ハミ出した部分に関する動
作を保証しないものとする。BFEXT、 BFEXT
Ut’は不定値が得られ、BFINS、BFINSUで
は無視される。offset +width≧5ize
の場合もEITは起動しない。 :Eフォーマットでは、対象となるビットフィールドの
うちで、5izeを越えたビットオフセットを持つ部分
についてのみ動作を保証していない。同様に、負のビッ
トオフセットを持つ部分についても動作を保証していな
い。いずれの場合も、指定されたビットフィールドのう
ちで、 baseのアドレスで示される1ワードに含まれる部分
については、正しく実行される。 [例] address N−I N
data B’abcdefgh 8’ij
k1mnopN+1 B’qrstuvwx (a−x:Oまたは1) の場合、 BFEXT:E、W #3.Jt9.lii!N、RO
==> RO= B’1mnopqrst と
なる。 BFEXT:E、W #−5.#9.@N、RO::>
RQ = 13’77?77ij)(l と
なる。 (?は不定値) width、src、destのレジスタのサイズ指定
は、Xフィールドによって共通に行なわれる。サイズ指
定フィールドXは、32ビツト演算と64ビツト演算(
<<LX>>)の切り換えを行なうものであるが、具体
的には次の3つの意味を持つ。 ■5rc(dest)レジスタのサイズ指定(:Rフォ
ーマット) ■widthレジスタのサイズ指定(:Gフォーマット
) ■widthの範囲の指定 X=Oの時 Q<width≦32 X=1(7)時 Q<width≦64:E:1フオー
マツトの場合■■は意味を持たないが、■の区別をfj
なうためにやはりXフィールドを使用する。すなわち、
Xフィールドは、32ビツトと64ビツトの互換性を高
めるためのビットであると言える。 =1フォーマットの命令でSS≠00の時には、#iS
8のフィールドは使用しない。この時、もし#iS8の
フィールドが0になっていなくても、単に無視される。 ただし、マニュアル上は、#IS8のフィールドには0
を入れるようにしておく。 ビットフィールド命令のフォーマットと、それに対して
使用できるサイズを列挙すると、第144図のようにな
る。 ビットフィールド命令についても、ビット操作命令と同
じようにアクセスを行なうメモリの範囲が問題となるが
、インプリメントへの依存性が強いので、強い規定は設
けない。[これについては詳細仕様調整中] 【ニモニック】 BFEXT offset、width、base
、dest【命令の機能】 extract bit field(signed)
ビットフィールドの抽出(符号付き) 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第145図に
示す。 【フラグ変化】 第146図に示す。 【解説】 ビットフィールドの抽出を行ない結果をデスティネーシ
ョンに転送する。 ビットフィールドの一1dthよりもデスティネーショ
ンのサイズの方が大きい時は、データが符号拡張される
。また、BFEXT:Gのoffsetも符号拡張され
る。 EaRbfのアドレッシングモードでは、@−SP、@
SP+、#imm−dataのモードは使用できない。 baseのレジスタ直接モードRnは<<L2>>であ
るが「本発明装置」ではサポートする。 [オペレーション] destの初期値を [DO,Dl、、、、Dd−
2,0d−1]d=32.64 destに設定される値を[RO,R1,、、、Rd−
2,Rd−1]d=32.84 Offset :: O,Width : Wとする。 offset、widthは符号付きとして扱われる。 (冒1dth≦0.width >dの時はエラー) この時、抽出される部分のビットフィ ールドとフラグの変化は、次のように なる。 (d≧Wの時) baseのbitO ↓ [、、、BO,B1.、、、Bo−2,Bo−1,Bo
、Bo+1.、、、Bo+w−2、Bo+w−1,Bo
+w、Bo+w+1.、、]この部分を符号拡張してd
estに設定する[ Bo、 Bo+1.、、、B
o+讐−2,BO+シー11 ==>[Bo、Bo、、
、、、、、Bo、 Bo、 Bo+1.、、、Bo
+w−2゜Bo+w−1コ =:〉 d−wビットだけ符号拡張される [RO,R1,、、Rd−誓−1,Rd−シ、Rd−讐
+1......Rd−2゜Rd−1] (destに
設定される)(d<讐の時) r本発明装置」32では起り得ないケースである。 baseのbit。 ↓ [、、、BO,B1.、、、、Bo−1,Bo、Bo+
1.、、、Bo+w−d−1゜Bo+w−d 、 、
、 、Bo+w−2,Bo+w−1、Bo+w、 、
、]この部分はカットされる この部分をdestに設
定する [Bo、Bo+1 、 、 、.8o+w−d−1.8
o+w−d、 、 、 、 Bo+w−2゜Bo+讐−
1] ==> [Bo+w−d、、、、Bo+w−2゜BO+誓−1コ
==〉 この部分がカットされる E RO,、、、、、Rd−2,Rd−1] (d
、estに設定される)MJIag RO または(d≧Wの時) B。 (d<讐の時) Bo+讐−d ZJlag [RO〜d−1コ = 0または(
d≧Wの時) [Bo〜o+w−1]=0 (d<wの時) [Bo+w−d〜 o+w−1] = 0 V−f lag☆ S[8o〜o+w−1] < −2
−(d−1) 、or。 S[Bo〜o+w−1] ≧ +2−(d−1)または
(d≧−の時) 0 (d<wの時) Bo=Bo+1= 、、、=Bo+w−d−1=Bo+w−clの時クリア
、それ以外の場 合にセットとなる。 「本発明装置」32であれば常にクリアされる。 【プログラム例外】 ・予約命令例外 ◆RR=’ll’のとき ・+:′θ′のとき 番X=’l’のとき 吻EaRが@−5Pのとき −EaRbfが#imm−data、@SP+、@−5
Pのとき・不正オペランド例外 ◆冒1dth≦0.讐1dth>32のとき【ニモニッ
ク】 8FEXTLI offset、width、ba
se、dest【命令の機能】 extract bit field(unsigne
d)ビットフィールドの抽出(符号なし) 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第147図に
示す。 【フラグ変化】 第148図に示す。 【解説】 ビットフィールドの抽出を行ない結果をデスティネーシ
ョンに転送する。 ビットフィールドのwidthよりもデスティネーショ
ンのサイズの方が大きい時は、データがゼロ拡張される
。ただし、BFEXTU:Gのoffsetは符号拡張
される。 EaRbfのアドレッシングモードでは、@−5P。 O5P十劃i側m−dataのモードは使用できない。 baseのレジスタ直接モードRnは<<L2>>であ
るが「本発明装置」ではサポートする。 [オペレーションコ destの初期値を [:DO,Dl、、、、Dd
−2,0d−1]d=32.64 destに設定される値を[RO,R1,、、、Rd−
2,Rd−1]d=32.64 offset = o、width = wとする。o
ffset、%didthは符号付きとして扱われる。 (讐1dth≦O,width >dの時はエラー) この時、抽出される部分のビットフィ ールドとフラグの変化は、次のように なる。 (d≧讐の時) baseのbit。 ↓ 1、、、BO,B1.、、、Bo−2,Bo−1,Bo
、Bo+1.、、、Bo+v−2この部分をゼロ拡張 、Bo+w−1,Bo+w、Bo+w+1 、、、、]
してdestに設定する [ Bo、 Bo+1.、、、Bo+w−2,8o
+w−1] ==>[1−匹工22工、0. Bo、
Bo+1.、、、Bo+!−2゜Bo+冒−11=
=> d−wビットだけゼロ拡張される [RO,R1,、、Rd−讐−1,Rd−冒、Rd−冒
+1......Rd−2゜Rd−1コ(destに設
定される) (d<vの時) r本発明装置」32ては起り得ないケースである。 baseのbit。 ↓ [、、、BO,B1.、、、、Bo−1,Bo、 o+
1.、、、Bo+w−d−1゜この部分はカットされる [Bo、Bo+1.、、.8o+w−d−1.Bo+w
−d、、、、Bo+w−2゜Bo+w−1] ==> [Bo+w−d、、、、Bo+w−2゜Bo+冒−1]
==> この部分がカットされる [ RO,、、、、、Rd−2,Rd−11(de
stに設定される) 町flag RO または(dewの時) 0 (d=wの時) B。 (d<wの時) Bo+!−d Zjlag [RO−d−1コ = 0また
は(d≧讐の時)[BO〜0+冒 −1コ = 0 (dewの時)[Bo+v−d〜 o+w−1コ : O VJIag☆ U[Bo 〜o+w−1コ ≧
+2″dまたは(d≧讐の時) 0 (d<wの時) Bo=Bo+1= 、 、 、=Bo十讐−d−1=Oの時クリア、それ以
外の場合にセ ットとなる。 「本発明装置」32であれば常にクリアされる。 【プログラム例外】 ・予約命令例外 ・RR=’ll’のとき ・+=′0′のとき −X= ’1’のとき ・EaRが@−5Pのとき ・EaRbfが旧mm−data、@SP+、@−5P
のとき・不正オペランド例外 ・冒1dth≦O、width> 32のとき【ニモニ
ック】 BFINS src、offset、width、
base【命令の機能】 1nsert bit field ビットフィールドの挿入(符号付き) 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第149図に
示す。 【フラグ変化】 第150図に示す。 【解説】 ソースの値をビットフィールドに挿入する。 ソースのサイズよりもビットフィールドのwidthの
方が大きい時は、データが符号拡張される。また、BF
INS:Gのoffsetも符号拡張される。 EaRbfのアドレッシングモードでは、IニーSP。 @SP+、#imm−dataのモードは使用できない
。baseのレジスタ直接モードRnは<<L2>>で
あるが「本発明装置」ではサポートする。 [オペレーションコ srcの初期値を ISO,Sl 、 、 、 、
5s−2,5s−118=8.16,32.64(:I
) s=32.64(:R) offset = o、width = wとする。o
ffset、widthとも符号付きとして扱われる。 (width≦0.冒1dth〉dの時はエラー) この時、挿入される部分のビットフィ ールドとフラグの変化は、次のように なる。 (冒≧Sの時) ビットフィールドの変化 baseのbit。 ↓ [、、、BO,B1.、、、Bo−1,Bo、Bo+1
.、、、Bo+讐−8−1゜Bo+w−s、Bo+w−
s+1 、、、 、Bo+w−1、Bo+w、、、]]
==〉 [、、、BO,B1.、、、Bo−1,50,SO,、
、、、、、、、,5O0So、 Sl、、、、、
、5s−1,Bo+讐srcがW−Sビットだけ符号拡
張される。、、]](w<sの時) ビットフィールドの変化 baseのbitO ↓ [、、、BO,B1.、、、Bo−2,Bo−1,Bo
、 Bo+1.、、。 Bo+冒−1,BO+ν01.]コ ==〉[:、、、
BO,B1.、、、Bo−2,Bo−1,Ss−シ、5
5−w+1.....。 5s−1,Bo+w、、、コ] srcのC5O,Sl、、、、55−w−11がカット
される。 町flag 対象ビットフィールドのMSB(B
o)の変化を基準とする。 または(讐≧Sの時) 5O (−くSの時) Ss−冒 ZJIag 対象ビットフィールド[Bo〜o+
w−1]の変化を基準とする。 または(讐≧Sの時)[SO〜 s−1コ = src = 0 (w<sの時) [Ss− 讐〜s−1コ = O V−flag☆ S[SO〜s−1コ ::
SrC< −2−(讐−1)、or。 S[SO〜s−1] = src ≧ +2″′(%
、1−1) または(w≧Sの時) 0 (−くsの時) 5O=S 1=、 、 、=Ss−讐−1ニー1=SS−冒リア、
それ以 外の場合にセットと なる。 【プログラム例外】 ・予約命令例外 拳RR=’ll’のとき ・+=′0ゝのとき ・X=’l’のとき ・SS=’ll’のとき 拳EaRが@−5Pのとき φEaMbfが#imm−data、@SP+、@−5
Pのとき・不正オペランド例外 争width≦0 、width> 32のとき【ニモ
ニック】 BFINSU src、offset、width
、base【命令の機能】 1nsert bit field ビットフィールドの挿入(符号なし) 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第151図に
示す。 【フラグ変化】 第152図に示す。 【解説】 ソースの値をビットフィールドに挿入する。 ソースのサイズよりもビットフィールドのwidthの
方が大きい時は、データがゼロ拡張される。一方、BF
INSU:Gのoffsetは符号拡張される。 EaRbfのアドレッシングモードでは、@−5P。 @SP十劃i側m−dataのモードは使用できない。 baseのレジスタ直接モードRnは<<L2>>であ
るが「本発明装置」ではサポートする。 [オペレーション] srcの初期値を [SO,Sl、、、、5s−2
,5s−11s=8.16,32.64(:1) s=32.64(:R) offset = o、width = wとする。o
ffset、widthとも符号付きとして扱われる。 (讐1dth≦0.讐1dth〉dの時はエラー) この時、挿入される部分のビットフィ ールドとフラグの変化は、次のように なる。 (讐≧Sの時) ビットフィールドの変化 baseのbit。 ↓ [、、、BO,B1.、、、Bo−14o、Bo+1.
、、、Bo+讐−5−1゜Bo+w−s、Bo+w−s
+1. 、、、Bo+w−1、Bo+w00.コ]==
〉 [、、、BO,B1.、、、Bo−1,0,0,、、、
、、、、、、,0゜So、 Sl、、、、、、5
s−1,Bo+νSrCがW−Sビットだけ符号拡張さ
れる、、、]] (w<sの時) ビットフィールドの変化 baseのbitO ↓ [:、、、BO,B1.、、、Bo−2,Bo−1,B
o、 Bo+1.、、、B。 +−一1.Bo+w、、、ココ ==〉[:、、、BO
,B1.、、、Bo−2,Bo−1,55−w、55−
w+1.、、、、。 5s−1,Bo+w、、、ココ srcの[SO,Sl、、、、55−w−1]がカット
される。 MJIag 対象ビットフィールドのMSB(Bo
)の変化を基準とする。 または(WaSの時)0 (w=sの時)SO (−くSの時) Ss−w ZJlag 対象ビットフィールド[Bo〜o+w
−1]の変化を基準とする。 または(W≧Sの時) [50〜 s−1] = src = 0 (讐くSの時) [5s− W−%−5−1] = O V−flag☆ U[SO〜s−1] = src≧
+2″wまたは(W≧Sの時)0 (WaSの時) 5O=51= 、、、=Ss−!−に〇の時ク リア、それ以外の場 合にセットとなる。 【プログラム例外】 ・予約命令例外 番RR=’ll’のとき ・+=′0′のとき ・x=’t’のとき φSS=’ll’のとき ・EaRが@−5Pのとき 争EaMbfが#imm−data、@SP÷、@−5
Pのとき・不正オペランド例外 ・width≦0 、width>32のとき【ニモニ
ック】 ゛ BFCMP src、offset、width、
base【命令の機能】 compare bit field(signed)
ビットフィールドの比較(符号付き) 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第153図に
示す。 【フラグ変化】 第154図に示す。 【解説】 ソース5rcO値とビットフィールドの値を比較する。 ソースのサイズとビットフィールドのwidth。 値が異なフている場合は、サイズの小さい方のデータが
符号拡張されてから比較される。 また、BFCMP:Gのoffsetも符号拡張される
。 EaRbfのアドレッシングモードでは、@−5P。 @SP+、#imm−dataのモードは使用できない
。 baseのレジスタ直接モードRnは<<L2>>であ
るが「本発明装置」ではサポートする。 [オペレーション] srcの初期値を ISO,Sl、、、、5s−2
,5s−1コs=8.16,32.64(:I) S=32.64(:R) offset = o、width = wとする。o
ffset、widthとも符号付きとして扱われる。 (冒1dth≦0.冒1dth〉dの時はエラー) この時、比較される部分のビットフィ ールドとフラグの変化は、次のように なる。 (S≧讐の時) baseのbit。 ↓ [、、、BO,B1.、、、Bo−2,Bo−1,Bo
、Bo+1.、、、Bo+w−2、Bo+w−1,Bo
+w、Bo+w+1.、、]この部分を符号拡張してs
rcと比較する(9<讐の時) baseのbitO ↓ [:、、 、BO,B1.、、 、、Bo−1、Bo、
Bo+1 、、、、Bo+w−s−1。 Bo+w−s、、、、Bo+w−2,Bo+w−1,B
o+w、、、コsrcを符号拡張してこの部分と比較す
るLJIag S[:Bo 〜o+v−1コ
− S[5O−s−1コく0 比較結果によってセットされ る。 ZJlag S[Bo−o+w−1]−5[SO
〜5−11= 0 比較結果によってセットされ る。 【プログラム例外] ・予約命令例外 番RR=’ll’のとき ・+=90′のとき ・−=′1′のとき ・SS=’ll’のとき ◆EaRが@−SPのとき φEaRbfが#imm−dataJSP+、[i!−
5Pのどき・不正オペランド例外 ・讐1dth≦0.讐1dth>32のとき【ニモニッ
ク] BFCMPU src、offset、width
、base【命令の機能】 compare bit field(unsigne
d)ビットフィールドの比較(符号なし) 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第155図に
示す。 【フラグ変化】 第156図に示す。 【解説】 ソースsrcの値とビットフィールドの値を比較する。 ソースのサイズとビットフィールドのwidthの値が
異なフている場合は、サイズの小さい方のデータがゼロ
拡張されてから比較される。 一方、BFCMPU:Gのoffsetは符号拡張され
る。 EaRbfのアドレッシングモードでは、@−SP。 @5P+、$limm−dataのモードは使用できな
い。 baseのレジスタ直接モードRnは<<L2>>であ
るが「本発明装置」ではサポートする。 [オペレーションコ srcの初期値を [SO,Sl、、、、5s−2
,Ssiコs=8.16,32.64(:I) s=32.64(:R) offset = o、width =: wとする。 offset、widthとも符号付きとして扱われる
。 (width≦O,width〉dの時はエラー) この時、比較される部分のとットフィ ールドとフラグの変化は、次のように なる。 (S≧贅の時) baseのbit。 ↓ [、、,80,81,、、、Bo−2,Bo−1,Bo
、8o+1.、、、Bo+v−2、Bo+w−1,Bo
+w、Bo+w+1t+tコこの部分をゼロ拡張してs
rcと比較する(s<−の時) baseのbit。 ↓ [、、、BO,B1.、、、、Bo−1,Bo、Bo+
1.、、、Bo+w−s−1,8srcをゼロ拡張して
この部分と比較するL−flag tJ[8o
〜o+w−1]−U[SO〜s−1コく0 比較結果によってセットされ る。 Zjlag U[Bo〜o+w−1] −U[
SO〜s−1]= 0 比較結果によってセットされ る。 【プログラム例外】 ・予約命令例外 ・RR=’ll’のとき ・+:′0”のとき ・−=′l′のとき ・SS=’l!’のとき ・EaRが@−5Pのとき ・EaRbfが#imm−data、@SP+、@−5
Pのとき・不正オペランド例外 ・width≦O、width> 32のとき2−8.
ビ・・ −ル゛lIA任意長のビットフ
ィールド操作命令には、次のようなものがある。 一般的な演算と転送 BVMAP 転送 evcp繰り返しパ
ターンの演算と転送 BVPAT Oまたは1のサーチ BVSCBVMAP
、 BVPAT、 BVCPYは、ビットマツプデ
イスプレィ上のウィンドウ操作(bitblt)を主な
目的とした命令である。 説明のため、ビットマツプデイスプレィの属性について
用語を定義する。 (color 5cale、color offset
とbit−dat極性)* color 5cale: 1 dotを連続の何bitで表すか。 例: <color 5cale == 1>1 bi
tが1dat、1バイトで連続した8dot。 白黒のビットマツプデイスプレィ。 または、coforを構成する各ビットをバンクにした
ビットマツプデイ スプレィ。 <color 5cale = 4> 隣合った4 bitで1dat、1バイトで連続した2
dat。 16色カラーのビットマツプデイス プレィ。 ・bit−dat極性 これは、ビットマツプデイスプレィとプロセッサとの組
み合わせに対して生ずる概念である。小さいアドレスの
方が左側に表示されるような一般的なビットマツプデイ
スプレィにおいて、小さいビット番号に対応するドツト
も左側に表示される場合、このようなビットマツプデイ
スプレィを正のbit−dat極性を持つという。 また、逆のものを負のbit−dot極性を持つという
。つまり、big−endianのプロセッサでは、M
S8ビットが左側に表示される場合に正のb i t−
dat極性を持つことになる。 ・color offset 1 dotを構成する複数のビットのうち、第何ビット
を操作するか、ということ。 0≦cofor offset < color 5c
aleという関係が成り立つ。 これは、ビットマツプデイスプレィハードウェアの属性
ではなく、ビットマツプデイスプレィ操作上のパラメー
タである。 base addressに対応するドツトから、横方
向にX(dat offset)だけ変位したドツトを
操作する場合、そのメモリ上のbit offsetは
次のように計算される。 (dat offsetは画面上の点の概念、bit
offsetはメモリ上のbitの概念である。) 正のbit−dat極性の時 bit offset = Xネcolor 5cal
e + coloroffset 負のb i t−dat極性の時 bit offset = (Xネcolor 5ca
le + coloroffset) 、xor、 7 ところで、実際のr本発明装置JのBVMAP。 BVCPY、 BVPAT命令では、インプリメント
のことを考えて制約を設け、次のような場合にのみ使用
できるようになっている。 ・bit−dat極性が正 ・color 5caleが1 このため、ビットマツプデイスプレィのハードウェアを
ある程度規定することはやむを得ない。具体的な制限は
次のようになる。 ・bit−dat極性が正なので、 r本発明装置」を
big−endianとした場合には、アドレスの小さ
い方、ビット番号の小さい方(MSB)が画面の左側に
表示されなければならない。 ・color 5cale = 1のみなので、col
or 5cale≠1のビットマツプデイスプレィに対
しては次のような制約がある。 color 5cale≠1のビットマツプデイスプレ
ィでは、color offset毎に演算の種類を変
えることができなくなる。 BVMAP命令でcolor 5caleの変更をする
ことはできないので、ビットマツプデイスプレィのco
lor 5caleが■でない時には、内部表現も同じ
color 5caleにしないと、BVMAP命令は
、使えない。その場合、画面イメージの内部表現がハー
ドウェアに依存することになるので、他のハードウェア
との間でデータの転送を行なう時は、データ形式の変換
が必要になる。 任意長ビットフィールド操作命令はオペランドが多く、
実行時間も長い。したがって、実行中での割り込み受は
付けや、割り込み処理後の再実行のメカニズムが必要で
ある。 r本発明装置」では、オペランドの指定と演算
の進行状況の表現のために固定番号のレジスタを使用し
ている。そのため、任意長ビットフィールド命令実行中
に割り込みが入フても、割り込み処理ハンドラ中でその
レジスタの退避と復帰が正しく行なわれていれば、割り
込み処理後に、そのビットフィールド命令を途中から再
開できる。実行中断後に状態の退避やコンテキストスイ
ッチを行なったり、コンテキストスイッチ後に別のプロ
セスで同じビットマツプ命令を実行し、再び前のコンテ
キストに戻って前のビットマツプ命令を再開したとして
も、問題なく動かなければならない。 また、BTRONの仕様では、VRAMではない普通の
メインメモリに対しても、文字や図形の描画が行なわれ
ることがある。したがって、任意長ビットフィールド命
令でもページフォールトの起こる可能性があり、ストリ
ング命令と同様に、ページフォールトによる実行中断に
も対処できなければならない。 BVMAP、 BVCPY命令では、インサートエデ
ィタなどで真横に図形を移動することを考え、ビットマ
ツプのソースとデスティネーションのオーバーラツプに
も対応できるようになっている。具体的には、ストリン
グ命令と同じように、演算を行なう方向を命令中のオプ
ション/F、/Bとして指定する。ソフトウェアにより
適当な方向を判定し、デスティネーションがソースを破
壊しないように演算を進める。ただし、インプリメント
の負担を考え、逆方向の処理を指定するオプション/B
は<<L2>>となっている。 「本発明装置」ではBTRONの動作を高速化するため
の逆方向処理もサポートする。 srcとdestがオーバーラツプしていた場合、sr
cのbase 〜offsetよりもdestのbaS
e〜offsetの方が小さければ、offsetの小
さい方から処理することによってdestがsrcを破
壊することなく処理を進めることができる。この目的で
/Fオプションを使用する。画面とビットマツプとの対
応は、通常オフセット(アドレス)の小さい方が左側に
なる。したがって、SrCよりもdes tのbase
〜offsetの方が小さくなるのは、文字の削除な
どによってビットマツプデータを左に動かそうとした時
である。 また、srcのbase〜offsetよりもdest
のbase〜offsetの方が大きければ、offs
etの大きい方から処理することによってdes−tが
srcを破壊することなく処理を進めることができる。 この目的で/Bオプションを使用する。srcよりもd
estのbase −offsetの方が大きくなるの
は、文字の挿入などによってビットマツプデータを右に
動かそうとした時である。 srcとdestがオーバーラツプする可能性がある場
合には、ソフトウェアの判断により正しいオプションを
使用し、destがsrcを破壊しないように演算を進
める必要がある。ただし、/Bオプションは<<L2>
>となっているので、/Bが使用できない場合には、s
rcを一旦他の場所にコピーしてからdestとの演算
を行なわなければならない。 オーバーラツプがない場合には、どちらのオプションを
使フても結果は変わらない。 ここで、問題は、destのbase −offset
の方が小さいのに/Bオプションを使用した場合や、d
estのbase〜offsetの方が大きいのに/F
オプションを使用した場合にどのような動作を行なうか
ということである。基本的には、既に演算の終った部分
のdes tが、srcのまだ参照されていない部分を
破壊する形になるため、正しい結果が得られない。しか
も、この時は、アルゴリズム上、命令が途中で中断して
再実行を行なった場合に、結果が変わってくることがあ
る。もともと正しい結果を保証していないのであるから
、実行中断によって結果が変わったとしても構わないは
ずであるが、実行中断のなかった場合は正しい結果が得
られることもあるので、再現不可能なバグが入りやすい
状況になる。しかし、このエラーチエツクをきちんと行
なうとオーバーヘッドが増え、実行時間の低下をもたら
すので、エラーチエツクは行なわない。ユーザの側で注
意が必要である。 任意長ビットフィールド命令では、レジスタ上のビット
オフセットoffset、 ビット幅讐i d th
、 パターンデータpatternのサイズとして、3
2ビツトまたは64ビツト<<L×>>のみが使用でき
る。8,16ビツトの指定は行なわない。 32ビツトと64ビツトのレジスタサイズの選択は、X
フィールドによって共通に行なわれる。 BVMAP、BVCPY、BVPAT命令のdest側
のメモリアクセス方法については、writeまたはr
ead −modify−writeということで特に
規定しない。 BV命令でwidth≦0の場合に−は、何もせずに命
令を終了し、EITとはしない。この時、BVSCII
命令では、長さによる終了を示すVJlag (サーチ
失敗と同じ)がセットされる。これは、eV命令やスト
リング命令の様な高機能命令の場合には、その外側でさ
らに高機能のサブルーチンを作ることが多く、チエツク
が必要であればそのサブルーチンで行なえばよいと考え
ているためである。例えば、BVMAPであれば、それ
をライン数だけ繰り返してBitBlt関数を作ること
が多く、その時はwicjthがすべて共通になるので
、毎回widthをチエツクする必要はない。一方、B
F命令のように、コンパイラが直接生成する可能性のあ
るコードでは、できるだけチエツクを厳重にする必要が
ある。したがって、BF命令のwidthは例外で検出
するようにしている。 任意長ビットフィールド命令でoffset+widt
hがオーバーフローする場合には、割り込みによる命令
実行中断時、および命令終了時のレジスタ上のoffs
et値がおかしな値になり、正常な命令の実行ができな
くなる。この場合は、動作を保証しないものとする。ア
ーキテクチャ上は、命令実行開始時にこれを検出して不
正オペランド例外(IOE)とするのが望ましいが、チ
エツクのために実行時間が伸びるので、チエツクせずに
実行するものとする。(なお、ストリング命令の場合は
、offsetに相当するのが整数ではなくポインタア
ドレスとなっているため、オーバーフローとしては扱わ
ず、単にアドレスがラップアラウンドするだけである。 ) 【ニモニック】 VSCH 【命令の機能】 find first ’O’ or ’1’ in
the bitfield(variable len
gth) 0または1のサーチ(任意長ビットフィールド)【命令
オプション】 10 ’0’をサーチ(デフォルト)/1 ’
1’をサーチ /F ビット番号の増加方向にサーチ(デフォルト) /B ビット番号の減少方向にサーチ<<L2>>
(r本発明装置」ではサポートする) 【命令ビットパターンとアセンブラ表記】第157図に
示す。 【フラグ変化】 第158図に示す。 【解説】 任意長のビットフィールドの中にある+0′または+1
′のビットをサーチする。 サーチを開始するビット番号(bit offset)
をoffsetオペランド(R1)にセットしてこの命
令を実行すると、命令実行後、サーチ結果のビット番号
がoffsetオペランド(R1)にセットされている
。つまり、offsetはread−nod ify−
writeとなフている。これは、ビットの検索を繰り
返して行なうことを想定したためである。 offsetは符号付き整数として扱われ、その値は任
意である。 BVSC)Iを実行した結果、サーチ失敗だった場合に
は、Vjlagをセットし、offsetは次にサーチ
すべきビットを指示。EITは起動しない。 BVSC)I命令のオフセットやV−flagの変化方
法は、BSCH命令に準じたものである。 7Bによる逆方向のサーチは<<L2>>仕様となって
いるがr本発明装置」ではサポートする。 この命令は、ディスクやメモリの空きブロック検索など
に使用することを目的としたものである。 なお、任意長ビットフィールド命令やストリング命令な
どの高機能命令の詳細仕様や、命令終了後のレジスタ値
については、付録11を参照のこと。 【プログラム例外】 ・予約命令例外 ・+=′0′のとき ・x=’t’のとき ・P=’l’のとき 【ニモニック】 VMAP 【命令の機能】 bit operation(one 1ine Bi
tBIt)ビットマツプ演算 【命令オプション】 /F offsetの小さい方から処理する(デフ
ォルト) /B offsetの大きい方から処理する<<L
2>> (r本発明装置」ではサポートする) 【命令ビットパターンとアセンブラ表記】第159図に
示す。 【フラグ変化】 第160図に示す。 【解説】 スクリーン上のビットマツプ操作を行なうために、任意
長のビットフィールドsrc、destに対する各種の
論理演算をする命令である。演算の種類はR5の下位4
ビツトで指定され、次の16種類が用意されている。 T True l ==> destF
False O==> destND
NotDest −dest ==>dest D Dest dest ==>des
t NS NotSrc ”’src ==>d
est S Src src ==
>dest A And dest、an
d。 src ==> dest OOr dest 、Or。 src ==> dest X Xor dest 、
xor。 SrC==> dest NA NotAnd −dest、and
。 src ==> dest NONotOr −dest、or。 src ==> dest AN AndNot dest、a
nd。 src ==:> dest ON 0rNot dest、or
。 −5rc ==> dest NAN NotAndNot −dest、an
d。 ”’src ==> dest NON NotOrNot −dest、or
。 −5rc ==> dest NX NotXor −dest、xor
。 src ==> dest このうちD(Dest)の演算モードは、対称性のため
に設けられている。ニモニックと実際のビットパターン
との対応については、付録を参照のこと。 演算を指定するレジスタR5の上位ビットが0でない場
合にも、特にチエツクは行なわないものとする。ただし
、チエツクが行なわれていなくても、上位ビットには必
ず20′を入れてもらうように、マニュアル等で指導す
る必要がある。不正オペランド例外(IOE)としない
のは、インプリメントの負担が大きく、実行速度に影響
が出るためである。 /F、/Bオプションは、offsetの小さい方から
処理するか、offsetの大きい方から処理するかを
指定する。これは、ビットマツプのsrcとdestが
オーバーラツプしていた場合に、処理の方向を明確にし
ておかないと、destがsrcを破壊して正しい結果
が得られないからである。 SrCとdestがオーバーラツプしていた場合、sr
cのbase〜offsetよりもdestのbase
〜offsetの方が小さければ、offsetの小
さい方から処理することによってde!3tがsrcを
破壊することなく処理を進めることができる。この目的
で/Fオプションを使用する。画面とビットマツプとの
対応は、通常オフセット(アドレス)の小さい方が左側
になる。したがって、srcよりもdestのbase
−offsetの方が小さくなるのは、文字の削除など
によってビットマツプデータを左に動かそうとした時で
ある。 また、SrCのbase 〜offsetよりもdes
tのbase〜offsetの方が大きければ、off
setの大きい方から処理することによってdestが
srcを破壊することなく処理を進めることができる。 この目的て/Bオプションを使用する。srcよりもd
estのbase 〜offsetの方が大きくなるの
は、文字の挿入などによフてビットマツプデータを右に
動かそうとした時である。 なお、destのbase〜offsetの方が小さい
のに7Bオプシヨンを使用した場合や、destのba
se〜offsetの方が大きいのに/Fオプションを
使用した場合には、結果(dest)を保証しないもの
とする。特に、このような場合には、命令実行中に割り
込みやページフォールトなどが発生して命令再実行が起
こると、結果が変わってくることもある。 srcとdestがオーバーラツプする可能性がある場
合には、ソフトウェアの判断により正しいオプションを
使用し、destがsrcを破壊しないように演算を進
める必要がある。ただし、/Bオプションは<<L2>
>となっているので、/Bが使用できない場合には、S
rCを一旦他の場所にコピーしてからdestとの演算
を行なわなければならない。 r本発明装置」では/B
オプションはサポートする。 オーバーラツプがない場合には、どちらのオプションを
使フても結果は変わらない。 +base−offsetが小 base 〜
offsetが大→[オーバーラツプなし] 第161図に示す。 [オーバーラツプあり−destのbase 〜off
setが小]第162図に示す。 [オーバーラツプあり−destのbase−offs
etが大コ第163図に示す。 【プログラム例外] ・予約命令例外 ・Q=’l’のとき ・x=’t’のとき ・P=’l’のとき 【ニモニック】 VCPY 【命令の機能】 bit transfer ビットマツプ転送 【命令オプション】 /F offsetの小さい方から処理する(デフ
ォルト) /B offsetの大きい方から処理する<<L
2>> (r本発明装置」ではサポートする) 【命令ビットパターンとアセンブラ表記】第164図に
示す。 【フラグ変化】 第165図に示す。 【解説】 スクリーン上のビットマツプ操作を行なうために、任意
長のビットフィールドsrc、destの間の転送をす
る命令である。この命令は、eVMAP命令から演算の
機能をはずして転送のみに限定し、高速化を目脂したも
のである。 /F 、 /Bオプションの意味はBVMAPと同じで
ある。 ビットマツプのsrcとdestがオーバーラツプして
いなければ、どちらのオプションを使っても結果は変わ
らないが、SrCとdestがオーバーラツプした場合
には、ソフトウェアの判断により正しいオプションを使
用し、destがSrCを破壊しないように演算を進め
る必要がある。 /Bオプションの場合、R1,R4に入れるオフセット
値としては、転送の対象となるビットフィールドの最大
+1のオフセット値を指定する。 これは、5M0V/B、SCMP/Bの仕様との対応を
考えたものである。/Bオプションは<<L2>>であ
るがr本発明装置」ではサポートする。 【プログラム例外】 ・予約命令例外 ◆Q=’l’のとき ・X=’l’のとき ・P=’l’のとき 【ニモニック】 VPAT 【命令の機能】 cyclic bit operationパターンと
ビットマツプの演算 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第166図に
示す。 【フラグ変化】 第167図に示す。 【解説】 スクリーン上のビットマツプをあるパターンで埋めたり
、スクリーン上のビットマツプとあるパターンの演算を
行ないたい場合に使用する命令である。pattern
を繰り返し発生しながら、ビットフィールドとの論理演
算を行なう。 演算指定(R5)の上位ビットがOでない場合は単に無
視され、特にチエツクは行なわないものとする。 ただし、チエツクが行なわれ“ていなくても、将来の拡
張のため、上位ビットには必ず0′を入れてもらうよう
に、マニュアル等で指導する必要がある。不正オペラン
ド例外(IOC)としないのは、インプリメントの負担
が大きく、実行速度に影響が出るためである。 この命令では、BVMAP、BVCPYとは異なり、書
き込みの際にシフトは行なわない。offsetの指定
は、単にパターンをクリッピングするだけである。 (
これに対して、BVMAP命令では、srcとdest
のoffsetがずれていた場合にはシフトが行なわれ
る) 【プログラム例外】 ・予約命令例外 赤+=20′のとき ΦX=’l’のとき ・P=’l’のとき 12 9、 10” a” 10進演算に関しては、符号なしPACにED形式(B
CD)のlO進数の1ワードの加減算とPACに/UN
PACに処理をメインプロセッサの<(Ll>>仕様と
してサポートし、符号付きPACKED形式10進数の
1ワードの加減算を(<L2>>仕様としてサポートす
る。また、多桁の10進数の加減乗除はコプロセッサで
行なう。 このうち、本章では符号なしPACKED形式lO進数
の加減算とPACK/UNPACK処理について説明を
17なう。符号付きPACにEO形式10進数をサポー
トする(<L2>>の命令については、後の章で説明を
行なう、 10進演算のアドレッシングモードは一般
命令と同じになっている。 本発明装置では本節で述べる10進演算命令4種類はサ
ポートしない。 【ニモニック】 ADDDX src、dest (本発明装置で
はサポートしない) 【命令の機能】 dest + src + X−flag ==> d
est BCDBCDの加算 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第168図に
示す。 【フラグ変化】 第169図に示す。 【解説】 バックされたBCDの加算を行なう。 8ビツト(2桁)、16ビツト(4桁)、32ビツト(
8桁)、64ビツト(16桁)のBCDデータを扱うこ
とができる。ただし、64ビツトは<<LX>>仕様で
ある。 ソースオペランドのサイズがデスティネーションオペラ
ンドのサイズよりも小さい時は、ソースがゼロ拡張され
た上で加算される。 BCDの数は符号拡張が無意味なので、基本的には符号
なしの数と考え、ADDDXのフラグ変化はADDUに
準じるものとする。結果がdestに入らない時にVj
lagがセットされること、dosの時はdestのサ
イズからの桁上げがX−flagにセットされること、
などもADDUと同様である。 ただし、ADDUとは異なり、Z−f lagはADD
X、5UBXのように累積で変化する。 src、destの各桁が0〜9以外の数を含んでいた
場合、つまりADDDX、5UBDXのオペランドがB
CDでなかフた場合には、EITとはならないが、de
stやフラグに設定される結果は保証できない(インプ
リメント依存になる)ものとする。 不正オペランド例外(IOC)としないのは、インプリ
メントの負担が大きく、実行速度に影響が出るためであ
る。 【プログラム例外】 ・予約命令例外 ・RR=’ll’のとき ・MM=’ll’のとき ・EaRが@−5Pのとき ・EaMが#imm−data、@SP+、@−5Pの
とき・<<l l>>機能例外 ・ADDDXの正しいビットパターンがデコードされた
とき 【ニモニック】 5UBDX src、dest (本発明装置で
はサポートしない) 【命令の機能】 dest −’ src −XJIag ==> de
st BCDlO進BCDの減算 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第170図に
示す。 【フラグ変化】 第171図に示す。 【解説】 パックされたBCDの減算を行なう。 8ビツト(2桁)、16ビツト(4桁)、32ビツト(
8桁)、64ビツト(16桁)のecoデータを扱うこ
とができる。ただし、64ビツトは<<L×>>仕様で
ある。 ソースオペランドのサイズがデスティネーションオペラ
ンドのサイズよりも小さい時は、ソースがゼロ拡張され
た上で加算される。 BCDの数は符号拡張が無意味なので、基本的には符号
なしの数と考え、5UBDXのフラグ変化は5UBUに
準じるものとする。結果が負になった時にVJlagが
セットされること、dosの時はdestのサイズから
の桁下げがXJlagにセットされること、なども5u
euと同様である。ただし、5UBUとは異なり、Z−
flagはADDX、5UBXO)ように累積で変化す
る。 5UBDXで結果が負になった場合には、destは絶
対値表現ではなく補数表現(10の補数)となる。した
がって、destは上位桁からの繰り下がりがあった場
合と同じ値になる。 例=16ビツトで5UBDXを実行する場合dest
5rc 0123−0456 = (−0333)destは(
−333) = 9667となる。 src、destの各桁がθ〜9以外の数を含んでいた
場合、つまりA[1()[IX 、 5tJBOXのオ
ペランドがBCDでなかった場合には、EITとはなら
ないが、destやフラグに設定される結果は保証でき
ない(インプリメント依存になる)ものとする。 不正オペランド例外(IOE)としないのは、インプリ
メントの負担が大きく、実行速度に影響 、が出るため
である。 【プログラム例外】 ・予約命令例外 ・RR=’ll’のとき ・MM=’ll’のとき ・EaRが訃SPのとき ・EaMが#imm−data、fi!SP+、@−5
Pのとき・<<Ll>>機能例外 ・5uaoxの正しいビットパターンがデコードされた
とき 【ニモニック】 PACにss src、dest (本発明装置
ではサポートしない) 【命令の機能】 pack string 1nto BCDBCDへの
パック 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第172国に
示す。 【フラグ変化】 第173図に示す。 【解説】 SrCをBCD(Binary Coded Deci
mal)にパックしてdestに転送する。実際には、
SSにB、H,W、Lのいずれかの文字が入り、次のよ
うなニモニックとオペレーションになる。 PACにIIB src[、lIコ、dest[、
B]RR=01.四=OOsrc[04:07]==>
dest[:00:03]。 src[12:15コ ==> dest[04:07] PACに讐Hsrc[、W]、dest[、H]
<<L2>>RR=10.四=01 sr
c[04:07コ==> dest[00:03]。 src[12:15] ==> dest[04:07] src[20:23コ ==> dest[08:11]。 src[28:311 ==> dest[12:15コ PACKWB src[:、W]、dest[、B
コRR=10.WW=OOsrc[12:15コ==>
dest[oO:03]。 src[28:31コ ==> dest[04:07] PACKLW src[、L]、dest[、讐コ
<(LX>>PACKLII src[、L]
、dest[、Hコ <<LX>>なお、PACKs
s、UNPKssにおいて、サイズの違いによってニモ
ニックまで変えているのは、サイズの違いによって命令
自体の意味もかなり変わると考えられるためである。つ
まり、一般の命令では、サイズの違いによ)てゼロ拡張
や符号拡張を行なうだけであったが、PACKss、U
NPKssでは命令のオペレーション自体がかなり異な
っている。 PACK、UNPKで、上記の説明に含まれない不合理
なサイズの紹み合わせを指定した場合には、動作を保証
しない(インプリメントに依存した値がdestに設定
される)ものとする。アーキテクチャ上は予約命令例外
(RIE)とするのが望ましいが、2つのオペランドの
サイズの組み合わせによって予約命令例外(RIE)を
検出するのはインプリメントの負担が大きいため、予約
命令例外(RIE)とはしない。これは、異種サイズ間
の論理演算の場合も同様である。 srcのうち、destに影響を与えないフィールドく
PACK118の2−7〜2″4のビットなど)につい
ては、0かどうかのチエツクは行なわず、0でなくても
無視する。文字コードをそのままパックするケースを考
えると、0でないことの方が多い。 【プログラム例外】 ・予約命令例外 ・RR=’ll’のとき ・讐=’ll’のとき ・EaRが@−5Pのとき ・EaWが#imm−data、@SP十のとき・<<
l l>>機能例外 ・PACKssの正しいビットパターンがデコードされ
たとき 【ニモニック】 UNPKss src、dest、adj (本
発明装置ではサポートしない) 【命令の機能】 unpack BCD BCDからのアンパック 【命令オプション】 なし 第174図に示す。 【フラグ変化】 第175図に示す。 【解説】 BCD(Binary Coded Decimal)
のsrcのアンパックを行ない、アンパックした値に補
正値adjを加えてdestに転送する。補正値adj
を加えるのは、UNPに命令によって直接文字コードま
で生成するためである。adjの加算は、BCDではな
くバイナリの加算である。adjのサイズはdestの
サイズと共通に四フィールドによって指定される。 実際には、SSにB、II、W、Lのいずれかの文字が
入り、次のようなニモニックとオペレーションになる。 第171図に示す。 PACに、 UNPにで、上記の説明に含まれない不合
理なサイズの組み合わせを指定した場合には、動作を保
証しない(インプリメントに依存した値がdestに設
定される)ものとする。アーキテクチャ上は予約命令例
外(RIE)とするのが望ましいが、2つのオペランド
のサイズの組み合わせによって予約命令例外(RIE)
を検出するのはインプリメントの負担が大きいため、予
約命令例外(RIE)とはしない。 adjの加算によるオーバーフローは無視する。 【プログラム例外】 ・予約命令例外 ・RR=’ll’のとき ・讐=’ll’のとき ・EaRが@−5Pのとき φEaIIJが#imm−data、@SP十のとき・
<<l l>>機能例外 ・UNPKssの正しいビットパターンがデコードされ
たとき 12−10. 1’ 会Δ 「ストリング」とは、8ビツト、16ビツト、32ビツ
ト、または64ビツトのデータを任意の長さだけ連続し
て並べたデータタイプである。 (5SC)l命令に限り、連続ではなく、一定間隔で飛
び飛びのアドレスにあるデータの集合もサポートしてい
る。) 個々のデータの意味は特に決まっておらず、実際の文字
コードになる場合、整数になる場合、浮動小数になる場
合などがある。これは、ユーザ側で解釈する。 ストリングの範囲を示す方法には、 ・ストリングの長さ(データ数)を指定する方法 ・ストリング終了を示す文字(ターミネータ)を指定す
る方法 の2通りがあり、使用目的や言語によって適した方を選
択する必要がある。本発明装置のストリング命令ではス
トリングのデータ数がパラメータとなっているが、さら
にオプションの終了条件という形でターミネータを与え
ることができ、両方の指定方法をサポートしている。 本発明装置のストリング命令の特徴の一つとして、ポイ
ンタの増減量を自由に設定できるということがあげられ
る。そのため、ストリングサーチ命令(SSCH命令)
を使ってテーブル検索や多次元配列のスキャンなども行
なうことができる。 また、本発明装置ではストリング命令5M0V。 SCMP 、 5SCHの終了条件として大小比較や二
値比較を含む豊富な条件が指定でき、これも大きな特徴
となっている。ストリング命令のうち、ストリングサー
チ用の5SCH命令は、検索条件が終了条件として指定
されるため、終了条件にのみ意味がある命令となってい
る。本発明装!のストリング命令で指定できる条件(e
eee)については、付録を参照のこと。本発明装置で
は<<L2>>仕様となっている、終了条件0UTU−
ZEはサポートしない。 ストリング命令の用途としては、文字どおり8716ビ
ツトの文字列を処理するもののほか、特定のビットパタ
ーンのサーチ、メモリのブロック転送、構造体の代入、
メモリ領域のクリアなどの応用がある。 ストリング命令は任意長ビットフィールド命令と同じく
不定長のデータを扱うため、実行中の割り込み受付、実
行再開の機能が不可欠である。一方、ストリング命令自
体がコンパイラの生成するコードとなることはほとんど
なく、アセンブラで書かれたサブルーチンとして提供さ
れることが多い。そのため、対称性やアドレッシングモ
ードについての制限はあまり問題にならない。したがっ
て、本発明装置のストリング命令では、オペランドや実
行途中の状態保持のために固定番号のレジスタ(RO〜
R4)を使うようになっている。主なレジスタの使い方
は次のようになる。 RO: ソース側ストリングの先頭アドレス R1: デスティネーション側ストリングの先頭ア
ドレス R2: ストリングの長さ、データ数R3:
終了条件の比較値(1) R4: 終了条件の比較値(2) このうち、ストリングの長さを表わすR2はエレメント
数であって、バイト数ではない。R2は符号なしの数と
して扱われ、R2:0の場合はエレメント数による命令
終了は行なわないという意味に解釈される。つまり、エ
レメント数による終了を避けたい場合には、R2=0と
して命令を実行すれば良いことになる。インプリメント
上は、ストリング命令の実行パターンは次のようになる
のが一般的である。 do ( R2−1==> R2; check−interrupt; ’1 while (R2!=O); ただし、R2=0とした場合に、エレメント数をH’
100000000と考えるか、無限大(エレメント数
のチエツクを行なわない)と考えるかはインプリメント
に依存する。つまり、H’l00000000回のエレ
メント操作を行なっても命令を終了しなかった場合に、
その後の動作はインプリメント依存になるものとする。 ただし、エレメント数以外の要因により命令を終了した
場合(R2=Oの場合は普通こうなる)には、命令終了
後のR2の値(付録11参照)が正しくセットされてい
なければならない。実際には、5SCH/RでR5=0
を指定したような特殊な場合を除いて、+1 ’ 10
0000000回のエレメント操作を行なう開にアドレ
ス変換例外(ATRE)やバスアクセス例外(BAE)
を起こし、命令中断となるのが普通である。 ストリング命令はいろいろな要因で終了するため、それ
らを区別するためにフラグを用いる。それぞれのフラグ
の意味は、次のようになっている。 Vjlag エレメント数(ストリング長)による
終了 Fjlag 終了条件(eeee)による終了この
時、複数の終了条件を区 別するためにMjlagを使用す る。 町「1a8の変化については付録 参照。 これ以外に終了要因のないSCMP、5SC)Iては、
VJlagとF−flagの変化が相補的となる。SC
MPの場合には、これ以外に比較データの不一致によっ
て命令を終了する場合がある。 【ニモニック】 NOV 【命令の機能】 copy string ストリングのコピー 【命令オプション】 /F アドレス増加の方向に処理する/B アドレ
ス減少の方向に処理する/終了条件各種(eeee)
(本発明装置では<<L2>>となっている 0UTU−ZEはサポートし ない。) 【命令ビットパターンとアセンブラ表記】第177図に
示す。 【フラグ変化】 第178図に示す。 【解説】 ストリングの転送を行なう。 減少方向の操作をするストリング命令5NOV/Bでは
、最初にRO,R1で指定するアドレスが、操作対象と
なるストリングの占めるアドレスの最大アドレス+1を
指し、RO,R1をブリデクリメントしながら操作を進
める。 5M0VでSrCとdestがオーバーラツプしていた
時に、/F、/Bのうち正しくない方のオプションを指
定した場合の動作は、BVCPY、BVMAPと同じよ
うに保証しないものとする。つまり、インプリメントや
命令実行中断の有無によって異なる場合がある。 これは、高機能命令の特徴を生かしてバイブライン的な
メモリアクセスをした場合に、メモリアクセスの順番が
変わることがあり、必ずしも前エレメントの書き込みが
終わってから次エレメントの読み出しを行なうとは限ら
ないからである。 なお、逆方向の処理オプション/Bは、この命令5M0
V/Bに限り<<L2>>ではなく、<<シ1>>どな
っている。 任意長ビットフィールド命令やストリング命令などの高
機能命令の詳細仕様や、命令終了後のレジスタ値につい
ては、付録11を参照のこと。 【プログラム例外】 ・予約命令例外 ・ss=’tt’のとき 曇p=’t’のとき ・Q=’l’のとき ・eeee=’0111’〜’1lll’のとき【ニモ
ニック】 CMP 【命令の機能】 compare string ストリングの比較 【命令オプション】 /F アドレス増加の方向に処理する/B アドレ
ス減少の方向に処理する<<L2>> (本発明装置で
はサポートする)/終了条件各種(eeee) (本
発明装置では<<L2>>とな)ている 0tJTU−ZEはサポートし ない。) 【命令ビットパターンとアセンブラ表記】第179図に
示す。 【フラグ変化】 第180図に示す。 【解説】 ストリング5rcl、5rc2.の比較を行なう。 2つのストリングが一致している間は比較を続け、一致
しない文字が見付かれば比較を終了する。SCMP命令
では、CMP命令と同様に、5rc2−5rclの結果
をもとにしてフラグの設定を行なう。例えばLJIag
は、5rclに対してS「C2の方がより小さいという
ことを示す。5rcl−5rc2の結果をもとにしてフ
ラグの設定を行なうのではない。 終了条件を持つSCMP命令の応用としては、テキスト
を一行単位で比較する(R3に改行の文字コードをセッ
トしてSCMP/EQを実行)、数字が続く間だけ比較
する、全角文字が続く間だけ比較する、といフたものが
ある。 SCMPでは、命令を終了させる要因が次の3つ存在し
、フラグ変化によってそれらを見分けることができる。 1、エレメント(データ)数(R2)による終了 VJIag = 1 2、終了条件による終了 FJIag = 1. 終了要因によって町flag
が変化 3、比較中のデータの不一致による終了Z−flag
= 0. 比較結果によってL−f lag、X−f
lagが変化 し−flagは、最後のデータを符号付きと見て比較し
た時の比較結果 Xjlagは、最後のデータを符号な しと見て比較した時の比較結果 1〜3の要因のうち、2と3のチエツクを同時に行なう
ことは可能であるが、lの要因のチエツクは、2,3と
は別のフェーズで行なわれる。したがって、2と3が同
時に成立することはあるが、lと2や1と3が同時に成
立することはない。I、 2. 3の少なくても一つ
の終了要因が成立した場合にSCMP命令が終了する。 比較するデータが一致している間は、その値(srcl
=src2)が終了条件のテスト対象となるが、データ
に不一致があった場合には、ROにより示される5rc
lの方を終了条件のテスト対象とする。ただし、不一致
によりSCMP命令が終了した場合には、終了条件が成
立したかどうかという情報は必要ないことが多いため、
これは単なる約束に過ぎない。 また、終了条件が溝たされないと意味を持たないMJI
agについては、別の終了要因により終了した場合に、
意味が不明確となる。そのような場合のフラグ変化は、
0になるものと決めておく。 ZJIag、L−flag、、X−flagについては
、一致、不一致にかかわらず必ず最後のデータの比較結
果を反映する。したがって、3.以外の要因で終了した
場合(データが一致している場合)には、自動的にZj
lag=1.L−flag=0.X−flag=0とな
る。なお、SCMPでは符号なしデータ、符号付きデー
タの両方を扱うため、LJlagにエレメントを符号付
きデータと考えた時の比較結果が入り、XJlagにエ
レメントを符号なしデータと考えた時の比較結果が入る
ようになっている。[1TRONの文字コードは符号な
しで扱う必要があるし、一般の整数を扱うのであれば、
符号付きのデータを扱う必要もある。 SCMPのフラグ変化をまとめると第181図のように
なる。 0は終了要因が満たされたことを示し、×は終了要因が
満たされないことを示す。 +−一−フラグ本来の意味ではなく、約束としてこうな
)ていることを 示すものである ネA −−−5rcl=src2が終了条件のどれに該
当するか、による 零〇−−−5rclが終了条件のどれに該当するか、に
よる ネC−−−5rcl < 5rc2か5rc2 < 5
rcJか、による /Bオプションは<<L2>>であるが本発明装置では
サポートする。 【プログラム例外】 ・予約命令例外 畢SS=’ll’のとき ・P=’l’のとき ・Q=’l’のとき ・eeee=’o111’ 〜’1111’のとき【ニ
モニック】 5SCI+ 【命令の機能】 find a character in a str
ingストリングのサーチ 【命令オプション】 /F アドレス増加の方向に処理する(ポインタ値を
エレメントサイズず つ増加させる) /Rポインタの増加値はR5で指定され/終了条件各種
(eeee) (本発明H置では<<L2>>となっ
て いる0UTU−ZEはサ ポートしない。) 【命令ビットパターンとアセンブラ表記】第182図に
示す。 【フラグ変化】 第183図に示す。 【解説】 ストリングをサーチし、条件に合うエレメントを見つけ
出す。 ′/R′オプションの場合には、R5の正負にかかわら
ず、常にエレメントの比較後にROが更新(ポストイン
クリメントまたはボストデクリメント)される。 5SCII/RのR5のサイズはROのポインタサイズ
と等しくなる。つまり、本発明装置32では32ビツト
固定であり、本発明装置64ではPビットまたはモード
によって指定される。SS (R3゜R4,エレメン
トサイズ)とは独立である。 【プログラム例外】 ・予約命令例外 ・SS=’ll’のとき ・P=’l’のとき ・eeee=’o111 ’ 〜’ 1111’のとき
【ニモニック】 STR 【命令の機能】 5tore characters 同一データを繰り返し書き込み(ストリングのフィル) 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第184図に
示す。 【フラグ変化】 第185図に示す。 【解説】 先頭アドレス(R1)と長さ(R2)により指定された
メモリ領域に、R3の値を繰り返し書き込む。 5STR命令では終了条件が意味を持たないため、終了
条件の指定は行なわない。 なお、ストリング命令てR2=0の場合はエレメント数
による終了を行なt〕ないが、5STR命令の場合はエ
レメント数による終了が唯一の終了要因であり、R2=
0を指定すると無限ループを形成することになる。これ
については、ハードウェアでは特に対処せず、プログラ
ム側で注意してもらうことにする。ただ、実行中の割り
込み受付や再実行は可能なので、この命令によって間違
って無限ループに入ったとしても、タスクやプロセスの
スケジューリング等には影響しない。通常は複数の命令
によって構成される無限ループが、たまたま−命令にま
とめられただけと考える。R2=0を不正オペランド例
外10Eとしないのは、他のストリング命令との仕様の
統一や、インプリメントの負担、高速化を考えたためで
ある。 このほか、5SCIIやQSCI+命令でも、パラメー
タや終了条件の指定によっては一つの命令で無限ループ
を形成する場合がある。 【プログラム例外】 、・予約命令例外 ΦSS=’ll’のとき φp=’t’のとき 12−1. ニー命Δ 本発明装置ではキューを操作するための命令として、Q
INS (エントリの挿入)、QDEL (エントリの
削除)、QSC++ (エントリのサーチ)の3つの命
令が用意されている。本発明装置でサポートしているキ
ューは、各キューエントリの先頭から1@目と2番目の
データが絶対アドレスのリンクポインタとなフだ、ダブ
ルリンクのキューである。キューエントリの先頭にある
データが次のキューエントリへのポインタとなり、キュ
ーエントリの2番目にあるデータが前のキューエントリ
へのポインタとなっている。 キュー命令の仕様は、キューヘッダをキュー命令のオペ
ランドとして直接指定できるように、以下のような方針
で決められている。 1、 QDELでは、指定したエントリではなく直後の
エントリが削除される。 QUEUE IIEADをオペランドとして指定した場
合には、先頭のエントリが削除さ れることになる。QSCII/Bで見付けたエントリを
削除する場合や、キューの最 後のエントリを削除する場合には間接 参照が必要になるが、QSCH/Fで見付、けたエント
リを削除する場合やキューの 先頭のエントリな削除する場合に比較 すれば、頻度は少ないと考えられる。 2、 QINSでは、指定したエントりの直前に新しい
エントリが挿入される。 QtJELIE HEADをオペランドとして指定した
場合には、キューの最後にエントリ が挿入されることになる。 これについては2つの考え方がある。 QDEL命令との対称性を考えると、QINSでは指定
したエントリ(あるいはQUEUE HEAD)の直後
にエントリを挿入する方が望ましい。これは、QINS
で挿入したエントリをQDELで削除するために、同じ
オペランドを指定できるからであ る。また、キューをスタック(LIFO)的な使い方に
する場合にも、このような 仕様の方が良い。 一方、キューをFIFOで使う場合には、QINSでキ
ューの最後にエントリを挿入し、QDELではキューの
先頭のエントリを削除することが多い。こちらの方が キュー本来の使い方であるし、lTR0Nでもそのよう
な例がある。 したがって、後者の仕様にする。 3、 QSCHでは、現在のエントリではなく直後のエ
ントリからサーチを始める。 QUEUE )IEADをオペランドとして指定した場
合には、キューの先頭からサーチ を始めることになる。また、サーチが 成功した場合に次のサーチを行なうに は、そのままもう−度QSCHを実行すればよい。 この考え方は、他の高機能命令(スト リング、任意長ビットフィールド操作)とは異なったも
のである。すなわち、 ストリング命令では現在ポインタの指 しているデータ自体からサーチが始ま り、連続サーチを行なう場合には別命 令でポインタを更新しておく必要があ る。これはキュー命令とは異なった動 きである。 しかし、キューの場合にはヘッダが別 になっているという事情があり、扱い が異なっているため、別の仕様にして も構わないと判断した。 4、空のキューをフラグで判定する。 QINSで空のキューにデータを挿入した場合、QDE
Lでエントリの削除の結果キューが空になった場合には
、Zjlagをセットする。また、QDELで空のキュ
ーからエントリを削除しようとした場合 は、エラーなのでポインタの付は変え 【は行なわ
ないが、この時VJIagをセットする。 【ニモニック】 QINS entry、queue【命令の機能】 1nsert a new entry 1nto a
queueダブルリンクのキューへ挿入 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第186図に
示す。 【フラグ変化】 第187図に示す。 ]解説】 entryで指定される新しいキューのエントリが、q
ueueで示されるキューエントリの直前に挿入される
。 queueで指定されるキューエントリがキューヘッダ
であった場合には、この命令にょフて、キューの最後に
新しいエントリが挿入されることになる。 命令実行前にキネ−が空であったかどうかによって、Z
Jlagがセットされる。 [32ビツトで処理を行なう場合のQINS命令のオペ
レーション] 第188図に示す。 [実行前] 第189図に示す。 [実行後コ 第190図に示す。 EaMqP、EaMaP2で指定されるアドレッシング
モードでは、レジスタ直接RnS@−5P、@SP+、
#i開−dataのモードは使用できない。 なお、QINSでは、命令の実行のために直接必要では
ない部分のデータ構造のチエツク(queueの前後の
キューエントリのリンク関係など)は特に行なわない。 オペレーションに書かれている通りの動作を行なう。 【プログラム例外】 ・予約命令例外 ・+=′09のとき Φ−=21′のとき ・EaMqPがRn、#imm−data、l:SI’
+J−5Pのとき ΦEaMqP2がRn、#imm−data、@SP+
、@−5Pのとき 【ニモニック】 QDEL queue、dest 【命令の機能】 remove a entry from a que
ueダブルリンクのキューエントリを削除 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第191図に
示す。 【フラグ変化】 第192図に示す。 【解説】 queueで指定されたキューエントリの次のエントリ
を削除し、削除されたエントリのアドレスをdestに
セットする。削除されたエントリのアドレスをdest
にセットするのは、それ以後削除したエントリを操作す
ることが多いためである。 queueとしてキューヘッダを指定した場合には、キ
ューの先頭のエントリが削除されることになる。 queueで指定されたキューが空のキューであった場
合は、命令の実行ができない。この時、EITは起動せ
ず、V−flag、Z−flagのセットだけを行なっ
て命令を終了する。destは無変化となる。 dest/Eaす!Sでは、@−5Pのモードを禁止し
ている。これは、キューが空でVJIagがセットされ
、destの転送ができない場合に、destにe−5
Pが指定されていると命令動作がまぎられしくなるため
である。 [32ビツトで処理を行なう場合のQDEL命令のオペ
レーションコ 第193図に示す。 [実行前] 第194図に示す。 [実行後] 第195図に示す。 EaRqPで指定されるアドレッシングモードでは、レ
ジスタ直接、@−5P、@SP+、ltimm−dat
aのモードは使用できない。 なお、QDELでは、空のキューの判定以外のチエツク
、命令の実行のために直接必要ではない部分のデータ構
造のチエツク(queueの前後のキューエントリのリ
ンク関係など)は特に行なわない。オペレーションに書
かれている通りの動作を行なう。 【プログラム例外】 ・予約命令例外 ・+=′0′のとき ・W=’l’のとき ・EaRqPがRn、#imm−data、@SP+、
@−5Pのとき ・EaW!Sが旧mm−data、@SP+、(i!−
5Pのとき 【ニモニック] QSCI( 【命令の機能] 5earch queue entriesキューのサ
ーチ 【命令オプション】 /NM R6のマスクなし /MRR6のマスクあり <<12>>(本発明装置
ではサポートしない) /F キューの順方向にサーチ /B キューの逆方向にサーチ<<L2>>(本発明
装置ではサポートする) /終了条件各種(eeee) (本発明装置では<<
L2>>となって いる0UTU−ZEはサ ポートしない) 【命令ビットパターンとアセンブラ表記】第196図に
示す。 セットの必要なのは、RO,R2,R3(、オプション
)、R4(オプション) 、 R5,R6(オプショ
ン)であり、結果が入るのは、RO。 R1である。続けて次のサーチを行なうことができる。 【フラグ変化】 第197図に示す。 【解説】 キューのエントリをサーチし、条件に合ったものを見付
ける。逆方向のサーチ機能/B、およびマスクの機能/
MRは<<L2>>となっている。 本発明装置では逆方向のサーチ機能/Bをサポートする
。マスクの機能/MRはサポートしない。 この命令はキューの長さに依存した処理量となるので、
ストリング命令と同じように実行中の中断に対する考慮
が必要である。したがって、オペランドと途中の実行状
態は固定番号のレジスタに置く。 サーチ条件としては、マスク(特定ビットの抽出)と比
較が用意されている。マスクはフラグのサーチに用い、
比較は優先度の処理などに用いる。比較条件の指定は、
ストリング命令の終了条件の指定と同じである。 キューの終りを判定するために、キューのエントリアド
レスとキューの終了アドレスR2との比較を行ない、一
致した場合には命令を終了する。R2との比較によって
命令を終了した場合、すなわち、それまでにサーチ条件
を満たすものがなく、サーチ失敗であった場合には、V
JIagをセットして命令を終了する。 EITは起動しない。 QSCH命令の条件指定によっては、一つの命令の中で
無限ループに入ることがある。これについては、ハード
ウェアでは特に対処せず、プログラム側で注意してもら
うことにする。 ただ、実行中の割り込み受付や再実行は可能なので、ユ
ーザプログラムの中で間違って無限ループに入ったとし
ても、タスクやプロセスのスケジューリング等には影響
しない。通常は複数の命令によって構成される無限ルー
プが、たまたま−命令にまとめられただけと考える。 サーチが終了した時に、ROは指定した条件に合うエン
トリを、R1はその直前のエントリを指している。R1
は、シングルリンクのキューの時にエントリを削除する
ために使用することができる。また、QDELでは指定
したエントリの次のエントリが削除されるので、QSC
I/Fで見付けたエントリ自体を削除する場合には、Q
SCHSC後、@ROではなく@R1をパラメータとし
てQDELを実行すればよい。 一般に、RO,R2にQUEUE HEADのアドレス
をセットしてQSC11命令を実行することにより、キ
ューが空の場合を含めてキュー全体のサーチを行なうこ
とができる。 QSCHは、シングルリンクキューとダブルリンクキュ
ーで共用することを狙った命令である。 [QSCHのオペレーションコ 第198図に示す。 このうち、chec3interruptは、外部から
割り込みがかかっているかどうかを調べ、割り込みがか
かっていれば、QSCHの実行を中断して割り込み処理
を始めるというものである。割り込み処理終了後にQS
C)l命令の残りの部分を実行する。 [実行前コ 第199図に示す。 [実行後] 第200図に示す。 【プログラム例外】 ・予約命令例外 ・SS=’ll’のとき ・eeee=’o111’ 〜’ 1111’のとき・
m=′1′のとき 12−」w、vまじ≦乙粂今 【ニモニック】 BRA newpc 【命令の機能】 branch always ジャンプ(PC相対) 【命令オプション] なし 【命令ビットパターンとアセンブラ表記】第201図に
示す。 【フラグ変化】 第202図に示す。 【解説】 13RA命令は、PC相対のみのアドレッシングをサポ
ートするジャンプ命令である。ディスプレースメントの
サイズとして、BRA:Dては8ビツトが、BRA:G
では8ビツト、16ビツト、32ビツト、64ビツトが
利用できる。本発明装置の命令は必ず偶数アドレスから
始まるので、短縮形のBRA:D命令では、#d8を2
倍して使用する。 すなわち、 PC+ #d8ネ2 ==> PC となる。BRA:Gで5s=ooを指定した場合には、
#dSを2倍せずにそのまま使用する。 BRA:Gでnewpcが16ビツトの場合、JMP
@(#dS:16、 PC)と命令機能、コードサイズ
ともに同じであるが、実行サイクル数を短くできる可能
性があるため、別命令となっている。 BRA:Gで、neWpcが奇数であった場合には、ジ
ャンプ先が奇数アドレスになるため、奇数アドレスジャ
ンプ例外(OAJE)となる。これは、Bcc:G、B
SR:G、JMP、JSR命令も同様である。BRA:
D* Bc c : D * BS R: Dでは、
オペランドを2倍して使用するため、0AJEは発生し
ない。 BRA :G 、 Bcc :G 、 BSR: Gで
5s=ooの場合、オペランドサイズは8ビツトである
が、#dSフィールドは16ビツトとなる。この時、#
dSフィールドは下位8ビツトのみを使用し、上位8ビ
ツトには必ず0を入れておかなければならない。上位8
ビツトがOでない場合は、これによって表現されるデー
タがインプリメント依存の不定値になるものとする。つ
まり、BRA:G命令の場合は、ジャンプ先が不定とな
る。EITにはしない。 本発明装置ではこの命令に対し、動的ブランチ予測処理
をする。 【プログラム例外】 ・予約命令例外 ・ss=’tt’のとき ・p=’i’のとき ・奇数アドレスジャンプ例外 ・奇数アドレスにジャンプしたとき 【ニモニック】 Bcc newpc 【命令の機能】 branch conditionally条件ジャン
プ(PC相対) 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第203図に
示す。 【フラグ変化】 第204図に示す。 【解説】 13cc命令は、PC相対のみのアドレッシングをサポ
ートする条件ジャンプ命令である。ディスプレースメン
トのサイズとして、Bee : Dでは8ビツトが、B
cc:Gでは8ビツト、16ビツト、32ビツト、64
ビツトが利用できる。本発明装置の命令は必ず偶数アド
レスから始まるので、Bcc:D命令では、#d8を2
倍して使用する。すなわち、 1f(cccc) PC+ jc!8 * 2 ==> PCとなる。Bc
c:Gで5s=ooを指定した場合には、#dSを2倍
せずにそのまま使用する。 Bccの条件指定部分(1009部分)の詳細とニモニ
ック、ccccのビットパターンについては、付録を参
照のこと。Bccで未定義の条件を指定した場合には、
予約命令例外(RIE)となる。 Bcc:Gて条件不一致のためジャンプしなかった時は
、本発明装置では奇数アドレスジ皐ンブ例外(OAJE
)を発生ずる場合と、発生しない場合がある。 本発明装置ではこの命令に対し、動的ブランチ予測処理
をする。 【プログラム例外】 ・予約命令例外 ・SS=’ll’のとき ・P=’l’のとき ・cccc=’ 1110’ 〜’ 1111’のとき
・奇数アドレスジャンプ例外 ・奇数アドレスにジャンプしたとき 【ニモニック】 BSRnewpc 【命令の機能】 jump to 5ubroutineサブルーチンジ
ヤンプ(PC相対) 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第205図に
示す。 【フラグ変化】 第206図に示す。 【解説】 BSR命令は、PC相対のみのアドレッシングをサポー
トするサブルーチンジャンプ命令である。 PCの値がスタックに退避される。 ディスプレースメントのサイズとして、BSR:Dでは
8ビツトが、BSR:Gでは8ビツト、16ビツト、3
2ビット、64ビツトが利用できる。本発明装置の命令
は必ず偶数アドレスから始まるので、BSR:D命令で
は、#d8を2倍して使用する。すなわち、 PC+ #d8ネ2 ==> PC となる。[lSR:Gで5s=ooを指定した場合には
、#dSを2倍せずにそのまま使用する。 BSR、J SR命令でスタックに退避されるPC値と
しては、その次の命令の先頭アドレスを使用する。これ
に対して、実効アドレスの計算のためにPCを参照する
場合(BSRなどで暗黙にPCを参照する場合を含む)
には、その命令(次の命令ではない)の先頭アドレスを
PC値として使用するので、注意が必要である。 BSR,JSRでは旧のPCがスタックにセーブされる
が、SPのアライメントに関しては特にチエツクしない
。SPが4の倍数でない場合にも、そのまま実行される
。 本発明装置ではこの命令に対し、動的ブランチ予測処理
をする。 【プログラム例外】 ・予約命令例外 ・SS=’ll’のとき φP=’l’のとき ・Q=’l’のとき ・奇数アドレスジャンプ例外 ・奇数アドレスにジャンプしたとき 【ニモニック】 JMP ne讐pc 【命令の機能】 address of src ==> PCジャンプ 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第207図に
示す。 【フラグ変化】 第208図に示す。 【解説】 neWpCの実効アドレスにジャンプする。一般のアド
レッシングモードが使用可能なジャンプ命令である。 case文の実行などにおいては、ジャンプテーブルを
参照してジャンプ先アドレスを決める場合がある。これ
はJMP命令と付加モードによるインデックスアドレッ
シングとを組み合せることにより実現する。 【プログラム例外】 ・予約命令例外 ・EaAがRn、#imm−data、!i!SP+、
[j−5Pのとき・奇数アドレスジャンプ例外 ・奇数アドレスにジャンプしたとき 【ニモニック] JSRne讐pc 【命令の機能】 jump to 5ubroutineサブルーチンジ
ヤンプ 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第209図に
示す。 【フラグ変化】 第210図に示す。 【解説】 neWpCの実効アドレスにサブルーチンジャンプする
。PCの値がスタックに退避される。 BSR,JSR命令でスタックに退避されるPC値とし
ては、その次の命令の先頭アドレスを使用する。これに
対して、実効アドレスの計算のためにPCを参照する場
合(BSRなどで暗黙にPCを参照する場合を含む)に
は、その命令(次の命令ではない)の先頭アドレスをP
C値として使用するので、注意が必要である。 【プログラム例外】 ・予約命令例外 ・P=’l’のとき ・EaAがRn、#imm−data、@SP+J−5
Pのとき・奇数アドレスジャンプ例外 ・奇数アドレスにジャンプしたとき 【ニモニック】 Ace 5tep、xreg、11m1t、new
pc【命令の機能】 add、 compare and branchイン
デクス値を増加するループ命令 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第211図に
示す。 【フラグ変化】 第212図に示す。 【解説】 加算、比較、条件ジャンプを一命令にした複合命令であ
り、ループのプリミティブとして利用する。 5tep、 xreg、11m1tは符号付き整数とし
て演算、比較される。5tepは必ず正の値でないと条
件ジャンプの意味がないが(xregが終了値と反対の
方向に変化することになる)、5tepの正負のチエツ
クは行なわず、オペレーションに書かれている通りの動
作をそのまま行なう。 ACB命令では、ループ命令として高速実行ができるよ
うに、5tep加算時のオーバーフローのチエツクは行
なわない。5tepを加算した結果オーバーフローが起
こり、符号が反転した場合には、符号反転した正しくな
い値がそのまま11m1tと比較される。ただし、比較
のための11m1t −xregの減算がオーバーフロ
ーしたとしても、xreg < 11m1tの比較は正
確に行なわれる。 AcB、 SCBではPC相対でジャンプを行なう。5
S=00でディスプレースメントが8ビツトになる場合
も、SS≠00の場合と同様に、#dS8は2倍せずに
そのまま使用する。SS≠00の場合は、#dS8のフ
ィールドは使用せず(0にする)、SSで指定されたサ
イズ(16,32,64ビツト)のデータが#dS8の
直後に続く。例えば、ACB:Q 旧、RO+#4+
1abelで、I abe IとACB:Q命令のア
ドレスの差がH’1234であった場合は、第213図
に示すビットパターンになる。これは、固定長ピットフ
ィールド命令の:1フォーマットでも同じである。 [ACBのオペレーション] xreg + 5tep =:=> xreg/*オー
バーフローの場合は下 位ビットのみ有効*/ if (xreg < 11m1t) then PC
+ #dS8 ==>PCendif neWpCが奇数であった場合には、ジャンプ先が奇数
アドレスになるため、奇数アドレスジャンプ例外(OA
JE)となる。本発明装置では、終了条件満足のためジ
ャンプしなかった時も、奇数アドレスジャンプ例外(O
AJE)を発生ずる。 [詳細仕様調整中コ ACB、SCB命令でSS≠00の時には、#dS8の
フィールドは使用しない。この時、もし#dS8のフィ
ールドが0になっていなくても、単に無視される。ただ
し、マニュアル上は、#dS8のフィールドには常に0
を入れるようにしておく。 本発明装置ではこの命令に対して、動的ブランチ予測処
理をする。 【プログラム例外] ・予約命令例外 ・RR=’ll’のとき ・XX=’ll’のとき ・SS=’ll’のとき ・P=’l’のとき ・EaRが@−5Pのとき −EaRXが@−5Pのとき ・奇数アドレスジャンプ例外 ・奇数アドレスにジャンプしたとき 【ニモニック】 SCB 5tep、xre3.Ii+nit、ne
wpc【命令の機能】 5ubtract、 compare and bra
nchインデクス値を減少するループ命令 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第214図に
示す。 【フラグ変化】 第215図に示す。 【解説】 減算、比較、条件ジャンプを一命令にした複合命令であ
り、ループのプリミティブとして利用する。 5tep、 xreg、 I 1m1tなどは符号付
き整数として比較される。5tepは必ず正の値でない
と条件ジャンプの意味がないが、 (xregが終了値
と反対の方向に変化することになる)。steρの正負
のチエツクは行なわず、オペレーションに書かれている
通りの動作をそのまま行なう。 SCB命令では、ループ命令として高速実行ができるよ
うに、5tep減算時のオーバーフローのチエツクは行
なわない。5tepを減りした結果オーバーフローが起
こり、符号が反転した場合には、符号反転した正しくな
い値がそのまま11m1tと比較される。ただし、比較
のための11m1t −xregの減算がオーバーフロ
ーしたとしても、xreg < 11m1tの比較は正
確に行なわれる。 ACB 、 SCBではPC相対でジャンプを行なう。 5S=00でディスプレースメントが8ビツトになる場
合も、SS≠00の場合と同様に、#dS8は2倍せず
にそのまま使用する。SS≠00の場合は、#dS8の
フィールドは使用せず(0にする)、SSで指定された
サイズ(16,32,64ビツト)のデータが#dS8
の直後に続く。 [SCBのオペレーション] xreg −5tep ==> xreg/*オーバー
フローの場合は下 位ビットのみ有効ネ/ if (xreg≧11m1t) then PC+
#dS8 ==>PCendif newpcが奇数であった場合には、ジャンプ先が奇数
アドレスになるため、奇数アドレスジャンプ例外(OA
JE)となる。本発明装置では、終了条件満足のためジ
ャンプしなかった時も、奇数アドレスジャンプ例外(O
AJE)を発生する。 [詳細仕様調整中] Ace、SCB命令でSS≠00の時には、#dS8の
フィールドは使用しない。この時、もし#dS8のフィ
ールドが0になっていなくても、単に無視される。ただ
し、マニュアル上は、#dS8のフィールドには常に0
を入れるようにしておく。 本発明装置ではこの命令に刻して、動的ブランチ予測処
理をする。 【プログラム例外】 ・予約命令例外 ・RR=’llゝのとき ・XX=’ll’のとき φSS=’ll’のとき ・P=’l’のとき ・EaRが@−5Pのとき ・EaRxが@−5Pのとき ・奇数アドレスジャンプ例外 ・奇数アドレスにジャンプしたとき 【ニモニック】 ENTER1ocal、reglist【命令の機能】 create new 5tack frameスタッ
クフレームの形成、高級言語用サブルーチンジャンプ 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第216図に
示す。 【フラグ変化】 第217図に示す。 【解説】 高級言語用のスタックフレー11を形成する。 ENTERのI oca Iは符号付きとして扱われ、
I ocalのサイズが小さい場合には、I oca
Iの値が符号拡張される。I oca Iが負の場合は
意味がないスタックフレームが形成されるが、特にチエ
ツクは行なわず、オペレーションに書かれている通りの
動作を行なう。この点は、AcB、 SCBの5tep
と同じである。 オペレーション: FP −> ↓TO5 SP −> FP SP −1ocal −> SP registers(mask) −> ↓TO5高
級言語用のスタックフレームの詳細は、付録を参照のこ
と。 退避するレジスタのビットマツプ指定LnXLは、第2
18図のように行なう。 LnXLは、EaRの拡張部よりも後に置かれる。 ENTERのreglistでbitO,bitl(S
P、FP)を指定した場合には、単にその指定が無視さ
れるものとする。bito、bitlが”1″であって
も、SP 、 FPは転送されない。これを不正オペラ
ンド例外(10E)としないのは、インプリメントの負
担が大きく、実効速度に影響が出るためである。ただし
、チエツクが行なわれていなくても、FP、SPのビッ
トには必ず′0′を入れてもらうように、マニュアル等
で指導する必要がある。 FP、SPのアライメントに関しては特にチエツクしな
い。FP、SPが4の倍数でない場合にも、オペレーシ
ョンに書かれた通りの実行が行なわれる。 ENTER:Gの1ocalオペランドがメモリ上にあ
り、それがENTER命令の実行に伴って形成されるス
タックフレーム領域と重なっていた場合には、命令再実
行がきわめて難しくなる。そこで、ENTER:G、J
RNG:G、 および対称性からEXIT[1:G命令
では、メモリアクセスを伴うアドレッシングモード、つ
まりレジスタ直接Rnとイミディエート以外のアドレッ
シングモードは、すべて禁止している。この命令のオペ
ランドとして動的な値を設定したい場合には、テンポラ
リレジスタを一つ用意し、レジスタ直接Rnのモードを
利用するということになる。 I oca IとしてFP、SPを指定した場合の動作
は、インプリメント依存である。 【プログラム例外] ・予約命令例外 ・X=’l’のとき ・+=90′のとき ・−=′1′のとき −p=’t’のとき SS=’ll’のとき ・EaRlMが#imm−data、Rn以外のとき【
ニモニック】 EXITD reglist、adjsp【命令の
機能】 exit and deallocate param
eters高級言語用サブルーチンリターンとパラメー
タ解放 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第219図に
示す。 【フラグ変化】 第220図に示す。 【解説】 高級言語用のスタックフレーム解放とレジスタの復帰を
行ない、サブルーチンから戻る。 その後adjspをSPに加え、スタック上に残ってい
たサブルーチンのパラメータを捨てる。 EXITDのadjspは符号付きとして扱われ、ad
jspのサイズが小さい場合には、adjspの値が符
号拡張される。adjspが負の場合は意味のない動作
をするが、特にチエツクは行なわず、オペレーションに
書かれている通りに実行を行なう。この点は、Ace
、 SCBの5tepと同じである。 オペレーション: adjsp ==) trrIp ↑TO5==> re8isters(+nask)F
P ==> SP ↑TO5==> FP ↑TO5==> Pc 5p + acljsp ==> SP高級言語用のス
タックフレームの詳細は、付録を参照のこと。 復帰するレジスタのビットマツプ指定LxXLは、第2
21図のように行なう。 LxXLは、EaRの拡張部よりも後に置かれる。 EX I TDのreglistでbit14.bit
15(SP、FP)を指定した場合には、単にその指定
が無視されるものとする。bit14.bit15が”
l”であっても、SP、FPは転送されない。これを不
正オペランド例外(IOE)としないのは、インプリメ
ントの負担が大きく、実効速度に影響が出るためである
。 ただし、チエツクが行なわれていなくても、FP、SP
のビットには必ず′0′を入れてもらうように、マニュ
アル等で指導する必要がある。 FP、SPのアライメントに関しては特にチエツクしな
い。FP、SPが4の倍数でない場合にも、オペレーシ
ョンに書かれた通りの実行が行なわれる。 EXITDで、スタックから復帰されたリターンアドレ
スが奇数であった場合には、ジャンプ先が奇数アドレス
になるため、奇数アドレスジャンプ例外(OAJE)と
なる。 EXITDのオペランドadjsp/EaR1Mでは、
メモリアクセスを伴うアドレッシングモード、つまりレ
ジスタ直接Rnとイミディエート以外のアドレッシング
モードは、すべて禁止している。 この命令のオペランドとして動的な値を設定したい場合
には、テンポラリレジスタを一つ用意し、レジスタ直接
Rnのモードを利用するということになる。 adjspにレジスタ直接Rnのモードを利用し、re
glistに同じレジスタRnが含まれていた場合には
、adjspとして、レジスタ復帰前の値を使用する。 つまり、スタック中に退避されていたEX I TO命
令実行後のレジスタ値ではなく、EXITD命令実行前
のレジスタ値がadjspとなる。 adjspとしてFP、SPを指定した場合の動作は、
インプリメント依存である。 【プログラム例外】 ・予約命令例外 ・X=’l’のとき ・+=′0′のとき ・−=91′のとき ・P=’l’のとき SS=’ll’のとき φEaR1Mが#imm−data、Rn以外のとき【
ニモニック】 RTS 【命令の機能】 return from 5ubroutineサブル
ーチンからのリターン 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第222図に
示す。 【フラグ変化】 第223図に示す。 【解説】 サブルーチンからのリターンを行なう。 オペレーション: ↑TO5−> PC RTSて、スタックから復帰されたリターンアドレスが
奇数であった場合に゛は、ジャンプ先が奇数アドレスに
なるため、奇数アドレスジャンプ例外(OAJ E)と
なる。 【プログラム例外】 ・予約命令例外 ・p=’t’のとき ・奇数アドレスジャンプ例外 ・リターンアドレスが奇数であったとき【ニモニック】 CIP 【命令の機能】 no operation ノーオペレーション 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第224図に
示す。 【フラグ変化】 第225図に示す。 【解説】 何もしない。 【プログラム例外】 ・予約命令例外 ・−=′1′のとき 【ニモニック】 【命令の機能】 purge 1nstruction buffer命
令キャッシュやバイブラインの整合性をとる 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第226図に
示す。 【フラグ変化】 第227図に示す。 【解説】 命令パイプライン、命令キュー、命令キャッシュなど、
命令実行の高速化のためのバッファ類をすべてパージし
、メモリ上に置かれた命令列とプロセッサの内部状態と
の整合性を保証する。この命令は、これから実行すべき
命令コードが、以前(リセット時あるいは前回のPIB
命令実行時)から変更されている可能性があるというこ
とを、プロセッサに通知するために使用する。 本発明装置では、パイプラインや命令キュー、命令キャ
ッシュの制御を簡単化するため、プログラムにより命令
コードを書き変えることは許されていない。 つまり、自分自信で嘗き換えを行なった命令コードをそ
のまま実行しようとしても、動作が保証されない。とこ
ろが、O5の行なう処理をマクロ的に見ると、プログラ
ムをロードしてからそれを実行するという流れがある。 つまり、広い範囲で見るとO5のプログラムにより命令
コードを書き変えていることになる。 また、特殊な用途では、プログラムによって生成した命
令列を実行することもある。 この命令の目的は、そのような場合でも正しい命令の実
行ができるようにすることである。 すなわち、書き換えのあった命令コードに入る前にこの
命令を実行しておけば、新しい命令コードが正しく実行
されることが保証される。インプリメント上は、この命
令によってパイプライン、命令キュー、命令キャッシュ
のパージを行なうことになる。 ただし、バイブラインやキャッシュのメカニズムがメモ
リの書き換えに対するバスモニタリング機構を持ってお
り、メモリとの整合性がハードウェアで常に保証されて
いれば、必ずしもPIB命令でパージを行なう必要はな
い。 この場合、PIB命令はNOP命令として実行される。 いずれにしても、この命令を実行した後に、パイプライ
ンや命令キャッシュとメモリとの整合性が保証されてい
れば良いのである。 MMUを用いて多重論理空間を実現している場合には、
PIB命令を実行した論理空間に対してのみ書き変えた
命令コードの実行が保証される。 例えば、 context−Aの命令コードを書き換えTCTX LDCTX contexjB contexjBの命令コードを書き換えIB といった命令列を実行した場合、contexjBでは
変更された命令コードを実行しても動作が保証されるが
、次にLDCTX contexjAを実行した後でも
、contextJの変更された命令コードの実行に対
しては動作が保証されない。contexjAの命令実
行を保証するためには、contexjAのコンテキス
トにおいて、もう−度PIB命令を実行する必要がある
。これは、命令キャッシュにLSIDが導入された場合
に、PIB命令では、LSIDの一致する命令キャッシ
ュエントリをパージするだけで済ませたいからである。 PIB命令以外の命令では、いかなるジャンプ命令やO
5関連命令(LDCTX、REIT、RRNG、TRA
P、EIT起動など)を実行した後でも、命令コード書
き換え部分のプログラムの動作は保証されない。 これは、命令キャッシュのパージをできるだけ減らすた
めである。したがって、O5がロードしたプログラムを
最初に実行する時には、新しいコンテキストに入ってか
ら(例えばLDCTX −RE IT(7)間で)、必
ずPIBヲ実行する必要がある。 この命令のニモニックPIB(Purge 1nstr
ucti。 n Buffer)の’Buffer’は、キャッシュ
やパイプラインなどを総括的に含めた意味で用いること
ばであり、PTLBのjB?のBufferに同じ用例
がある。PIBというニモニックも、PTLBとの連想
から作られたものである。 この命令は特権命令ではない。ユーザプログラムからも
使用できる。 ゛ [命令コードの整合性についてコ PIB命令の動作を正確に説明するため、 「命令コー
ドの整合性」という状態を以下のように定義する。 「命令コードの整合性」とは、各論理空間の各論理アド
レスについて、別々に定義される状態である。例えば、
論理空間AではH’ 00000000〜H’0OOf
ffffについて「命令コードの整合性」が保証され、
論理空間BではlI’ooo10000〜H’0003
ffffについて「命令コードの整合性」が保証されて
いる、といった使い方をする。「命令コードの整合性」
が保証されている領域の命令を実行した場合にのみ、正
しい命令動作をする( execu teのアクセス権
チエツクを含む)ことが保証される。一般には、 「命
令コードの整合性」の保証されている領域が命令コード
領域であり、データ領域では「命令コードの整合性」が
保証されていない。 ・「命令コードの整合性」が保証されるようになるのは
、次の場合である。 一リセット時 物理空間(=論理空間)の全領域で「命令コードの整合
性」が得られる。 −PiB命令実行時 PIB命令を実行した論理空間の全領域で「命令コード
の整合性」が得られる。AT=00の場合は、リセット
時と同様、物理空間(=論理空間)の全領域で「命令コ
ードの整合性」が得られる。 ・「命令コードの整合性」が失われるようになるのは、
次の場合である。 −メモリ書き換え時 メモリ内容を書き変えた場合、書き変えた領域の「命令
コードの整合性」は失われる。これは、論理アドレスに
よるメモリアクセスの場合も、物理アドレスによるメモ
リアクセスの場合(AT=OOやLDP命令など)も同
様である。 −ATE更新時 ATEを更新した場合、そのATEによりアドレス変換
される領域の「命令コードの整合性」は失われる。した
がって、例えば、LDATEでATE中の保護ビットを
変更した場合にも、その後PIB命令を実行しなければ
保護情報のチエツクが正しく行なわれないことになる。 (これは、命令キャッシュと保護情報のチエツクに間
するインプリメントを軽くするために有効であろう) 以上の点に該当しない一般の命令実行ではBRA、JM
P、JRNG、RRNG、TRAP、REIT、LDC
TX、EIT起動などを含めて、「命令コード整合性の
状態」は変化しない。 12−13. マル・°ロセ・・ の、Δ【ニモニ
ック】 BSETI offset、base【命令の機能
】 −bit −> Z−fla3.1−> bit (i
nterlocked)ビットのセット(バスをロック
) 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第228図に
示す。 【フラグ変化】 第229図に示す。 【解説】 指定されたビットの値を反転したものをjflagにコ
ピーし、その後そのビットを1にセットする。この2つ
の操作はバスをロックして行なわれ、不可分の操作にな
る。したがって、マルチプロセッサ間の同期をとるため
にこの命令が使用できる。 ShMfqi、EaMfiで指定されるアドレッシング
モードでは、レジスタ直接モードRn、 @−5P、f
AsP+、#imm−dataのモードは使用できない
。 アセンブラ表記では、メモリアクセスのサイズをbas
eOサイズとして指定す′る。BSETI:Qでは、メ
モリアクセスのサイズは8ビツトに固定されており、サ
イズは′Bゝのみを書くことができる。また、BSET
I :G、BSETI :Eでのアクセスサイズ(ba
seのサイズ) 、H,、Wの指定は、BSET、BC
LRと同じ(<<L2>>とする。 <<L2>>仕様でアクセスサイズ、+1.、Wを指定
したのに、baseがアライメントのとれていないアド
レスであった場合には、メモリアクセスの範囲がインプ
リメント依存となる。これは、ビット操作命令と同様で
ある。この時、インプリメントによって、アライメント
のとれていないワードやハーフワードのアクセスが行な
われる場合には、バスをロックしたまま複数のバスサイ
クルを実行する。これはC5I命令と同様である。 本発明装置ではく<L2りとなっているハーフワード、
ワード単位のアクセスのインプリメントな行なう。また
baseとしてアライメントのとれていないアドレスを
指定した場合にも、アライメントのとれたハーフワード
、ワード単位でアクセスを行なう。 【プログラム例外] ・予約命令例外 ・RR=’ll’のとき ・BB=’ll’のとき ・EaRが@−5Pのとき ・EaMfi、ShMfqiがRn、#imm−dat
a、@SP+、@−5Pのとき 【ニモニック】 BCLRI offset、base【命令の機能
】 −bit −> Z−fla3.0−> bit (i
nterlocked)ビットのクリア(バスをロック
) 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第230図に
示す。 【フラグ変化】 第231図に示す。 【解説】 指定されたビットの値を反転したものをjflagにコ
ピーし、その後そのビットを0にセットする。この2つ
の操作はバスをロックして行なわれ、不可分の操作にな
る。したがって、マルチプロセッサ間の同期をとるため
にこの命令が使用できる。 EaMfiで指定されるアドレッシングモードでは、レ
ジスタ直接モードRn、 @−5P、@SP+、#im
m−dataのモードは使用できない。 アセンブラ表記では、メモリアクセスのサイズをbas
eOサイズとして指定する。BCLRI:G。 BCLRI:Eでのアクセスサイズ(baseのサイズ
)、■9.−の指定は、BSET、 BCLRと同じ(
<<L2>>とする。 <<L2>>仕様でアクセスサイズ、11.、Wを指定
したのに、baseがアライメントのとれていないアド
レスであった場合には、メモリアクセスの範囲がインプ
リメント依存となる。これは、ビット操作命令と同様で
ある。この時、インプリメントによって、アライメント
のとれていないワードやハーフワードのアクセスが行な
われる場合には、バスをロックしたまま複数のバスサイ
クルを実行する。これはC5I命令と同様である。 本発明装置では<<L2>>となっているハーフワード
、ワード単位のアクセスのインプリメントを行なう。ま
たbaseとしてアライメントのとれていないアドレス
を指定した場合にも、アライメントのとれたハーフワー
ド、ワード単位でアクセスを行なう。 【プログラム例外] ・予約命令例外 ・RR=’ll’のとき ・BB=’ll’のとき ◆EaRが@−5Pのとき ・EaMfiがRn、#imm−data、@SP+、
@−5Pのとき【ニモニック】 C5I comp、update、dest【命令
の機能】 compare and 5tore (interl
ocked)比較とストア(バスをロック) 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第232図に
示す。 【フラグ変化】 第233図に示す。 【解説】 destの値が以前の値(compにより指定)と同じ
であれば、内容を更新する命令である。 この命令は、簡単な構造のデータをマルチプロセッサか
ら更新していく場合に利用できる。 C51命令を実行した結果、destの値が以前の値と
異なっていることがわかった場合、それは他のプロセッ
サがデータ内容を書き替えたことを意味している。した
がって、C5I命令によってdestの値の食い違いを
発見したプロセッサは、新しいdestの値をもとにし
て、そのデータ内容の更新をやり直さなければならない
。 このような方法をとることにより、マルチプロセッサの
下でデータの一貫性を保つことができる。 CCS+のオペレーション] update ==> tmp /零以下の動作はバスをロックして行なわれる*/ if (dest = camp) hen tmp ==> dest 1 ”:> ZJ!ag 1se dest ==> comp O”> Zjlag ビットパターン上の制約から、CSIでは、比較が成功
しなくてもupdateの読みたしが行なわれる。また
、C5I命令でのdestのアクセス権は、常にrea
d、writeとも必要であるものとする。 すなわちC51命令で比較が失敗し、destに対して
書き込みが起らない場合でも、destに対してシri
teアクセス権がないとアドレス変換例外(ATRE)
になる。 RMC、EaM i ROサイズはRRで指定される。 EaM t Rで指定されるアドレッシングモードでは
、e−SP、@SP+、Rn、# imm−dataの
モードは性用できない。 C5I命令で、サイズ、H,、Wを指定し、アライメン
トの取れていないアドレスをオペランドとした場合には
、バスをロックしたまま複数のバスサイクルを実行する
。この場合、read 。 writeのそれぞれが2回ずつのメモリアクセスに分
かれるので、命令全体では、バスをロックしながらre
ad、read、write、writeの4回のメモ
リアクセスを行なうことになる。 なお、C5I以外の一般命令で、アライメントの取れて
いないアドレスに対してメモリアクセスを行なった場合
には、バスはロックされない。したがって、例えば、 varl EQU H’00000006;アライ
メントの取れていな いアドレス とした場合に、プロセッサAから NOV、W #tl’ 12345678.@var
lを実行し、プロセッサBから MOV、W #lI’87654321.@varl
を実行すると、メモリ書き込みのタイミングによっては
、 H’ 00000006〜? =)I’8765H’
00000008〜9 =H’5678となって、
プロセッサAのMOV命令が先に実行された場合ともプ
ロセッサBのNOV命令が先に実行された場合とも異な
る結果になる可能性がある。 マルチプロセッサ間の共有変数に対しては、通常データ
の書き込みだけではなくデータ更新(read−mod
ify−write)を行なうのが普通なので、必然的
にC5I命令を使うことになり、以上のような問題は発
生しない。しかし、マルチプロセッサからC5I以外の
命令でアライメントのとれていない変数をアクセスする
場合には、以上のような問題が生じることがあるので、
注意しておく必要がある。 【プログラム例外】 ・予約命令例外 ・RR=’ll’のとき ・EaRが@−5Pのとき ・EaMiRがRn、limm−data、@SI’+
、@−5Pのとき12−14.j ノ ′ t
l、 。 ノ 。 Δ本発明
装置では、メインプロセッサの制御レジスタ群が、コプ
ロセッサの制御レジスタ群やチップバス上の高速メモリ
などとともに一つのアドレス空間を作ることができるよ
うになっており、これを制御空間と呼ぶ。制御空間の考
え方は、現在側チップとなっているコプロセッサやコン
テキスト退避用の高速メモリが、将来メインプロセッサ
に内蔵された場合に、特に有効になる考え方である。制
御レジスタ操作命令は、制御空間に対してアクセスを行
なうための命令である。 なお、LDC,STCなどの汎用的な制御空間操作命令
は特権命令となっているため、ユーザが制御空間の一部
であるPSB、 PSMを操作するためには、l、DP
SB、 5TPSB、 LDPSM、 STI’
SM命令を使用する。 本発明装置はアドレス変換機構を持たない。 よフて、論理空間アドレスと物理空間アドレスがつねに
等しいため物理空間操作命令の機能は論理空間を操作す
る他の命令に吸収されてしまう。しかし、アドレス変換
機構を持ち、論理空間と物理空間を区別して扱う本発明
装置とのソフトウェア互換性を重視し、本発明装置では
物理空間操作命令をサポートする。 【ニモニック】 LDCsrc、dest 【命令の機能】 1oad control 5pace or reg
ister制御空間へのロード 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第234図に
示す。 【フラグ変化】 第235図に示す。 【解説】 srcの値を制御空間のdestに転送する。5rcO
サイズがdestより小さいときは、符号拡張される。 dest/EaWχでは、レジスタ直接モードRnの指
定、@−5Pの指定はできない。 この命令は特権命令である。r i ngO以外から実
行された場合には、特権命令違反例外(RIVE)とな
る。 本発明装置では制御空間に対する。B、、+1のアクセ
ス機能はサポートしない。制御空間とじてはCPU内の
制御レジスタのみをインプリメントする。 また、UATB、5ATBを実装していないためLDC
によりUATB、5ATBを変更することはできない。 しDATE、 5TATE、 LDP、 STP
、 LDC,STC,MOVPA命令の中の特殊空間
を参照するオペランドにおいて、付加モードによりメモ
リの間接参照が起こった場合には、特殊空間の方ではな
く論理空間(LS)の方を参照する。また、スタックポ
インタSPの参照があった場合には、PRNGではなく
現在リングRNGのスタックが参照される。 特殊空間のアドレスという意味を持つのは、最終的に得
られた実効アドレスのみである。 制御空間に対する。B、、Hのアクセス機能が全くない
プロセッサにおいて、制御空間のオペランドのサイズと
して、B、、Hを指定した場合には、予約命令例外(R
IE)となる。 未実装の制御レジスタ、または制御レジスタのないアド
レスをLDCで指定した場合には、予約機能例外(RF
E)となる。<<シv>>の領域についても同様である
。 制御空間で利用できるアドレスに何らかの制限のあるプ
ロセッサの場合、それに違反した場合には予約機能例外
(RFC)とする。例えば、制御レジスタのアドレスを
4の倍数に限るといった制限はこれに含まれる。コンテ
キスト退避用の高速メモリを内蔵したプロセッサであれ
ば、制御レジスタ部分のアドレスのみが4の倍数に制限
され、高速メモリ部分のアドレスは自由になるというケ
ースが考えられるが、この場合にも、違反すると予約機
能例外(RFE)になる。また、一部のアドレスについ
てのみ、B、、)lの指定が可能なプロセッサにおいて
1、B、、Hのアクセスができないアドレスを指定した
場合にも、予約命令例外(RIE)ではなく予約機能例
外(RFE)となる。これは、命令ビットパターン(サ
イズ指定を含む)のみでエラーと判定できるものを予約
命令例外(RIE)とし、アドレスやオペランド値によ
ってエラーかどうかの状態が変化するものは予約機能例
外(RFC)とする、という考え方に基づいたものであ
る。 制御空間のアドレスがチップ外くコプロセッサのアドレ
スなど)になり、インプリメントの制約によってその領
域がアクセスできなくなっている場合にも、予約機能例
外(RFE)が発生する。LDC、STCでは、制御空
間のアドレスがコプロセッサのアドレスになった場合で
も、コプロセッサ命令例外(CIE)は発生しない。コ
プロセッサ命令例外(CI E)が発生するのは、コプ
ロセッサ用の命令を実行した場合に限られる。 LDCて、制御レジスタの2−1.′+9で表現される
reservedのビットに異なる値を書き込もうとし
た場合や、あるフィールドに対してreservedの
値を書き込もうとした場合には、予約機能例外(RFC
)になる。ps−のSMRNGのフィールドに’001
’などのreservedの値を書き込んだ場合も、こ
れに含まれる。一方、I=t、41で表現されているr
ese rvedのビットに異なる値を書き込んだ場合
には、単に無視される。ただし、ユーザ向けのマニュア
ルでは、′二′に対して必ず′θ′を書き込んでもらう
ように注意しなければならない。また、′*′で表現さ
れているビットには、何を書き込んでも単に無視される
。 このビットは、t=j%lFとは異なり、今後仕様を拡
張した場合でも、性用されないことが保証されたビット
である。したがって、LDCを実行する前に、このビッ
トを10′にマスクしておく必要はない。 LDCでCTXBBを変更した場合には、メモリ上のC
TXBBの内容と実際のチップ内のコンテキストとの整
合性がとれなくなるが、これはプログラマの責任で処理
する。ハードウェア的には、単にCTXBBの変更のみ
を行なう。CTXBBの変更とコンテキストのロードを
両方行なう場合は、しDCTXを使用すればよい。 しDC命令によってUATB 、 5ATBが変更され
る時は、それに伴ってTLBや論理キャッシュのパージ
(PSTLB/ATに相当する処理)が自動的に行なわ
れる。LSIDを実装したプロセッサの場合は、し51
0制御レジスタにより指定される論理空間がパージの対
象となる。この場合、LDC命令には、PSTLB命令
のような/SS、/ASのオプションは設けられていな
いが、これは次のような理由によフている。 PTL8 、 PSTLB命令によるTLBのパージの
場合は、LDCI、UATBの場合とは異なり、他の論
理空間のキャッシュやTLBもパージできるように、L
Sloの機能に相当するパラメータを、別のレジスタ(
R1)によって指定している。この場合、しSIDの制
御レジスタは使用しない。したがつて、そのパラメータ
を使用するかどうかを区別するために、/SS 、 /
Asのオプションを切り換える必要がある。ところが、
LDC*、UATBの場合は、データの矛盾をなくする
ために、現在使用中の空間に対してキャッシュやTLB
のパージを行なうのであるから、LSICの制御レジス
タは本来の意味で働く。つまり、一般のメモリアクセス
と同様に、LSID制御レジスタによって指定された論
理空間がパージの対象となる。LSID未実装のプロセ
ッサでは、全論理空間(一つだけであるが)がパージの
対象となる。 【プログラム例外】 ・予約命令例外 ・RR=’li’のとき ・四:210′以外のとき ・EaRが@−5Pのとき ・EaW$がRn、#imm−data、@SP+、@
−5Pのとき・特権命令達反例外 ・ringo以外から実行されたとき ・予約機能例外 ・未実装の制御レジスタをアクセスしたとき ・制御レジスタの特定フィールドに対してrese r
vedの値を書き込もうとしたとき(=、#、ネは除く
) ・EaW2:のアドレスのワードアラインメントがとれ
ていないとき 【ニモニック】 STCsrc、chest 【命令の機能】 5tore control 5pace or re
gister制御空間からのストア 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第236図に
示す。 【フラグ変化】 第237図に示す。 【解説】 制御空間にあるsrcの値をdestに転送する。ST
Cでは、srcとdestのサイズが共通に指定される
ため、異種サイズ間の転送は行なわれない。 この命令は特権命令である。r i ngo以外から実
行された場合には、特権命令達反例外(PIVE)とな
る。 src/EaRχでは、レジスタ直接モードRnの指定
、イミディエー) #imm−dataの指定、eSP
+の指定はでさない。 本発明装置では、制御空間に対する。B、、11のアク
セス機能はサポートしない。制御空間についてはCPU
内の制御レジスタのみをインプリメントする。 LDATE、 5TATE、 LDP、 STP
、 LDC,STC,MOVPA命令の中の特殊空間
を参照するオペランドにおいて、付加モードによりメモ
リの間接参照が起こった場合には、特殊空間の方ではな
く論理空間(LS)の方を参照する。また、スタックポ
インタSPの参照があった場合には、PRNGではなく
現在リングRNGのスタックが参照される。 特殊空間のアドレスという意味を持つのは、最終的に得
られた実効アドレスのみである。 制御空間に対する。B、、Hのアクセス機能が全くない
プロセッサにおいて、制御空間のオペランドのサイズと
して、B、、11を指定した場合には、予約命令例外(
RYE)となる。 未実装の制御レジスタ、または制御レジスタのないアド
レスをSTCで指定した場合には、予約機能例外(RF
E)となる。<<LV>>の領域についても同様である
。 制御空間で利用できるアドレスに何らかの制限のあるプ
ロセッサの場合、それに違反した場合には予約機能例外
(RFE)とする。例えば、制御レジスタのアドレスを
4の倍数に限るといった制限はこれに含まれる。コンテ
キスト退避用の高速メモリを内蔵したプロセッサであれ
ば、制御レジスタ部分のアドレスのみが4の倍数に制限
され、高速メモリ部分のアドレスは自由になるというケ
ースが考えられるが、この場合にも、違反すると予約機
能例外(RFE)になる。また、一部のアドレスについ
てのみ、B、、)Iの指定が可能なプロセッサにおいて
1、B、、1(のアクセスができないアドレスを指定し
た場合にも、予約命令例外(RIE)ではなく予約機能
例外(RFE)となる。これは、命令ビットパターン(
サイズ指定を含む)のみでエラーと判定できるものを予
約命令例外(RIE)とし、アドレスやオペランド値に
よってエラーかどうかの状態が変化するものは予約機能
例外(RFE)とする、という考え方に基づいたもので
ある。 制御空間のアドレスがチップ外(コプロセッサのアドレ
スなど)になり、インプリメントの制約によフてその領
域がアクセスできなくなっている場合にも、予約機能例
外(RFE)が発生する。LDC、STCでは、制御空
間のアドレスがコプロセッサのアドレスになった場合で
も、コプロセッサ命令例外(CIE)は発生しない。コ
プロセッサ命令例外(CI E)が発生するのは、コプ
ロセッサ用の命令を実行した場合に限られる。 STCで、制御レジスタの′−2で表現されているビッ
トを読みだした場合には′θ′が、′+1のビットを読
みだした場合にはsitが読み出される。 また、p=t、e#e、tcのビットを読み出そうとし
た場合に得られる値は、不定である。インプリメントに
よって、90′固定の場合、sV固定の場合、以前に書
き込んだ値がそのまま読み出される場合がある。将来の
拡張のため、′二t、jilt、j零2のビットの値を
利用したプログラミングは行なわないように、ユーザ向
けのマニュアルに明記しなければならない。 【プログラム例外】 ・予約命令例外 ・四=10′以外のとき φEaRXがRn、#imm−data、@SP+、@
−5Pのとき番EaWが#imm−data、@SP十
のとき・特権命令違反例外 ・r i ngO以外から実行されたとき・予約機能例
外 ・未実装の制御レジスタをアクセスしたとき ◆EaRXのアドレスのワードアラインメントがとれて
いないとき 【ニモニック】 LDPSB src 【命令の機能】 1oad PSB PSBへのロード 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第238図に
示す。 【フラグ変化】 第239図に示す。 【解説】 srcをPSBに転送する。 ユーザのコル−チンなどで、PSB、 r’sHの個々
のビットの意味とは関係なく退避や復帰を行なう場合を
除けば、PSM 、 PSBでは、一部のフィールドの
みの書き換えをしたいということが多い。そのため、L
DPSB、LDPSM命令のsrcオペランドは16ビ
ツト(EaRh)となフており、上位バイトがマスク(
変更されるビットを0とする)、下位バイトが変更デー
タを表わすという仕様になっている。つまり、srcを
src = [SO,Sl、、、S7.S8.S9.、
、S15]とすると、 [LDPSBのオペレーション] ([:SO,Sl、 、 、57]、and、PSB)
、or、(−[SO,Sl 、、 、S7]、and、
[S8.S9.、、S15])==>PSBただし′−
9はビット否定 となる。例えば、2“4の位置にあるXJIagをセッ
トする命令は、 LSPSB #H’eflO となる。 上位バイトで、変更されるビットの方を0、変更されな
い方を1としたのは、変更される方をデフォルトと考え
る方が自然だと判断したからである。8ビット全部を変
更する場合には、上位バイトをすべて一〇にして単なる
バイトデータを書けばよい。8ビット全部の変更は、最
初に述べたように、ユーザ側でPSB。 PSMの退避や復帰をする場合に必要である。 LDPSB 、 LDPSMテ、PSB 、 PSMノ
未使用フィールドの値を”!”にしようとした場合には
、予約機能例外(RFE)が発生する。 【プログラム例外】 ・予約命令例外 寺EaRhが@−5Pのとき 【ニモニック】 LDPSM src 【命令め機能】 1oad PSM PSMへのロード 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第240図に
示す。 【フラグ変化】 第241図に示す。 【解説】 srcをPSMに転送する。 ユーザのコル−チンなどで、PSB 、 PSHの個々
のビットの意味とは関係なく退避や復帰を行なう場合を
除けば、PSM 、 PSBでは、一部のフィールドの
みの書き換えをしたいということが多い。そのため、L
DPSB 、 LDPSM命令のsrcオペランドは1
6ビツト、(EaRh)となっており、上位バイトがマ
スク(変更されるビットを0とする)、下位バイトが変
更データを表わすという仕様になっている。つまり、s
rcを SrC=[SO,S、1.、、S7.S8.S9.、.
515]とすると、 [LDPSMのオペレーション] ([50,51、、、S7]、and、PSM)、or
、(−[50,Sl 、、 、S7]、and、[S8
.S9. 、.515])−=>PSMただし′−9は
ビット否定 となる。 LDPSB 、 LDPSMで、PSB 、 PSMの
未使用フィールドの値を”1”にしようとした場合には
、予約機能例外(RFE)が発生する。 【プログラム例外】 ・予約命令例外 ・EaRhが@−5Pのとき 【ニモニック】 5TPSB dest 【命令の機能】 5tore PSB PSBからのストア 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第242図に
示す。 【フラグ変化】 第243図に示す。 【解説】 PSBをdestに転送する。上位8ビツトは必ずOと
なる。 destが8ビツトではなく16ビツトとなっており、
上位8ビツトが常にOを返すようになっているのは、L
DPSM、LDPSBでそのままPSM 、 PSBの
復帰ができるように配慮したためである。 【プログラム例外】 ・予約命令例外 φEachが#imm−data、@SP+のとき【ニ
モニック】 STPSM dest 【命令の機能】 5tore PSM PSMからのストア 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第244図に
示す。 【フラグ変化】 第245図に示す。 【解説】 PSMをdestに転送する。上位8ビツトは必ず0と
なる。 destが8ビツトではなく16ビツトとなっており、
上位8ビツトが常にOを返すようになっているのは、L
DPSM、LDf’SBでそのままPSM、PSBの復
帰ができるように配慮したためである。 【プログラム例外】 ・予約命令例外 拳Ea%Ilhがltimm−data、@SP十のと
き【ニモニック】 LDP src、dest 【命令の機能】 1oad physical 5pace物理空間物理
口−ド 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第246図に
示す。 【フラグ変化】 第247図に示す。 【解説】 srcの値を物理空間のdestに転送する。5rcO
サイズがdestより小さいときは、符号拡張される。 本発明装置はアドレス変換機構を持たないので論理空間
アドレスと物理空間アドレスがつねに等しく、この命令
の機能はMOV命令に吸収されてしまう。しかし、アド
レス変換機構をもち論理空間と物理空間を区別して扱う
本発明装置とのソフトウェア互換性を取るためこの命令
をサポートする。 この命令は特権命令である。 dest/EaWχでは、レジスタ直接モードRnの指
定、@−5Pの指定はできない。 LDATE、 5TATE、 LOP、 STP
、 LDC,STC,MOVPA命令の中の特殊空間
を参照するオペランドにおいて、付加モードによりメモ
リの間接参照が起こった場合には、特殊空間の方ではな
く論理空間(LS)の方を参照する。また、スタックポ
インタSPの参照があった場合には、PRNGではなく
現在リングRNGのスタックが参照される。 特殊空間のアドレスという意味を持つのは、最終的に得
られた実効アドレスのみである。 【プログラム例外】 ・予約命令例外 ・RR=’ll’のとき ・WW=’ll’のとき 赤EaRが@−5Pのとき ・EaW$がRn、ltimm−data、@SP+、
@−5Pのとき・特権命令違反例外 ・r i n8o以外から実行されたとき【ニモニック
】 STP src、dest 【命令の機能】 5tore physical 5pace物理空間か
らのストア 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第248図に
示す。 【フラグ変化】 第249図に示す。 【解説】 物理空間にあるsrcの値をdestに転送する。 STPでは、srcとdestのサイズが共通に指定さ
れるため、異種サイズ間の転送は行なわれない。 本発明装置はアドレス変換機構を持たないので論理空間
アドレスと物理空間アドレスがつねに等しく、この命令
の機能はMOV命令に吸収されてしまう。しかし、アド
レス変換機構を持ち論理空間と物理空間を区別して扱う
本発明装置とのソフトウェア互換性を取るためこの命令
をサボーFする。 この命令は特権命令である。 src/EaRχでは、レジスタ直接モードRnの指定
、イミディエート #imm−dataの指定、@sp
+の指定はできない。 LDATE、 5TATE、 LDP、 STP
、 LDC,STC,MOVPA命令の中の特殊空間
を参照するオペランドにおいて、付加モードによりメモ
リの間接参照が起こった場合には、特殊空間の方ではな
く論理空間(LS)の方を参照する。また、スタックポ
インタSPの参照があった場合には、PRNGではなく
現在リングRNGのスタックが参照される。 特殊空間のアドレスという意味を持つのは、最終的に得
られた実効アドレスのみである。 【プログラム例外】 ・予約命令例外 ・讐讐=’ll’のとき ・εaRXがRn、#imm−data、@SP+、@
−5Pのとき・EaWが#imrn−data、@SP
+のとき・特権命令違反例外 ・r i ngO以外から実行されたとき12− 5
. O3’f合合 【ニモニック】 JRNG vector (r本発明装置」では
サポートしない) 【命令の機能】 jump to new ring リング間コール 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第250図に
示す。 【フラグ変化】 第251図に示す。 【解説】 リング間の遷移とジャンプ(リング間コール)を行なう
。この命令は、現在のリングよりも内側のリングレベル
にあるプログラムの呼び出しくシステムコールの呼び出
しを含む)を行なうために使用される。 外側のリングから内側のリングを保護するため、JRN
Gでのジャンプ先は特定のアドレスに制限されている。 このアドレスを入れたテーブルをリング間遷移テーブル
JRNGVT (JRNGVector table)
と呼ぶ。J RNG命令では、vectorオペランド
がJRNGVTに対するインデクスとなる。JRNGV
Tの一つのエントリを、JRNGVTEと呼ぶ。 JRNGVTは、vectorに対するエントリを65
535個持つテーブルであり、そのベースの論理アドレ
スがJRNGVBによって示される。vectorのサ
イズは16ビツトとなっている。JRNGVBは制御レ
ジスタの一つであり、次のような構成にな −っている
。 −JRNGVB JRNGVBは、第252図に示すようニJRNG命令
のベクトルテーブルの先頭の論理アドレスを示す。テー
ブルのベース アドレスは、アラインメントのため、 下位の3ビツトがOに固定される。 Eが0の時はJRNGは実行禁止であり、JRNGを実
行するとリング遷移違反例外(RTVE)となる。この
時、JRNGVBは意味を持たないので、O5はこのフ
ィールドを自由に使用して良い。 2=2のビットには′02を入れておかなければならな
い。ただし、このビットが 0でなくても単に無視される。 J RNGVTEは8バイトであり、第253図のよう
な構成になっている。これは、内側のリングへ入るため
のゲートという意味合いをもったものである。 ・ARの機能は、そのvectorで示されるエントリ
のリング間コールが、最低でどのリングから発行可能で
あるかを示すものである。ARで示されるリングよりも
現在のリングの方が外側の場合には、リング間コール(
システムコール)が許可されていないものと見なされ、
リング遷移違反例外(RTVE)となる。ARは、その
意味から考えて、PSνのPRNGの位置に相当するフ
ィールドを使う。これは、JRNGVT、 EITV
Tの各エントリが、基本的にはPSV+PCのサブセッ
トの形になっているという考え方に基づいたものである
。 ・vxの機能は、O5とユーザプログラムとの間で32
/64ビツトのモードが異なっている場合に有効である
。 ・JRNGVTEの未使用フィールド(1=tで示され
る)、および’vx’ビットには、′0′を入れておか
なければならない。ただし、実際には、これらのビット
がjljであったとしても、単に無視されるだけである
。これを予約機能例外(RFE)としないのは、インプ
リメントの負担を考えたためである。[詳細仕様調整中
]・また、JRNGVTEのvPCのフィールドは偶数
でなければならない。つまり、vPCのフィールドのL
SBは10′でなければならない。違反した場合には、
JRNG実行時に奇数アドレスジャンプ例外(OAJE
)が発生する。 [詳細仕様調整中コJRNGVBはM
SB=0(7)時UATB、 MSB=1(7)時5
ATB ヲ使ってアドレス変換される。JRNGVI3
のアドレスを論理アドレスとしたのは、次のような利点
があるためである。 ■テーブルをコンテキスト毎に持つこ とが可能 ■テーブルの仮想化が可能である。す なわち、テーブル自体をページ 不在 にすることができる。 ■EITであるTRAPAとの性格の違いが、よりはフ
きすする。 JRNGVBを論理アドレスと考えることにより、テー
ブルの仮想化が可能となる。r本発明装置」では、ベク
トルが16ビツト(65536エントリ、 512に
Bテーブルサイズ)で非常に多くなっており、しかもベ
クトルの上限を指定するレジスタが設けられていない。 しかし、JRNGVBが論理アドレスとなっているため
、MMU機能との組合わせが可能であり、必ずしもテー
ブル分の物理メモリを負担する必要はなくなっている。 JRNGVT部分のSTE 、 PTEを未使用領域に
しておけば、16ビツト=65536工ントリ分のテー
ブルをすべて物理メモリで用意する必要はない。 JRNGVTEの読みだしは、論理アドレスを用いた一
般のメモリアクセスと同様に行なわれる。 したがって、JRNGVTEは、J RNGを実行した
プロダラムのリングのアクセス権で読み出される。 JRNGを実行したリングから、指定したベクトルのJ
RNGVTEをreadする権利がない時は、アドレ
ス変換例外(ATRE)のリング保護違反エラーになる
。また、指定したベクトルのJRNGVTEが未使用領
域となフていた場合には、アドレス変換例外(ATRE
)の未使用領域参照エラーとなる。使用する側から見る
と、これらのエラーはリング遷移違反例外(RTVE)
と同じように扱われる方が望ましいのであるが、主とし
てインプリメントの都合により、上記のような仕様にな
っている。JRNGVTEの読み出しの際には、このほ
かページ不在例外(POE)、バスアクセス例外(BA
E)などの発生する可能性がある。 JRNG機能の導入により、JRNGVTのための論理
空間を必ず512にB消費することになる。また、不当
なリング間コールを防ぐためには、ユーザプログラムを
実行する前に、O5がJRNGVTの領域のSTE、P
TEのセットを行なっておく必要がある。そこで、リン
グ間コール機能を使用しない場合に、こういった処理が
全く不用になるように、リング間コール機能全体をディ
スエーブルにすることができるようになっている。この
指定には、JRNGVBのLSBのEビットを使う。J
RNGVBのEビットがOの場合は、リング間コール機
能は使用できなくなり、JRNGを実行した場合には無
条件にリング遷移違反例外(RTVE)となる。 結局、JRNGが成功するには次の条件を満たさなけれ
ばならない。 一−−JRNGVBのE=1゜ E=Oであれば、JRIIIGVTが用意されていない
ことを意味するのでリング遷移違反例外(RTVE)と
なる。 一一一指定したベクトルに対するJRNGVTEが、J
RNG実行前のリングからread可能・ページ不在例
外が発生した場合は、ページインの後再実行することに
なる。 アドレス変換例外(ATRE)の未使用領域参照エラー
が発生した場合は、そこまでテーブルが用意されていな
いことを意味するので、そのユーザプログラムにエラー
を返すのが普通である。 readのアクセス権がない場合は、保護の観点からJ
RNGの実行を禁止していることを意味するので、やは
りそのユーザプログラムにエラーを返すのが普通である
。 これはVAフィールドと同等の意味になるが、512ベ
クトル句の指定となる。 −−一現在リング≧VRが成立。− 外側のリングには行けない。違反した場合はリング遷移
違反例外(RTVE)となる。 −−一現在リング≦ARが成立。 受は付は可能リングのチエツク。違反した場合はリング
遷移違反例外(RTVE)となる。なお、ARはJRN
GVTEc7)AR7イー4ドである。 [JRNGのオペレーション] if JRNGVBのEビット=Othenリング遷移
違反例外(RTVE) 論理アドレスmem[vectorX 8+JRNGV
B]よりVR,AR,VPCをフx ッチ if旧RNG > AR、or、旧RNG < VRt
henリング遷移違反例外(RTVE) 旧SP ==> TO5↓(VRで示される新しいスタ
ックを使用) 旧PC==> TOS↓ 旧pcとしては、JRNG命令の次の 命令の先頭アドレスがスタック にブツシュされる。 これは、JSR命令と同じである。 旧PSW 、and、 [?’0ff10000−00
000000−11211111jlllllll =
=> TO5↓旧PSυは、RRNGで意味を持つフィ
ールド、つまり、RNG、XA、PS)I(、?、1フ
ィールドのみがそのままスタ ツクにブツシュされ、それ以外 (7)SM、AT、 IM^5K(7)フィールドは0
にマスクされてからスタックに ブツシュされる。これは、外側 のリングのプログラムが、osの みが知っているべき情報(団ASK など)を読み出せないようにする ためである。 旧RNG ==>新PRNG VR==>新RNG VPC==>新PC JRNG命令により形成されるスタックフレームは、第
264図のようになる。 ここで、旧リングのSPを新リングのスタックに積んだ
のは、新リングから旧リングのスタックポインタSPや
スタックをアクセスするためである。リング毎のスタッ
クは制御レジスタとしてアクセス可能であるが、アクセ
スのためには特権命令(5TC)を利用しなければなら
ない。したがって、例えばringlからr + ng
3のスタックに積まれたパラメータを見たいという場合
には、この機能が必要である。 J RNGでは、PSSの一部とPSMのPRNGのみ
が更新され、PSBは更新されない。また、リング間コ
ールの機能では、EITとは異なり、スタックフォーマ
ツ!・は一種類しかないので、FORMAT(EITI
NF)はスタックに偵まれない。 JRNG:Eの場合は、vectorがゼロ拡張される
。 AT=00 (アドレス変換なし)の場合は、J RN
GVBは物理アドレスを表わす。 J RNG実行時に、リング遷移違反例外(RTVE)
などの命令再実行型のEITが発生した場合、JRNG
固有の機能であるリング間コール用のスタックフレーム
の形成は行なわれず、EIT処理用のスタックフレー1
1のみが形成される。例えば、SMRNG=OOOの状
態でバNGを実行し、RNG=OOにジャンプしようと
したが、何らかのエラーによりEITが発生した場合は
、第255図のようなスタックフレームになる。第25
6図ではない。 (A)のような仕様になっているのは、EIT発生後の
命令再実行のことを考えているからである。つまり、E
IT処理ハンドラに入る前に、プロセッサの 状態をできるだけ命令実行前の状態 に戻そうとしているからである。 EITで使用するスタックとJRNGで使用するスタッ
クが異なっていた場合は、 EIT発生時にEITで使用するスタックのみが変化し
、JRNGで使用するスタックのSPは変化しない。 JRNGては、現在リングと同じリングにジャンプする
ことも可能である。 この場合、JRNGでスタックの切り換えは起こらない
。SPとしてスタック にブツシュされる値は、命令実行前 のSPの値になる。これは、JRNG命令の最初でPU
SIISF’を実行したのと同じ動作である。この様子
を第257図 に示す。 JRNGで現在リングと同じリングにジャンプする場合
に、JRNG:GのVectorオペランドがメモリ上
にあり1.それ がJRNG命令の実行に伴って形成されるスタックフレ
ーム領域と重なって いると、命令再実行がきわめて難し くなる。そこで、JRNG:G命令では、メモリアクセ
スを伴うアドレッシン グモード、つまりレジスタ直接Rnと イミディエート以外のアドレッシン グモードは、すべて禁止している。 この命令のオペランドとして動的な 値を設定したい場合には、テンポラ リレジスタを一つ用意し、レジスタ 直接Rnのモードを利用する必要があ る。 リング間コールの機能はEITには含めない。 TRAPAとJRNGは、どちらもO5のシステムコー
ルの呼出しを行なうことを目 的にした命令である。一般には、BT RONのようにシステムコールの数が多く、複数のリン
グを利用するO5では JRNGを利用し、lTR0Nのようにシステムコール
の数があまり多くなく、2 リングで十分なO5ではTRAPAを利用することにな
る。 TRAl’Aでは、ringl、rin32に行くこと
はできないので、BTRONで外核をrin、glに置
く場合には、当然JRNGを使う必要がある。 なお、O5をユーザが拡張するような 場合には、外向きのリング間コール が必要になることがあり、nTR0Nでもそういった例
がある。しかし、頻度 としては多くないこと、リング保護 の趣旨とは矛盾していること、完全 な保護を行なうためにはリターンス タックを別に設ける必要があり、イ ンプリメントの負担が大きくなるこ と、などの理由により、命令セット のレベルでは外向きの リング間コールをサポートしない。 【プログラム例外】 ・予約命令例外 ・P=’l’のとき ・EaRh!MがRn、#imm−data以外のとき ・<<11>>機能例外 ・J RNGの正しいビットパターン がデコードされたとき 【ニモニック】 RRNG(r本発明装置」ではサポー トしない) 【命令の機能】 return from previous ring
リング間リターン 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第268図に
示す 【フラグ変化】 第269図に示す 【解説】 リング間コールに対するリターンを行なう。 [RRNGのオペレーション] ↑TO5==> templ ↑TO5==> temp2 ↑TO5==> SP of tempt<RN
G>if RNG > templ<RNG> the
nリング遷移違反例外(RTVE)起動 ・templ<RNG>は、 templをPSνと見
た時にRNGフィー ルドに相当する部分を表 わす。 ・このチエツクがないと、 RRNG命令で不正に内側の リングに入ることが可能 になる。 tempt<PS)l> ==> PSfl (PRN
Gを含む)templ<RNG> ==> RNG
templ<XA〉 ==> XA temp2 ==> Pに のほか、RRNG命令実行時にはDCEのEITが起動
される場合があり、そのチエツクを行なう必要がある。 詳しくは付録9を参照。 こ4で、I’RNGの旧のスタックポインタをRNGの
スタックからポツプして、再びPRNGのスタックポイ
ンタとして設定しているのは、PRNGのスタックに積
まれたシステムコールのパラメータのポツプなどにより
、O5側からユーザのスタックポインタを更新すること
を想定したためである。 RRMGで内側のリングに入ろうとした場合には、リン
グ遷移違反例外(RTVE)となる。また、スタックか
らポツプされたPCが奇数であった場合には、奇数アド
レスジャンプ例外(OAJE)となる。 現在のPSWのSMが0て、RRNG命令によりポツプ
されるスタック中のRNG (上記オペレーション中の
tempt<RNG>)がOでない場合は、RRNG命
令の実行によって、PSW中のSMとRNGの組み合せ
がreservedのパターンとなる。この場合には、
予約機能例外(RFE)となる。 RRNG命令で、命令再実行型の例外であるRTVE、
RFEが発生した場合には、RRNG命令実行後に無
くなる予定であったリング間コールのスタックフレーム
が、そのまま残る。したがりて、EITとリング間コー
ルで同じスタックを使っていた場合には、そのスタック
フレームに追加される形でEITのスタックフレー24
が形成される。また、EITとリング間コールで異なる
スタックを使フていた場合には、リング間コールで使用
していたスタックの内容やスタックポインタは変化しな
い。この点は、RRNGでDCEを起動する場合とは異
なっている。DCEの場合には、前のリング間コールの
スタックフレームをクリアしてから、DCEの新しいス
タックフレームを構成する。 <<RFE発生時のスタックの例−EITで同じスタッ
クを利用する場合〉〉 第260図に示す これに対して、0^JEは命令完了型のEITとなる予
定である。 [詳細仕様調整中コ その場合は、DCEと同じように、リング間コールのス
タックフレームをクリアしてからEITのスタックフレ
ームを生成するということになる。RRNG命令で0A
JEが発生する場合のスタックの動きは、次のようにな
る。 <(OAJE発生時のスタックの例−EITで同じスタ
ックを利用する場合〉〉 (RRNG実行前) 第261図に示す (RRNG実行後、0AJE起動後) 第262図に示す RRNG命令でスタック中からポツプされたPSW(上
記のtempl)のうち、PSII、RNG、XA以外
のフィールドは、無視される。ただし、プログラミング
上は、JRNG命令からRRNG命令までの間で、スタ
ック中に退避されたPSWのI’SH、RNG 。 XA以外のフィールドを書き変えてはいけない。 RRNG命令(32ビツト)で同じリングに戻る場合、
SPの最終値は mem[1nitSP + 8] ==> SP(ただ
し、+8はpc、psw)分) となる。これは、PC、PSWの処理の後pop sp
を実行したのと同じ動作である。 JRNGVBのEビットは、RRNG命令の動作には関
係しない。Eビットが00場合にも、RRNG命令の実
行は行なわれる。 【プログラム例外】 ・予約命令例外 ・P=’l’のとき ・<<l l>>機能例外 ・RRNGの正しいビットパターンがデコードされたと
き 【平モニック】 TRAPA vector 【命令の機能】 TRAP always ソフトウェア割り込み、トラップ 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第263図に
示す 【フラグ変化】 第264図に示す 【解説】 内部割り込み(トラップ)を発生する。 この命令は、ユーザプロセスからO5を呼ぶ場合などに
利用する。TRAPA命令ではEITが起動されるので
、必ずリングOに入ることになる。 TRAP 、 TRAPAでは、その他のEIT処理と
同じく、PSSの一部およびPSMのPRNGのみが更
新される。 PSHのPRNG以外のフィールド(PSBを含む)は
更新されない。 【プログラム例外】 ・予約命令例外 ・P=’l’のとき ・無条件トラップ命令 【ニモニック】 TRAP 【命令の機能】 TRAP conditionally条件によるソフ
トウェア割り込み、トラップ【命令オプション】 /条件指定各種(cccc) 【命令ビットパターンとアセンブラ表記】第265図に
示す 【フラグ変化】 第266図に示す 【解説】 指定された条件が満たされていた場合に内部割り込み(
トラップ)を発生する。 TRAP命令ではEITが起動されるので、必ずリング
0に入ることになる。条件の指定方法は、Bcc命令と
同じである。 TRAP 、 TRAPAでは、その他のBIT処理と
同じく、pssの一部およびPSHのPRNGのみが更
新される。 PSHのPRNG以外のフィールド(PSBを含む)は
更新されない。 TRAPで未定義の条件を指定した場合には、予約命令
例外(RIE)となる。 【プログラム例外】 ・予約命令例外 ・P=’l’のとき ・cccc=’1llo、1111’のとき・条件トラ
ップ命令 【ニモニック】 EIT 【命令の機能】 return from EIT EIT処理(割り込み、例外処理)からのリターン 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第267図に
示す 【フラグ変化】 第268図に示す 【解説】 「本発明装置」では、例外、外部割り込み、内部割り込
みを総称してEIT (Exception。 Interrupt、Trap)と呼ぶ。REIT命令
は、EITからのリターン、すなわち、O5からのリタ
ーンや割り込み処理からのリターンを行なうために使用
する命令である。 この命令は特権命令である。 [REITのオペレーション] ↑TO5==> PSW; ↑TO5==> FORMAT/VECTOR;↑TO
5==> PC; このほか、EITのタイプによっては、スタックに付加
情報が積まれている 場合がある。それをポツプしてEIT発生前の状態に戻
す。追加情報の有無 は、FORMAT/VECTOR(EITINF)で判
定する。また、REIT命令実行時には、Dl、 DC
EのEITが起動される場合があり、そのチエツクを行
なう必要がある。 詳しくは付録9を参照。 FORMAT/VECTORとして、サポートされない
スタックフォーマットが指定されていた場合には、予約
スタックフォーマット例外(RSFE)となる。 この場合、フォーマットが不当であったスタックフレー
ムは、追加情報の有無が判定できないためにそのまま残
し、そのスタックフレームに追加される形でRSFEの
スタックフレームが形成される。この点は、REITて
旧、 DCEを起動する場合とは異なっている。DI、
DCEの場合には、前のEITのスタックフレームをク
リアしてから、DI、DCEの新しいスタックフレー1
1を構成する。 <<RSFEの処理−RSFEで同じスタックを利用す
る場合〉〉 第269図に示す REIT命令で、スタックからポツプされたPCが奇数
であった場合には、奇数アドレスジャンプ例外(OAJ
E)となる。また、スタックからポツプされたPSWに
よって、PS−内のreservedC−′)のビット
(XAビットを含む)を11′に書き変えようとした場
合や、SMRNGとしてreservedの値を書き込
もうとした場合には、予約機能例外(RFE)となる。 5Mビットの変化については特にチエツクしない。EI
Tから戻るためにREIT命令を使う限り、RεI下命
全命令行によフて釦が1から0に変わることはないはず
である。しかし、これは運用上の問題として対応するこ
とにし、REIT命令ではSMが1から0になったかど
うかのチエツクは行なわない。 【プログラム例外】 ・予約命令例外 ・P=’l’のとき ・特権命令違反例外 ・r i ngO以外から実行されたとき・予約スタッ
クフォーマット例外 ・EITから復帰する際に、サポートされていないスタ
ックフォーマットが指定さ れたとき ・奇数アドレスジャンプ例外 ・スタックからポツプされたPCが奇数であったとき ・予約機能例−外 ・スタックからポツプされたPSvによって、PSS円
内reservedの値を書き込もうとしたとき 【ニモニック】 νAIT imask 【命令の機能】 set IMAsK and wait停止、割り込
み待ち 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第270図に
示す 【フラグ変化】 第271図に示す 【解説】 PSWの団ASKフィールドをセットし、プログラムの
実行を停止する。外部割り込みまたはリセットにより実
行を再開する。 この命令は特権命令である。 imaskは、符号なしの数として解釈される。 imask≧16の場合には、予約機能例外(RFE)
を発生する。 外部割り込みの場合には、割り込みが起るまで確定でき
ない情報(SPI/SPOのスタックの選択、ベクトル
番号)がある。したがって、WAIT命令では、外部割
り込みが発生してから情報をスタックに退避する。 [%IIAITのオペレーション] imask ==> IMAsK wait for 1nterrupt(=:外部割り
込み 【プログラム例外] ・予約命令例外 ・−=′1ゝのとき ・特権命令違反例外 ・r t ngoから実行されたとき 【ニモニック】 LDCTX ctxaddr 【命令の機能】 1oad context from CTXBコンテ
キストのロード 【命令オプション】 /LS 論理空間からCTXBをロード/C5制御空
間からCTXBをロード <<L2>>【命令ビット
パターンとアセンブラ表記】第272図に示す 【フラグ変化】 第273図に示す 【解説】 ctxaddrで示される実効アドレスをCTXBBレ
ジスタにロードし、タスクやプロセスのコンテキストブ
ロック(CTXB)の内容をプロセッサのレジスタにロ
ードする。ロードの行なわれるレジスタは、MMUの有
無やCTXBFMの内容によって変化するが、SPO〜
SP3.UATB、C5Wなどが含まれる。LDCTX
で転送されるレジスタの詳細については、付録8を参照
のこと。 /LSオプションを指定した場合には、ctxaddr
は論理空間のアドレスを意味する。この場合には、論理
空間上にCTXBが置かれていることになる。また、/
CSオプションを指定した場合には、ctxaddrは
制御空間のアドレスを意味する。このオブショ、ンは、
将来コンテキスト退避用の高速メモリをチップに内蔵し
た場合に使用することを想定したものであり、現在は<
<L2>>となっている。これらのオプションは、チッ
プやチップバスのインプリメントに合わせて最も高速な
コンテキストスイッチを行なうため、CTXBft置く
空間に自由度を持たせるという目的で設けられたもので
ある。 r本発明装置」では/CSオプションはサポートしない
。 「本発明装置」標準のMMUを内蔵したプロセッサでは
、LDCTX命令でUATBの変更が行なわれる。 この場合、LSIDを実装しないプロセッサであれば、
UATBの変更に伴ってTLBやキャッシュのパージ(
PSTLB/ATに相当する処理)が自動的に行なわれ
る。LDCTX命令では論理空間の切り換えが行なわれ
るため、LDCTX/LSが意味のある動作を行なうに
は、ctxaddrはSRを指している必要がある。L
DCTX/LST!ctxaddrがURを指していた
場合の動作は保証されない。 r本発明装置J (7)LDCTX、5TCTX命令で
は、汎用レジスタRO〜R14の転送を行なっていない
。これは、次のような理由による。 一汎用レジスタについては、LDM、57M命令で転送
することが可能であり、LDM、STMならばレジスタ
の指定も可能である。実際のコンテキストスイ ッチの
処理では、入れ換えを行なうレジスタ以外にワーキング
用のレジスタが必要になることが多いので、一部のレジ
スタは転送しない方がよ い場合がある。したがって、
LDM、STMのような、より汎用的な命令を使用する
方が適当である。 一現在は、まだコンテキスト退避用のメモリをチップに
内蔵することが技術的に難しく、コンテキストの退避に
は外部メモリを利用せざるを得ない。−その場合、LD
CTXで汎用レジスタの転送まで行なフても、汎用レジ
スタの転送を別命令(LDM)としても、はとんど速度
差は生じない。 −将来CTX Bをすべてチップに内蔵して高速化しよ
うという場合には、l、DCTXのreservedの
オプションやCTXBFMの機能を利用して仕様を拡張
すれば良い。 また、LDCTX 、 5TCTX命令では、PC,P
SS/(7)転送も行なフていない。これは、次のよう
な理由による。 一一般に、コンテキストスイッチによって切り換える必
要があるのは、O5のPCやPSvではなく、ユーザプ
ロゲラ11のPCやPSwである。ところが、 ユーザ
プログラムのPCやPSWは、普通はO5呼び出し時に
スタック中に退避されている。そこで、 PC,PSWの退避にSPOのスタックを使用するよう
にしておけば、コンテキストスイッチでSPOを切り換
えることにより、 PC。 PSWも間接的に切り替わる。これを積極的 2に利
用し、CTXBの構造として、SPOから間接参照され
る部分(スタック)にPC,LPSWが置かれるよう
なものを考えれば、 篭コンテキストスイッチ命
令で、pc 、 pswの 。 操作(スタック〜CTXB間のコピー)なす 自省 る必要がなくなる。 一5PIを使用した外部割り込みの処理ハンドラの最後
で直接コンテキスト スイッチを行なう場合には、どう
してもSPIのスタック〜CTXB間でPC,l’ S
Wの転送が必要になる。しかし、この場合、外部割り込
みの中ではコンテキストスイッチを遅延し、外部割り込
みから抜ける時にDCEやDlを使ってコンテキストス
イッチを行なうよ うにすれば、DCEや旧でSPOを指定することにより
、上記のデータ構造が自然に実現できる。 二の命令は特権命令である。 、DCTXによってセットされるPSvのrese r
vedのピットC−9で表示される)に対して、CTX
Bb)5′1′をロードしようとした場合には、予約機
上例外(RFC)が発生する。また、UATBなどの制
Wレジスタのreservedのビット(1=1で表示
される)に対して、CTXBから11?をロードしよう
とした場合には、単に無視される。これは、LDCによ
って制御レジスタをセットしようとした場合と同様であ
る。 <<Ll>>仕様のチップでは、AT=OO(アドレス
変換なし)の場合にもUATBの転送が行なわれる。 これは、O5内のみで一時的にアドレス変換を中止する
というケースが考えられるためである。ただし、AT=
00の場合は、/LSを指定してもctxaddrは物
理アドレスとして扱われる。 LDCTXでUATBを転送しないことを指定するには
、CTXBFMを利用する。 しDCTXの現在の仕様では、汎用レジスタの転送を行
なっていない。しかし、将来仕様が拡張されたり、コン
テキスト退避用のメモリをチップに内蔵したりした場合
には、LDCTX命令で複数の汎用レジスタのロードま
で行なう予定がある。その場合、ctxaddt/Ea
A!Aで付加モードを許していると、LDMと同様に、
命令が途中で中断した場合の命令再実行が難しくなる。 したがって、LDCTXのctxaddr/EaA!A
では付加モードを禁止している。どうしても付加モード
の機能を利用したい場合には、MOVAを使フて MOVA @(@(@(、、、))):A、RO
LDCTX @RO とすることにより、同等の機能が実現できる。 【プログラム例外】 ・予約命令例外 −XX=’01’ 〜’11’(7)とき・EaAがR
n、#imm−data、[i!SP+、@−5P、付
加モードのとき ・特権命令違反例外 ・r i ngo以外から実行されたとき・予約機能例
外 ・PS虞とreservedの値を書き込んだとき【ニ
モニック] TCTX 【命令の機能】 5tore context to CTXBコンテキ
ストのストア 【命令オプション】 /LS 論理空間にCTXBをストア/C5制御空
間ニcTXBをストア <<Ll>>(検討中) 【命令ビットパターンとアセンブラ表記】第274図に
示す 【フラグ変化】 第276図に示す 【解説】 プロセッサ中の現在のコンテキストの内容を、CTXB
Bレジスタで示される領域(CTXB)に退避する。退
避の行なわれるレジスタは、MMuの有無やCTXBF
Mの内容によって変化するが、SPO〜SP3.UAT
B、C5Wなどが含まれる。5TCTXテ転送されるレ
ジスタの詳細については、付録8を参照のこと。 5TCTXでは、LDCTXと同様に、汎用レジスタや
pc、pswの転送は行なわれない。 CTXBBの指す空間は八S 、 /C5のオプション
で指定する。ただし1.、 /CSオプションは、将来
コンテキスト退避用のメモリをチップに内蔵した場合に
はじめて意味を持つものであり、<<Ll〉〉となって
いる。 r本発明装置」では、/CSオプションはサポートしな
い。 r本発明装置」標準のMMUを内蔵したプロセッサでは
、5TCTX命令でtJATB退避が行なわれる。 この場合、5TCTX/LSが意味のある動作を行なう
には、CTXBBがSRを指している必要があるが、C
TXBBがSRを指すかURを指すかのチエツクは特に
行なわない。 この命令は特権命令である。 5TCTXでCTXBに退避される制御レジスタのre
servedのビットのうち、l −1、94tのビッ
トについては、jQj、JlがCTXBC,mセットサ
レル、マタ、*=1.′@Z′*#ノビットニツイテは
、CTxBニセットされる値は不定であり、インプリメ
ント依存である。これらは、STC命令と同様である。 (<Ll>>仕様のチップでは、AT=OO(アドレス
変換なし)の場合にもtJATBの転送が行なわれる。 これは、O5内のみで一時的にアドレス変換を中止する
というケースが考えられるためである。ただし、AT=
OOの場合は、/LSを指定してもCTXBBは物理ア
ドレスとして扱われる。 5TCTXでUATBを転送しないことを指定するには
、CTXBFMを利用する。 【プログラム例外】 ・予約命令例外 φxx=’oo’以外のとき ・P=’lゝのとき ・特権命令違反例外 ・リング0以外から実行されたとき 12−16− MMU、j!!it令【ニモニック】 AC5chkaddr 【命令の機能】 test access rightsアクセス権のチ
エツク 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第276図に
示す 【フラグ変化】 第277図に示す 【解説】 chkaddrで指定したアドレスを含むページのAT
Eを調べ、chkaddrがPRNGからアクセス可能
かどうかをチエツクする。チエツクした結果に応じてフ
ラグをセットする。 read可能 ==> Mjlagwrite可
能 ==> ZJIagexecute可能 =
=> L−flagこの命令は特権命令ではなく、ユー
ザが使用することも可能である。例えばr i ng3
からPRNG=ring3のアクセス権をチエツクする
こともできる。したがって、ページアウトなどのO5の
管理すべき情報はできるだけ見せないようになっている
。AC5の実行のために必要なSec t ion t
ableやPage tableがページアウトされて
いた場合には、通常の命令と同じように、ページ不在例
外(POE)として命令を再実行する。 このほか、AC5命令でATEを参照中には、アドレス
変換例外(ATRE)、バスアクセス例外(BAE)の
発生する可能性がある。 ACS命令でテストするオペランドのサイズは、バイト
と考える。つまり、EaAで示されるアドレスの1バイ
トが、PRNGからアクセス可能かどうかを示す。複数
バイトにまたがる領域のチエツクを行なう場合は、ソフ
トウェアで対処する。 AC5では、直前のリングからの処理要求に対するアク
セス権のチエツクを行なう場合に、PRNGがそのまま
利用できる。しかし、例えばr i ng3からrin
g2に処理を依頼し、ring2からさらにringl
を呼びたいという場合に、ringlでr i ng3
からのアクセス権をチエツクしたい場合がある。この時
、PRNGはr ing2となっているので、そのまま
AC5命令を使うことはできず、PRNGをr i n
g3に書き変えてからAC5を実行する必要がある。 このような要求に答えるために、PRNGはユーザから
も操作可能なPSMに置いている。PRNGは、AC5
命令に対するパラメータという意味を持ったフィールド
である。ただし、このままではr i ng3からrt
ngoの保護情報まで見えることになる。そこで、PR
NG < RNGの時は無条件にし−flag= 門
−flag = ZJla3 = 0とすること
によって、保護情報が見えるのを防ぐ。 AC5において、chkaddrが未使用領域(ページ
範囲外)であフだ場合には、R不可、V不可、E不可と
同じように、MJlag=O,Z−flag=O,L−
f I、ag=0アクセス権なしとして命令を正常終了
するものとする。IEITとはならない。 また、AT=OO(アドレス変換なし)の場合は、リン
グ保護のチエツクが行なわれないので、すべてのアドレ
スに対してアクセス権をもっていると考える。実際には
、バスアクセス例外(BAE)が発生するためにアクセ
スできない領域もあるわけだが、そのチエツクは行なわ
ない。これは、システムバスに起因するアクセスエラー
とメ至り保護に起因するアクセスエラーはレベルの違っ
たものであり、AC5では後者のみのチエツクを行なう
と考えるためである。したがって、AT=OOの場合、
chkaddrが得られた後はいずれの例外も発生せず
、LJlag=町flag=ZJIag=1 (アクセ
ス権あり)として命令を終了するものとする。 AC5命令は、命令エミュレーションのプログラムで、
リング保護レベルのチエツクまできちんとエミュレート
したい場合に利用できる命令である。エミュレーション
のプログラムは通常ringOに置かれるので、エミュ
レートされる命令とは異なったリングで実行されるのが
普通である。つまり、リング保護のレベルに関しては、
エミュレートされるプログラノ、とエミュレーションプ
ログラムは異なった環境になっている。そこで、エミュ
レートされる命令のオペランドをアクセスする前に、A
C5命令によフて、そのオペランドがエミュレートされ
る命令と同じリング(PRNG)からアクセスできるか
どうかをチエツクしてやれば、リング保護に関するエミ
ュレーションまできちんと行なうことが可能になる。 AC5のchkadd rの実効アドレス計算において
、スタックポインタSPの参照があった場合には、PR
NGではなく現在リングRNGのスタックが参照される
。 【プログラム例外】 ・予約命令例外 ・EaAがRn、#imm−data、@SP+、@−
5Pのとき【ニモニック】 MOVPA 5rcaddr、dest (r本
発明装置」ではサポートしない) 【命令の機能】 move physical address物理アド
レスの転送 【命令オプション】 なし 【命令ビットパターンとアセンブラ表記】第278図に
示す 【フラグ変化】 第279図に示す 【解説】 5rcaddrで指定したオペランドの実効アドレス(
論理アドレス)を計算し、それを物理アドレスに変換し
てからdestに転送する。5rcaddrて得られた
実効アドレスのアドレス変換の方法は通常の命令とは異
なり、UATBレジスタではなくR1レジスタをアドレ
ス変換テーブルのベースアドレスとして使用する。これ
は、O5等から、現在プログラムが走っている論理空間
以外の空間に対する操作も行なえるようにするためであ
る。 この命令で、高機能命令と同じように固定番号のレジス
タを空間指定に使用したのは、高級言語で直接使用する
ことのない命令なので命令の対称性があまり必要ないこ
と、ビット割り当てからの制約があること、による。 MOVPA命令において、5rcaddrを得てから、
それを物理アドレスに変換するまでの過程でページ不在
例外、アドレス変換例外などが発生した場合、そのエラ
ーはフラグに反映し、EITは起動しない。これは5r
caddrのアドレス変換に使用する5ection
TableやPage Tableがページアウトされ
ていた場合、゛また最終段のページ(ページテーブルで
はない)がページアウトの場合、さらに変換テーブルの
エントリ(ATE)のフォーマツIにエラー(予約AT
Eエラー)があった場合などが含まれる。この時、de
stは変化せず、Vjlagがセットされて命令を終了
する。また、ページフォールトがあつたかどうかはFJ
Iagで示される。エラーやページフォールトがなく、
命令を正常に終了した場合には、VJlagはクリアさ
れる。この命令は、基本的にはアドレス演算と考えるの
で、その他のフラグは無変化である。 MOVPA命令のフラグ変化をまとめると、第280図
のようになる。 なお、5TATEでVjlag=O,F−flag=1
に相当する場合(次の段のページアウト)は、MOVP
AではVj Iag=1.F、f Iag=1のページ
アウトの場合に吸収されているので、5TATEとMO
VPAとではフラーグ変化のパターンが異なっている。 5rcaddr、destなどの実効アドレスを得るま
での過程でページフォールトが生じた場合には、通常の
命令と同じようにページ不在例外(POE)が起動され
る。 この命令は特権命令である。 dest/EaW!Sでは、@−5Pのモードを禁止し
ている。これは、エラーやページアウトの発生によって
VJlagがセットされ、destの転送ができない場
合に、destに@−5Pが指定されていると命令動作
がまぎられしくなるためである。 LDATE、5TATE、 LDP、STP、 LDC
,STC,MOVPA命令の中の特殊空間を参照するオ
ペランドにおいて、付加モードによりメモリの間接参照
が起こった場合には、特殊空間の方ではなく論理空間(
LS)の方を参照する。また、スタックポインタSPの
参照があった場合には、PRNGではなく現在リングR
NGのスタックが参照される。特殊空間のアドレスとい
う意味を持つのは、最終的に得られた実効アドレスのみ
である。 MOVPA、LDATE、5TATE命令で、ヌ]象ア
ドレスの阿SBが1の場合(SRを示す場合)は、R1
ではな< 5ATBを使ってアドレス変換を行なう。ま
とめると、第281図のようになる。 間VPA 、 LDATE 、 5TATEでは、アド
レス変換のペースレジスタを、UATBの代わりにR1
によって指定している。この時、UATBのreser
vedの部分に対応するR1のビット(=”で表現され
た2″4.2”50ビツト)が′l′でなくても、特に
チエツクは行なわず、単に無視される。これは、インプ
リメントの負担を考慮したためである。 チエツクが行なわれていなくても、R1の2”4゜2″
5のビットには必ず′0′を入れてもらうように、マニ
ュアル等で指導する必要がある。 5rcaddrの実効アドレスを得てから、R1を使っ
てアドレス変換を行ない、その物理アドレスを得るまで
の動作は、ATビットには影響されない。つまり、AT
=00であっても、AT=01の時と同じように5rc
addrのアドレス変換が行なわれて物理アドレスが得
られる。これは、アドレス変換の前準備としてこの命令
を使用することを想定したためである。もちろん、5r
caddr、destの実効アドレス計算(間接参照な
ど)やdestへの書き込みは、AT=OOの時物理ア
ドレス対象で行なわれる。 【プログラム例外】 ・予約命令例外 ・+=90′のとき ・讐=′11のとき ・εaAがRnJimm−data、Iii!SP+、
(i!−5Pのとき φEaW!Sが#imm−data、@SP+、li!
−5t’のとき ・<<l l>>機能例外 ・MOVPAの正しいビットパターンがデコードされた
とき 【ニモニック] LDATE src、destac!dr(「本
発明装置」ではサポートしない)【命令の機能】 1oad address translation
table entryATEのロード 【命令オプション】 /AS すべての論理空間のTLBをパージする 155 ROで指定されたしSIDを持つ論理空間
のTLBをパージする <<L2>>/PT P
TE操作 /ST STE操作 【命令ビットパターンとアセンブラ表記】第282図に
示す 【フラグ変化】 第283図に示す 【解説】 destaddrで指定したオペランドの実効アドレス
(論理アドレス)を計算し、それを物理アドレスに変換
する際に使用するアドレス変換テーブルのエントリ(A
TE)に対して、srcで得られるデータの転送を行な
う。destaddrに対するアドレス変換の方法は通
常の命令とは異なり、UATBレジスタではなくR1レ
ジスタをアドレス変換テーブルのベースアドレス(物理
アドレス)として使用する。これは、O5等から、現在
プログラムが走っている論理空間以外の空間に対する操
作も行なえるようにするためである。destaddr
のMSBが1の場合(SRを示す場合)は、R1ではな
く 5ATBを使ってアドレス変換を行なう。 /PTオプションの場合、/STオプションの場合とも
、R1は5ection Tableのベースアドレス
を指す。 結果的に、/PTの場合には2段の間接参照が、/ST
の場合には1段の間接参照が行なわれる。 ATEへのセットが正常に行なわれた場合には、ATE
値の変更によって影響を受けるTLBと論理キュッシュ
のパージが自動的に行なわれる。 しSIDとは、複数のコンテキスト(プロセスやタスク
)のTLBの混在を許す場合に、それを区別する番号で
ある。複数の論理空間の区別が可能なTLBの場合には
、/SSオプションを指定することによって、TLB中
のLSIDとROで示されるLSIDが一致したTLB
のみをパージすることができる。なお、現在使用中の論
理空間に対するしSIDは、LSID制御レジスタに置
かれているが、この命令の実行とは直接関係しない。メ
モリ管理やTLBの構成はインプリメント依存性の強い
ところなので、この命令を実装する場合にも、必ずしも
155オプシヨンをインプリメントする必要はない。ま
た、LSIDの機能も必須のものではない。/SSのオ
プションが用意されているのは、LSIDのあるプロセ
ッサとし510のないプロセッサの互換性を取るためで
ある。 PSTLBの項を参照のこと。 この命令で、高機能命令と同じように固定番号のレジス
タを空間指定に使用したのは、高級言語で直接使用する
ことのない命令なので命令の対称性があまり必要ないこ
と、ビット割り当てからの制約があること、による。 この命令では、ATE自体のエラーやページアウトなど
、いろいろな場合を見分けるため、jflag、VJI
agを使用する。それぞれの場合における動作は、次の
ようになる。 1、destaddrのアドレス変換に使用する5ec
ti。 n TableやPage Tableのうち、操作す
る段より上位段のATEにフォーマットエラー(予約A
TEエラー)があった場合 この場合は、操作対象となるATEまて到達できないの
で、ATEへのセットは行なわれない。VJlag=1
.F−flag=oとなって命令を終了する。 2、destaddrのアドレス変換に使用する5ec
ti。 n TableやPage Tableのうち、操作す
る段のATEを含むテーブル、あるいはそれより上位段
のテーブルがペー シアウドされていた場合 この場合も、操作対象となるATEまで到達できないの
で、ATEへのセットは行なわれない。V−fla3=
1.Fjlag=1となって命令を終了する。なお、途
中段のATEで、予約ATEエラーと次段のページアウ
トが同時に起こった場合には、予約ATEエラーの方を
優先し、Vjlag=1 、F−flag=oとする。 3、それ以外の場合 この場合には、 srcのデータがATEにセットされ
、V、、flagは0となる。LDATεによってAT
EにセットしたデータのP1ビットがOの場合には、そ
れより下位の段のページアウトを示すため、Fjlag
=1となる。また、セットしたデータがATEとして予
約ATEエラーを起こすものであった場合には、やはり
FJIag=1となる。この二つのケースは、セットし
たATEを使ってアドレス変換を行なおうとすると例外
が発生するという点て共通している。 セットしたATEにエラーがなく、P1ビットが1の場
合には、F−flag:0となる。 しDATE命令のフラク変化をまとめると第284図の
ようになる。 この命令は、基本的にはアドレス演算と考えるのて、町
flag、Zjlagなどは変化しない。また、src
、destaddrなどの実効アドレスを得るまでの過
程でページフォールトが生じた場合には、通常の命令と
同じようにページ不在例外(POE)が起動される。 この命令は特権命令である。 LDATE/STではPSTLB/STに相当する処理
が、しDATE/PTではPSTLB/PTに相当する
処理が自動的に行なわれる。 LDATE、5TATE、LOP、STP、LDC,S
TC,MOVPA命令の中の特殊空間を参照するオペラ
ンドにおいて、付加モードによりメモリの間接参照が起
こった場合には、特殊空間の方ではなく論理空間(LS
)の方を参照する。また、スタックポインタSPの参照
があった場合には、PRNGではなく現在リングRNG
のスタックが参照される。特殊空間のアドレスという意
味を持つのは、最終的に得られた実効アドレスのみであ
る。 間VPA 、 LDATE 、 5TATEでは、アド
レス変換のベースレジスタを、UATBO代わりにR1
によって指定している。この時、UATBのreser
vedの部分に対応するR1のビット(′=′で表現さ
れた2″4.2−5のビット)がJtでなくても、特に
チエツクは行なわず、単に無視される。これは、インプ
リメントの負担を考慮したためである。 チエツクが行なわれていなくても、R1の2”4゜2−
5のビットには必ず′0′を入れてもらうように、マニ
ュアル等で指導する必要がある。 AT=OOでLDATEを実行した場合、srcのフェ
ッチとdestaddrの実効アドレス計算は、他の命
令と同様にアドレス変換なしで行−なわれる。しかし、
LDATEの命令動作そのものは、ATの値に関係しな
い。すなわち、AT=OOであっても、得られたdes
taddrの実行アドレスは論理アドレスであると解釈
され、それを物理アドレスに変換する際に使用するAT
Eに対して、srcの転送を行なう、これは、アドレス
変換の前準備としてこの命令を使用することを想定した
ためである。 AT=OO(7)場合(7) LDATE、5TATE
、MOvPA(7)仕様は、AT=01の場合の仕様と
の整合性のほか、osが最初にMMUの動作環境を設定
するために利用できるように、また、ユーザプログラム
がAT=01、O5がAT=OOで動く場合に矛盾なく
利用できるように、という意図で決められたものである
。 【プログラム例外】 ・予約命令例外 ・+R=’Thのとき(1=?ojのときは検出しない
) 争P=’l’のとき ・ttt=’oxo’〜’111’のとき・EaRが@
−5Pのとき ΦEaAがRn、#imm−data、@SP+、@−
5Pのとき・<<l l>>機能例外 ・しDATEの正しいビットパターンがデコードされた
とき 【ニモニック】 5TATE 5rcaddr、dest「本発明装
置」ではサポートしない) 【命令の機能】 5tore address translation
table entryATEのストア 【命令オプション】 /PT PTE操作 /ST STE操作 【命令ビットパターンとアセンブラ表記】第285図に
示す 【フラグ変化】 第286図に示す 【解説】 5rcaddrで指定したオペランドの実効アドレス(
論理アドレス)を計算し、それを物理アドレスに変換す
る際に使用するアドレス変換テーブルのエントリ(AT
E)を読みだし、destに設定する。5rcaddr
に対する実効アドレスのアドレス変換の方法は通常の命
令とは異なり、UATBレジスタではなくR1レジスタ
をアドレス変換テーブルのベースアドレス(物理アドレ
ス)として使用する。これは、O5等から、現在プログ
ラムが走っている論理空間以外の空間に対する操作も行
なえるようにするためである。なお、5rcaddrの
MSBtfilの場合(SRを示す場合)は、R1では
なく 5ATBを使ってアドレス変換を行なう。 /PTオプションの場合、/STオプションの場合とも
、R1は5ection Tableのベースアドレス
を指す。結果的に、/PTの場合には2段の間接参照が
、/STの場合には1段の間接参照が行なわれる。 この命令で、高機能命令と同じように固定番号のレジス
タを空間指定に使用したのは、高級言語で直接使用する
ことのない命令なので命令の対称性があまり必要ないこ
と、ビット割り当てからの制約があること、による。 この命令では、ATEの予約ATEエラーやページ不在
エラーなど、いろいろな場合を見分けるため、FJla
2<、V−fla3を使用する。それぞれの場合におけ
る動作は、次のようになる。 1.5rcaddrのアドレス変換に使用する5ect
ionTab+eやPage Tableのうち、操作
する段より上位段のATEに予約へTEエラーがあった
場合この場合は、操作対象となるATEまで到達できな
いので、ATEの読みだしは行なわれない。V、、、f
lag=1.F−flag=0となって命令を終了する
。 2.5rcaddrのアドレス変換に使用する5ect
ionTableやPage Tableのうち、操
作する段のATEを含むテーブルあるいはそれより上位
段のテーブルがページ アウトされていた場合 この場合も、操作対象となるATEまで到達できないの
で、ATEの読みだしは行なわれない。Vj Iag=
1 、F−flaB=1となって命令を終了する。なお
、途中段のATEで、予約ATEエラーと次段のページ
アウトが同時に起こった場合には、予約ATEエラーの
方を優先し、V−flag=l 、F−flag=0と
する。 36それ以外の場合 この場合には、ATEが読み出されてdestにセット
され、V−flagは0となる。5TATεによって読
み出されたATEのP1ビットがOの場合には、それよ
り下位の段のページアウトを示すため、FJIag=1
となる。また、読み出されたATEが予約ATEエラー
を起こずものであった場合には、やはりF−「lag=
1となる。この二つのケースは、読み出された八TEを
使ってアドレス変換を行なおうとすると例外が発生する
という点て共通している。 読み出されたATEに予約ATEエラーがなく、P1ビ
ットが1の場合には、FJlag=Oとなる。 5TATE命令のフラグ変化をまとめると、第287図
のようになる。 なお、フラグ変化の意味を考えると、 5TATEのFjlag 、or、 V−flagに相
当するものがMOVPAのV、jlagとなっており、
5TATEとMOVPAとではフラグ変化のパターンが
異なっている。 この命令は、基本的にはアドレス演算と考えるので、M
JIag、Z−flagなどは変化しない。また、5r
caddr、destなどの実効アドレスを得るまでの
過程でページフォールトが生じた場合には、通常の命令
と同じようにページ不在例外(F’OE)が起動される
。 この命令は特権命令である。 dest/EaW!Sでは、@−5Pのモードを禁止し
ている。これは、途中段の予約ATEエラーやページア
ウトの発生によってVJIagがセットされ、dest
の転送ができない場合にdestにFA −S P h
<指定されていると命令動作がまぎられしくなるためで
ある。 LDATE、5TATE、L叶、STP、LDC,ST
C,MOVPA命令の中の特殊空間を参照するオペラン
ドにおいて、付加モードによりメモリの間接参照が起こ
った場合には、特殊空間の方ではなく論理空間(LS)
の方を参照する。 また、スタックポインタSPの参照があった場合には1
.PRNGではなく現在リングRNGのスタックが参照
される。特殊空間のアドレスという意味を持つのは、最
終的に得られた実効アドレスのみである。 AT=OOで5TATEを実行した場合、5rcadd
rとdestの実効アドレス計算は、他の命令と同様に
アドレス変換なして行なわれる。 しかし、5TATEの命令動作そのものは、ATO値に
関係しない。すなわち、AT=OOであっても、得られ
た5rcaddrの実効アドレスは論理アドレスである
と解釈され、それを物理アドレスに変換する際に使用す
るATEをdestに転送する。これは、アドレス変換
の前準備としてこの命令を使用することを想定したため
である。 間VPA、LDATE、5TATEては、アドレス変換
のペースレジスタを、UATBの代わりにR1によって
指定している。この時、UATBのreservedの
部分に対応するR1のビット(′=9で表現された2′
″4.2”5のビット)がjllでなくても、特にチエ
ツクは行なわず、単に無視される。これは、インプリメ
ントの負担を考慮したためである。チエツクが行なわれ
ていなくても、R1の2”4゜2″5のビットには必ず
20′を入れてもらうように、マニュアル等で指導する
必要がある。 【プログラム例外】 ・予約命令例外 ・+=10′のとき ・讐:′19のとき ・EaAがRn、#imm−data、@SP+、@−
5r’のとき ・EaW!Sが#imm−data、@SP+、@−5
Pのとき ・<<l l>>機能例外 ・5TATEの正しいビットパターンがデコードされた
とき 【ニモニック】 PTLBCr本発明装置」ではサポートしない。 つまり(R2)である。) 【命令の機能】 purge TLB TLBのパージ 【命令オプション】 /As すべでの論理空間の几Bをパージする/S
S ROで指定されたLSIDを持つ論理空間のT
LBをパージする 【命令ビットパターンとアセンブラ表記】第288図に
示す 【フラグ変化】 第289図に示す 【解説】 TLBのパージを行なう。 TLBのロックやイネーブルなどの細かい操作を行なう
には、制御レジスタを用いる。しかし、TLBに刻する
パージ操作しか行なわない場合には、そのためだけに制
御レジスタを追加するのはインプリメントの負担が大き
いため、TLBのパージ命令を別に用意している。 LSIDとは、複数のコンテキスト(プロセスやタスク
)のT1.Bの混在を許す場合に、それを区別する番号
である。/SSオプションの際には、ROにより示され
たしS10を持つ論理空間のTLBのみがパージされる
。なお、現在使用中の論理空間に対するLSIDは、L
SID制御レジスタに置かれているが、この命令の実行
とは直接関係しない。 PTLB命令では、特定の論理アドレスのTLBのみを
パージする機能はなく、指定した論理空間のすべてのT
LBがパージされる。特定の論理アドレスのTLBをパ
ージする場合は、PSTLB命令を使う。ただし、/S
Sオプションが指定された場合には、指定した論理空間
のURの几Bのみがパージされ、SRのパージは一切行
なわれない。 SR部分のパージを行なう場合には、必ず/ASを使用
する必要がある。 この命令は特権命令である。 メモリ管理やTLBの構成はインプリメント依存性の強
いところなので、この命令は<<L2>>となっている
。また、この命令を実装する場合にも、必ずしもすべて
のオプションをインプリメントする必要はない。LSI
Dの機能も必須のものではない。 PTL8ては、AT=00の場合にも、八T=01の時
と同様にパージが実行される。これは、アドレス変換の
前準備としてPTLB命令を使用することを想定したた
めである。 【プロゲラ11例外】 ・予約命令例外 【ニモニック】 PSTLB pr3addr (r本発明装置」
てはサポートしない。つまり(L2)である。)【命令
の機能】 purge 5pecific TLB特定のアドレス
のTLBのパージ 【命令オプション】 /AS すべての論理空間のTL[3をパージする
15SROで指定されたLSIDを持つ論理空間のTL
Bをパージする /PT 論理アドレス全体(2”31〜2−12ビ
ツト)がprgaddrと一致するエントリをパージす
る つまり、I’TEの変更時に影響を受ける部分をパージ
する /ST 論理アドレスの2”31〜2°22ビツト
がprgaddrと一致するエントリをパージする つまり、STEの変更時に影響を受ける部分をパージす
る /AT 論理アドレスの2″’31ビツトがprg
at+drと一致するエントリをパージする つまり、UATB 、 5ATBの変更時に影響を受け
る部分をパージする 【命令ビットパターンとアセンブラ表記】第290図に
示す 【フラグ変化】 第291図に示す 【解説】 特定の論理アドレスのTLBをパージする。 /PTオプションを指定した場合には、対象となる論理
空間のrLBのうち、STE〜PTEのインデクスに相
当する論理アドレス(すなわち論理アドレス全体)がp
ry、addrと一致するものをパージする。また、/
STオプションを指定した場合には、対象となる論理空
間のTLBのうち、STEのインデクスに相当する論理
アドレスがprgaddrと一致するものをパージする
。/ATオプションを指定した場合には、対象となる論
理空間のキャッシュのうち、論理アドレスのMSBがp
rgaddrと一致するエントリなすべてパージする。 LSIDとは、複数のコンテキスト(プロセスやタスク
)のTLBの混在を許す場合に、それを区別する番号で
ある。/SSオプションの際には、ROにより示された
LSIDを持つ論理空間のURのTLBのみがパージさ
れる。なお、現在使用中の論理空間に対するLSIDは
、LSID制御レジスタに置かれているが、この命令の
実行とは直接関係しない。 この命令は特権命令である。 メモリ管理やTLBの構成はインプリメント依存性の強
いところなので、この命令は<<12>>となっている
。また、この命令を実装する場合にも、必ずしもすべて
のオプションをインプリメントする必要はない。LSI
Dの機能も必須のものではない。 /AS、/SSオプションは、LSII)の有無に対す
る互換性を保つために設けであるオプションである。意
味的には、PSTLBの場合に常に/SSのみが指定で
きればよいが、r’sTl、Bの場合に常に/SS指定
とすると、LSIDの有無によって互換性が失われる恐
れがある。例えば、最初にLSIDの機能のないプロセ
ッサができると、その上で動くプログラムは、ROにL
SIDのセットを行なわずにPSTLB命令を実行する
ものになるだろう。同じプログラムを将来しSIDの機
能の有るプロセッサで実行した場合、その時にROに残
フていたゴミによって、全くでたらめのLSIDに対し
てPSTLBが実行されることになる。これを防ぐため
には、オプションを使って、ROをセットしていない場
合には/AS指定、将来ROをセットした場合は/SS
指定とすればよいわけで、PSTLBにおける/As指
定はこのような意味を持っている。 したがフて、PSTI、Bては、 /AS/PT /AS/ST /S5/PT /SS/ST はすべて有効であり、 /SSはROによって指定される論理空間のURのTL
Bをパージ /Asはすべての論理空間に対するTLBのパージ、あ
るいはしSIDの機能のないプロセッサでのTLBのパ
ージ(/PT 、 /STオプションも有効、ROは使
用しない) となる。 /ASオプションを使えば、LSIDのあるプロセッサ
でもしSIDのないプロセッサでも共通のプログラムを
書けるが、LSIDの機能は生かせないことになる。一
方、155オプシヨンを使えば、しSIDの機能は生か
せるが、LSIDのないプロセッサでは未実装オプショ
ンということでエラー(予約命令例外など)になる。 PTLB 、 PSTLB命令で/SSオプションが指
定された場合には、指定した論理空間のURのT1.B
のみがパージされ、SRのパージは一切行なわれない。 SR部分のパージを行なう場合には、必ず/ASを使用
する必要がある。PTLB 、 PSTLBで/SSの
オプションを指定した場合の動作をまとめると、以下の
ようになる。 PTLB/SS ROて指定された論理空間 のURをパージ PSTLB/SS/AT @uraddr ;ur
addrはURROで指定された論理空間 のtJRをパージ PSTLB155/AT @5raddr ;5r
addrはSR/SSでSRを指定したので、 何もしない SR全全体パージする場合 はPSTLB/AS/AT @5raddrを利用 PSTLB/SS/l’T @uraddr ;u
raddrはURROで指定された論理空間 のtJRの一部をパージ PSTLB/SS/I’T @5raddr ;5
raddrはSR/SS″r:SRを1旨定したノで、 何もしない SRの一部をパージする場 合はPSTL[l/As/P丁1i!5raddrを利
用 PSTLBで/STオプションの実装が難しい場合には
、互換性のため機能を縮退してそのまま実行することに
し、EITとはしない。具体的には、/STの代わりに
/AT相当の動作を行なうことになる。 AT=OOでPSTLBを実行した場合、prgadd
rの実効アドレス計算は、他の命令と同様にアドレス
変換なしで行なわれる。しかし、PSTLBの命令動作
そのものは、ATの値に関係しない。すなわち、AT=
00であっても、得られたprgaddrの実効アドレ
スは論理アドレスであると解釈され、AT=01の時と
同様にパージが実行される。 これは、アドレス変換の前準備としてPSTLB命令を
使用することを想定したためである。 【プログラム例外] ・予約命令例外 ・6’lt1. [1if”セツトレファレンスネ
:本発明装置ではサポートしない命令(データ転送命令
) MOV src、dest データの移動と符号拡張 MOVU src、dest データの移動とゼロ拡張 PUSHsrc スタックにブツシュ POP dest スタックからポツプ STM regl ist、dest複数レジス
タのストア しDM src、reglist複数レジ
スタのロード MOVA 5rcaddr、dest実効アドレス
を得る PUSHA srcaddr 実効アトしスをスタック にブツシュ (比較・テスト命令) CMP 5rcl 、5rc2 比較、符号拡張と比較 CMPU 5rcl、5rc2 ゼロ拡張と比較 CIlに bound、 1ndex、xreg配
列の範囲のチエツク (算術演算命令) ADD src、dest 加算、符号拡張と加算 ADDLI src、dest ゼロ拡張と加算 ADDX src、dest キャリーを含めた加算 5LIB src、dets 減算、符号拡張と減算 5IJBU src、dest ゼロ拡張と減算 SU[3X src、dest キャリーを含めた減算 MUL src、dest乗算 MULLI src、dest 符号なし乗算 MLILX src、dest、tmp拡張乗算、
サイズが大き くなる DIV src、dest 除算 旧VU src、dest 符号なし除算 DIVX src、dest、tmp拡張除算、サ
イズが小さ くなる、剰余を出す REM src、dest 剰余 REMLI src、dest 符号なし除算による剰余 N EG des を 補数演算 <<L2>> INDEX 1ndexs
ize、5ubscript、xreg多次元配列のア
ドレス計算 (論理演算命令) AND src、desL 論理和
ORsrc、dest 論理和XORsr
c、dest 排他的論理和 NOT dest 全ビ・ント反転 (シフト命令) SHL count、dest 論理シフ
トSHA count、dest 7F−
術シフトROT count、dest
回転5)IXL dest 拡張左シ
フト5HXRdest 拡張右シフトRV
BY src、dest バイl−順の逆
転 (<L2>> RVBI src、dest
ビ・ントl1lffの逆転 (本発明装置ではサポート〉 (ビット操作命令) BTST offset、base ビットの
テスト BSET offset、base ビットの
セット BCLRoffset、base ビットのクリB
NOT offset、base ビットの反
転BSCII data、offset Oま
たは1のサーチ (lワード内) (固定長ビットフィールド命令) BFEXT offset、widt、h、ba
se、destビットフィールドの抽出 (符号付き) BFEXTU offset、widtb、base
、destビットフィールドの抽出 (符号なし) BFINS src、offset、widtt+
、baseビットフィールドの挿入 (符号付き) BFINSU src、offset、width、
baseビットフィールドの挿入 (符号なし) BFCMr’ src、offset、、wid
th、baseビットフィールドの比較 (符号付き) BFCMPU src、offset、width、
baseビットフィールドの比較 (符号なし) (任意長ビットフィールド命令) BVSCII Oまたは1のサーチ(任意長ビッ
トフィールド) BVMAP ビットマツプ演算 BVCPY ビットマツプ転送 りVPAT パターンとビットマツプの演算 (10進演算命令) * ADDDX src、desL B
CDの加算* 5UBDX src、dest
BCDの減算t I’ACKss src、
+1est BCDへのパック * UNPKss src、dest、adj
BCDからのアンパ・ンク (ストリング命令) SMOV ストリングのコピーSCM
P ストリングの比較5SCI+
ストリングのサーチ5STR同一データ
を繰り返 し古き込み (ストリングのフィル) (キュー操作命令) QINS entry、queueダブルリンクの
キューへ挿入 QDEL queue、dest ダブルリンクのキューエンド すを削除 QSCI+ キューのサーチ (ジャンプ命令) BRA newpc ジャンプ(r’c相対) Bcc newpc 条件ジャンプ (pc相対) BSRnewpc サブルーチンジャンプ<pc相
対) JMP newpc ジャンプJSRnew
pc サブルーチンジャンプ Ace 5tep、xre3.l1m1t、n
ewpcインデクス値を増加する ループ命令 SCB 5tep、xreg、 I 1m1t、
newpcインデクスf1αを減少する ループ命令 ENTER1ocal、reglistスタックフレー
ムの形成、 高級言語用サブルーチンジ ヤング EXITD reglist、adjsp高級言語
用サブルーチン リターンとパラメータ解放 RTS サブルーチンからのリターン NOP ノーオペレーションPIB
命令キャッシュや パイプラインの整合性をと る (マルチプロセッサ命令) BSETI offset、baseビットのセッ
ト (バスをロック) BCLRI offset、baseビットのク
リア (バスをロック) C5I comp、update、dest比
較とストア(バスをロック) (制御空間、物理空間操作命令) LDCsrc、tJesL 制御空間へのロート STCsrc、dest。 制御空間からのストア LDPSB 5rc PSBへのロード LDPSM src PSMへのロード 5TPSB dest PSBからのストア STr’SM dest PSMからのストア LDP src、dest 物理空間へのロード STr’ src、desL 物理空間からのストア (O5関連命令) 1: JRNG vector リング間コー
ル* RRNG リング間リターンT
RAPA vector ソフトウェア割り込
み、トラップ TRAP 条件によるソフトウェア割り込み
、トラップ REIT EIT処理 (割り込み、例外処理) からのリターン WAIT imask 停止、割り込み待ち LDCTX Pcbaddr プロセスコンテ
キストのロード 5TCTX プロセスコンテキストの
ロード (MMU閏運命運命 令CS chkadd r アクセス権のチ
エツク * MOVPA 5rcaddr、dest物理ア
ドレスの転送 * LDATE src、dest、add
rATEのロード * 5TATE 5rcaddr、dest八TE
へストア (<L2>>ネPTLB TLBの
パージ<<L2>>!I I’5TIJ3 p
r8a山(「特定のアドレスのTLBのパージ (符号付き10進演算命令) <くし2>>ネ DCADD src、des
t符号付きBCDの加算 <くし2>>* DCADDU src、de
st符号なしBCDの加算 <<L、2>>* DC5UB src、d
est符号付きBCDの減算 <<L2>>* DC5UBU src、de
st符号なしBCDの減算 <<L2>>ネ DCX src、des
tキャリーを含めたBCDの加減 算 <<1,2>>* DCADJ src、d
est符号付きBCDの補数 <<L2>>* DCADJU src、de
st符号なしBCDの補数 <<L2>>ネ DCADJX src、des
tキャリーを含めたBCDの補数 <<L2>>、t DCCMP 5rcl、
5rc2符号付きBCDの比較 <<L2>>ネ DCCMPU 5rcl、5r
c2符号なしBCDの比較 <<L2>>* DCCMPX 5rcl、5
rc2キヤリーを含めたBCDの比較 、2. [I yの セン 、−答についNλ
二1−鷹I この資料は、命令ニモニック、アドレッシングモードの
ニモニック、などに関する本発明装置での規定を示した
ものである。ドキュメントの記述の意味を明確にし、本
発明装置に対する理解を深めてもらうことを目的として
いる。 A2−1−1.この′ ユ ゛ にお4る奮゛ホ ゛(
、、、> メタキャラクタを示す。 [A] Aはあってもなくてもよい。 (A)ネ Aの0回以上の繰り返しくA)+
Aの1回以上の繰り返しA::=Bll
CAはBまたはC A ::= BCAはBとCをつないだものA2−1−
2.ニモニパ t′の ■総称ニモニックとフォーマット別ニモニックを設ける
。 総称ニモニックは各命令に対応したニモニックであり、
短縮形、−船形などフォーマットが複数存在する命令で
も、総称ニモニックは一つである。これに対して、フォ
ーマット別ニモニックは、短縮形や一般形などの区別を
したい場合のニモニックである。 命令フォーマットを表わす文字を決めておき、総称ニモ
ニックから規則的にフォーマット別ニモニックを作る。 ユーザがアセンブラのソースプログラムを書いた場合に
は、通常総称ニモニックを使う。総称ニモニックに対す
る最適なフォーマットの選択は、原則としてアセンブラ
が行なう。 ■データタイプ指定子に関して統一的な規則を設ける。 データタイプ関係で記述を必要とするものは、演算のた
めのデータタイプ指定、命令全体でのオペランドサイズ
指定、およびオペランド毎のサイズ指定である。これら
に関して統一的な規則を設ける。 ■ニモニックは、原則としてIEEE Microρr
ocessor Assembly Language
5tan dard(P694)を標準とする。た
だし、これには−船釣な感覚になじまないと思われると
ころ、本発明装置のアーキテクチャに合わないところな
どがあるので、あくまでも個々の名称を決める際の参考
とするだけである。考え方や規則まで完全にIEEEに
合わせるわけではない。 ■特殊記号の利用はできるだけ避ける。 ここで定義するアセンブラでは、できるだけ特殊記号を
使用しないという方針にしている。それは、オペランド
に数式が来たり、アセンブラを拡張した場合に、その中
で使用する記号と競合さぜないためである。また、文字
セットの少ない大型機でも開発を行なうためには、あま
り多くの記号を使用するのは望ましくない。特殊記号の
利用をできるだけ避けたため、アセンブラの中では括弧
を一種類しか使用しておらず、またj ; t 、 j
& jなどが未使用の特殊記号となっている。 A2−1−3.アセン ラ−6 本発明装置用アセンブラ言語における一つの命令は、一
つのオペレーションニモニックと複数個(0個、1個を
含む)、のオペランドニモニックにより記述される。オ
ペコードニモニックとオペランドニモニックの間は一個
以上の空白文字(スペースまたはタブ)により区切られ
、オペランドニモニックとおしの間はコンマ′、′によ
り区切られる。 くアセンブラ命令〉二二二 くオペレーション〉[<オペランド〉(、(オペランド
〉)ネコ A2−1−4.ペ ン゛の1 オペランドの順序は命令毎に定まっているが、原則は次
のようになる。 移動命令(NOV) 第一オペランドがソース、第二オペ ランドがデスティネーションになる。 すなわち、 第一オペランド;=〉 第二オペランド これはIEEE標準と同じである。 2項演算の2オペランド命令(SUBなど)第一オペラ
ンドが2番目のソース、 第二オペランドが1番目のソースと デスティネーションになる。 すなわち、 第二オペランド、op、第一 オペランド==〉第二オペラ ンド これはIEEE標準とは異なるが、多くのプロセッサで
用いられている方法であり、なじみやすい。 A 2−2.オペし−ショクのニモニックA2−2−1
.ニモニ・・I I EEEでは、演算操作を示す動詞をニモニックの先
頭にもってくるという考え方であるが、本発明装置では
さらにその前にデータタイプ指定子を置く。演算操作そ
のものに対するニモニックは、はぼIEEEに合わせる
。 本発明装置での命令のニモニックは、次のような規則で
生成する。 くオペレーション〉::= [(データタイプ〉](演算操作〉((バリエーション
))ネ(/<オプション))ネ(:<フォーマット))
ネ[、<サイズ〉]例: 0V SNOV/NE、W NOV、讐 MOV : L MOV:Q、W くデータタイプ〉 命令の先頭で指定するのは、演算
方法に大きな影 響を与えるデータタイプ、 すなわち、く演算操作〉に 対して直交関係にないデ ータタイプである。この データタイプには、スト リング、キュー、ビット フィールドなどが含まれ る。データサイズ(!!数 の8.16,32.64ビツト、浮 動小数の32.64ビツトなど) の指定は、ここではなく (サイズ〉で行なう。また、 符号付き、符号なしの指 定、およびアドレス演算 の指定は、ここではなく (バリエーション〉で行な う。 く演算操作〉 演算そのものの指定を行なう。で
きる限りI EEEに 合わせる。条件ジャンプ 命令の条件の指定は本来 オプションとするべきで あるが、慣例にしたがっ て基本部分のく演算操作〉 に含める。 くバリエーション〉 演算に対する細かい操作や属性の
指定を行なう。 (オプション〉 命令フォーマット中の数ビットで
表現される命令 オプションを示す。オプ ションになるのは、スト リング命令の終了条件、 キューのサーチ条件など である。 くフォーマット〉 短縮形、−船形などのフォーマッ
トを指定する。 通常は書かなくてもよく、 書かない場合は総称ニモ ニックになる。アセンブ ラのソースでくフォーマツ ト〉を書かずに総称ニモニ ツクを使]た場合には、 アセンブラで自動的に最 適なフォーマットを選ぶ。 (フォーマット〉を書いた 場合にはフォーマット別 ニモニックの記述になる。 アセンブラのソースでユ ーザが(フォーマット〉を 書いた場合には、強制的 にそのフォーマットを使 うことを示す。 (フォーマット〉によるフ ォーマット別ニモニック は、仕様書やマニュアル の記述において、あるい は逆アセンブラなどにお いて、あえて命令フォー マットの区別をしたい場 合に用いる。 〈サイズ〉 オペランドのサイズを指定する。 くサイズ〉を使用 する命令は、主として整 数を扱う命令と浮動小数 を扱う命令である。くサイ ズ〉はくデータタイプ〉とは 異なり、(演算操作〉に対 して直交関係があるのが 特徴である。 A2−2−2.−一 (データタイプ〉を表わす文字として、次のようなもの
がある。 なし 整数演算、アドレス演算、 雑命令など F 浮動小数 S ストリング Q ダブルリンクによるキュー 8 1ビツトのビ・ント操作 6F 固定長ビットフィールドの操作 eV 任意長ビットフィールドの操作 醇j≦田え!操作 原則としてIEEEのニモニックに従う。使用するもの
は次の通りである。 ADD、Sue、MUL、旧V、CMP、NEG、AN
D、OR。 XOR,NOT、LD、ST、MOV、PUSH,PO
P、WAIT。 OP 注意 ・間V、LD、STの使い分け NOV レジスタ間、メモリ間の転送LD メ
モリからレジスタへの転送ST レジスタからメモ
リへの転送LD 、STは、方向性を意識する必要のあ
る命令に使用する。 ・シフト関係のオペレーションは、左 右の指定方法が異なるためにI EEEのニモニックを
そのまま使うわけでは ないが、l EEEの原則を生かして5IIA。 SHL、ROTとする。 ・ブランチ(条件分岐)命令に関して は、IEEEに従うと’BV’などが別の意味とぶつか
ること、符号付き整数の 比較と符号なし整数の比較の区別を わかりやすくしたいこと、などを考 慮したため、条件指定の部分す月EEEには従っていな
い。 ・JMP、JSR,RTSは、ブランチ命令とのバラン
スからIEEEには従っていない。 ・(バリエーション〉のlXjにより拡張演算を表わす
ことに統一したため、AD OX、5UBX、MULX、DIVX!;:ライTも1
EEEニは従っていない。 A2−2−4.バ1エーショゝ くバリエーション〉は、演算に対する属性などを指定す
るものである。次のような文字を使用する。 X 拡張演算 例:A[)DX、MtJLXなと U 符号なしデータの演算 例:MOVU、ADDU、MULUなどC制御空間(制
御レジスタ) に対する演算 例:LDC,5TC P 物理空間に対する演算 例:LDP、5TP 1 バスをロックして行なう処 理 例:BSETI 、BCLRI、CS+門 複数デ
ータの処理 例:LDM、STM A アドレス計算 例:MOVA、PUSIIA、MOVPAo 10
進演W(符号なし、デー タチエツクなし) 例:^ooox、5ueox またはスタック上のパラメ ータを捨てる処理 例:EXITD A2−2−5. −マ・・ (フォーマット〉は、命令フォーマットの詳細を区別し
たい場合に用いる。次のような文字を使用する。 Q リテラル短縮形 ビットフィールド命令のス タテイック形 ループ命令のリテラル短縮 形 例: NOV:Q、讐 #3.@abs BTST:Q、B $4 、 @abs ACB:Q 111、R1+15. Ioapl Rレジスターレジスタ開演算 の短縮形 ループ命令のレジスタ短縮 形 例: ANr):R,W R1,R2 MOVA:R,W @(disp:18.R2)、R3 Ace:R 11、R1,R2,Ioop2 し メモリーレジスタ間演算の 短縮形 例: ADD:L、W @abs、R2 MOV:L、S/ @(disp、R2)、R3 S レジスターメモリ間演算の 短縮形(NOVのみ) 例: MOV:S、W R2,@abs 1 イミディエート短縮形 例: ADD:1.W $100000.@abs2 G 2オペランド命令の一般形 ループ命令の一般形 例: ADD:G、讐 @absl 、@abs2 ACB:G @absl、R1,@a bs2.1oop3 E 2オペランド命令の一般形 の8ビツトイミデイエート 例: ADD:E、W #lOO,B、@abs2 8 、newpcが8ビツト 例: Ace:G @absl 、R1、@abs2゜ 1oop3:8 16 netzpcが16ビツト例: BEQ:
G error:1632 newpcが32
ビット 例: BNE:G next:32 64 newpcが64ビット 例: BRA:G 1oop:64 なお、ここで示したl : Q l 、 t e G
9 、、、といったフォーマット指定は、一つの命令(
総称ニモニック)の中でフォーマットの区別を行ない、
フォーマット別ニモニックを作ることが目的のものであ
る。つまり、アセンブラ表記上のフォーマット指定であ
る。一方、命令フォーマット説明で用いたG−form
at、E−format、、といったフォーマットの方
は、命令全体の中でのフォーマットの説明を行なうこと
が目的のものである。したがって、例えば同じ′:G′
であっても’MOVA:G’であればMOVA命令の一
般形なのでGA−formatであり、’NOV:G’
であればNOV命令の一般形なのでG−formatと
いうことになる。 υ−2jLt土区 l EEEでは64ビツト整数まで考慮されていないの
で、扱うデータサイズはどうしてもl EEEと異なっ
たものになる。 整数の場合 4通りのサイズが対称的にサポート されている点、 オペランド側でもデータタイプが指 定できる点、が特徴である。 オペレーション側にもオペランド側 にも同じものを書くので、′、′により区切っている。 くサイズ〉として、次のような文字を 使用する。 B Byte ・8ビツト長の整数HHa
lfword 16ビツト長の整数W Wor
d 32ビツト長の整数L Longwo
rd 64ビツト長の整数′L2は本発明装置32
では使用できない。 浮動小数点の場合 別に定める。 A2−3.オペーン゛のニモニ・・ オペランドには、汎用のアドレッシングモードまたはそ
のサブセットが利用できるもの(−酸オペランドと呼ぶ
)と、命令に応じた特殊な指定をするもの(特殊オペラ
ンドと呼ぶ)とがある。特殊オペランドについては、命
令毎にフォーマットを定める。特殊オペランドをとる命
令は、 BRA、Bcc、BSR,Ace、SCB (ne
wpcオペランド) LDM、STM (reglis
tオペランド) などである。 (オへランド〉::: (−酸オペランド〉 II <特殊オペランド〉 一般オペランドに関しては、本発明装置において、オペ
ランド毎にデータサイズを指定できる点が特色であり、
アセンブラにおける一般オペランドの記述方法にもその
ような能力を持たせている。また、オペランドに対して
も総称ニモニックとフォーマット別二士ニックを設けて
いる。 一般オペランドのニモニ・ンクは、実際のオペランドの
値(実効アドレス)と付加モードフォーマットの区別、
およびサイズから成る。 (−酸オペランド〉::: (オペランド値〉[:(付加モード指定〉][、−サイ
ズ>] A2−3−1.°゛し・・シンノモー゛ 普の、」り従
来のプロセッサでは、アドレッシングモードの数があま
り多くなかったため、それぞれのモードを個別に考え、
別々の記号を割り当てておけばよかった。また、表記法
と実際のアドレッシングのオペレーションがうまく対応
していない場合も見られた。例えば、あるプロセッサで
はレジスタ相対間接のアドレッシングモードをdisp
(Rn)で表現する場合があるがこれはオペレーション
としてはmem[disp+ Rn]であり、disp
の部分とRnの部分の扱いが対称的ではない。これだけ
で使っている場合には問題は生じないが、これを組み合
わせて複雑なモードを作っていった場合には矛盾の起き
ることがある。 本発明装置では付加モードといフた機能があるため、統
一的、規則的なアドレッシングの表記を行なわないと混
乱を招く。そこで、本発明装置では実際のオペレーショ
ンとその表記との関係について原則を設け、それに基づ
いて、付加モードまで一貫したアドレッシングモードの
表記を行なうこととした。 アドレッシングは、基本的には加算と間接参照の繰り返
しである。したがって、この二つのオペレーションに対
する表記法が決まればよい。 本発明装置の表記原則をまとめると次のようになる。 [本発明装置アドレッシングモードの表記原貝すコ @Aまたは@(A) アドレスへのメモリ内容を
参照 mem[A] @(A、B、C,、、、) A、B、C,、を加
算して、加算結果のアドレス のメモリ内容を参照 mem[A + 8 + C+、、、] 本発明装置における′()′は、間接参照などの特別な
意味は持たない。一般の数式と同じように、結合の順序
を示すに過ぎない。したがフて、@Aと@(A)は全く
同じ意味ということになる。以下で説明するシンタック
スにおいて1(、、)ゝが入る場合であっても、’(、
、)’内に一つの項しかなければ、’(、、)’を省略
しても構わない。 従来のプロセッサでは’(、、)’によって間接参照を
意味する場合があり、これがある程度慣用的な表記法と
なっている。しかし、このような表記法では以下のよう
な点で誤解を生みやすい。 例: 慣用的表記法 オペランド値 Rn Rn (Rn) mem[
Rnコabs mem[abs
]またはabs (abs) mem[mem[[ab
s]]また はmem[abs] うまく対応がとれない場合が生ずる。 本発明装置において、間接参照を必ず1@′によって表
現しているのは、こういった理由による。 イミディエート、スタック操作のアドレッシングモード
、インデクスのスケーリングなどの処理はこの原則に入
らないので、原則を参考にしながらそれぞれ別に表記法
を定める。 A2−3−2.・ モー゛の (付加モード指定>::=AIIN ′A′の指定は、付加モードのフォーマットを使うとい
うことを特に強調したい場合に付は加える。 また、titの指定は、付加モードを使用しないという
ことを特に強調したい場合に付は加える。 これらの指定は、フォーマット別ニモニックに相当する
ものである。#;H1,t;A1とも書かれていない場
合は、そのアドレッシングが付加モード以外の短いモー
ドで実現できるかどうかをアセンブラが判断し、実現で
きればそのモードを使う。付加モードでないと実現でき
なければ、付加モードを使う。 例: @(disp、PC):A 常にpc相対付加モード
を使用 d ispが32ビツト以下 であっても付加モー ドを使用 @(disp、PC):N 常にPC相対間接のモー
ドを使用 d ispが64ビツトであ るとエラー @(disp、PC) dispが32ビツトであ
ればPC相対間接のモ ードを使用 d ispが64ビツトであ ればPC相対付加モー ドを使用 醇づ≦し丈韮ズ (サイズ〉は、オペランドの演算サイズを示すものであ
り、オペレーションのニモニックに示されたサイズと絹
みになって実際のサイズ指定を行なう。サイズ指定の文
字は、オペレーションに使われるものと同じである。 オペランド中のくサイズ〉と、オペレーション中のくサ
イズ〉の関係は、原則として次のようになる。 ・オペレーション中にくサイズ〉の指定があった場合に
は、そのくサイズ〉が全部のオペランドのデフォルトの
サイズとして有効になる。ただし、サイズの指定ができ
ないオペランド、イミディエートのオペランド、特殊な
意味を持つオペランドの場合はこの限りではない。 ・オペランド中に(サイズ〉の指定があった場合には、
それがそのオペランドのサイズになる。オペレーション
中で異なるサイズが指定されていても、オペランドで指
定されたくサイズ〉の方が優先される。 ・オペランド中で(サイ、ズ〉の指定を行ない、それが
利用できないサイズであった場合はエラーとなる。 例: MOV、W @src、@dest src、destとも東WORD)型 MOV、W @src、B、@destsrcはB(
BYTE)型、destはW(WORD)型MOV
@src、B、@dest、WsrcはB(BYT
E)型、destは%l1(WORD)型A2−3−4
.オペ ン゛ 以下の項では、一般オペランドに関してアドレッシング
モード別にそのアセンブラ表記を示す。 くイミディエート値〉、(絶対7ドレス〉などの内容と
しては、数値、変数名、数式などが書けるが、そのシン
タックスは別に定める。(フォーマット〉は、アドレッ
シングモードのフォーマット選択を明示したい場合に書
く。主としてアドレッシングモードの拡張部のサイズを
指定するために使用する。通常は書かなくてもよく、書
かない場合はアセンブラで自動的に最適なフォーマット
(サイズ)を選ぶ。 くフォーマット〉によるフォーマット別ニモニックは、
仕様書やマニュアルの記述において、あるいは逆アセン
ブラなどにおいて、あえてアドレッシング部のフォーマ
ットの区別をしたい場合に用いる。 (フォーマット> ::= 41+ 161132
I+4 4ビツト長のアドレッシ ング修飾部 16 16ビツト長のアドレッ シング拡張部 @(disp:16.Rn)。 abs : 16など 3232ビツト長のアドレッ シング拡張部 @(d isp:32.Rn)t abs:32など 6464ビツト長のアドレッ シング拡張部 abs:64など (フォーマット〉により指定されるのは、あくまでも命
令フォーマット自体のサイズである。 一方、くサイズ〉により指定されるのは、演算されるオ
ペランドのサイズである。イミディエートモードの場合
を除けば、両者は全く異なるものである。 例: MOV RO,%I!、@addr:16.Wこの命
令では、ROの内容を’addr’で示されるメモリに
転送する。 絶対アドレッシングが用いられてい る。 ’:16’は’ add r ’を16ビツトで表現す
ることを示す。したがって、 ’addr’の範囲は$ffff8000〜$0OO0
7fffどなる。 一方、′、W′は演算を%10RD (32ビツト)で
行なうことを示す。つまり、この 命令により4バイトのデータが転送さ れる。 (レジスタ番号〉に入るのは、汎用レジスタのニモニッ
クである。 (レジスタ番号〉::= ROII RI II R2II R3II
R4IIR5II R6II R7II R8II R
9II RIOllR11It R12II R13I
I R14II R15IIPIISP FPとR14は全く同義、SPとR15は全く同義であ
る。 A2−3−4−1 、レジ 官 オペランド= Rn (オペランド値〉::= くレジスタ番号〉 例: l A2−3−4−2.レジ 。 オペランド= mem[Rn] (オペランド値〉::= eくレジスタ番号〉 例: @R2 A2−3−4−3.レジ タ −文・1゜オペランド=
mem[disp16 + Rnlmem[disp
32 + Rn] (オペランド値〉::= @(<ディスプレースメント〉[:(フオーマット〉]
、<レジスタ番号〉) (フォーマット> ::= 161+ 32例: @(disp:16.R5) A2−3−4−4.1−一ル ミー ニーオペランド
= imm−data くオペランド値〉::= #くリテラル値〉 (オペランド値〉::= #くイミディエート値〉 リテラルの命令フォーマットを使用するということを明
示したい場合は、オペレーションのニモニック中で示す
。 イミディエートの場合には、拡張部のサイズがオペラン
ドのサイズとして決まるため、くフォーマット〉とくサ
イズ〉が同じ意味になる。アセンブラとしては、(フォ
ーマット〉としても(サイズ〉としてもその大きさを指
定することができる。 なお、イミディエートのオペランドでオペランド側にサ
イズ指定がなく、しかも命令機能の上でサイズの自由度
がある場合には、自動的に最小のサイズが選択されるも
のとする。 例: ADD:Q、W 111.RO リテラルのフォーマットを使用 (2バイト) ADD:1.讐$1.RO イミディエート形のフォーマットを 使用(6バイト) ソースオペランドIllは32ビツトで表現 ADD:L、W #1.RO 短縮形のフォーマットを使用 (6バイト) ソースオペランドとして32ビツト イミデイエートを指定 ADD:G、W #1.B、RO 一般形のフォーマットを使用 (6バイト) ソースオペランドとして8ビツト イミディエートを指定 16ビツトフイールドの下位8ビツト を用いて111を表現。′1′は32ビツトに符号拡張
される。 ADD:E、W旧、RO 一般形8ビットイミディエートのフォ ーマットを使用(4バイ))’1ゝは32ビツトに符号
拡張される。 ADD:G、讐1tl、RO #1にはサイズの指定がなく、しかも 二Gフォーマットなのでサイズの自由度が残されている
。したがって、自動的 に最小のサイズが選択され、 ADD:G #1.B、RO,W (6ハイド命令)と
等価になる。 ADD:G #1.賛、RO0%l1(8バイト命令)
になるのではない。 ADD:G、%Il#1:16.RO これは、くサイズ〉ではなく(フォーマット〉によって
命令を選択した例であ り、 ADD:G、W #1.ll、RO と等価になる。 総称ニモニックで単に ADD、讐 #1.RO と書くと、最もコードの短い ADD:Q、W #1.RO が選択される。 また、命令によっては、サイズが一つに固定されている
わけではないが、実質的にほとんど一つのサイズでのみ
使用されるものがある。 そのようなものについては、特にオペランド側にくサイ
ズ〉がついていない限り、命令によって定められるデフ
ォルトサイズを適用する。 これは、(オペレーション〉のニモニックが全体のオペ
ランドにかかるという原則に刻しては、例外となる。 〔例] ビット操作命令のアクセスサイズ(BB指定)は、8b
it(、B)がデフォルト、H2,すは<<L2>>、
、Lはくくし×>> 固定長ビットフィールド操作命令のレジスタサイズ(×
指定)は、32bit(、W)カブフォルト1 、H,、Bは使用不可1.しはくくし×>>BTST、
W RO,@addr = BTST RO,W、
li!addr、B A2−3−4−5. %Iニー オペランド== mem[abs16]mem[abs
32コ mem[abs64] (オペランド値〉::= @く絶対アドレス〉[:<フォーマット)](フォーマ
ット> ::= 16 II 321164例: @abs:32 A2−3−4−6.PC,1 オペランド= mem[disp16 + PCIme
m[disp32 + PC] (オペランド値〉::= @([(ディスプレースメント〉[:<フォーマット〉
]]、PC) (フォーマット> ::= 161+ 32例: @(disp、PC) A2−3−4−7.スタックボッ オペランド= mem[sP++] (オペランド値〉二二= @SP+ 例: @SP+ A2−3−4−8. −− −−9ユ オペランド: mem[−5P] くオペランド値〉::= @−5P 例: @−5P A2−3−4−9.FP 文・− オペランド= mem[disp4 + FP](オペ
ランド値〉::: @([<ディスプレースメント〉[:<フォーマット〉
コ]、(レジスタ番号〉) (フォーマット>::=4 くレジスタ番号> ::= FP II R14例: @(disp4:4.FP) このアドレッシングモードでは、ビットパターン中に指
定されたdisp値を4倍して実際のディスプレースメ
ントとするが、アセンブラでの表記に使う値は、4倍し
た後のものである。 くフォーマット〉を指定しない場合には、アセンブラで
の表記がレジスタ相対間接のモードと同じになるため、
アセンブラによって最適なモードが選択される。つまり
、@(d+sp、Rn)と書かれたオペランドでは、R
nがR14またはFPであり、かつdisρが−32〜
31の4の倍数の時にはFP相対間接のモードが選択さ
れ、それ以外の場合にはレジスタ相対間接のモードが選
択されるわけである。 A2−針士」魅盈u1対」J−接 オペランド= mem[disp4 + SF’](オ
ペランド値〉二二二 @([<ディスプレースメント〉[:(フォーマット〉
ココ、くレジスタ番号〉) くフォーマット>::=4 (レジスタ番号> ::= SP II R15例: @(disp4:4.SP) このアドレッシングモードでは、ビットパターン中に指
定されたdisp値を4倍して実際のディスプレースメ
ントとするが、アセンブラでの表記に使う値は、4倍し
た後のものである。 υ≦しL月」[E:に 付加モードについても、機能面の要求を示す総称ニモニ
ックと、フォーマットやビットパターンを記号化したフ
ォーマット別ニモニックを設ける。 [総称ニモニックに関してコ ・eまたは@(、、、)により間接参照を表わし、(、
、、、、、、、、、、)によりアドレスの加算を表わす
という原則はそのままである。 ・表記の順序は、 ベースモードまたはそれま での付加モードtmp値 ==〉 ディスプレースメント ==) インデクス を原則とする。こうすると、実効アドレス計算の流れが
左から右への単純な形になり、先の段の付加モードに必
要な情報が先の方に、後の段の付加モードに必要な情報
が後ろの方に集まる。すなわち、総称ニモニックの表記
の順序が、付加モードの機械語ビットパターンの順序と
同じになる。したがって、フォーマット別ニモニックや
実際の機械語の付加モードとの対応がよく、アセンブラ
も簡単になり、理解しやすくなる。 [フォーマット別ニモニックに関してコ・フォーマット
指定用として、っぎの3つの文字を導入することにより
、機械語のビットパターンと1対1に対応した表記がで
きるようにする。 二B その部分の処理をベースモードにより実現する
ことを表わす :A その部分までの処理を、−段の付加モードによ
り実現することを 表わす :N その部分の処理は次の段の付加モード(’:A
’の指定のある部分) でまとめて実現することを表わ す なお、「その部分の処理」とは、フォ ーマット指定文字がディスプレースメ ントやレジスタに付いている場合には その値の加算処理を、フォーマット指 定文字が閉じ括弧9)′についている場合は間接参照の
処理を意味する。また、 ”:八′で「その部分までの処理」とあるのは、その′
:八への部分の処理と、それより左側で′:N°の付い
た部分(前の′:A9または′=B′との閏でI:NI
の付いた部分)の処理を合わせて行なうことを示 す。 ・フォーマットをすべて指定した場合には、′:八への
個数が付加モードの段数になる。また、通常は一回の′
:八へが一段の間接参照に対応する。ただし、複数のイ
ンデクスレジスタを加算する場合(間接参照がなくても
′:A′が必要)、最後の段で二重間接を行なう場合(
二段の間接参照でも一回の′:八へでよい)は例外であ
る。 ・フォーマットの表記のない場合には、総称ニモニック
として表記した処理を実現できるような付加モードが自
動的に選択される。 また、実際の付加モードでは実現できないフォーマット
をフォーマット別ニモニックで指定した場合は、エラー
となる。さらに、フォーマット指定ニモニックからフォ
ーマット指定文字を取り去ると、そのまま総称ニモニッ
クになる。このような点は、フォーマット別ニモニック
の一般的な原則と同じである。 [フォーマット一般に関してコ ・複数のアドレス加算がない場合、@(、、、)の括弧
は書かなくてもよい、よフて、例えば付加モードで実現
される3重間接参照の@(@(@(R1)))は@@@
R1と書いてもよい。これは、付加モード以外のアドレ
ッシングにも適用される原則であり、一種のシンタック
スシュガーと百゛える。 ・インデクスのスケール値は、I EEEでは′:B′
t=wlなどサイズ指定文字を使用しているが、将来ス
ケール値にもっと大きな値を入れることも考えられるの
で、ここは従来通リスケール値の数字を直接書くように
する。また、スケーリングを指定する文字もI EEE
の′ソてはなく、′*′を使用する。これは、′:1を
フォーマット指定の目的で別に使用しているためである
。 例: @(offset、PC) mem[offset + PC] 総称ニモニック。offsetが32ビツトに入ればP
C相対間接モード で実現し、32ビツトに入らなけ れば付加モードで実現する。 @(offset、PC):N mem[offset + PC] 必ずPC相対間接モードで実現し、 付加モードにはしない。 本発明装置64で、offsetが32ビツトに入らな
い時はエラーとな る。 @(offset[:NI、PC[:Nl):Amem
[offset + PC] 必ず付加モードで実現する。ベ ースモードの指定に相当する部 分がないので、 絶対付加モード +付加モード EI=IO,disp=offset、
1ndex=PC,5cale=1になる。 @(PC[::B]、offset[:NI)[:Al
mem[offset + PC] 必ず PC相対付加モード +付加モード EI=10. disp=offset
、 1ndex=0. 5cale=ネで実現する。 @(@(@(R3[:B]、basel[:Nl、R4
ネ4[:Nl)[:A]、base2[:Nl、R5[
ネ1][:Nl)[:Nl)[:A]mem[mem[
mem[R3+ basel + R4ネ4]+bas
e2 + R5]] R3相対付加モード +付加モード EI=01. disp=basel
、 1ndex=R4,5cale=4+付加モード
EI=11. disp=base2、1ndex=
R5,5cale=1 @(R3[:B]、 basel[:Nl、 R4
ネ4[:A]、 R5*2[:Nl)C:A] mem[R3+ basel ÷ R4ネ4 +
R5ネ2]R3相対付加モード +付加モード EI=OO,disp=basel、
1ndex=R4,5cale=4+付加モード
El=10. disp=base2、1ndex=R
5,5cale=2 @(R3[:B]、 basel:A、 R4ネ4
:A):Amem[R3+ basel + R
4ネ4]R3相対付加モード +付加モード EI=OO,disp=basel、
1ndex=0.5cale=ネ +付加モード EI=OO,disp=o、 1nd
ex=R4,5cale=4 +付加モード EI=10. disp=o、 1n
dex=0.5cale=* これは−段の付加モードで実現可能で あるにもかかわらず、フォーマットを 指定してわざわざ三段の付加モードに している例である。 付加モードのシンタックスを以下にまとめておく。ただ
し、括弧を省略する略記法、および各部分を区切るコン
マ2.′についてのシンタックスは、ここには含めてい
ない。 オペランド= mem[mem[、、、] + dis
p + Rnネ5calel + Rmネ5cale2
.、、](一般オペランド〉::: (オペランド値>[:Nl[、<サイズ〉]11(付加
モードオペランド値〉[、(サイズ〉] (付加モードオペランド値〉::= @((付加モード中間値>、[<disp値〉[二N]
]、[(インデクス値〉[:N13)[:A]El=1
0に対応 +1 8(@(<付加モード中間値>、[<disp
値〉[:N13.[(インデクス値〉 [:N13)[:Nl)[:A] El=11に対応 これは付加モード最終段を表わす。 (付加モード中間値〉::= (付加モード中間値>、<disp値>C:AlI3(
付加モード中間値>、[<disp値>[:N13、<
インデクス値>[:A] El=OOに対応 II @(<付加モード中間値>、(<disp値
)[二N]]、[(インデクス値−C:N]])[:A
]EI=01に対応 これは途中にある一段の付加モードを表わす。 (付加モード中間値〉二二二 [0[:B11 絶対付加モードに対応11(
レジスタ番号>[:B] レジスタ相対付加モード
に 対応 II PC[:B] PC相対付
加モードに対応 これはベースモード(レジスタ相対付加モード、PC相
対付加モード、絶対付加モードの区別)を表わす。 <disp値〉::= (ディスプレースメント〉[:<フォーマット〉] D、ddddフィールドに対応 (フォーマット> ::= 41+ 161+ 32
1+ 64くインデクス値〉::= (レジスタ番号〉[、(サイズ〉][′ネ′くスケール
値〉] II PC[、<サイズ)][’l’<スケール
値〉]S、M、Rx、XXフィールドに対応 (サイズ〉::=讐11シ くスケール値> ::= l 112114118′ネ
ゝは、アスタリスクゝ零′を文字として使うことを示す
。 「繰り返し」を表わすメタ的な意味はもたない。 (インデクス〉のくサイズ〉は、インデクスレジスタの
有効なデータサイズである。本発明装置64で1.すゝ
を指定した場合には、レジスタの下位32ビツトが64
ビツトに符号拡張される。 (インデクス〉のくスケール〉を省略した場合には、l
が仮定される。 A2−3−6. オペーンド 一般のアドレッシングモード以外の方法で指定されるオ
ペランド(特殊オペランド)に関しては、次のようなシ
ンタックスとする。なお、各部分を区切るコンマ′、′
につぃてのシンタックスは、ここには含めていない。 re I ist LDM STM ENTEREX
ITD合Δ(レジスタ番号〉またはくレジスタ番号〉−
くレジスタ番号シを′、′で区切って並べ、’(、、、
)’でくくったもの (特殊オペランド〉二二二 ((<連続レジスタ番号〉、)ネ) く連続レジスタ番号〉二二= (レジスタ番号〉 その番号のレジスタを指定 11(レジスタ番号〉−(レジスタ番号〉間の番号のレ
ジスタをすべて指定 例: ENTER,−$110.(’) LDM、讐@block、(SP) STM、W (R1,R3,R9−R13,FP)、@
−5Pnew c BRA Bcc BSRACB
SCB+3Δアドレツシング方法は、PC相対モードの
みである。 オペランドとしては、単にジャンプ先のラベルのみを書
く。 この場合は、アセンブラによって、その命令の先頭アド
レスとジャンプ先のアドレスとの差がnewpcのビッ
トパターンとして設定され、命令実行時にそのラベルの
場所へジャンプできるようになる。 (特殊オペランド〉::= (行き先ラベル〉 例: BEQ nextaddr nextaddr
にジャンプACB、B #l、R1,@11m1t、
Ioopaddrtoopaddrにジャンプ BRA、acc、BSR,ACB、SCB命令は、出現
頻度が高い、特殊なアドレッシング(PC相対のみ)で
ある、慣用的に行き先のラベルをそのまま書ける方がよ
い、といった理由から、(行き先ラベル〉を書くだけで
自動的に(行き先ラベル〉のアドレスと、これらの命令
の置かれたアドレスとの差がディスプレースメントに設
定されるようになっている。すべてのオペランド表記の
うちで、レジスタ以外のシンボル名が先頭に′#′も′
@′もなく現われるのは、このく行き先ラベル〉に限ら
れる。 したがって、例えば BRA 1abel は JMP @(label−$、PC)と同じ意味
を表わすことになる。なお、′$′は、この記号を含む
命令(この場合はJMP命令)の先頭アドレスを表わす
。 く特殊オペランド〉::= +t #<補正値〉 値がそのまま設定される 例: LINPにBW @src、@dest、#)l’23
302330vector TRAPAa ”
頭に′II′を付ける。 く特殊オペランド〉::= 11#(ベクトル〉 値がそのまま設定される 例: TRAPA #l i少曳 ・ビットフィールド命令などのリテラル指定は、短縮形
のリテラル指定と同じように#(リテラル値〉 で表わす。 φCHK、 INDEX、AcB、SCBビットフィー
ルド命、令などのレジスタ指定は、一般のアドレッシン
グにおけるレジスタ直接モードと同じように、 くレジスタ番号〉 で表わす。 A 2−4. −マ・′ 1ニモニパ、 ニモ「
総称ニモニック」と「フォーマット別ニモニック」は、
本発明装置アセンブラの特徴の一つである。従来のプロ
セッサでも一部の命令について似たような考え方は見ら
れたが(68020のMOVとMOVQなど)、本発明
装置では両方のニモニックを完全に体系化し、オペレー
ションだけではなくオペランドの記述にも同じ考え方を
取り入れた点に特色がある。 フォーマット別ニモニックと総称ニモニックの間には、
次のような関係がある。 ・インプリメントやフォーマットから来るいろいろな制
約をユーザに押し付けないのが総称ニモニックであり、
総称ニモニックを書く限りアセンブラが最適なコードを
選ぶ。 同じ機能を持ち、同じようにフラグのセットされる命令
は、できる限り一つの総称ニモニックに統合する。 φフォーマット別ニモニックは、機械語のビットパター
ンと1対1に対応するものである。 フォーマット別ニモニックが変わっても、それはオブジ
ェクトサイズや実行サイクル数にのみ影響し、ユーザか
ら見た命令機能はフラグ変化まで含めて全く同じである
。 この点でフォーマット指定子とサイズ指定子は根本的に
異なる。サイズ指定子の場合は、演算サイズが変わると
ユーザから見た命令機能も変化する。条件ジャンプ命令
ではBRA 1abel:32のようなフォーマット指
定子を使っているのに、加算命令の場合は、ADD s
rc、B、dest、Wのようなサイズ指定子を使フて
いるのは、このためである。 ・通常ユーザが使うのは、「総称」の方である。「フォ
ーマット別」は、仕様書でのフォーマットの説明、逆ア
センブラなどの特殊な用途でしか使わない。したがって
、場合によっては多少冗長な感じになることもあるが、
使用目的を考えると特に問題はない。ユーザが主に使用
するのは、あくまでも総称ニモニックである。また、「
総称」と「フォーマット別」は両極端の表記法に過ぎず
、一部のみフォーマットを指定する中間的な記法も存在
する。例えば、@(offset、PC)を付加モード
で書きたいが、付加モードの各段のフォーマットはどう
でもよいという場合には、 @(offset、PC):A と記述する。「フォーマット別」と言っても、どうして
もフォーマット指定の必要な部分のみ指定を行なえばよ
く、実際にはそれほど長い記述にはならないのが普通で
ある。 ・ 「フォーマット別」から「総称」への変換は、′:
X′を取ることにより機械的にできるようになっている
。また、逆の変換も、フォーマットが許される範囲で適
当に9:X9を付ければ済むようになっている。オペラ
ンドの順序は変化しない。 フォーマット別ニモニックとして、記号を変えたり、順
序を変えたりする方法も考えられるが、そうすると総称
ニモニックとの関係がスムーズではなくなるため、その
ような方法はとっていない。 (いろいろな場合分けが
必要になり、かえってわかりにくくなる。拡張性もよく
ない。) また、前述の@(offset、PC):Aのように、
−部のフォーマットのみ指定したい場合には、「フォー
マット別」か「総称」かの区別が統一的に行なえる方が
望ましい。 ・結局、ユーザからの要東を受けるインタフェースが総
称ニモニックであり、機械語からくる制約を受けるイン
タフェースがフォーマット別ニモニックである。両者の
調整をとるのが、′:X9のフォーマット指定文字およ
びアセンブラである。 ・フォーマット別ニモニックと総称ニモニックを併用す
ることの欠点は、アセンブラが複雑化することである。 しかし、ユーザがフォーマットのことまで心配するより
は、アセンブラで処理できることはアセンブラで処理す
る方がよいと考えており、そのためにアセンブラが多少
複雑になるのはやむを得ない。 ・機械やフラグ変化の異なる命令は、たとえ命令のビッ
トパターンが似ていたとしても別の総称ニモニックにな
る。 以上のような理由から、「フォーマット別」の方は、多
少記述が長くなフても、「フォーマット別ニモニックで
あること」や「どのフォーマットを使うかということ」
がはっきりわかるようにした方がよいと考えている。フ
ォーマットを表わす部分をすべて′:X′に統一してい
るのは、このためである。 なお、シンタックス中で’[、、、]’とある部分は省
略可能であるが、省略するかどうかが全体で統一されて
いる必要はない。例えば、ある’[、、、]’を省略し
、別の’[、、、]’を残してもよい。 A2−5. の セン これまでに述べたアセンブラ表記は、機械語のビットパ
ターンに命令としてのニモニックを与えるための表記法
であり、アセンブリ言語の核となる部分である。本発明
装置では、ここまでを<<LQ>>仕様とする。 しかし、アセンブラを一つの言語として見た場合には、
ニモニック以外にも次のような項目を規定する必要があ
る。これらの項目については、本発明装置のアーキテク
チャと矛盾を起こさない範囲で、できるだけIEEEに
合わせるように標準化する。 ・大文字と小文字の使用をどうするか ・シンボルの文字数は何文字までにするか ・シンボルに式が書けるかどうか、シンタックスはどう
なるか ・ラベルの形式はどうするか(ラベルの後に′:′をつ
けるかどうか) ・2進数、8進数、lO進数、16進数の表記法はどう
するか ・コメントの表記法はどうするか ・ストリングの記述形式 ・特殊キャラクタ(改行文字tyntなど)の表現形式 ・細かいシンタックスや使用できる文字・アセンブラ擬
似命令 φマクロ このうち、2進数、8進数、lO進数、16進数の表記
法については、IEEEでは以下のような形式になっC
いる。 B’〜 2進数 例:B’0OO10010=
H′12 Q′〜 8進数 例=Q′22=■′12 0′〜 lO進数 例: D’1B=H
’12 H′〜 16進数 本仕様書でも、16進数を表わすためにtl H11〜
゛2を、2進数を表わすために”B′”〜″を使用して
いる。 υj」ユ太文字よAづCムζ2胚工 l EEEでは特に決まっていない。本発明装置では、
ニモニックや予約基に対しては、大文字と小文字を同等
に扱う。すなわち、この資料で大文字になっている部分
に対して、小文字を使用しても構わない。ただしユーザ
が定義した一般の変数においては、大文字と小文字を区
別する方を標準とする。 醪づj工乙区匹ル皿 (ディスプレースメント〉、(リテラル値)、(イミデ
ィエート値〉、(絶対アドレス〉などの項目(総称して
くシンボル値〉と呼ぶ)には、定数、ラベルを含む四則
演算式が書けるものとする。 式の中では、優先順位を変えるために’(、、、)ゝを
使用することができる。ただし、未確定の値(外部名や
後で定義されるラベルなど)を含む式に関しては、正し
いりロケーションができるように、演算式の形を制限し
ても構わない。 さらに、式の中では現在注目している命令のアドレスを
示す値として、′$2を使用することができる。 PC相対間接モードの表記は @(d i sp * P C) であり、dispの値が直接ディスプレースメントに設
定される。しかし、PC相対でリロケータブルなプログ
ラムを書く場合には、オペランドのアドレスそのものを
dispとして設定するのではなく、オペランドのアド
レスとこの命令のあるアドレスとの差をd isp値と
して設定する必要がある。この目的で′$2を使用する
ことができる。すなわち、 (オペランド−$)をdi
sp値として設定すればよい。 ′$9を った ロ ラム1 くくアドレス〉〉 )1’oOFE )1’0100 MOV、B
#1.@(foe−$:16、PC) )1’0104 NOV、B #2.@(
8:16.PCH’010B )1’010C H’0180 foe: 、、。 アドレスH’0100のMOV、B命令の第二オペラン
ド@(loc−$:16.PC)では、実際のd is
pのビットパターンに設定される値がH’0180−H
’0100=H’0080となる。この命令により、ア
ドレスlI’0180のfoeに1がセットされる。一
方、H’0104の門OV、B命令では、7トL、 ス
11’0104+8=l+’010C1,:2がセット
される。 ・ モー゛9$9 った ベーン゛の 雪@(@(
[:0:B、] 1abe11−$[:N]、PC[:
N])[:A]。 Iabe12−$[::N]、PC[:N])〔:A]
これは mem[mem[displ + PC]÷disp2
+ PC]を表わす。 ただし、 displは1abel 1の指ずアドレスと現在アド
レスとの差 disp2は1abe12の指すアドレスと現在アドレ
スとの差 であり付加モードの拡張部は 絶対付加モード +付加モード El=01. disp=displ、
1ndex=PC,5cale=1+付加モード E
l=10. disp=disp2.1ndex=PC
,5cale=1という構成になる。 このモードは、リロケータブルなテー ブル(case文用のジャンプテーブルなど)をプログ
ラム領域に置く場合に使 用できる。 一段目のPC相対間接 mem[displ + PC] は、case文用のテーブル参照をリロケータブルにす
るために用いられる。ま た、二段目のPC相対間接 mes+[a+em[、、、] + disp2 +
PC]は、ジャンプ先アドレスの決定をリロ ケータブルに行なうために用いられる。 −・−゛・ 討11コJIP“ メモリ エ 本発明装置を組み込み用などの用途に用いることを考え
ると、命令セットは本発明装置になっているが、メモリ
管理のハードウェア(聞U)は持たないといったバージ
ョンのチップも考えられる。 したがって、本発明装置のメモリ管理機構二よ、必ずサ
ポートの必要なく<LQ>>仕様ではなく、標準的な仕
様の掲示のみを行なう<<l/l>>仕様となっている
。以下では、<<LA>>仕様としての本発明装置標準
メモリ管理方式を説明する。 A3−1.メモリ・・ 式〇゛1 と<<LIRA>
仕様本発明装置では、ハードウェアによるアドレス変換
とメモリ管理方式(以下聞Uと呼ぶ)の標準仕様が、<
<LA>>仕様として用意されている。しかし、本発明
装置にlTR0NやμBTRONを実装するような場合
には、聞Uが不要となることが多い、また、聞Uを使用
する用途であっても、ページテーブルなど聞υ関係の実
行環境の設定が終わるまでは、アドレス変換なしで命令
を実行する必要がある。 そこで、本発明装置では、MMU機構を使用しているか
どうか、アドレス変換を行なっているがどうか、を示す
フィールドを18w内に設け、このフィールドを書き変
えることにより、アドレス変換やメモリ保護の有無を指
定できるようにしている。 このフィールドをAT(Address Transl
コLion) フィールドと呼ぶ、 ATはpssの
b116〜bi t7に配置されている。 ATを18
w内に設けたことにより、toc:x等によるコンテキ
ストスイッチや、BIT処理の起動、RCIT命令によ
るタクサ処理ハンドラからのリターンの際にも、アドレ
ス変換の有無を切り換えることが可能である。 ATフィールドの意味を以下に示す。 AT 意味 00 アドレス変換、メモリ保護なしOl 本
発明装置4!準のアドレス変換とメモリ保護<<l八〉
〉 10 アドレス変換なし、アドレスのみを使った節
l【なメモリ保護<<LIRA> (アドレスのMSBによるメモリ領域の区別、2リング
) 11 reserved このうち、<<l八〉〉仕様の標準メモリ管理を実装し
た本発明装置ではAT・00.01が利用可能、<<1
1117>)本発明装置では訂・00,10が利用可能
となる。 <<IIR>>仕様のAT、10の場合、MMUがない
のでページ毎のメモリ保護は行なえないが、<<LA>
>の4リングを縮退してリング0、リング3のみをを効
とし、アドレスによって簡単なメモリ保護を行なう。ア
ドレスのMSB=1の領域(〈<LΔ〉〉でぃうs■υ
はリングOからアクセス可能、リング3がらアクセス禁
止の領域であり、通常はここにosを置(。 一方、アドレスのMSB・0の領域(<<LA>>でぃ
うUlll)はリングOからもリング3からもアクセス
可能な領域であり、通常はここにユーザプログラムを置
<、MMUがないのでユーザプログラム間のメモリ保護
はできないが、ユーザプログラムがらosを保護するこ
とは可能である。 AT・00(アドレス変換なし)の場合は、メモリアク
セスに対するリング保護のチエツクは行なわれない。 したがって、ページ不在例外(POE) 、アドレス変
換例外(ATRE)は発生しない。 ただし、訂・00の場合も特権命令のチエツクは行なわ
れる。 AT=OOの時の動作については、<<Ll>>と<<
LIR>>で全く同じになることが望ましい、しかし、
LDATIEなどの命令では、<<Ll>>ならばMM
U環境の設定という意味で実用的な命令であるのに対し
て、<<1.IR>>では全く意味を持たない、また、
PTLBなどの命令も<<Ll>>のAT・00ならば
一応意味を持っているが、<<LIR>>ではTLfl
そのものがないので全く意味を持たない、したがって、
<<Ll)1>>仕様ではこういったMMU関係の命令
を実装しないことにする。 <<LIR>>でこういっ
た命令を実行しようとした場合は、ATの値にかかわら
ず予約命令例外(1?rE) となる。 A3−2.本 明¥Lのメモリ管 六本発明装置は<
<LIRA>仕様のチップである。 本発明装置のATフィールドの意味を第292図に示す
。 A3−301口廿−のI10穴目アクセスに1してIO
MASK、 l0ADDRで示されるI10空間に対す
る命令フェッチ及びメモリ間接アドレッシング・モード
によるオペランドフェッチはアドレス変換例外となる。 I10空間に対するアクセスで、メモリ間接アドレッシ
ングの場合はアクセス動作は一切行なわれない、しかし
、命令フェッチの場合にはアクセス動作が行なわれる。 そのため、外部の170デバイスはバスアクセスタイプ
(BAT)信号をみて命令フェッチであれば応答しない
ようにする必要がある。 I10空間は通常リングOの領域におかれるためリング
3からのアクセスはリング保護違反が検出されることに
なると考える。リング保護違反の場合は高速に検出可能
なためメモリアクセスは行なわれない。 また、I10空間と!10でない空間をまたぐようなア
クセスが行われた場合、アドレス変換例外を起こすが、
その場合の再実行動作を、保証できない。 A3−4.メモ! ・、の目口・と 本発明装置では、以下のような目的を達成するために、
ハードウェアによるメモリ管理機構(MMU)を導入し
ている。 ・命令再実行と仮想記憶方式のサポートにより、実装さ
れている物理メモリの遺を越える大きさの論理空間を提
供する。 ・多重論理空間の機能の導入により、コンテキスト(タ
スクやプロセス)間の独立性を維持し、プログラムを作
りやすくする。 ・リング保護の機能の導入により、O3や共有データと
ユーザプログラムやユーザデータとの間でメモリ保護を
行なう。 本発明装置では、以上のような機能を提供するために、
毎回のメモリアクセスでベージング方式によるアドレス
変換を行なう。アドレス変換前のアドレス (論理アド
レス)の作る空間を、LogicaI 5paceの意
味でLSと予備、アドレス変換後のアドレス(物理アド
レス)の作る空間を、PhysicalSpaceの意
味でpsと呼ぶ。 ページングの場合には、メモリアクセスを高速化するた
めに、TLB(Translation Lookas
ide Buffer)と呼ばれるアドレス変換対の記
憶バッファを導入することが一般的である。しかし、T
LBはメモリアクセスを高速化するためのインプリメン
ト上の手段と考えられるため、本発明装置のMMC仕様
としてはTLBに関する規定は行なわない。本資料でも
、TLnに関する説明は行なっていない。 また、コンテキストの切り換えによるTLBのパージを
減らすため、<<L2>> としてHA fiii空
間8&別子(LSID)の機能を導入することができる
。 LSIDは、コンテキスト毎にユニークに与えられ
た番号であり、LSIDまで含めてTLBの論理アドレ
ス比較を行なうようにすれば、コンテキストを切り換え
る際にもすべてのTLBをパージする必要がなくなる。 しかし、LSIDの機能についてもインプリメント依存
性が強いため、本発明装置のMMU仕様としては、LS
IDの詳細機能やビット数の規定を行なっていない0本
発明装置の仕様では、LSIDを示す制御レジスタのア
ドレス割り当てと、LSIDを実装した場合のTLBや
キャッシュの整合性確保に関する説明のみが行なわれて
いる。 ^3−4−1.ページング 本発明装置のアドレス変換は、ページングを基本として
いる。ページサイズは4KBとして本発明装置全体で統
一されている。これによって、TLBの構造などをある
程度限定することができ、メモリ管理機構を内蔵できる
チャンスが大きくなる。 また、基本的なパラメータを固定化すれば、それにチュ
ーニングすることで性能向上が期待できる。 アドレス変換に際し、本発明装置32の論理アドレスは
第293図のように分割され、これによって2段階のペ
ージングを行なう。 32ビツトの論理アドレスは、4GBの論理空間を作る
。Rビット (論理アドレスのMSB)により、4GB
の論理空間は2GBのしn5hared Region
(UR) とSharedReg ion (SR)
に分かれる。おのおののRegionは、SXフィール
ドにより4MBずつの5ectionに分かれる。 さらに、おのおのの5ectionは、PXフィールド
によりRKBずつのPageに分かれる。 したがって、2段階のページングのうち上位段のページ
テーブルは、Sxをインデクスとして、下位段のページ
テーブルのベースアドレスを引き出すものとなる。これ
を5ection Table(ST) と呼び、そ
の一つのテーブルエントリをそのエントリをSTEと呼
ぶ、また、2段階のページングのうち下位段のページテ
ーブルは、PXをインデクスとして、物理ページのベー
スアドレスを引き出すものとなる。これをPage T
able(PT)と呼び、その一つのテーブルエントリ
をそのエントリをPTEと呼ぶ。一つのSTEの変更に
より一つの5ectionが、一つのPTHの変更によ
り一つのPazeがjF+G Cゝを受けることになる
。 PTE、 STHの総称名としてATE(Addres
s Translatontable Entry)と
いう名称を用いる。 STのベースアドレスは、ORの場合UATBSSHの
場合5ATBという制御レジスタによって示される。 UATBまたは5ATBの変更により、一つのRegi
on(UR又はSR)が影響を受ける0以上述べた関係
をまとめたものを第294図に示す。 A3−4−2. ” 穴ヨ 本発明装置では、論理アドレスのff5Bによって、共
通空間(S、hared Region)と個別空間(
UnsharedReg 1on)が区別されている。 それぞれのRegionに対して、アドレス変換のテー
ブルベースレジスタUATB、 5ATBが存在するが
、このうち0ATHのみはコンテキスト毎に切り換わる
ようになっており、これによって多重論理空間を実現す
る。 すなわち、OR(論理アトL、7.H’0000000
0−H’7fffffff)ではコンテキスト毎に別々
の物理空間(物理メモリ)が割り当てられるのに対して
、SR(論理アドレス11°80000000〜II’
ffffffff)ではコンテキ7.1−間で共通の
物理空間(物理メモリ)が割り当てられるa 5har
ed Regionは主に割り込み処理ハンドラやO8
が使用し、Unshared Regionは主にユー
ザプログラムが使用するものであるが、ユーザデータで
もタスクやプロセス間で共用するものはSRを使用する
場合があるし、O3の管理するデータでもタスクやプロ
セス毎に持つ必要のあるものはURを使用する場合があ
る。 多重論理空間の機能を利用すれば、同一の論理アドレス
から複数のプログラムを同時に実行することができるの
で、実行時にオブジェクトコードのリロケーションをす
る必要がなくなる。また、他のタスクやプロセスのUR
を直接参照することはできないので、プログラム間のメ
モリ保護にも役立つ。 なお、[iR,SRの区別と後述のメモリのリング保護
の機能とは、直接の関連はない。すなわち、riB3か
らSRを参照できないとか、PCがURにある間はSR
を参照できないとかといった制限は、UR,SR自体の
機能には含まれていない。このようなメモリのアクセス
制限を行ないたい場合には、メモリのリング保護の機能
を利用し、STE、 PTEに適当な保護コードを設定
しておかなければならない。 〔多重論理空間の構成〕 第295図において ・Unshared Region/5hared R
egionの切り替えは、論理アドレスのMSHによっ
て行なわれる。 ・Unshar)ed Regionでは、UATBレ
ジスタによってアドレス変換される。 ・5hared Regionでは、5ATBレジスタ
によってアドレス変換される。 ・tlATBレジスタのみコンテキスト毎に切り換わる
ため、Unshared Regionでは、それぞれ
のコンテキストが別々の論理空間を持つことができる。 アドレス変換が2段のページングとなっているため、異
なるコンテキストの2つのSTEが同一のPage T
ableを指すことにより、uRの中での共用セクショ
ン、共有ページを設けることもできる。 なお、ORとSRの境界にまたがるようなプログラムや
データについては、以下のように考える。 ・64ビット拡張時には、現在連続しているORとSR
の境界が不連続になるため、H’7fffffffから
先に伸びているプログラムは、64ビット拡張時に使用
できなくなる。これは、本発明袋rf1.32で、+1
’7fffffffの次のアドレスを11 ’ 000
00000と考えても)! ’ 80000000と考
えても同じである。 したがって、[iRとSRの両方にまたがるようなメモ
リアクセスや、IIR−5Rで連続するような命令のフ
ヱッチを行なうべきではない。 ・しかしながら、URとSRにまたがっているか同化の
チエツクを毎回行なうのは、インプリメント上の負担が
大きいため、URとSRの両方にまたがるアクセスがあ
ったとしてもBITとはしない。 この場合、legionとは関係なく、アドレスがリニ
アアドレスであるという考え方を生かし、11゛7ff
fffffの次は)l’80000000. !I°f
fffffffの次はI+ ’ 00000000のア
ドレスをアクセスするものとする。ただし、前項でも述
べたように、この仕様を利用するようなプログラムを書
くべきではない。 PSW、 0ATH,5ATBに対するLDC命令や、
LDATE。 LDCTX命令による論理空間の切り換えでは、現在実
行中のプログラム領域のアドレス変換に対しても影響を
与えることができる。したがって、使い方によっては次
の命令から全く別の場所に飛んでしまうというケースも
生じる。これはプログラムの責任で処理しなければなら
ない、具体的には、ATビ7トの変更を行なう場合はV
=RGI域を利用したり、LDCTXを実行する場合は
5R(Shared Region)を利用したりする
ことになる。 A3−4−3. リング保J゛ 本発明装置のメモリ保護方式は、4レベルのリング保護
である。保護情報は、論理アドレスやOR。 SRの区別には関係なくページ毎に指定することができ
る。 リング保護では、PS冒中に示される現在リング番号(
RNG)と、アクセスすべき論理アドレスのSTE。 PT[!に含まれている保護コードとの関係によっC、
アクセスが可能かどうかが決まる。RNGが小さい値で
あるほど、すなわち内側のリングであるほど強いアクセ
ス権を持っており、RNG・3が最もアクセス権が弱い
。rngl< rnH2とした場合、RNG=rng2
でアクセスできるページは必ずRNG=rnfXlでも
アクセスできることになる。 1づ−μL盟葺龍レジスター MMUに関係する制御れしに一ついて説明する。 ・PS− 別項参照。 聞Uに関連するのは、RNG、^Tのフィールドである
。 ・LSID 別項参照。 このレジスタの有無と有効なビット数は、インプリメン
トに依存する。 l UATB(Unshared region
Address Translationtable
Ba5e) 第296図に示す。 ′ 5ATB(Shared region Ad
dress Translationtable B
a5e) 第297図に示す。 STB: 5ection Table Ba5e
Section Tableの物理ベースアドレス 101 にreserved ユーザ向けのマニュアルでは、”0゛ を書き込みように指導しておく。 ただし、°1′を書き込んでも無視さ れる。 読みだし時は値不定である。 D: Direction Section Tableのサイズが小さい場合の5
ection Tableの方向DJ 5ectio
n Tableの下位アドレス側が有効 ローI 5ection Tableの上位アドレス
側が有効 りとLLのフィールドは、小規模な用 途で、有効な論理アドレスの範囲を 制限し、同時に5ection Tableのサイズを
縮小するために使用するもの である。 LL: Length Section Tableのサイズ LL・00 1/2ザイズ 512エントリ2K Bテ
ーブル 2G B RegionLL−011/4サイ
ズ 256エントリIK Bテーブル IG B Re
gion+、t、、to 1/16サイズ 64エン
トリ256Bテーブル 256MB RegionLL
・11 1/64サイズ 16エントリ64Bテーブル
64MB RegionPI: Page I
n PI*O5ection Tableが物理アドレスに
存在しない。 この場合には、STBはハー ドウエア的な意味を持たな いので、O8で自由に使用す ることができる。ただし、 Pl、Oでもり、 LLのフィール ドは有効である。D、 LLの ふいは、アドレス変換例外 (ATRE)の未使用領域参照エ ラーか、ページ不在例外(POE) かを区別するために使用さ れ、例外の検出は前者が優 先される。 つまり、PT、0の時にこのレ ジスタを使ってアドレス変 換を行おうとした場合、D。 LLのフィールドにより未使 用領域参照エラーが検出さ れればアドレス変換例外(ATRE) が発生し、そうでなければ ページ不在例外(POE)が発 生する。 PI=I 5ection Tableが物理アド
レス上に存在する。 P!−1であれば、このレジス タを使ってアドレス変換を 行なうことが可能である。 ただし、D、 LLのフィール ドにより未使用領域参照エ ラーが検出された場合には、 アドレス変換例外(ATRE)が 発生する。 5ATB、 UATB中のP!ビットは、正確にはPa
ge Inではな(5ection Table In
の意味を表わす、また、後述するSTE中のprビット
は、Page InではなくPage Table I
nの意味を表わす、しかし、あえて区別する必要もない
と思われるので、いずれも同じ”PI’という名称を使
用する。広義の「ページ」は、「ページテーブル」や「
セクションテーブル」、つまりディスクへの追い出しの
単位となるものをすべて含むことになり、ページテーブ
ルやセクションテーブルの不在にも「ページ不在例外」
という例外の名称をそのまま通用する。 5ection Table+ Page Table
自体をページアウトすることも可能であるが、ページイ
ンされているテーブルについては、テーブルのベースア
ドレス(STB、 PTB)は物理アドレスを表わすも
のとする。 すなわち、ページテーブルは論理空間ではなく物理空間
に置かれていると考えることができる。また、5ect
ion TableやPage Tableが4にのフ
ルサイズでない場合にST、 PTのページアウトを許
すと、64B、 256B、 IKB、 2KB単位で
ページ不在となるケースも生じる。つまり、UATB、
5ATB、 STEでのP!ビットは、必ずしも4に
単位でのページ不在を指すとは限らないので、注意する
必要がある。 セクションテーブル、ページテーブルの大きさが可変に
なっているが、テーブルが最小(1/64)の大きさで
ない時には、STBとSxの有効なビットに重なりが生
じる0例えば、tlATB、 5ATBテD−0,LL
−00とした場合、以下のような計算によりSTEの実
効アドレスを算出する必要がある。 Xは有効なビット(0/l) −は無効なビット(0) ゛〉〉°はシフトを表わす ここで、IXI の重なっているビット、すなわちST
[lの2′6〜2“11のビットの扱いが問題となる。 以下のような案が考えられる。 ■STBの2′6〜2°11のビットはlOoでなけれ
ばならないものとする。インプリメント上は、STBの
2′7〜2°31とSXを20ビツト右にシフトしたも
のとを連結することによって、STBのアドレスを算出
することができる。 (アライメント強制) ■STBの2“6〜2“11のビットが0でなくてもよ
いが、2“11までの範囲でSTHの実効アドレスがラ
ップアラウンドする。インプリメント上は、重なりのあ
る5ビツトのみの加算を行ない、加算により生じた桁上
がりは無視することになる。(ラップアラウンド)■S
TBの2′6〜2°11のビットが0でなくてもよ<
、5ection Tableに対して2゛6より上位
のアラインメントは全く強制しない。インプリメント上
は、まず重なりのある5ビツトの加算を行ない、桁上が
りを生した場合には最上位桁まで桁上がりを伝nさせる
必要がある。つまり、2“6より上位のビットについて
すべて加算を行なう必要がある。(アライメント自由) 現在■が本発明装置の仕様となっている。LL=01゜
10の場合、またPTBとPXのアライメントの場合も
同じように■の仕様とする。 DとLLの機能は、小規模な用途で5ection T
ableの領域を節約するために設けられているもので
ある。DとLLの指定が変わると、5ection T
ableが小さくなるため、SXの取り得る値に制限が
できる。 D、 LLのそれぞれの値に対して、許されているSX
の値は第298図のようになる。 o−t、t、t、、ooのreservedの部分は、
ソフトウェアで使用してはいけない。マニュアルにもr
eservedであることを明記する必要がある。ただ
し、この値を実際にtlATBや5TABに設定した場
合は、0・0、LL・00と同じ動作をする。つまり、
LL=OOの場合にはDは無視される。 論理アドレスとして、上の表に当てはまらない値を指定
した場合には、アドレス変更例外(ATRE)の未使用
領域参照エラーが発生する。ページ不在例外(POE)
とアドレス変更例外(ATRE)が同時に発生した場合
には、アドレス変更例外(ATRE)が優先される。例
えば、UATIIのD・0.LL=IO,Pl、0で論
理アドレスH’ 40000000をアクセスした場合
には、POIEではなく ATREとなる。 DとLLの指定によるテーブル領域の節約のようすを図
示すると、第299図のようになる。 この時、使用する論理アドレスの範囲が狭いため、はじ
めの数個のSTEのみが利用できれば済むという■の例
であれば、第300図のようにすることによって、5e
cHon tableの大きさを節約することができる
。 又、スタック領域やO8用の領域などで、終わりの数個
のSTEのみが利用できれば済むという■の例であれば
、第301図のようにすることによって、5ectio
n tableの大きさを節約することができる。 ※0.1の場合、STBは5ection table
の有効部分の先頭アドレス(SXとしては途中の値に対
応する)を指すのではなく 、5X=0に対応する5T
E(実際には存在しない)の置かれるべきアドレスを指
す、 STB中のPTBの場合も同様である。 A3−6. STEとl’TE STEとPTBは、メモリ上に置かれるアドレスの変換
用のディスクリブタである。STEとPTHのフォマッ
トについて説明する。 −STE (Section Table Entry
)第302図に示す。 PTB: Page Table BasePage
Tableの物理ベースアドレス讐: Write可
能 m=1 書き込みのアクセス権はPTHの保護コードに
従う W=OPTI!の保護コードにかかわらず、全リングか
ら書き込み禁止 違反した場合はアドレス変換例外 (ATRE)のリング保護違反エラーが発生 E: Execute可能 E=1 実行のアクセス権はPTHの保護コードに関
わらず、全リングから実 行禁止 違反した場合はアドレス変換例外 (ATRE)のリング保護違反エラーが発生 D: Direction Page Tableのサイズの小さい場合のPage
Tableの方向 0・OPage Tableの下位アドレス側が有効 Dsl Page Tableの上位アドレス側が有
効 LL: Length Page TableOサイズ LL・00 フルサイズ 1024エントリ4K B
テーブル /IM B 5ectionLし・01 1
/4サイズ 256エントリIK Bテーブル IM
B RegionLL、10 1/16サイズ 64
エントリ256Bテーブル 256KB Region
LL、11 1/64サイズ 16エントリ64Bテ
ーブル 64KBRegionpi: page l
l PI=OPage Tableが物理アドレス上に存在
しない。 この場合には、PTBはハードウ エア的な意味を持たないので、 O8に自由に使用することができ る。ただし、PI・0でもり、LLのフィールドは有効
である。D、LLの フィールドは、アドレス変換例 外(ATRE)の未使用領域参照エラ ーやリング保護違反エラーか、 ページ不在例外(POE)かを区別 するために利用され、例外の検 出は前者が優先される。 つまり、PI=0の時にこのSTEを 使ってアドレス変換を行なおう とした場合、D、LLのフィールド により未使用領域参照エラーや リング保護違反エラーが検出さ れればアドレス変換例外(ATRE) が発生し、そうでなければペー ジ不在例外(POE)が発生する。 PI=I Page Tableが物理アドレス上に
存在する。 PI・1であれば、このSTEを使っ てアドレス変換を行なうことが 可能である。ただし、D、LLのフ ィールドにより未使用用領域参 類エラーやリング保護違反エラ ーが検出された場合には、アド レス変換例外(ATRE)が発生する。 STBとSxの時と同様に、PTBとPxの場合にも、
PTBのアラインメントは自由とする。すなわち、LL
≠11の時には、PTBとPXの有効なビットに重なり
の生じる場合があるが、重なった部分のアドレスについ
ては最上位桁まで加算を行なう。 口とLLの機能は、小規模な用途でI’agc Tab
l(!の領域を節約するために設けられているものであ
る。DとLLの指定が変わると、r’al!eTabl
e!が小さくなるため、PXO取り得る値に制限ができ
る。 D、LLのそれぞれの値に対して、許されているPXの
値は第303図のようになる。 論理アドレスとして、上に当てはまらない値を指定した
場合には、アドレス変換例外(ATRE)の未使用領域
参照エラーが発生する。 D、 l 、 LL・00の部分に対しては、W、Eが
特別な意味を持つ、 D−1,LL・00のSTEを使
ってメモリアクセスを行なおうとした場合には、次のよ
うな動作をする。この時、Sxの値は関係しない。また
、PTBのフィールドとEビットは、ハードウェアで使
用しないので、O3から自由に利用することができる。 第304図において ”本′はソフトウェアで自由に使用してよいビットであ
る。ハードウェア的にはこのピントが無視される。 このビットは、reservedを示す”・1とは異な
り、将来の使用拡張でも使用しないことがはっきりして
いるビットである。°・“と°*゛は、現在の使用にお
けるハードウェア的な動作は同じであるが、将来の拡張
のために仕様δ上きの汲いが異なっている。 なお、未使用領域参照エラーと予約ATEエラーの区別
は、アドレス変換例外(ATRE)か起動された際にス
タックに積まれるエラーコードによって行われる。これ
らのエラーによるアドレス変換例外の起動は、STB、
PTEの値を設定した時に検出されるのではなく、値
を使用する時(アドレス変換の時、つまりメモリアクセ
スを行った時)に検出される。 D=1.LL=00.W=0の機能は、一つの5ect
ion全体を未使用領域としたい場合に利用する機能で
ある。この場合、このSTHに対するPage Tab
leは無い。 LL≠00の機能を利用して小さいサイズの5ecti
onTable、Page Tableを使用する場合
でも、論理アドレス中のSx、PXの位置は変わらない
。したがって、複数のSTEから小さいサイズのPag
e Tableを使用する場合には、有効な論理アドレ
スが飛び飛びの値をとることになる。この様子を第30
5図に示す。 このように、小さいサイズのPage Tableを使
った場合には、有効な論理アドレスが連b4− 領域と
はならないことがある。しかし、STEを1エントリし
か使用しないような小規模な応用のため、あるいは、長
さが半端になった論理空間の最後の部分のテーブルにつ
いて、「テーブル領域の節約」を行なうためにLL≠0
0の機能が容易されているのだと考えると、LL≠00
の時にアドレスが連続しなくても、特に問題はない。 STEでは、D、LLによるアドレス変換例外(ATR
[E)の未使用領域参照エラー、W・O,E・0による
アドレス変換例外(ATRE)のリング保護違反エラー
、PI・0によるページ不在例外(POE)が同時に発
生する可能性があるが、例外の検出順序はこの順とする
。つまり、まず未使用領域かどうかのチエツクを行ない
、次にアクセス権のチエツクを行ない、最後にページ不
在のチエツクを行なう。 これは、PTHの場合も同様である。したがって、ペー
ジ不在の時でも、リング保護関係の情報は有効である。 ただし、この例外検出順序は、一つの段(STEまたは
I’TE)の中での例外検出順序であり、これよりもさ
らにテーブルを引く順序が優先する。つまり1.さたで
発生する例外よりもSTEで発生する例外の方が優先さ
れる。 PTE(Page Table Entry) 第3
06図に示す。 PFN: t’a6e Frame Number対
応するページの先頭物理アドレス 4KBが単位になる。 本本二〇Sが自由に利用できるビット ハードウェア的には意味を持たない R: Referenced このページが参照されたとき、lにセットされる。 M: Modified このページの一部が変更されたとき、■にセットされる
。 RL: Read Level 礼・00リング0のみから読みだし可能RL、01 リ
ングO〜1から読みだし可能RL・10リングO〜2か
ら読みだし可能RL・11 リングθ〜3から読みだし
可能違反した場合はアドレス変換例外(ATRE)のリ
ング保護違反エラーを発生 T: Type T・00 書き込み禁止、実行禁止 T・Ol 書き込み禁止、実行可能 T=10 書き込み可能、実行禁止 T・11 書き込み可能、実行可能 「書き込み可能」の場合は、n+1n(RL、AL)の
リングから書き込み可能、それより外側からは書き込み
禁止となる。 「実行可11ヒ」の場合は、IIIIX(RLIAL)
のリングから実行可能、それより外側からは実行禁止と
なる。 違反した場合はアドレス変換例外(ATRC)のリング
保護違反エラーを発生 AL: Access Level for 1nd
icated type(T≠00の場合) AL・00 リングOのみからアクセス(書き込み、実
行)可能 ^L=01 リングO〜lから“アクセス(占き込み、
実行)可能 AL=IOリングθ〜2からアクセス(書き込み、実行
)可能 AL=ll リングO〜3からアクセス(書き込み、実
行)可能 (T・00の場合) 糺・00リング0−RLから読みだし可能書き込み、実
行は禁止(T、R1,の本来の意味で使用) 糺・01アドレス変換例外(ATRE)の未使用領域参
照エラーを発生 八I、=10 (reserved)ALJI (r
eserved) T・00の場合は、肚によるアクセス可能リングの指定
が必要ないので、ALを別の意味に使っている。このう
ち、A1.・Olの指定による未使用領域参照エラー発
生の機能は、一つのPage全体を未使用領域としたい
場合に利用する機能である。この場合、このPTHに対
する物理ページは存在しない。 NC: Non Cachable NC,1キャッシュへの取り込みの禁止を指定 I10レジスタやVRAMの領域などで、キャッシュへ
の取り込みやメモリ アクセスの順、序の変更が許されな いページの場合に、このビットを セットする。 NC,O通常のページであるたとを指定PI: Pa
ge In PI・Q Pageが物理アドレス上に存在しない。 この場合には、PFNはハードウェ ア的な意味を持たないので、dsに 自由に使用することができる。た だし、Pl・0でもRL、T、^Lなどのフィールドは
有効である。これらの フィールドは、アドレス変換例外 (ATRE)の未使用領域参照エラーやリング保Ra1
5<エラーか、ページ 不在例外(POE)かを区別するため に利用され、例外の検出は前者が 優先される。 つまり、PI・0の時にこのPTEを使ってアドレス変
換を行おうとした 場合、RL、T、ALなとのフィールドにより未使用領
域参照エラーやリ ング保8S違反エラーが検出されれ ばアドレス変換例外(ATRE)が発生し、そうでなけ
ればページ不在例 外(POE)が発生する。 Pl・IPageTが物理アドレス上に存在する。 PI・1であれば、このPTEを使ってアドレス変換を
行なうことが可能 である。 ただし、RL、 T、 ALなどのフィールドにより未
使用領域参照エラーや リング保護違反エラーが検出され た場合には、アドレス変換例外 (ATRE)が発生する。 PFNと論理アドレスのoffsetの間では、有効な
ビットが重なり合うことはないため、アライメントの問
題は発生しない。 PTEのRL、 T、 ALの値と、実際にそれをアク
セス可能なリングとの関係は、具体的には第307図の
ようになる。 図において −ROはringoからのアクセス権、R1はring
lからのアクセス権を示す、 ringo〜ring3
の区別はPS−中のRNGフィールドで示される。 ・Rは読みだし可能、−は書き込み可能、Eは実行可能
を示す。 T・OO,AL≠00の場合、肚が特別な意味を持ち、
第308図のような動作をする。この時、・offse
tの値は関係しない。°このうち、T・00.A1.・
01の場合には、ハードウェアで使用しないPTBのフ
ィールドとRLフィールドを、O3から自由に利用する
ことができる。 T・Olを指定すると、読みだしはできないが実行は可
能であるというページを作ることができる。 これは、プログラムのコピーを禁止し、プログラムの実
行に対する課金メカニズムを導入することを意図したも
のである。 一方、T・00.T・10を指定すると、読みだしゃ書
き込みは可能であるが、実行は禁止であるというページ
を作ることができる。この機能を利用すれば、プログラ
ムカウンタがデータa域に飛び込んで来た場合に、それ
をチエツクしてプログラムの暴走を阻止することができ
る。実行を禁止する機能は、メモリのデータ保護のため
の機能というよりも、デパックのための機能と考えるこ
とができる。 ♂き込みが可能である場合には、からなずJ1コみだし
も可能になっている。 A3−7.64ビートへのム1 SR/llRの切り換えビットを論理アドレスのMSB
に固定すると、64bitへの拡張時に問題が生じる可
能性がある0本発明装置では、論理アドレスを符号付き
の数と考えることるよって、この問題に対処する。 SRとORの双方を32ビツトから64ビツトに拡大す
るためには、アドレス空間が二方向に伸びればよいわけ
である。そこで、アドレスを符号付きの数と考え、UR
領領域正方向にSR’8M域が負方向に伸びると考えれ
ば、この問題は解決される。 具体的には、32−64の拡張に対して、論理アドレス
は符号拡張するようにしておく、メモリマツプは第30
9図のようになる。 あるいは、図の書き換え方をかえて、第310図のよう
になる。 アドレスを符号付きと考えることにより、SR,UR双
方の領域で拡張に対する連続性が保たれる。 その代わり、H’ 80000000におけるOSj+
i域とニー4←゛領域の接点が切られることになるが、
これは問題ないと考えられる。 なお、本発明装置の16ビツト絶対アドレツシングモー
ド(aads:16)で、論理アドレスを符号拡張する
ようになっているのも、アドレスを符号付きとする考え
方を通用したものである。 73のバリエーションとLSIDの゛箭LSIDの機能
は<<L2>>であるため、最初のチップでは実装され
ず、将来のチップで導入される可能性が高い、したがっ
て、最初に出たチップのためのLSIDの機能を利用し
ないプログラムも、将来のLSIDの機能の実装を見越
したものにしておくのが望ましい、かといって、最初の
チ・ノブでも不必要なオーバーヘッドは避けなければな
らない、そこで、こういったLSID (論理空間識別
子)機能の有無やMMt1機能の各種のバリエーション
と、プログラム(O3)の互換性との関係について、検
討を行なう必要がある。 −船釣な話として、MMtl関係の仕様のバリエーショ
ンに対する対応には次の2つの方針がある。 ■互換性を維持するため、実装していない機能であって
も、縮退した機能でそのまま実行する。この場合、性能
は落ちるだけで、オブジェクトレベルの互換性は達成さ
れる。 ■実装していない機能については、EITで検出する。 BIT起動の目的は、まちがいの検出とエミュレーシ
ョンであるが、エミュレーションでは極端な性能の低下
を招く場合があるので、実際問題として、オブジェクト
レベルで変更の必要な場合が多い。 したがって、オブジェクトレベルの互換性は難しいが、
あらかじめそれぞれのバリエーションの仕様が明らかに
なっていれば、ソースレベルで両方の仕様に対応できる
ようなプログラムを書くことは難しくない。 例えば、PSTLB命令の機能を実装しない場合に、P
STLBをPTLBとして実行するのは■の方針であり
、BIT(RIE9とするのは■の方針となる。■か■
かは個別に検討する必要がある。 ・PSTLBの/STオプションについてTLRやキャ
ッシュのインプリメント方式によっては、/STオプシ
ョンの実装が難しい場合がある。しかし、/STオプシ
ョンの指定は、TLBのパージ範囲だけに影響するので
、互換性維持のために■の方針をとる。すなわち、/S
Tオプションの実装が難しい場合には、BITではなく
/AT想到の動作を行なうということにする。 ・LSIDa能の実装トPTLB、 PSTLB(7)
/SS 、t 7’ シ:yンについて PTLB、PSTLBの/SSオブシ曹ンの実装につい
ては、TLBやキャッシュのタグにLSIDの値を含め
ない場合にも、/SSオプションで全パージすることに
より、■の方針に合わせることは可能である。しかし、
LSID制御l!レジスタに値を書き込んだり、それを
読みだしたりすることを考えると、オブジェクトレベル
での完全な互換性を達成するためには、LSID制御レ
ジスタに相当するものを設けておく必要がある。 ところが、互換性の確保だけのためにレジスタを一実装
するのは無駄が多い、また、ハードウェアだけではなく
ソフトウェアに関しても、O3の中でLSIDの操作を
行なう部分は、LSloの機能を活かさなければ無駄な
処理になってしまう、したがって、LSIDのを無につ
いては■の方針をとる。それに合わせて、/SSオプシ
ッンの実装についても■の方針とする。・LSI0機能
の実装とPTLB、 PSTLBの/SSオプションに
ついて PTLB、 PSTLtlの/SSオプションの実装に
ついては、TLBやキャッシュのタグにLSIDO値含
めない場合にも、/SSオプションで全パージすること
により■の方針に合わせることは可能である。しかし、
LsIof#]illレジスタに値を書き込んだり、そ
れを読みだしたりすることを考えると、オブジェクトレ
ベルでの完全な互換性を達成するためには、LS[D制
御レジスタに相当するもおを設けておく必要がある。と
ころが、互換性の確保だけのためにレジスタを一つ実装
するものを設けておく必要がある。 ところが、互換性の確保だけのためにレジスタに関して
も、O3の中でLSIDの操作を行なう部分は、LSI
Dの機能を生かさなければ無駄な処理になってしまう。 したがって、LSIDの有無については■の方針をとる
。それに合わせて、/SSオプションの実装についても
■の方針とする。 具体的なLSID関連の仕様は、次のようになっている
。 −LSIDの機能の有無と/SSオプションの実装の有
無を一対一に対応させる。LSIDのあるプロセッサは
/SSオプションが利用できるし、LSIDのないプロ
セッサは/SSオプションを利用できない。 −1,SIDのあるプロセッサは、LSIDのないプロ
セッサに対してオブジェクトレベルで完全上位互換とす
る。つまり、1.sInのないプロセッサのために書か
れたO3は、LSIDのあるプロセッサの上でもそのま
マ’j)J <。 ただし、LSIDの機能は生かすことができない。 −LSIDのあるプロセッサのために書かれ、LSID
の機能を生かすようなO3は、LSIDのないプロセッ
サでは動かない場合がある。 具体的には、LSID制御レジスタの際に予約機能例外
(RFE)が発生したり、/SSオプションを指定した
命令を実行した際に予約命令例外(1?lE)が発生し
たりすることになる。 また、開U関連の命令におけるLSID関係の仕様は、
次のようになっている。 −LSIDのでは、LSIDのないときPSTLB/A
S/ATauraddr相当の動作を行なう。また、L
SID実装時は、その機能を生かすため、LDCTXで
TLB;キャッシュのパージは行わない。 LSID実装時は、TLBやキャッシュのタグ部分にL
SIDまで含まれているので、 LDCTXによりLS
IDが変更されると、LDCTX実行前の論理空間でヒ
ントしていたエントリがLDCTX実行後の新しい論理
空間ではヒツトしなくなる。ヒツトしなくても、新しい
エントリのロードに伴ってリプレースされない限りパー
ジはされないので、再びLDCTXが実行されて以前の
論理空間に戻った場合には、そのエントリがそのまま有
効になる。 (LDCTXでキャッシュやTLBをパー
ジしていたのでは、LSIDの意味がなくなってしまう
。) −しDATE/PTでは、LS([1のない時PSTL
B/As/PT相当の動作を行なう。LSID実装時、
prgaadrがSRであればI’5TLB/AS/P
T相当の動作を行ない、prgaddrがORであれば
PSTLB/SS/PT(LSIローoITAG=RO
)相当の動作を行なうe prgaadrがSRかUR
かで動作が異なっているように見えるが、これ:=LD
ATEの問題ではあ< 、PSTLBの動作がtlRと
SRで異なっているためである。L D A T E命
令自体の動作は、ATEの変更に伴って影亡を受けるT
LBやキャッシュをパージする、ということで−貫して
いる。 −LDATIE/STテは、[,5ID(7)ない時P
STLB/AS/I’T相当の動作を行なう。LSID
実装時、prgaddrがSRであればr’5TLB/
^S/PT相当の動作を行ない、prgaddrがtl
RであればPSTLB/SS/5T(LSID−of−
TAG=RO)相当の動作を行なう、 (/PTと同様
) −LDC命令でUATB、 5ATBを変更した場合は
、仮想的な命令LDATE/ATを実行したと考えれば
良< 、LDATE/PT、LDATE/STと同様の
動作を行なう。すなわち、LSIDのない時、5ATB
を変更した場合にはPSTLB/AS/AT(prga
ddr=SR)相当の動作を行ない、[IATBを変更
した場合にはPSTLB/AS/AT (prgadd
r・OR)相当の動作を行なう。LSID実装時、5A
TVを変更した場合にはPSTLB/AS/AT(pr
gaddr=SR)相当の動作を行ない、UATBを変
更した場合にはPSTLB/SS/AT(LSID−o
f4AG=LSID、 prgaddr=UR)相当の
動作を行なう。 ・ 4. ■ −jとZう盈」L化各命令のフ
ラグ変化の表記法は、以下の通りとする。 −変化なし 十 本来のフラグの意味に合わせて変化する 木 本来のフラグの意味とは異なった変化をする 0 0にクリアされる l 1にセットされる 第311図に示す。 A4−3. −Δ 第313図に示す。 ^DDX、5UBXのX−flagは、destのサイ
ズからの桁上げ、桁下げを示す。5UBXでsrcとd
estのサイズが等しい場合、XJIagは符号なし演
算としての大小関係といった意味にもなる。 一方、Ljlagの方は符号付き演算としての大小関係
を表わす。 MtJL、MULU、MULX、DIV、DIVU、D
IVX、REM、REMU、 NEGの町flag、Z
−flagは、オーバーフローの発生にかかわらずde
st設定値が基準である。 MULX、DIVXの道flag、Z−flagは、r
eg設定値には関係しない。 旧■のVJIagは、0除算または(最小負数)÷(−
1)の時にセットされる。 旧vUのVJlagは0除算の時にセットされる。 DIVXのV−flagは、0除算または商がdest
のサイズに入らない時にセットされる。 NEGのVJlagは、destが最小負数であった時
にセットされる。 INDEXの町flag、ZJIagは、Xreg設定
値(結果の一部)が基準である。 LJlagは結果が
負であること、VJIagは、乗算または加算でのオー
バーフローを示す。 A4−4. tA理・ 。Δ 第314図に示す。 NOTの町f lag、ZJ lagは、dest設定
値(反転結果)が基準である。 M−flag、Z−flagはdes を設定値(シフ
ト結果)が基準である。 X−flagは最後にシフトアウトされた値が入る。 SHA、SIL、ROTでcount#f Oの場合に
は、X−flag=oとなる。 SHAでは、count> 0で符号の変化があった場
合にのみVJ lag=1.それ以外の場合はVjla
g:0゜ 第316図に示す。 固定長ビットフィールド命令では、BFCMP、BFC
MPUがCMP、CMPUに準じたフラグ変化をし、そ
れ以外の命令がMOV 、MOVUに準じたフラグ変化
をする。 8FINS、BFINS(J(7)場合、第318図(
DBBBB888Bがフラグ変化の基準となる。 また、BFEXT、BFEXTUテは、抽出されたビッ
トフィールドではなく、デスティネーションに設定され
る値を基準としてフラグ変化する。これは、MOV命令
などにおいて、デスティネーション側に設定された値を
基準としてフラグ変化するのに合わせたものである。 第319図に示す。 BCD数は符号拡張が無意味なので、基本的に符号なし
の数を扱うものと考え、ADDU、5ueuに準じたフ
ラグ変化とする。なお、AD()X、StJ[3Xは、
符号なし、符号付きの両方の数を扱うため、多少変則的
なフラグ変化になっており、ADDU、ADDDX、S
t、IBU、5UBDXとは異なったフラグ変化である
。 本発明装置ではlO進演算はサポートしない。 5M0V、SCMP、5SCHのF−flagは、終了
条件による終了(5SCHの場合はサーチ成功)を示す
。 Vjlagは、エレメント数によって命令を終了した場
合を示す。 M−flagは、複数の終了条件を区別するために用い
る。R3に関係する条件で終了した場合には0、それ以
外の0またはR4の関係で終了した場合(<<L2>>
のみ)には1となる。 SCMPのX−flag、L−flag、Z−flag
は、最終エレメントの比較結果を基準としてセットされ
る。 XJIagはエレメントを符号なしデータと考えた時の
大小、LJIagはエレメントを符号付きデータと考え
た時の大小を示す。 QINSのZ−flagは、空のキューに挿入したこと
を示す。 QDELのZJlagは、エントリの削除の結果キュー
が空になフたことを示す。また、QDELのV−fla
gは、空のキューからエントリを削除しようとしたこと
を示す。 QSCIIのF−flagは、終了条件による終了(サ
ーチ成功)を示す。 V−flagは、キュー終了圃R2による終了(サーチ
失敗)を示す。 町flagは、複数の終了条件を区別するために用いる
。R3に関係する条件で終了した場合には0、それ以外
の0またはR4の関係で終了した場合(<<L2>>の
み)には1となる。 A4−12.ジン 第323図に示す。 ジャンプ関係の命令では、フラグは全く変化しない。 第324図に示す。 A4−14. ■ ’ n−n
o−第326図に示す。 LDCでdestにPSWを指定した場合には、全フラ
グが変化する。 A4−15. O5’ n A 第326図に示す。 本発明装置ではJRNG、RRNGはサポートしなA4
−16.MMU ’ jA 第327図に示す。 AC5命令のMJIagはread可、L−f lag
はexucute可、ZJIagはwrite可を示す
。MOVPAのVjlagは、ページフォールトまたは
エラーにより物理アドレスが得られなかったことを示す
。FJIagは、ページフォールトを示す。 LDATE、5TATEのVJlagは、ページフォー
ルトまたはエラーによりATEの転送ができなかったこ
とを示す。 本発明装置ではAC5命令以外のMMU関連命令をサポ
ートしない。 (以 下 l、パ余 −;、白) 又−、、−、に− S 5. jの′ につい本発明装置では
、異なるバイト数の整数の間で各種の演算を行なうこと
ができ、これを「異種サイズ間の演算」と呼んでいる。 「異なるサイズ」といっても、現在は整数のみを対象と
しているため、データサイズの変換はゼロ拡張または符
号拡張のみの簡単な処理で済む。例えば、32ビツトの
整数に8ビツトの符号付き整数を加える場合、8ビツト
整数の符号ピッ) (MSB)を上位ビットにまで拡張
してから加算を行なうわけである。符号拡張処理はゲー
ト1〜2段で可能なので、一般の加算命令と比べてそれ
ほど複雑なわけではない。 A3−1、 サ ズμのゞ の 異種サイズ間の演算は、次のような場合によく使用する
。 ■オペランドの一方がイミディエート値の時変数と定数
の演算を行なう場合、定数のサイズはコンパイル時にわ
かるため、定数の方を小さいサイズとして扱えば、命令
長を減らすのに効果がある。例えば、32ビツトレジス
タに8ビツト定数の100を加える場合、32ビツトの
加算命令を使うと定数100を指定するのにも32ビツ
トのフィールドが必要である。しかし、32ビツトに8
ビツトを加算する命令を使えば、定数100を指定する
フィールドが8ビツトで済むため、命令が短くなる。 さらに、乗除算の場合には、命令長だけではなく性能面
でも影響がある。マイクロプロセッサでは32〜64ビ
ツトの並列乗算器を持つのは苦しいので、どうしても加
算とシフトで乗算を行なうことになるが、乗算の計算瓜
は、2つのオペランドサイズの積に比例して多くなるた
め、2つのオペランドのうちの一方だけでもサイズの小
さい方が有利である。異種サイズ間演算の機能がない場
合には、例えば、32ビツトの変数に3を掛けるだけで
も32ビツトネ32ビツトの乗算を行なわなければなら
ない。 ■アドレス計算 アドレスの計算では、演算のデスティネーションのサイ
ズをアドレス幅と同じにする必要がある。したがフて、
32ビツトプロセツサの場合、32ビツトと他のサイズ
との演算をよく行なう。例えば、文字の変換テーブルな
どにおいて、テーブルのインデクスの範囲が8ビツトに
おさまる場合、インデクスとベースアドレスとの加算は
、8ビット符号なし整数と32ビツト整数との加算とし
て実現される。 (以 下・、′牟−・・白) −I、+ ■高級言語 一般に、高級言語では、サブルーチンパラメータのサイ
ズを必ずマシンの基本サイズ(例えば32ビツト)に拡
張することが多い。これは、スタックを使フてサブルー
チンパラメータの受は渡しをするため、また分割コンパ
イル等を容易にするためである。さらに、言語Cのよう
に、式の中の変数のデータサイズにかかわらず、式の評
価は必ずマシンの基本サイズで行なうという場合もある
。一方、メモリ上の変数、特に配列では、メモリ領域の
節約のため、必要最小限のサイズとするのが普通である
。したがって、配列とサブルーチンを同時に使用するプ
ログラムでは、データの移動中または演算処理の途中の
どこかでサイズの変換を行なわなければならない場合が
出てくる。式の評価とサイズの変換を同時に行なうため
には、本発明装置のような異種サイズ間の演算が便利で
ある。 A3−2.Hにする 本発明装置では、異種サイズ間の演算をサポートするた
め、データサイズの指定に関する直交性が非常に強くな
っており、2オペランド−膜形(G−format)の
基本演算命令のほとんどで異種サイズ間の演算が可能で
ある。つまり、2オペランド−膜形の基本演算命令では
、ソースのサイズとディスティネーションのサイズが独
立に指定でき、必要に応じて符号拡張、ゼロ拡張、上位
ビットの切り捨て、などを行なうようになっている。デ
スティネーションのサイズがソースのサイズより小さい
場合にも演算は実行され、デスティネーションのサイズ
に従ってオーバーフローが検出される。 以下に、各命令における異種サイズ間演算の実際例を述
べる。 B: Byte 8ビツトH二)lalf
word 16ビyトW: Word
32ビツトMOV src、B、dest、W8
ビットのsrcを32ビツトに符号拡張してdestに
転送。 MOV src、W、dest、B srcの下位8ビツトをdestに転送。 32ビット符号付き整数としての srcの値と、8ビット符号付き整数 としてのdestO値が異なる時は、 オーバーフローとなる。 ADD src、B、dest、W 8ビットのsrcを32ビツトに符号拡張してdes
tに加算。 ADD src、讐、dest、B des tにセットされる値は、srcの下位8ビツト
をdestに加算したも のと同じである。しかし、命令の 意味としては、src (32ビツト)とdest (
8ビツトを32ビツトに符号拡張)を加算し、それを8
ビツト 符号付き整数に変換してdes tに格納するというこ
とである。したが フて、32ビツトの和がdestの8ビツトで表現でき
ない値になった時 は、オーバーフローとなる。 本発明装置では、ソースとデスティネーションのデータ
サイズが異なる場合に、通常符号拡張を行なう。ただし
、特にゼロ拡張も必要と考エラれる命令(MOV、CM
P、ADD、St、18)については、ゼロ拡張と符号
拡張を命令レベルで切り分け、MOVU、CMPU、A
DDU、5UBU命令としている。 MOVU、CMPU、ADDU、5UBU <加え1”
MULU、DIVU) テは、デスティネーションのサ
イズがソースのサイズよりも大きい時にゼロ拡張を行な
い、結果を符号なし整数と考えてオーバーフローの検出
をする。 A3−3. サ −の“ 論理演算の場合は各ビットが全く独立なので、異種サイ
ズ間の演算は意味がないしくフラグの変化を除けば、小
さい方のサイズで行なうのと同等)、論理演算のオペラ
ンドに対するゼロ拡張や符号拡張もほとんど意味を持た
ない。 しかし、例えばCで次のような関数を書いた場合には、
意味はなくても 符号拡張→論理演算 というオペレーションを実行しなければならないことが
ある。 foo(X 5hort 1nt16; /ネ16ビツト符号付き整数*1 int 1nt32; /*32ビット符号付き整数ネ/ 1nt32 &= 1nt16; /、t 1nt16は符号拡張されるネ/ただ、このよ
うな例は、言語としての規則性や対称性のためにそう決
まっているだけであり、一部のトリツキ−なプログラム
を除けばほとんど使わない機能であると言える。 論理演算の異種サイズ開演罪をサポートするかどうかに
ついて、問題点をまとめると以下のようになる。 ■実行時 異種サイズ間の論理演算は、頻度とし ては非常に少なく、論理的な意味も持 たない。本質的に他の命令で代用でき るか、あるいはトリツキ−なプログラ ムでしか使わない。 ■コンパイル時 C言語では、論理演算でもゼロ拡張や 符号拡張が必要になることがある。あ まり使わない機能であっても、コンパ イラとしては必ず正しいコードを出す 必要がある。命令の対称性が重要。 ■チップのインプリメント 符号拡張/ゼロ拡張の区別が全命令で 統一的に行なわれていれば、インプリ メントの規則性の面から、論理演算で もゼロ拡張や符号拡張を導入するメリ ットがある。しかし、そのためには命 令の割り当てに多くのビットパターン が必要となり、命令のエンコーディン グが苦しくなフてしまう。現実的には、論理演算を含む
全命令で符号拡張/ゼ ロ拡張の区別を行なうことはできず、 論理演算の符号拡張やゼロ拡張に対し てインプリメントの規則性の面からの メリットは得られない。また、この部 分はメーカー間で見解の異なる可能性 もあるため、仕様を合わせるのが難し い。 結局、以上の中で■と■のどちらを重視するかというこ
とになるが、実質的な性能向上をねらうのであれば、や
はり■を選択するのが適当と考えている。つまり、 ・異種サイズ間の論理演算のように、実行する意味の少
ない演算が足を引っ張ることによフて、性能向上がはば
まれるのはよくな・■の問題に関しては、符号拡張を含
む異種サイズ間の論理演算は頻度の少ない演算であるか
ら、多少実行速度が落ちてもよい。 例えば、 AND src、B、dest、Wsrcを符号拡
張 の代わりに MOV src、B、@−5P、Wsrcを符号拡
張 AND @SP÷、W、dest、Wとすれば、多
少実行速度は落ちるが、符号拡張〜演算命令の統一的な
置き換えが可能である。こうすれば、コンパイラの負担
はそれほど増えない。 したがって、本発明装置の仕様としては、異種サイズ間
の論理演算をサポートしていない。 異種サイズ間の論理演算に相当する命令ビットパターン
を実行した場合には、動作を保証しないということにな
フている。 AFr4 jの 本発明装置でサポートする命令と、整数のデータタイプ
との関係をまとめると、次のようになる。 ψ8.IS、32.84ビット長の整数をサポートする
。 ・符号付きの整数を優先してサポートする。 ・符号付き整数の算術演算に関しては、2オペランド命
令において異種サイズ間の演算がサポートされている。 ソースのサイズとディスティネーションのサイズは完全
に独立に指定でき、サイズの制限はない。ソースの方が
サイズが小さい場合は、符号拡張される。結果は符号付
き!!数として扱われ、それに従ってフラグ類がセット
される。 ・符号なし整数の演算は、一部の命令(MOV、CMP
、ADD、SUB、MUL、DIM)でのみサポートさ
れている。サイズに関してはやはりソースのサイズとデ
ィスティネーションのサイズが完全に独立に指定できる
。ソースの方がサイズが小さい場合は、ゼロ拡張される
。結果は符号なし整数として扱われ、それに従ってフラ
グ類がセットされる。 ・符号付きの整数と符号なしの!!数の混在した演算は
できない。ただし、加算命令などの場合は、デスティネ
ーションの符号の有無はフラグに影響するだけなので、
フラグを見ないのであれば八DDまたはADDUで代用
できる。 ・異種サイズ間の論理演算はサポートしない。 (以 下 通5オ1、白) ・ 6. 1oき ルー ゝコール高級言語におけ
るサブルーチンコールでは、単なるリターンアドレスの
退避だけではなく、フレームポインタの設定、ローカル
変数の領域の確保、汎用レジスタの退避といった処理も
必要である。これらの処理はJSR,STMなどの命令
に分解することも可能であるが、頻度が多いこと、処理
が定型的であることにより、一つの命令(ENTER、
EX ITD)としてまとめられている。 AS−1,II ’tでのす゛ルー ンコール高級言
詔(特にC,PASCAL)のサブルーチンコールでは
、普通第328図のような処理を行なう。 本発明装置では、高級言語用サブルーチン命令ENTE
Rとリターン命令EXITDを設けている。 いくつか注意する点を述べる。 ・FP (フレームポインタ)とデイスプレィレジスタ PASCALのようにスタティックスコープがある言語
では、中間レベル(ローカル変数とグローバル変数の中
間のレベル)の変数のアクセスにデイスプレィレジスタ
を用いる。本発明装置のようにレジスタの多いプロセッ
サでは、汎用レジスタ上にこのデイスプレィレジスタを
置くのが有効である。これは、複数のFPを持つことに
相当する。 (実現方法は後述) 中パラメータ パラメータを渡すには、パケットにしてその先頭アドレ
スをレジスタ等で渡す方法、パラメータをスタックに積
む方法、等があり、高級言語では後者の方が一般的であ
る。呼ばれたサブルーチンの側でスタック上のパラメー
タをアクセスするにはFP相対のモードを使うことが多
い。 サブルーチン実行後には、呼んだ側でスタック上のパラ
メータを解放する必要がある。言語によフて、また分割
コンパイルをしなければ、呼ばれた側で正確なパラメー
タ数がわかっているので、リターン命令の中で解放する
パラメータ数(SPへの加算値)を指定することができ
る。 本発明装置では、この目的でEXITD命令を設けてい
る。パラメータ数が動的に決まる場合もあるので(例え
ば、パラメータ数をサブルーチンに知らせるために、特
定のレジスタやスタックを使う場合など)、EXITD
命令におけるSPへの加算値としては、イミディエート
値だけではなくレジスタ上の値を使用することもできる
。 しかし、言語Cのようにサブルーチンのパラメータの個
数が確定しない言語では、サブルーチンを呼ばれた側か
らは、サブルーチンを呼ぶ側で決めたパラメータの個数
がわからない。したがって、呼ばれた側で実行するEX
I TD命令では、解放するパラメータの個数を指定
できない。その場合には、サブルーチンを呼んだ側でA
DD #n、SPを行なってパラメータを解放する。 結局、本発明装置のEGI T E R命令では前の図
の2.〜4、の処理、EXITO命令では5.〜7.の
処理、または5〜8の処理(ただし、8.で解放するパ
ラメータ数はサブルーチン側で指定)を行なうことにな
る。1.はJSRと同じ処理になり、8.はサブルーチ
ンを呼んだ側でADD *ネネ、SPを行なう。 本発明装置における高級言語でのスタックフレ−ムは、
第329図のようになる。 111ocal variablesとparamet
ersがなるべくFPから近い配慮となるように、ロー
カル変数確保よりレジスタセーブを後にした。 ・EXITO命令にはPCのりストア(RTS)の操作
まで含めている。 、Δぐ、 ′ の 恒 (サブルーチン側でパラメータ数がわからない場合) 第330図に示す。 (サブルーチン側でパラメータ数がわかる場合) 第331図に示す。 AS−2,口・・ 9置のた の−し しiスj」8
創叉刑 ENTER−EXITOで処理するFPレジスタをダイ
ナミックリンクとして利用するためには、内側のブロッ
ク(最高のレキシカルレベル)に対するフレームポイン
タにFPレジスタを割り当てるのがよい。 その他のレキシカルレベルのフレームポインタには、値
の変化の少ない順にR13,R12゜R11,、、を使
う。つまり、レキシカルレベルの高い内側のブロックへ
行くにしたがフて番号の小さいレジスタを使い、最小番
号のレジスタの内容をFPと同じにする。 各サブルーチンでは、ENTER命令実行後、FPを自
分のレキシカルレベルに対応したフレームポインタ用レ
ジスタにコピーし、その番号以上のレジスタをデイスプ
レィレジスタとして、その番号以下のレジスタを評価用
として利用すればよい。ただし、新しく書き換えたレジ
スタは必ず退避して値を保存しなければならない。 第332図に示す。 * proco*、varOネ procoであるが、再帰呼び出しのため、最初のρr
ocOとは異なったフレームになっている。 ・FPのコピーにより破壊するレジスタは、コピー前に
すべてENTER命令で退避しなければならない。レジ
スタを 退避しておけば、サブルーチンの実 行が終って一つ前の関数に戻った時、 レキシカルレベルの大小にかかわら ずデイスプレィはもとの値に戻る。 上の例では、レジスタの使い方につい て次のような関係が成立する。 レキシカルレベルnのサブルーチン実行に関して ■R13,,R13−n+1のn個のレジスタはデイス
プレィレジスタとして参照の みを行ない、書き込みはしない。 ■R13−nのレジスタは、このレベルのローカル変数
のデイスプレィとし て使用するため、ENTER実行後FPからコピーする
。゛このデイスプレィ は、このサブルーチン実行中にさ らに高いレベルのサブルーチンを 呼んだ時に、呼ばれたサブルーチ ンからこのレベルの変数をアクセ スするために使用する。このサブ ルーチンからこのレベルの変数を アクセスするには、同じ内容であ るFPを使うのが良い。 ■R13−n−1..ROの(13−n)個のレジスタ
は、レジスタ変数や評価用として 利用する。 ■R13−nのレジスタとR13−n−1,、ROのう
ちで使用するレジスタは、必ず ENTER命令で退避する必要がある。 全部のレジスタが保存されなけれ ばならない。 ゛ 7・ ′ し9 ′ エ制御レジスタ
関係の仕様は、チップバス(コプロセッサやキャッシュ
、TLBなどに接続されるバス)やインプリメント方法
との関係が深いため、<<LA>>仕様となっている。 A7−1.′ ロの r本発明装置」では、チップバス上のメインプロセッサ
やコプロセッサに含まれるすべてのレジスタ、MMUや
キャッシュ、TLBなどの制御レジスタ、およびチップ
バス上に接続されたコンテキストスイッチ用高速メモリ
に一意的なアドレスを付け、これを制御空間と呼ぶ、「
本発明装置」の制御空間は、従来のプロセッサに見られ
たコプロセッサ用のアドレス空間(Coprocess
or−IDなど)をメインプロセッサの制御レジスタの
アドレスと統合化、−膜化したものであり、次のような
特徴を持つ。 ・ r本発明装置」の制御空間には次のようなものが含
まれる。 メインプロセッサの制御レジスタ PSW、各リングのスタックポインタ など MMtJ関係の制御レジスタ(「本発明装置」はMMU
を内蔵しない) UAT8,5AT8など インプリメントに依存して必要となる レジスタ [コプロセッサの制御レジスタ] [コンテキスト退避用の高速メモリ] 将来チップに内蔵することを狙っ たもの [プロセッサ内の汎用レジスタ、テン ボラリレジスタコ 外部からの診断、デバッグの目的 ・制御空間は、コンテキスト(プロセスやタスク)間で
共通の空間である。制御空間のアクセスはアドレス変換
を伴わないため、単純化されたプロトコルで高速のアク
セスが可能である。この機能は、特に高速コンテキスト
スイッチでも利用される。 制御空間の考え方は、将来、コプロセッサやコンテキス
ト退避用−メモリがメインプロセッサに内蔵された時に
、特に有効になると考えられる。 しかし、最初のバージョンのチップでは、インプリメン
トの制約上、あるいはチップバスの構成上、制御空間の
操作を統一的に行なうのが難しい場合があるので、将来
に備えてアドレスの割り当てのみを決めておき、制御空
間操作命令はいくつかの制限を付けて使用してもよいと
いうことにする。 具体的には、次のような制限が付く。 ・プロセッサの診断用の目的で、 RO〜R15やPC
にも制御空間のアドレスが割り当てられているが、これ
は<<L2)>であり、 r本発明装置」では実装しな
い。 ・LDC、STCは、本来メインプロセッサ内の制御レ
ジスタ、FPUの制御レジスタ、 コンテキスト退避用メモリなどを統一的にアクセスする
ことを狙フたものである。しかし、r本発明装置」では
インプリメントの制限により、メインプロセッサ内の制
御レジスタ以外(実効アドレスH’0〜N’07ff以
外)のものについては、LDC,STCでアクセスでき
ない。 ・「本発明装置」の制御空間のアドレスでは、バイトア
クセス、ハーフワードアクセスが利用できない。また、
ワードアクセスにおいてアライメントが強制される。 ・コンテキスト退避用メモリは、制御レジスタを置く領
域(H′0〜)と重ねることはできない。コンテキスト
退避用メモリとしては、H’ffff8000〜H’f
fff ffffのアドレスが割り当てられている(
さらに拡張領域としてH’ 80000000 〜)の
で、H’ 80000000− H’ fffffff
f以外の値をCTXBBCZ設定しテLDCTX/C5
,5TCTX/C5を実行した場合には、エラーとする
。また、LDCTX/C5,5TCTX/C3(7)
機能01本も<<L2>>となっている。 ・「本発明装置」ではLDCTX/C5,5TCTX/
C5をサポートしない。 □ :必須の仕様<<Ll>> 一−−−−ニアドレス割り当てのみ<<L2>>第33
4図に示す制御空間では、バイトアクセス、ハーフワー
ドアクセスができないのにもかかわらず、バイトアドレ
ッシングとなっている。これは、一般の命令で利用され
る論理空間と同じように、制御空間でも汎用アドレッシ
ングによる実行アドレス指定が可能であり、論理空間と
同じ形のバイトアドレッシングにしておかないと、混乱
を招くからである。また、制御空間で汎用アドレッシン
グを利用可能としたのは、制御空間をコンテキスト退避
に利用することを考えたためである。 LDC,STCでメインプロセッサ内の制御レジスタし
かアクセスできない場合には、バイト・アドレッシング
とした意味がなくなってしまい、多少不自然な仕様にな
る。しかし、その背景には上記のような将来的な見通し
があり、−部の機能のみを実現した場合に多少不自然に
見えるのはやむを得ない。 A7−2.′ ロセ・・ の ′ し9制御レジスタ
のニモニックとアドレスについては、次のようになる。 制御レジスタのアト 。 レスが80+4の位置にあるのは、レジスタを64ビツ
トに拡張することを考慮したためである。 o’oooo〜H’03ff メインプロセッサ、M
MU(TRON reserve) H’0400〜H’07ff メインプロセッサ、M
MU <<LV>> )!’0800〜H’0bff FPU(TRON
reserve))1’0cOO−H’0fff
FPU<<LV>>ネはコンテキスト毎に別々に用意さ れるレジスタ /は必ずしも実装(アドレス割り当 て)をしなくても良いレジスタ アドレス レジスタ H’ 0000 reserve」 )1 ’ 0004 ネ
PSすH’0O0B
reserved H’000c (ネ) S
MRNGt(’0010 r
eserveH’0014 (ネ)
IMASにH’0018
reserveH’0O1c
reserveH’0020
reserved−EITVB)l H’0024 EITVBH
’0028 reserve
d−JRNGVBH H’ 002c r本発明装置」rese
rved −−JRNGVBH’0030
reserved−CTXBBH H’0034 * CTXBB
11’0038 reser
ve)1’003c res
erveH’0040 re
served−5ATBH H’ 0044 r本発明装置」eser
ved −−5AT8 H’0048 reserved−U
ATB)I H’ 004c ネ 「本発明装置」res
erved −−UATB )1’0050 reserveH
’ 0054 零 「本発明装置」rese
rved −−LSID H’0058 reserve)1
’o05c reserve1(’
0060 reserved
−10ADDRH 1(’0064 / l0AD
DR11’0068 res
erved−10MAsK)I H’006c / IOMAs
KH’0060〜H’007f rese
rveH’0080 res
erveH″0084 (ネ)「本発明装置」
reserved −−DCE )1’o088 reserve1
(’008c DI)1’0090
reserveH’ 0094
′ネ 「本発明装置」reserved −−
C3W H’0098 reserve
H’ 009c (ネ)r本発明装置」res
erved −−CTXBFM)1’00aO〜H’
0Off reserveH’0100
reserve−5PIH H’0104 5PI)1’0
108〜H’011f reserveH
’012f) reserve
−5POH H’0124 * 5POH’
0128 reserve−5
PIH N’012c ネ 「本発明装置」rese
rved −−5PI fl’0130 reserved−
SP2H H’0134 * r本発明装置」res
erved −−5P2 H’0138 reserve
d−5P3H H’013c * 5P3H’0
140〜)l’o17f reserve
d H’0180 reserv
ed−ROH H’0184 番 r本発明装置」rese
rved−RO H’0188 reserv
ed−RIH H’018c ネ 「本発明!!置」res
erved −−RI H’01eOreserve d−R12H H’01e4 *r本発明装置」reser
ved −−R12 f(’01e8 reser
ved−R13H H’01ec * r本発明装置」res
erved −−R13 11’o1fOreserve d−R14)1 11’o1f4 * r本発明装置」re
served −−R14 H’01f8 reserv
ed−PCI+ H’0ffc t r本発明装置Jres
erved −−PC I’0200〜)l’03ff rese
rved (H’0400〜)l’07ff
<<ll/>>H’0410 8
8C)1’0414 8BP)1
’0500 9BCH’052
0 XBPOH’0524
XBPIH’0540
08POH’0544
0BPIA7−3.1′ レジ の
ビ・・制御レジスタのうち、使用していないビットにつ
いては、lを書き込んだ場合にそれをチエツクしてEI
Tとするのが望ましい。しかし、中途半端なチエツクを
行なうと、互換性(特に下位チップとの互換性)を保つ
のが難しくなること、チエツクのためにオーバーヘッド
が生じること、により、PS%/を除いて未使用ビット
のチエツクt、を行なわないことにする。 CTXBFMなど<<L2>>の機能を持つレジスタに
ついても、<<12>>が実装されていない場合にはエ
ラーチエツクが行なわれないし、書き込んだ値がそのま
ま読み出されるとは限らない。 ただし、チエツクが行なわれていなくても、空きビット
には必ず′0′を入れてもらうように、マニュアル等で
指導する必要がある。 PSWについては、未使用のビット′−2に′1′を書
き込もうとした場合に、予約機能例外(RFE)とする
。 以下の制御レジスタの内容の説明における2−j、l=
j、J、jのビットの意味は次のとおりである。 ′−20にreserved (違反時例外発生)1+
21にreserved (違反時例外発生)このビッ
トに0(1)を書き込むこと は可能であるが、このビットに1(0)を書き込もうと
するとLDC,LDCTXなどで予約機能例外(RFC
)を発生する。 ゝ=10にreserved (違反時も無視)′#′
1にreserved (違反時も無視)このビット
は0(1)を書き込むべき ビットであるが、このビットに1 (0)を書き込もうとしても単に無 視され、このビットに0(1)を書き 込んでも1(0)を書き込んでも動作 は同じである。 ユーザへのマニュアルには、将来 の拡張のためこのビットに0(1)を 書き込むように明記する。 ′*ゝ 書き込み時の値は自由。 ハードウェアの動作はj=j、Illと同じであり、ど
のような値が書き 込まれても単に無視する。ただし、 このビットは)=Zjlltとは異なり、将来チップの
機能が拡張された場 合にも使用しないビットである。 したがって、ユーザが自由な値を 書き込んでも構わない。ユーザへ のマニュアルの中でも、このピッ トは無視されるということを明記 し、ビットのマスク処理などは省 いてもらうようにする。 ・IMASK、SMRNG、DI 、DCE、CTXB
FMでは、未使用のビットが′零′になっている。PS
Wでは、未使用のビットが2−9になっている。それ以
外の制御レジスタでは、 未使用のビットは2=1で
ある。 ・PSB 、 PSMの未使用フィールドも′−2であ
る。 したがって、LDPSB、LDPSMでも予 約機能例
外(RFE)が発生する。 ・−ゝのビットの読みだした場合には、20′が読み出
される。l=?、lネゝのビット を読みだした場合に
得られる値は不定である。前に書き込んだ値がそのま
ま読み出されるとも限らない。 A7−1′ しぐ の 已y 第335図に示す Processor 5tatus Word内容につ
いては本文を参照。 匹ルヱ刹 PSWのうち、ユーザのアクセス可能な下位の2バイト
のみを抜き出したもの。LDPSB、LDPSM、5T
PSB、STPSM命令によッテアクセスする。制御レ
ジスタのうち、PSB 、 PSMのみがringo以
外からアクセスできる。 」人江 第336図に示す PS%/のうち、個別にアクセスすることの多いIMA
Sにのフィールドを抜き出して別レジスタとしたもので
ある。IMASKの操作を容易にすることと、性能向上
を狙ったものである。IMAsK以外のフィールドには
、何を書き込んでも単に無視される。 S闇に 第337図に示す PSvのうち、個別にアクセスすることの多いSMRN
Gのフィールドを抜き出して別レジスタとしたものであ
る。SM 、 RNGの操作を容易にすることと、性能
向上を狙ったものである。 SMRNG以外のフィール
ドには、何を書き込んでも単に無視される。 口I坦 第338図に示す Context Block Ba5eCTX8のベー
スアドレスを指すレジスタ。LDCTX 、 5TCT
X命令で使用される。 CTXBBはr本発明装置」64への拡張を考え、r本
発明装置」32でも8バイトのアライメントを強制して
いる。したがって、CTXBBの下位3ビツトは′==
=2となる。つまり、0にreservedであるが、
違反時にも無視される。 DI Dela ed Interru を第3
39図に示す DI(Delayed Interrupt)要求を示
すレジスタ。 DI=OOOO優先度Oの外部割り込み(NMI)処理
後の01要求 DI=0001 優先度1の外部割り込み処理後のD
I要求 DI=0010 優先度2の外部割り込み処理後の0
1要求 o+=ttto 優先度15の外部割り込み処理後の
01要求 DI=1111 DI要求なし DI(Delayed Interrupt)は、ソフ
トウェアによって外部割り込みを発生させるメカニズム
であり、非同期に発生する各種の処理要求をベンディン
グとしたい時や処理順序をシリアライズしたい時に有効
である。優先度の高い外部割り込みの処理が終わった後
で別に起動したい処理がある場合、その要求をDlに登
録しておくことによって自動的に処理が起動される。 Dlは、外部割り込みに対してDCEと同等の処理を行
なうものである。REIT命令などによってPS%II
の団ASKが変化した場合に、01<IMASKであれ
ばD10EIT処理が起動される。 このレジスタのDI以外のフィールドに何を書き込んで
も単に無視される。 膿 第340図に示す Context 5tatus Wordこのレジスタ
は、コンテキスト毎に切り換えの必要な情報のうち、ネ
ストの行なわれないものを集めたものである。DCE(
Delayed Context Exception
)要求を示すDCEフィールドと、CTXBのフォーマ
ットを示すCTXBFMのフィールドから成る。CTX
BFMの機能は付録8を参照のこと。 CTXBFMの機能がインプリメントされない場合には
、DCEレジスタとC5Wレジスタが全く同じ情報を扱
うことになるので、C3lllレジスタもインプリメン
トされない(アクセス時RFE)場合がある。この時、
CTXBに置かれるのは、形式的にはC5Wレジスタ
であるが、実際はDCEレジスタとなる。 C5WとDCE、CTXBFM(7)関係は、PSWと
IMASK。 SMRNGの関係に同じである。CTXBに置かれるの
は、DCE、CTXBFMなどの情報を圧縮したC5%
/の方である。 r本発明装置」ではocE=’ttt7に固定とする。 DCE 第341fflに示す Delayed Context Exception
C5讐のうち、個別にアクセスすることの多いDCEの
フィールドを抜き出して別レジスタとしたものである。 DCEの操作を容易にすることと、性能向上を狙ったも
のである。 DCE以外のフィールドには、何を書き込んでも単に無
視される。 Cs%llレジスタがインプリメントされない場合、コ
ンテキストスイッチ時にC5Wレジスタの代わりにCT
XBとの転送が行なわれるのは、このDCEレジスタで
ある。この場合、−コンテキスト退避の時は、′ネ′の
ビットがすべてOとなってCTXBに書き込まれる。ま
た、コンテキストをロードする時は、′零′の部分のビ
ットの値はチエツクされない。 CTXBFM 第342図に示す Context Block FormatC5Wのう
ち、個別にアクセスすることの多いCTXBFMのフィ
ールドを抜き出して別レジスタとしたものである。CT
XBFMの操作を容易にすることと、性能向上を狙フた
ものである。CTXBFM以外のフィールドには、何を
書き込んでも単に無視される。 このレジスタは<<C2>>である。 恒工υ 第343図に示す EIT Vector Ba5e EIT (例外、割り込み)ベクトルテーブルの先頭の
物理アドレスを示す。EITVBは「本発明装置」64
への拡張を考え、r本発明装置」32でも8バイトのア
ライメントを強制している。したがって、EITVBの
下位3ビツトは’===’となる。つまり、0にres
ervedであるが、違反時にも無視される。 註匹荏 第344図に示す JRNG Vector Ba5e JRNG命令のベクトルテーブルの先頭の論理アドレス
を示す。 JRNGVBによるテーブルのベースアドレスは、r本
発明装置」64への拡張を考え、r本発明H置ノ32で
も8バイトのアライメントを強制している。また、JR
NGVBのLSBはEnableビットとなっており、
Eが00時にはJRNG実行禁止となる。したがって、
J RNGVBの下位3ビツトはl ==E Iで表記
されている。′=2のビットは、0にreserved
であるが、違反時にも無視される。 SPO〜SP3 第345図に示す 5tack Po1nter for ring3ri
ngO−ring3で使用するスタックポインタ。 SPI、SPO〜SP3についてはアライメントの制約
はなく、LSBまで有効である。 釘1 第346図に示す 5tack Po1nter for Interru
pt外部割り込み用のスタックポインタ。 10ADDR101払S 第347図に示す アドレス変換を行なわない場合(、PSWのAT=00
.10)において、110領域の物理アドレスを指定す
るレジスタである。 通常MMUでアドレス変換を行なう場合には、PTE中
のNCビットによって110領域の指定を行なうが、シ
ステムスタート時などでアドレス変換ができない場合に
は、l0ADDR。 10MASKの2つのレジスタを使って110領域の指
定を行なう。 アドレス変換なしでメモリアクセスをする場合、物理ア
ドレスとIOMASにの論理積が10ADDRと等しけ
れば、そこは1刈領域と見なされる。その領域のデータ
については、データのキャッシュへの取り込みやブリフ
ェッチが行なわれず、命令の要求するメモリアクセスと
実際の物理的なメモリアクセスが1対lに対応する。 アドレス変換のある場合には、l0ADDR。 10MASにレジスタは使用しない。また、プロセッサ
のインプリメントによってキャッシュやプリフェッチを
行なわない場合には、必ずしもl0ADDR,IOMA
SKレジスタを使用する必要はない。 臥■ 第348図に示す tJnshared region Address
Translationase 内容については付録3を参照。 鈷■ 第349図に示す 5hared region Address Tra
nslationBase 内容については付録3を参照。 匝」(「本発明装置」では実装しない)第350図に示
す Logical 5pace IQ 複数の論理空間の間の区別を行なう番号を入れる。 複数の論理空間に属する几Bや論理キャッシュなどを混
在させる時に、この番号を利用する。LSIDの有効な
ビット数については、インプリメント依存である。 −8,r [1? (7)CTXBA8−1.C
TXBについ 「本発明装置」はMMUをもたないため「本発明装置」
でサポートするCTXBフォーマットをどのようにする
か現在検討中である。 O5が、タスク、プロセスなどといった並行処理やコル
−チンの機能をサポートしている場合、PCや汎用レジ
スタなどのハードウェア資源の情報は、並行処理の単位
となるそれぞれのプログラム毎に別々に持つのが普通で
ある。 これらのハードウェア資源は、プロセッサと同様に時分
割で使用されるため、現在実行中でないプログラムに対
するハードウェア資源の情報は、メモリなどに退避して
おく必要がある。 r本発明装置」では、こういフた並行処理の単位となる
プログラムの流れをコンテキストと呼ぶ。また、それぞ
れのコンテキストを実行するために、ハードウェア資源
の情報をメモリ上にまとめて退避したものをConte
xtBlock(CTXB)と呼ぶ。 CTXB自体のおかれる空間は、LDCTX、5TCT
X命令のオプションとして、論理空間じ、制御空間C5
より選択できる。O5の誉きやすさという点ではLSを
利用するのが適しているが、コンテキストスイッチを特
に高速化したい場合や、コンテキストスイッチ退避用の
メモリをチップ内に設ける場合には、C5を利用するこ
ともできる。ただし、C5の指定は、将来コンテキスト
退避用のメモリをチップに内蔵した場合に有効に活用さ
れるものであり、現在は<<L2>>となっている。ま
た、r本発明装置」では、現在実行中のコンテキストの
CTXBの先頭アドレスを保持するレジスタが設けられ
ており、これをCTXB Ba5e Register
(CTXBB)と呼んでいる。 r本発明装置」のCTXI3のフォーマットは、次のよ
うになっている。このうちの一部は、LDCTX、5T
CTX命令により、ハードウェアでサポートされている
。 r ll32c7) c’rXI3 −マー
・第351図に示す 一般に、コンテキストスイッチによって切り換える必要
があるのは、O5のPCやPSI/ではなく、ユーザプ
ログラムのPCやPS%/である。と−ころが、ユーザ
プログラムのPCやPSvは、普通はO5呼び出し時に
スタック中に退避されている。上記のCTX8フォーマ
ットにおいて、PC、PSWがスタック中に置かれてい
るのは、そのためである。 SPIを使用した外部割り込みの処理ハンドラの最後で
直接コンテキストスイッチを行なう場合は、上記のCT
XBフォーマットを実現するために、PC、PSWを別
命令で転送する必要がある。しかし、この場合はDCE
、 D Iを活用し、外部割り込みから抜ける時にD
CE、旧を使ってコンテキストスイッチを行なうという
方法がある。そうすれば、DCEや01でSPOを指定
することにより、上記のデータ構造が自然に実現できる
。 MヒLエバm注 CTXBに含まれる情報のうち、′ネ】′〜1ネ5′の
付いた部分は、システム構成などによって可変性のある
部分である。これらの点について説明する。 CTXBの内容やフォーマットは、以下のような要因に
よって動的に(あるいはコンテキスト毎に)変化するこ
とがある。 ・O5の構成やMMLIの有無(*1〜ネ3)O5の構
成によっては、コンテキス トスイッチでSPI〜SP3の切り換えを行なっても意
味のないケースが 考えられるため、SPI〜SP3を退避したくない場合
がある。また、 MMLIを使用しない用途でのコンテキストスイッチで
は、LIATB、LSIDを切り換える必要がない。 ($1)JRNG−RRNGでは、外側のリングが内側
のリングのスタックに退避される ため、現在リングよりも外側のリン グのSPの値は意味を持た゛ない。特に、rfngoで
のみ実行されるコンテキストスイッチの時点では、SP
1− SP3の値が意味を持たない。5PI−SP3
は、直接あるいは間接にSPOのスタックに保持されて
いるため、SPOの切り換えによって5PI−SP3も
間接的に切り換わることになるからである。一方、 TRAPA−REITの中でコンテキストスイッチが起
こった場合にはSPI〜SP3の切り換えも必要である
。したがって、 SPI〜SP3をCTXBCZ含めたい場合と、そうで
ない場合がある。 (ネ2)MMUを実装しない。<<LI R>>仕様で
は、UATBは不要である。 (ネ3)LSIDは、複数の論理空間を区別するための
番号である。LSIDの実装は <<L2>>なノテ、LSIDがCTXBC:含マレる
場合と、そうでない場合がある。 ・退避する汎用レジスタの指定(*4)コンテキストで
使用しないレジスタや O5で使用するワーキングレジスタについて、CTXB
との退避、復帰を行なわなければ、無駄な転送がなくな
り、コン テキストスイッチ時間が短縮される。 ・コプロセッサ使用の有無(ネ5) FPUのレジスタは汎用レジスタとは別になるが、これ
もコンテキスト情報とし て持つ必要がある。したがって、その コンテキストがFPUを使用しているかどうかによって
、CTXBが動的に変わるケースが生じる。 以上のようなCTXBのバリエーションに対処するため
、「本発明装置」では、以下のような方法をとっている
。 ・−最初のバージョンの<<Ll>>のチップでは、L
DCTX、5TCTXテC5W、SPO〜SP3.
UATB(7)転送のみを行なう。RO〜R14につい
ては、別命令LDM、STMを利用し て転送し、(*
4)に対処する。 ・それ以外のCTXBのバリエーションに対しては、現
在のCTXBのフォーマツ トを識別するレジスタ(C
TXBFM)を導入し、このレジスタによって、CTX
B に何が含まれ、LDCTX、5TCTXで何を転
送しなければならないかを知ること にする。なお、C
TXBFMとDCEの情梧を合わせたものは、C5vレ
ジスタとし ても扱われる。 [:CTXBFMコ 第352図に示す FRFPUレジスタを退避す ることを指定 r本発明装置」標準の FPUレジスタのコンテ キスト退避を指定す る。この機能は、特 に、将来FPUがチップ に内蔵された場合に に利用する。 RG RO−R14を退避することを指定 この機能は、特に、 将来コンテキスト退 避用メモリがチップ に内蔵された場合に 利用する。 SP SPの退避を指定 5P=00 SPO,SPI、5P25P3を退避す
る 5P=01 reserved SP=10 SPO,SP3を退 避する( <<Lm R>>用) SP=11 5POのみ退避 する この機能は、JRNGに よりO5を呼び出す場 合に、SPI〜SP3の無 駄な転送を行なわな いために利用する。 また、<<LIR>>で5PI SP2を実装しない場 合に利用する。 MM MMU関連レジスタの退 避を指定 M台=00 UATBを退避 間=OI UATB、LSIDを 退避 聞=10 MMU関連レジ スタは退避しない (<<l l fi>>用) MM=11 reserved [ただし、CTXBFMの詳細は検討中である。コ<<
Ll>>で標準的なフォーマットのCTXBでは、LD
CTX、5TCTX!i:より、C3W(DCE 、
CTXBFM)、SPO〜SP3.UATBが転送され
る。これは、CTXBFMをすべて0にすることによっ
て指定される。 しDCTX命令では、CTXBからフェッチした新しい
コンテキストのC5vの中のCTXBFMを見て、CT
XBの以下の部分のフォーマットを判断し、指定された
ものをロードする。 また、5TCTX命令では、現在のCTXBFMの値を
見て、指定されたものをCTXBに退避する。ただし、
CTXBFM(7)機能は<<L2>>となフチおり、
将来の拡張である。つまり、CTXB固定の仕様が<<
Ll>>、CTXB可変の仕様(上位コンバチ)が<<
L2>>である。 <<LIR>>のチップについては、SPI 、SP2
.UATBの転送が不要なので、CTXBにもこれらの
値は含めない。CTXBにこれらのレジスタ値が含まれ
ているかどうかの識別は、CTXBFMによって行なう
ことが可能である。ただし、CTXBFMの実装が重い
場合には、LDCTX 、 5TCTX命令の追加オプ
ションにより直接CTXBの゛フォーマットを指定する
仕様や、LDCTX、5TCTX命令の追加オプション
によりCTXBFMの有効性の有無を指定する仕様にす
ることも考えられる。 A3−3. ’ エ コン− プロセスやタスク毎に持つ情報の中には、O5がソフト
ウェアによって管理する情報も含まれている。これらの
情報はO5によって一定していないので、当然ハードウ
ェア(LTCTX 。 5TCTX命令)ではサポートできない。これらの情報
をソフトウェアコンテキストと呼ぶ。例えば、l TR
0Mの場合、タスク状態、終了時処理ルーチンのアドレ
ス、例外処理ハンドラのアドレス、wakeupのカウ
ント、キューの構成のためのリンク用領域などがソフト
ウェアコンテキストに含まれる。 CTXBを論理空間(LS)に置いた場合には、汎用レ
ジスタなどのハードウェアコンテキストとソフトウェア
コンテキストを同じように扱うことができる。しかし、
ハードウェアコンテキストとして、C5などの別空間を
使用した場合には、ソフトウェアコンテキストもC5に
置くかくこの場合は、LDC,STCなどの命令が有効
である)、あるいは両者をポインタでつないでおいて間
接参照するか、といった方法をとる必要がある。 ゛ 9・ rll −L9」−二し外埋EIT処理
の概要は以下のとおりであるが、細部の仕様は検討中で
ある。 通常のプログラム実行の流れをハードウェア機構によっ
て中断し、それに割り込むような j形で非同期に起
動される処理を、 r本発明装置」ではEIT処理と呼
ぶ。 EIT処理には、次のようなものが含まれる。 j
・内部割り込み(トラップ−trap)・例外割り込み
(例外−exception) ’・外部
割り込み(割り込み−1nterrupt)
)トラップ、例外、割り込みの区別は、プログラマから
見たそのEITの発生原因によって行な 1われるも
のであり、インプリメント上のメカ 2ニズムの違い
くスタックに待避される情報の シ違いなど)を意味
するものではない。 プロセッサが命令実行中にEITを検出すると、シーケ
ンシャルな命令の実行を中断してEIT処理を開始する
。EIT処理では、EITを検出した時のプロセッサの
状態をスタックに待避し、EITハンドラを起動する。 ここまでがプロセッサのハードウェアによって行なわれ
る。一方、起動されたEIT処理ハンドラでは、EIT
に応じてエラーの回復、エラーメツセージの表示、エミ
ュレーションなどの処理を行なう。EIT処哩ハンドラ
は、ソフトウェアにより実現されるものである。大部分
のEITでは、EIT処理ハンドラの最後でREIT命
令を発行することにより、−中断されたもとの命令列に
復帰し、処理瞥再開することが可能となっている。 「本発明装置」では、将来の機能拡張を考慮J、未定義
の命令、不当な命令についてのエラー検出やエミユレー
ション用のメカニズム科強化する方針である。したがっ
て、命令フオーマットの組み合わせにより不当なオペレ
ーションになる場合や、インプリメントされていない機
能を実行しようとした場合には、できるだけエラーとし
て検出し、例外割り込みを発生する。 醪ユ」H皇種苅 r本発明装置」で発生するEITには、次のようなもの
がある。 [メモリ、アドレス関係] ページ不在例外(POE)・・・・・・・・・・・・・
・・・・・・・・・・・・r本発明装置」“では発生し
ない Page Out Exception (POE)命
令またはオペランドアクセス時 のアドレス変換において、UATB、5ATB、STE
、PTEのP1ビットが0てあつた場合に発生する。意
味的には、 ページ不在、ページテーブル不在、 セクションテーブル不在を含めた ものである。いわゆるページフォ ールトの例外である。 アドレス変換例外(ATRE) Address Translation Excep
tion(ATRE) アドレス変換中のエラーによって 発生する。具体的には、STE、PTEでreserv
edのビットパターンを使用していた場合、UATB、
5ATB、STE、PTEによって未使用領域となって
いる 部分を参照した場合、リング保護 に違反したメモリアクセスを行な った場合などに発生する。EIT発生 の原因や詳細な情報は、ATRETR 時にスタックに積まれる情報によ って区別される。 バスアクセス例外(BAE) Bus Access Exception (BAE
)命令またはオペランドアクセスに おいて、一定時間以内にバスから の応答がなく、メモリアクセスが できなかった場合に発生する。い わゆるバスエラーである。 奇数アドレスジャンプ例外(OAJE)Odd Add
ress Jump Exception (OAJE
)分岐命令で、分岐先のアドレスが 奇数であフた場合に発生する。 この例外は、ジャンプ先をオペラ ンドとして直接指定する命令 (JMP、Ac1等)、スタックからリターンアドレス
を得る命令(RTS、EXITD、RRNG、REIT
)、およびJRNG命令で発生し、EIT処理の起動時
には発生 しない。EIT処理起動時に新PCが奇数であった場合
には、シスチムニ ラー例外(SEE)となる。[J RNG 。 EITは詳細仕様調整中] [命令、演算関係] 特権命令違反例外(PIVE) Prtvileged In5truction Vi
olation Exception (PIVE) ringo以外から特権命令を実行しようとした場合に
発生する。 <<Ll>>機能例外(LIE) Ll function Exception (LI
E)<<Ll>>機能のインプリメントされていないプ
ロセッサにおいて、くく Ll>>の機能を実行しようとした場 合に発生する。 <<l l>>を実装しているプロセッサであれば、こ
の例外は発生せず、 このEITに対するベクトツ番号はr eservedとなる。 予約命令例外(RIE) Reserved In5truction Exce
ption(RIE) 現在割り当てられていない命令や アドレッシングモードのビットパ ターンを実行しようとした場合に 発生する。いわゆる未定義命令の 例外である。 r本発明装置」32で64ビツトのサ イズを指定した場合、Pビットを1 にした場合、未実装の<<L2>>命令を実行しようと
した場合、未定義、 未実装のオプションを指定した場 合も、これに含まれる。また、命 令によって禁止されているアドレ ッシングモードを使用した場合 (JMP命令におけるイミディエート 指定など)や、インプリメントさ れていない段数の付加モードを使 用した場合も、これに含まれる。 予約機能例外(RFE) Reserved Function Excepti
on (RFE)命令やアドレッシングモードのビ ットパターン以外で、将来の拡張 のために予約されている機能を利 用しようとした場合に発生する。 例えば、pswニ関しては、XAやreserved(
’−’)のビットに1を書き込んだ場合、SMRNGの
フィールドに reservedの値(SM、RNG=OO1など)を
書き込んだ場合、非特権命令の LDPSB、LDPSMCmよッTPsMやPSB(7
)reserved(’一つのビットに1を書き込んだ
場合などに予約機能例外 (RFC)が発生する。このほか、実装されていない制
御レジスタをアク セスしようとした場合や、WAIT命 令でimask≧16を指定した場合にも、予約機能例
外(RFE)が発生する。 なお、「本発明装置」では、命令 ビットパターン(アドレッシング モードやサイズの指定を含む)の みてエラーと判定できるものを予 約命令例外(RIE)とし、アドレスやオペランド値に
よってエラーかど うかの状態が変化するものを予約 機能例外(RFC)としている。 コプロセッサ命令例外(CI E) Co−processor In5truction
Exception(CIE) コプロセッサが接続されていない のに、コプロセッサ用に割り当て られた命令を実行しようとした場 合に発生する。 コプロセッサコマンド例外(CCE) COoprocessor Command Exce
ption(CCE) コプロセッサとのインタフェース でエラーがあフた場合に発生する。 コプロセッサ実行例外(CEE) Co−processor Execution Ex
ceptionコプロセッサの命令実行において エラーがあフた場合に発生する。 不正オペランド例外(IOE) Illegal 0perand Exception
(IOE)不合理なオペランドの指定を行な った場合に発生する。固定長ピッ トフィールド命令で32(64)ビット以上のwidt
hを指定した場合などがこれに含まれる。 奇数アドレスへのジャンプやゼロ 除算も意味的には不正オペランド 例外の一部と考えられるが、特別 な意味を持つために異なる例外に 分類されている。 なお、「本発明装置」において命 令のオペランドが不当な場合の対 策としては、不当オペランド例外 やゼロ除算例外とするケースのほ かに、特にチエツクを行なわない ケース(CHに命令の上限値と下限値 の大小関係など)、適当な解釈を してそのまま命令を実行するケー ス(シフト命令でcountが大きい場合など)、など
がある。一方、命 令を実行した結果が不当(オーバ ーフローなど)な場合には、EITが 起動されることはない。この場合 は、VJIagをセットして命令を終 了するケース(ADD、NOVなど多数)、特に何もし
ないケース(UNPKssでのオーバーフローなど)、
などが ある。 10進不正オペランド例外(DDE) Decimal Illegal 0Perand E
xceptton(DDE) 符号付き10進演算命令において、 0〜9以外のデータをオペランド として指定した場合に発生する。 この例外も、意味的には不正オペ ランド例外(IOC)の一部であるが、別の例外に分類
されている。 予約スタックフォーマット例外 (RSFE) Reserved 5tack Format Exc
eption(RSFE) REIT命令によってEITから復帰する際に、EIT
スタックフレームのフォ ーマットを示す番号(FORMAT)が、REIT命令
で処理できないものであ った場合に発生する。 リング遷移違反例外(RTVE) Ring Transition Violation
Exception (RTVE) JRNG命令で外側のリングに移ろう とした場合、RRNG命令で内側のリ ングに移ろうとした場合など、不 当なリング遷移を行なおうとした 場合に発生する。 なお、JRNG命令で参照すべき JRNGVTEを含むページが未使用領域となっていた
場合には、リング遷 移違反例外(RTVE)ではなくアドレス変換例外(A
TRE)の未使用領域参照エラーが発生する。 ゼロ除算例外(ZDE) Zero Divide Exception (ZD
E)0除算を行なった場合に発生する。 [デバッグ] デバッグ例外(DBE) Debug Exception (DBE)デバッグ
に関係して発生する。 具体的には、命令のシングルステ ツブ実行やブレークポイントを実 現するための例外であるが、詳細 な仕様は<<l V>>である。 [トラップコ 無条件トラップ命令(TRAPA) TRAP^In5truction TRAPA命令により発生する。 TRAPAのEITベクトルは、TRAPAのオペラン
ドvectorに対応して16種類用意されている。 条件トラップ命令(TRAP) Conditional TRAP In5truct
ionTRAP命令により発生する。 [DCE 、 D I ] 遅延割り込み(DI) Delayed Interrupt (旧)Dルジス
タ中の01フイールドが、 15w中のI MASにフィールドよりも小さい値にな
った場合に発生する。 このEITは、コンテキストとは独立 した非同期の事象を処理するため に有効である。 D1処理のEITベクトルは、各割り込み優先度毎に1
5種類用意されてい る。 このEITは、REIT命令などの命令実行によって発
生するという点では 例外であるが、その時実行中のコ ンテキストと関係なく起動される という意味では割り込みである。 つまり、例外と割り込みの中間的 なものである。 (IMAsKフィールドを含むPS戦
!コンテキスト依存であ るが、IM^Sにフィールドのみはコンテキスト独立と
して運用されるの が普通である。) 詳しくは後の章を参照。 遅延コンテキスト例外(DCE) Delayed Context Exception
(DCE)C5Wレジスタ(あるいはDCEレジスタ
)中のDCEフィールドが、PSv中のSMRNGフィ
ールドよりも小さい値になった場合に発生する。 この例外は、コンテキストに依存 した各種の非同期の事象(人出力 の完了など)を処理するために有 効である。 詳しくは後の章を参照。 [その他] リセット割り込み(R1) Reset Interrupt (R1)外部からの
リセット信号により発 生する。 システムエラー例外(SEE) System Error Exception (S
EE)EIT処理中に致命的なエラーが起き た場合に発生する。 [割り込み] 外部割り込み(El) External Interrupt (El)外部
からのハードウェア信号によ り発生する。 EITベクトルは外部から指定する。 一般に、外部割り込みのチエツク は命令の切れ目で行なわれるのが 普通である。しかし、 r本発明装 置」の場合は、実行時間の上限の 決まらない高機能命令(任意長ビ ットフィールド命令、ストリング 命令、QSCH命令)が存在する。こ れらの命令では、命令の実行途中 であっても外部割り込みを受は付 けるようになっている。 固定ベクトル外部割り込み(FVEI)Fixed V
ector External Interrupt(
FVEI) 外部からのハードウェア信号によ り発生する。 EITベクトルは優先度毎に一つずつ 決まっている。 いわゆるオートベクトルの割り込 みである。 以上のEITのうち、予約例外、不正例外、違反例外の
区別は次のような考え方によっている。 予約xx×例外機能拡張によって解消される可能性のあ
るもの 将来の機能拡張によって、例外ではな くなる可能性がある。 メーカー間のインプリメントの違いの 出る場合がある。 不正×x×例外意味的に明らかにエラーであるもの 予約例外とは異なり、将来の機能拡張 があフても、永久の例外のままである。 メーカー間のインプリメントの違いは 出ないところである。 XX×違反例外リング保護の観点から実行を制限してい
るもの その他O5やシステム構成上の例外、複数の分類に当て
はまる 例外など A9−2.EITのオペレーション プロセッサがEITを検出すると、以下の手順にしたが
ってEIT処理を行なう。ただし、リセット割り込み(
R1)、システムエラー例外(SEE)については、こ
れとは違った動作をする。また、以下の説明は「本発明
装置」32に限ったものであり、「本発明装置」64で
は、パラメータ等が異なってくる可能性がある。 (El)ベクトル番号の生成 プロセッサはそのEITに応じたベクトル番号をプロセ
ッサ内部で生成する。ただし、外部割り込みElの場合
は、プロセッサの外部(周辺LSIなど)からEITベ
クトル番号を得る。 (R2)EITVTE(7)読ミ込ミ 「本発明装置」では、それぞれのEITに対する処理ハ
ンドラの先頭アドレスと、EITのベクトル番号との対
応を示す表をεITベクトルテーブル(EITVT)と
呼ぶ。また、そのテーブルの一つのエントリをEITV
TEと呼ぶ。 「本発明装置」のEITVTEは、EI
T処理の自由度と拡張性を考慮して8バイトとなってお
り、EIT処理ハンドラの先頭アドレス(PC)だけで
はなく、PSWの一部のフィールドもセットすることが
できる。そのため、EITVTEはPC+PSWに準じ
た構成になっている。EITVTEのフォーマットは、
第353図のようになっている。 VS(Vector SM): EIT処理後の蛋ただ
し、vSがその ままEIT処理後の SMとなるのではな い。詳細後述。 VX(Vector XA): EIT処理後のXA現
在は0に reserved (違反時は無視) VAT(Vector AT): EIT処理後のAT
VD(Vector DB): EIT処理後のDOV
IMASK(Vector IMASK): EIT処
理後の団ASK ただし、VIMASKり1 そのままEIT処理後 のIMAsにとなるので はない。詳細後述。 VPC(Vector PC): EIT処理後のPC I:′二 〇にreserved(違反時
は無視) 0にreserved (違反時はシステムエラー例外) プロセッサは、(El)で生成したEITベクトル番号
に従い、 (EITヘクトル番号) X 8 +EITVTBの物
理アドレスにあるEITVTEを読み込む。 (E3)PSWの更新 読み込んだEITVTEをもとに、以下のようにPSV
を更新する。 [外部割り込み以外の場合コ min (VSy旧SM) ==>新SMスタックポ
インタの選択。 EIT発生前にSPI以外のスタック ポインタを使っていた場合は、 VSによってEIT処理ハンドラで使 用するスタックポインタ(spoま たは5PI)が選択される。 EIT発生前に既にSP+を使ってい た場合には、vSに関係なく、 EIT処理ハンドラでもSPIをその まま使う。 このような仕様になっているの は、EITがネストした場合を考慮 したためである。 旧RNG ==>新PRNG 00 ==>新RNG EIT処理ハンドラは、必ずリング 0で実行される。 なお、EITVTEには未使用のビッ トがあるので、将来的には、 EITによってリング0以外のリン グに入るような指定をすること も可能である。 VX ==>新XA 現在は0に固定されている。 VAT ==>新AT EIT処理ハンドラの実行中は、ア ト5レス変換の有無を切り換える ことができる。 VD ==>新0B EIT処理ハンドラの実行中は、デ バッグの環境を切り換えること ができる。 min(VIMASK、口開ASK) ==>新開A
sに例外割り込みや内部割り込みに よるEITの場合でも、EIT処理で 団ASKを操作することができる。 この機能を使えば、EIT処理に入 るのと同時に外部割り込みを禁 止することができる。したがっ て、EIT処理と不可分に何らかの 処理(例えばEITによって生成さ れたスタックフレームの転送な ど)を行ないたい場合に、この 機能が有効である。 [外部割り込みの場合コ n+in (VS、旧SM) ==>新SM旧RNG
==>新PRNG 00 ==>新RNG VX ==>新XA VAT ==)新AT VD ==>新DB Iffin(VIMASに2発生した外部割り込みの優
先度)==〉新開Asに この部分のみ外部割り込み以外 の場合とは異なっている。 この機能により、優先度の低い 多重割り込みを禁止することが できる。 なお、割り込みマスクの機能に より、 発生した外部割り込み の優先度く旧IMASK という関係が成立しているはず である。 (E4)プロセッサ情報のスタックへの退避EIT発生
前の旧PC,旧PSW、および発生したEITに関する
各種の情報(EITNF −EITベクトルやスタック
フォーマットなどを含む)をスタックに退避する。この
退避に使用されるスタックは、新SMと新RNG(=O
O)により選択されるスタックである。この時に生成さ
れるスタックフレームは、第364図のようになる。 このうち、EITINFは、発生したEITにより生成
されるスタックフレームのフォーマット(FORMAT
)、EITのタイプ(TYPE)、EITのベクトル番
号(VECTOR)などの情報を32ビツトに詰めたも
のである。追加情報の有無や内容は、EITの種類によ
って異なる。REIT命令では、EITINF中のFO
RMATを見ることによって追加情報の有無やそのフォ
ーマットを知り、EIT発生前のもとの命令列に戻るた
めの情報を得る。 なお、r本発明装置」64になった場合に生成されるE
ITのスタックフレームは、旧PCで10ングワード、
旧PSWとEITINFを合わせてlロングワード、と
いう構成になる予定である。 EITINFをPS虞こ隣接した場所に置いたのは、「
本発明装置」64でのアライメントの維持を考慮したた
めである。また、PS%Ilをスタックトップに置いた
のは、将来「本発明装置」64で、32ビツトのコンテ
キストと64ビツトのコンテキストが混在した場合でも
、スタック中に退避されたP費中のXAビットが読み出
せるようにするためである。 (E5)EIT処理ハンドラの起動 VPCをPCに転送し、EIT処理ハンドラを起動する
。 なお、命令ブリフェッチにおいて発生したEITは、フ
ァッチしようとした命令が必要になるまでEIT処理が
遅らされる。 これに対して、EIT処理ハンドラの最後に置かれたR
EIT命令では、次のような処理を行なつてもどの命令
列に復帰する。 (R1)スタックからの読み込み スタックより、旧PSWとEITINFを読み込む。読
み込んだPSW中のXAビットがOであれば、EITを
発生したコンテキスト(タスクやプロセス)が32ビツ
トのコンテキストであったということがわかるので、続
いてスタックより32ビツト幅で旧PCを読み込む。な
お、「本発明装置」32では、すべてのコンテキストが
32ビツトのコンテキストである。 さらに、EITINF中のFORMATにより追加情報
の有無を判定し、追加情報があれば、スタックからそれ
を読み込む。追加情報には、EXPC。 101NF、ERADDR,ERDATA、SPlなど
があるが、その詳細な意味はインプリメント依存である
。 FORMATがプロセッサのサポートしていない値(E
ITで発生するはずのない値)であった場合は、予約ス
タックフォーマット例外(R5FE)となる。 (R2)PS冒の復帰 スタックから読み込んだ旧PSWにより、PSWの全フ
ィールド(SMRNG、XA、AT、DB、 IMAs
K、PSM。 PSB)をEIT発生前の値に復帰する。この時、旧P
S勤1 reservedの値を含んでいた場合には、
予約機能例外(RFE)を発生する。 (R3)ストアバッファの再実行(インプリメント依存
) FORMATと追加情報の値によっては、REIT命令
の中で、前回EITを発生したストアバッファによるラ
イトサイクルの再実行を行なう場合がある。この時、ラ
イトサイクルの実行に必要なアドレスとデータの情報と
しては、スタック上の追加情報の中にあったERADD
RとERDATAが使用される。詳しくは、EITのタ
イプの説明の項を参照。 なお、ストアバッファのみを再実行する機能があるかど
うかということは、プロセッサのインプリメント上の問
題である。すなわち、REIT命令のストアバッファ再
実行機能を前提としてEIT処理が作られている場合に
は、当然REIT命令でそれをサポートする必要がある
し、ストアバッファのみの再実行機能が無くても矛盾の
ないEIT処理が実現できていれば、REIT命令でそ
れをサポートする必要はない。 プログラマから見た場合は、EIT処理とREIT命令
による処理がきちんと対応しており、REIT命令によ
ってEIT処理から戻った時に、EITを発生した命令
列が矛盾なく実行を続けられれば良いのである。この機
能の有無と、プロセッサとしての機能の高低とは直接関
係しない。 (R4)EIT検出時に実行していた命令列への復帰ス
タックから読み込んだ旧pci−pcに復帰し、PCの
示す命令から実行を再開する。 この時、EITINF中のTYPEフィールドによって
、次に受は付けられるEITのタイプを変化させている
。この機能は、多重EITの処理を矛盾なく行なうため
に、また命令のシングルステップ動作を、エミュレーシ
ョンによる実行を含めて正確に行なうために利用される
。 なお、EITINFのVECTORフィールドは、RE
IT命令では特に使用されない。にもかかわらずVEC
TORがEITINFに含まれているのは、EIT処理
ハンドラのプログラムに対して情報を提供するためであ
る。 酊ヒalIΩ」5仁ブ r本発明装置」のEITを、EIT処理ハンドラ終了後
の実行再開時のPCの位置と、EIT処理の優先度に着
目して分類すると、以下のようになる。この分類は、E
ITINFのTYPEフィールドの値にそのまま対応す
る。 [命令中断型EIT (TYPE=O,PC不定)]こ
のEITが発生すると、直ちにそれが検出され、EIT
処理に入る。このEITが発生した場合、EITを発生
した命令系列に復帰することはできない。こ れに該当するのは、R1,SEEである。 [命令完了型EIT (TYPE=1〜3.PC次命令
)]このEITが発生すると、その時実行中の命令処理
が完了した後でそれが検 出され、EIT処理に入る。一般には、このEITに対
するEIT処理ハンドラの最後でREIT命令を実行す
ることにより、εIT発生時に実行していた命令の次の
命令から、命令の実行を再開で きる。なお、TYPE=1〜3の区別は、優先度などの
関係によるものである。 これに該当するのは、TRAP、TRAPA。 DBE、DI、DCEなどである。 [命令再実行型EIT (TYPE=4.PC現命令)
]このEITが発生すると、プロセッサやメモリの状態
は、EIT発生時に処理していた命令の実行開始前の時
点に戻 される。一般には、このEITに対するEIT処理ハン
ドラの最後でREIT命令を実行することにより、EI
T発生時に実行していた命令から、命令の実行を 再開できる。これに該当するのは、 POE、ATRE、BAE、RIE、RFE、PIVE
、 IOEなどである。 命令完了型のEITは、以前実行していた命令に関する
EITであり、命令再実行型のEITは、現在実行中の
命令に関するEITである。したがって、複数のEIT
が同時に発生した場合には、−般に命令完了型のEIT
を先に処理する必要がある。また、命令中断型のEIT
は重要度の高いEITであり、これが検出された場合に
は、他のEITを処理することは無意味である。したが
って、命令中断型のEITと他のEITが同時に発生し
た場合には、命令中断型のEITを先に処理する必要が
ある。結局、複数のEITが同時に発生した場合の優先
度は 命令中断型〉命令完了型〉命令再実行型となり、EIT
INFのTYPE=0〜4が、そのままEITの優先度
を表わすことになる。 EIT(7)種類とTYPEとの対応は、R1、TRA
P(7)ように明確に決まっているものもあるが、ある
程度はインプリメント依存の部分がある。したがって、
ソフトウェアでEITの要因を分析する際には、できる
だけTYPEのフィールドを参照したり、書き換えたり
しない方がよい。 例えば、ページ不在例外(POE)の場合、これは命令
再実行型のEITであり、TYPE=4となるのが普通
である。しかし、メモリの書き込みにストアバッファを
用いるようなインプリメントのプロセッサにおいて、命
令の最後の書き込みサイクル(ストアバッファ使用)で
POEが発生した場合には、この命令全体を最初から再
実行しなくても、最後の書き込みサイクルのみやり直せ
ば処理上の矛盾は生じない。そこで、このようなケース
でのPOEを命令完了型のEITとし、エラーを発生し
た最後のライトサイクルの処理はREIT命令の中で行
なうという場合がある。この場合は、POEでもTYP
E=1となる。 また、EIT処理でスタック積まれるPCは、POε発
生命令ではなく次の命令になる。 命令再実行方式に忠実にしたがう限り、命令実行中にエ
ラーが発生した場合は、命令実行前の状態に戻してTY
PE=4のEITを起動するというのが原則である。し
かし、命令がもう少しで終了するというとごろでエラー
が発生した場合には、一応命令を終わったことにしてT
YPE=1のEITを起動し、残りの処理(ストアバッ
ファのライトサイクル)はREIT命令に任せるという
インプリメントも可能なのである。 このようなインプリメント方法をとるのであれば、PO
EのTYPEが1と4の2通りになる。この場合、TY
PEの違いによってREIT命令で必要となる処理が変
わってくるの、で、REIT命令はそれに対応できるよ
うになっていなければならない。 この方法では、命令最後のライトサイクルで発生したエ
ラーによるEITに対して、命令全体を再実行するので
はなく、最後のライトサイクルのみを再実行するという
形になフている。 つまり、一種の命令継続実行方式になっている。この場
合、命令継続実行のために退避される内部情報に相当す
るのが、EITの追加情報としてスタック上に退避され
るERADDRやERDATAである。 なお、ストアバッファを用いた書き込みサイクルで発生
するEITの場合、その書き込みを行なった命令の直後
にEIT処理に入るとは限らない。 A9−4.EITの ・・ フ −マッEITの検出
にともなって、EIT処理に必要な情報がスタックに退
避される。そのスタックフォーマットは第355図の通
りである。 PS讐 :EITを検出した時点 のPS讐 Fo rma t ニスタックフォーマット番号(8b
it) Typ6 :EITタイプ(8b i t)Vect
or:EITベクタ番号 (9bit) PC:EITハンドラからの 復帰後の、実行再開 アドレス この内、「その他の情報」は各EITのスタックフォー
マット番号に応じて異なり、EITの要因を解析するた
めの情報、EITハンドラから復帰するための情報が含
まれている。スタックフォーマット番号に応じたスタッ
クフォーマットを第356図に示す。 PC: REIT命令でEITから戻った後に実行す
る命令 の先頭アドレス EXPC: EITの検出時に実行していた命令のP
Co 101NF : 入出力に関する情報Error
Addr: EITを発生させたバスサイクルのア
ドレス Error Data: EITを発生させたバスサ
イクルのデータ(writeのみ) SPI : EIT検出時のSPIの値フォ
ーマット番号0: 予約命令例外、予約機能例外、予約スタックフォーマッ
ト例外、リング遷移違反例外、<<Ll>>命令例外、
コプロセッサ命令例外、特権命令違反例外、不正オペラ
ンド例外、固定ベクトル外部割り込み、遅延割り込み例
外、外部割り込み。 フォーマット番号1: バスアクセス例外、アドレス変換例外。 フォーマット番号2: デバッグ例外、奇数アドレスジャンプ例外、ゼロ除算例
外、条件トラップ命令、トラップ命令。 フォーマット番号3: D[lG外部割込み、DOG )ラップ命令、DBGデ
バッグ例外、DOGアクセス違反例外 (つまりDOG
EIT専用) EXPCは次のような目的で導入されたものである。 ・エラー解析情報の提供 一スドアバッファの書き込みの際にTYPE=lのEI
Tが発生したような場合、 その書き込みを行った命
令を指しているのが EXPCである。PCは先に進 んでしまフている。 一デバッグ例外では、PCは次の命令を指し、EXPC
は前の命令を指してい る。したがって、例えば、ジャ
ンプ命令実行時にデバッグ例外を起動 するようにした
場合、EXPCによってジャンプ前のPCの値を、PC
によっ てジャンプ後のPCの値を知ることができる。 ・多重EITの処理 −TYPE=1のTRAPAなどのEITの場合は、そ
の処理ハンドラの中でEXPCの情 報が必要になるこ
とはない。しかしながら、 TYPE=1のEIT(TRAPAなと) とTYPE
=2のEIT(デバッグ例外など)が同時に発生した場
合、TYPE=1の EITにおいて、TYPE=2
で使用するEXPCを退避しておかなければならない。 TRAPAでもEXPCを退避するような仕様にな
っているのは、このためである。 この場合、TRAPAの処理に対するREIT命令実行
後のEXPCは、REIT命令の 先頭を指すのではな
く、スタックからポツプした旧EXPCの値を復帰し
たものになっていなければならない。すなわち、REI
T命令の直後にな っていたデバッグ例外を起動した直
後にベンディングになっていたデ バッグ例外を起動し
た場合、スタックに退避されるEXPCは、REIT命
令 を指すのではなく、TRAPA命令を指すものでな
ければならない。(なお、この例は、TRAPAのEI
TVTEでデバッグ例外をマスクすることを想定したも
のである。) また、l0INFの構成は第357図のようになってい
る。 =:10′にreserved Wl : REIT命令におけるライトリトライの
指示 メモリアクセス系のEIT (TYPE=1)で意味を持つ。 讐1=0 ライトリトライ 要 讐1=1 ライトリトライ ネ要 MEL : アドレス変換例外の発生位置0000
エラーなし 0001 アクセス権に関 するエラー 0010〜1110 (reserved)1111
110領域に関す るアクセスエ ラー MEC:メモリアクセス関係のエラーのエラーコード 0000 エラーなし 0001 未使用領域参照 エラー 0010 (reserved)0011
(reserved)0100 rea
dに関するリング保護違反エ ラー 0101 誓riteに関するリング保護違反 エラー 0110 executeに関するリング保護
違 反エラー 0111 (reserved)1000
read時のバスアクセス不能 1001 write時のバスアクセス不能 1010 (reserved)1011
(reserved)1100 (re
served)1101110領域に対す るメモリ間接ア ドレッシング 1110 110領域に対す るexecu te 1111read時に170領 域と170以外の 領域をまたぐ write時にI10領 域とI10以外の 領域をまたぐ R讐 : バスサイクル種別 RW=Owr i te RW=1 read BL= バスロック状態 BL=0 バスロック中で ない BL=1 バスロック中 PA: 空間の指定 PA=O(reserved)・・・論理空間(アドレ ス変換あり) PA=1 物理空間(アド レス変換なし) AT : EITが発生したバスサイクルのアクセ
スタイプ AT=000 データ AT=OO1プログラム AT=010 割込みベクトル シフエッチ
0 AT=011〜111 (reserved)512
: ライトリトライを行う際のデ Δ−タサイズ 0000 (reserved)0001
1バイト 0010 2バイト 0011 3バイト 0100 4バイト 0101−1111 (reserved)リセット
割込みとDOGモードのEIT(No、0〜5)に関す
るEITテーブルのエントリはSPI値とPC値で構成
される。その他のEITに関するEITテーブルのエン
トリはPS%l111IIとPC値で構成される。 EITVBのリセット時の初期値は’ FFFFFOO
O’であ5ため、リセット割込みでは物理番地の’FF
FFFOO19からエントリ(SP l 、 PC)が
フェッチされる。 9−6. EIT のエ − EIT処理中(EIT発生から状態の退避を経て新PS
vの設定まで)に、別のEITが発生するような重大な
エラーが起きた場合には、システムエラー例外(SEE
)となる。システムエラー例外(SEE)となる可能性
があるのは、EITVTEの読み込みに伴うバスアクセ
ス例外、旧PC,旧PSWの退避に伴うスタックのペー
ジ不在例外、アドレス変換例外などである。また、EI
TVTEの■PCを含むワードのLS8がJjであった
場合にも、システムエラー例外(5EE)となる。 システムエラー例外(SEE)の発生は、SPI。 SPOのどちらかのスタックを使用するかということに
は関係しない、SPOのスタックでページ不在例外が起
フた場合にも、SPIのスタックに切り換えであるいは
ページ不在例外のEITVTEで指定されるスタックに
切り換えて)、EIT処理中を継続するという仕様にな
フていない。 一方、JRNGによるリング遷移はEITでないので、
JRNGの処理中にページ不在例外が起った場合には、
ページ不在例外のEITVTEで指定されるスタックを
使って、ページ不在例外のEIT処理中を行うことにな
る。この点で、EIT処理中に含まれるTRAPAとE
IT処理中に含まれないJRNGでは、システムエラー
となるまでのステップが一段異なっているので、注意が
必要である。 (第359図参照) いずれにしても、O5を作る場合には、SPIにより指
定されるスタック領域はメモリ常駐とし、SPOにより
指定されるスタック領域も、特殊な使い方をする場合を
除けばメモリ常駐となるようにプログラミングする必要
がある。 醪j工浸1上■ TYP=0のEITを除けば、EITの検出とそれに対
する処理は、各命令の切れ目で行われる。したがって、
場合によっては、命令の切れ目において複数のEITが
同時に検出される可能性がある。これを多重EITと呼
ぶ。ここでは、多重EITの処理順序について説明する
。 例えば、TYP=OのTRAPAとTYP=3 の外
字割り込み(El)が同時に発生した場合、まずTRA
PAに対するEIT処理中が行なわれ、引続きElに対
するEIT処理中が行なわれる。その結果、PC,PS
Wとスタックの状態は第360図のようになる。 したがって、この例では、EIT処理中終了後にまずE
lの処理ハンドラが実行される。Elの処理ハンドラが
終了した後は、その最後に置かれたREIT命令により
、−段浅いレベルにあるTRAPAの処理ハンドラに移
る。つまり、優先度の高いTRAPA処理ハンドラの方
が後回しになるわけである。 ただし、上の例ではTRAPAのEIT処理中が先に行
われるため、そこでPS讐を変更してElをマスクする
ことができる。つまり、TRAPAのEITVTEで VIMASK < Elの優先度 となるような指定を行っておけば、TRAPAのEIT
処理中でIMASKが変更され、Elに対するEIT処
理中は行なわれなくなる。この場合は、TRAPAの処
理ハンドラが実行される。そして、ハンドラの最後のR
EIT命令でIMASKが元の値に戻った時に、マスク
されていたElが起動されることになる。 このように、優先度の高い(TYPEの小さい)EIT
処理中におけるPSWの更新によってマスクされるEI
Tには、OBE、εl、DI、DCEのEIT、 つ
まりTYP=2〜30EITがある。逆に言えば、マス
ク可能なEIT (処理要求を保持することが可能なE
IT)が、優先度の低いTYP=2〜3になっているわ
けである。 これに対して、TRAPAの場合は、EIT処理中要求
を保持するレジスタやハードウェアは何も用意されてい
ない。PCも次の命令に進んでいるので、TRAPA命
令を再実行することもできない。したがって、TRAP
A命令実行直後に81丁処理中を行わないと、EIT処
理中要求が失われてしまう。TRAPAをTYP= 1
の高い優先度にしているのは、このたためである。 また、TYP=4のEITは命令再実行のEITである
ため、他のEITに対する処理が終わった後でもう一度
同じ命令を実行すれば、再び同じEITが発生する。命
令実行型(TYP=4)のEITが最も低い優先度にな
っているのは、このためである。 したがりて、多重EITの場合には、TYP=4の61
丁の処理は行う必要がない。TYP=4のEIT起動要
求は、同時に発生しTYP= 1〜3のEITの検出に
伴フてキャンセルされる。 REIT命令実行直後に受は付けられる。EITとは異
なっている。REIT命令では、スタック中からポツプ
されたEITINFの中のTYPEによって、REIT
命令終了直後に受は付けるEITわ調整している。RE
IT命令実行後に受は付けられるEITのTYPEは第
361図の通りである。 このうち、TYPE=2はデパック例外(DBE)であ
る。つまり、デパック例外に対するEIT処理中ハンド
ラのREIT命令実行直後には、デパック例外を受は付
けないということを意味している。 REIT命令実行直後かどうかによって、TYPE=2
のデパック例外の扱いが異なっているのは、1命令毎の
シングルステップ実行を行うためである。この場合、デ
パック例外に対するREIT命令の直後で再びデパック
例外を起こしていたのでは、被デパックプログラムの実
行が全く進まずに、デパック例外のみが続けて発生する
という状況になってしまう。したがって、上記メカニズ
ムにより、REIT命令の直後い゛はデパック例外を発
生せず、1命令実行してからデパック例外を発生するよ
うにしているのである。 一般に、シングルステップ実行を行う場合には、次に命
令を実行するか、デパック例外を起動するかの二つの内
部状態を持つ必要がある。 r本発明装置」では、この
二つの状態を、REIT命令実行直後かどうかといった
内部状態と、EITのTYPEとの組み合せによって表
現していると考えられる。 なお、この考え方によるシングルステップ実行は、デパ
ック例外と同時にほかのEITが発生した場合にも適用
できる。 予約命令例外(RIE)のEIT処理中ハンドラで命令
エミュレーションを行う場合は、他の IEIT
(ページ不在など)に対する処理ハンドラとは異なり、
RIEの処理ハンドラの前後でデパック例外を起動しな
ければならない。例えば、シングルステップ実行後に 通常命令→デバッグ例外→ページ不在例外であれば次は
通常命令を実行する必要がある、 が、 通常命令→デバッグ例外→予約命令例外(エミュレーシ
ョン) であれば次はデパック例外の起動となる。これは、ペー
ジ不在例外がデバッガやデパック対象プログラムにとっ
て全く見えないものであるのに対して、エミュレーショ
ン例外は、デバッガ対象プログラムにとって「−命令の
実行」として見えるはずのものだからである。 「本発明装置」の場合は、予約命令例外のEIT処理中
ハンドラの中でEITINFのTYPEを調整すること
により、以上のようなことが可能である。 kg−8,r B の旧 A9−8−1.01の ベレーぐヨン 「本発明装置」の旧(Delayed Interru
pt)は、旧レジスタ中の旧フィールドがPSW中のI
MASKフィールドよりも小さい値になった場合に発生
するEITである。この機能は、コンテキストとは独立
した非同期の事象をベンディングとして処理要求だけを
登録したり、処理順序をシリアライズしたりする時など
有効なものである。 01処理のEITベクトルは、各割り込み優先度毎に1
5種類用意されている。IMASにの値と、そのフラグ
変化のその時に許可される外部割り込みとの関係は、第
362図のようになっている。 Dlを起動するかどうかのチエツクをする必要があるの
は、団ASKが大きくなフた時、またはDlが小さくな
った時である。したがって、これに該当するのは、 LDCsrc、@psv ;ps−は制御空間中の
PSWのアドレス LDCsrc、@imask ;imaskは制御空
間中のimaskのアドレス しDCsrc、@DI ;DIは制御空間中の0
1のアドレス EIT AIT の各指令である。このうち、LDCsrd、@di以外
の場合には、これらの命令を実行する前の旧フィールド
の値が、起動されるDlのレベル(優先度)となる。D
lのレベルは、Dlとして起動されるEITのベクトル
番号に影響する。また、LDC6rd、@diによって
01が起動された場合には、LDC実行前のDIフィー
ルドの値ではなく、LDCによって新しくセットされた
D1フィールドの値(つまり5cr)が起動されるDl
のレベルとなる。 なお、EIT起動時(外部割り込み、例外、TRAPす
べで含む)にもIMASKの変化するところがあるが、
この場合には団ASKの値が大きくなることはないため
、旧は起動されない。 01が起動された場合、D1フィールドは1111 (
要求なし)にリセットされる。また、IMAsにフィー
ルドは、受理されたDIのレベルを優先度とする外部割
り込みが発生したのと同じ変化をする。 つまり、 ll1in (VIMASに、受理された01のレベル
)==〉新IMAsK となる。 υjヒム1国uL世倒 [例;本発明装置の遅延ディスパッチ (deiayed dispatch)]本発明装置で
は、外部割り込み処理ハンドラの中から発行したシステ
ムコールによってレディキューの状態が変わった場合に
、それに伴うディスパッチング(レジスタの入れ替えな
ど)が割り込み処理ハンドラから戻るまで遅らされる。 これは、多重割り込みに伴う矛盾を避けるためである。 これをDlの機能によって実現する。 皿提灸作 ・システムコールはTRAPAのEITVIEでは、V
IMASKでは、VIMASに=14を指定しておく。 これは、D1機能によフて、システムコール処理の最後
のディスパッチングを行うためである。 ・ディスパッチングの処理を行う部分は、D114によ
って起動される。 ・Iljは実行中の状態を表し°1′は実行を中断した
状態を表す。 −の9−ムコール 王 第363図に示す 01の機能を使えば、本発明装置の遅延ディスバッチの
処理をすなおに実現することができる。 内また、
多重割り込みやシステムコールのネストが起こフだ場合
にも容易に対処できる。 本発明のDCE(Delayed ontext Ex
ception)は、DECレジスタ(またはC5Wレ
ジスタ)中のDCEフィールドよりも小さい値になった
場合に発生するEITである。このa能は、コンテキス
トに関連した非同期の事象(入出力の完了など)の処理
をベンディングとして処理要求だけを登録したり、処理
順序をシリアライズしたりする時などに有効なものであ
る。 DECレジスタ(またはC5Wレジスタ)中のDCEフ
ィールドは、DCE要求を入れるためのフィールドは、
DCE要求を入れるためのフィールドである。 [)ECレジスタ(またはC5vレジスタ)はコンテキ
スト毎に固有のレジストであるため、コンテキスト毎に
別々のDCE要求を与えることが可能である。 DCEは各コンテキストに付随したものであるから、コ
ンテキストとは独立した外部割り込みの処理中(SM=
00場合)には、DCEは起動されない。 また、他のコンテキストAでより高い優先度のDCE要
求が出ていても、そのコンテキストAにディスバッチさ
れない限り、コンテキストAのDCEは起動されない。 別のコンテキスト8で出ているDCE要求がそれより低
い優先度あったとしても、コンテキストBに先にディス
パッチされれば、コンテキスト8のDCEが先に起動さ
れる。 DCEフィールドの値と、その時に起動されるDCEと
の関係は第365図のようになっている。 いずれの場合にも、SMRNG> DCEとなった時に
DCEが起動される。 (reserved)の指定をした場合、実際にはDC
E=000と同じ動作をする。ただし、将来の拡張のた
め、この機能を利用したプログラミングを行なフてはい
けない。 DCEの起動される可能性があるのは、SMRNGが大
きくなった時、またはDCEフィールドの値が小さくな
った時である。したがって、この条件に該当する以下の
命令において、DCEを起動するかどうかのチエツクを
する必要がある。 LDCsrc、 @psw ; ps%、Iは制御
空間中のPSWのアドレス しDCsrc、 @smrng ; smrngは制
御空間中のSMRNGのアドレス LDCsrc、 @dce ; dceは制御空間
中のDCEのアドレス LDCsrc、 @csw ; cs帆よ制御空間
中のC5wのアドレス ;ただし、C5%lIは実装され ない場合がある。 REIT RRNG なお、EIT起動時(外部割り込み、例外、TRAPす
へで含む)やJRNG実行時にもSMRNGの変化する
ことがあるが、EITやJ RNGの場合はSMRNG
の値が大きくなることはないため、DCEが起動される
ことはない。 DCE自体は、一つのEIT処理として起動される。 DCEのEITが起動された場合、DCEフィールドは
11!(要求なし)にリセットされる。SMRNGフィ
ールドは、一般のEIT処理と同じように、DCEのベ
クトル番号に割り当てられたEITVTEにしたがって
変化をする。DCEはコンテキスト毎の処理であるため
、起動されたEIT処理ハンドラでは、SPlではなく
spoを使用するのが普通である。EITVTEの設
定によっては、DCE処理でSM=0 (SPI使用)
に入ることも可能であるが、これは運用上の問題として
対処し、ハードウェアでは特にチエツクは行なわない。 REIT命令やRRNG命令によってDCEが起動され
た場合、実際にDCEを起動する処理はREITやRR
NGと同時に行なわれてもよいが、動作仕様上は、−旦
REITやRRNGの実行が終わってからEITを起動
するという形になる。たとえば、DCE=110の時に
RRNGでringlからring3に戻ると、そこで
DCEが起動されてr i ngOに入る。この時、P
RNGはringlではなく ring3となっていな
ければならない。DCEとDlや外部割り込みを比較す
ると、第366図のようになる。 入出力の完了通知などの場合には、外部割り込み処理ル
ーチンの中で、該当するコンテキストOCEを起動する
という流れになることもある。 DCEをソフトウェアによってシュミレーションするこ
とは不可能ではないが、一般には、スタック上に退避さ
れたPSWやPCの変更をしなければならないため、か
なり面倒である。割り込んだプロゲラロムが、割り込ま
れたプログラムのスタくツクハフオーへマットをすべて
知っていなければならなにいからである。 A9−9−2. D CEの、ス DCEは多重ネストができるとより効果の大きいものに
りなる。したがって、DCE要求が複数発生した場合に
、どのような処理をするかが問題となる。 氷室装置では、ネストの処理(要求のキューイング)は
ソフトウェアで行なう方針である。 く(複数のDCE要求のキューイング処理例〉〉(DC
E要求設定時〕 if (DCE=111) then 新しいDCE要求==> DCEフィールド/ *DC
E要求これだけ*/ lse 新しく発生したDCE要求を、リング順に構成されたD
CE要求キューに入れる ndif (DCE処理時〕 / *DCE起動の際、ハードウェアにより111==
>DCEとなる*/ if (DCE要求キューが空でない) thenDC
E要求キューの次のエントリをDCEフィールドにセッ
ト ndif A9−9−3. D CEの 1 〔例;入出力管理プログラムの起動〕 外部割り込みによって入出力完了が通知され、それによ
って、プロセスAの入出力管理部(ringl)がプロ
セスAに対して非同期に起動されるものとする(第36
7図参照)。 φ′ビは実行中の状態を表し9.′は実行を中断した状
態を表す。 ■の開始アドレスはプロセス(コンテキスト)毎に指定
されるべきものだが、実際にはDCEのEIT処理ベク
トルがプロセス間で共通であるため、O5でプロレス毎
のDCE要求テーブルを解析し、そこヘジャンブする必
要がある。 この図の場合は、外部割り込みが発生した時にたまたま
プロセスAが実行中だったわけである。他のプロセスの
実行中に人出力の外部割り込みが発生した場合、rin
g 1の入出力管理部の起動は、プロセスAへのディス
パッチが行なわれるまで遅延させられる。 ・録10. 零〇壮−の命 ビットパターン〔表記法に
関する注意〕 命令ビットパターンの表記は、次のように行なう。 −゛ 0にreserved (違反時例外発生)+°
lにreserved (違反時例外発生)このビッ
トが0(1)であれば処理が正常に行なわれ、このビッ
トが1(O)であれば予約命令例外(RIE)を発生す
る。 ゛パ 0にreserved (違反時も無視)、、、
Vero、87の°*9 ’It’ 1にreserved (違反時も無視)
ユーザへのマニュアルには、将来の拡’1のためこのビ
ットを0(1)にしておくように明記する。実際には、
このビットが0(1)であっても1(0)であっても動
作は同じである。 「違反時も無視」というのは、アーキテクチャ上あまり
好ましいことではないが、命令ピントパターンの割り当
て、将来の拡張性、命令の高速実行の上からやむを得な
い場合がある。 ”〜゛ 0にreserved (違反時動作を保証し
ない)°!゛ 1にreserved (違反時動作を
保証しない)ユーザへのマニュアルには、将来の拡張の
ためこのビットを0(1)にしておくように明記する。 実際には、このビットが0(1)の場合は正常な動作を
行なうが、1(0)の場合の動作はインプリメントに依
存して異なっている。 「違反時動作を保証しない」というのは、アーキテクチ
ャ上あまり好ましいことではないが、インプリメントや
命令ビットパターンの割り当て、命令の高速実行の上か
らやむを得ない場合がある。例えば、LDATE、MU
LX(7)第一ハーフワード<7)’!R’がこれにコ
亥当する。 Al0−1.命4のフォーマット別ビット割 当て〔ビ
ット割り当てに関する注意〕 ・本発明装置では、使用できるアドレッシングモードが
命令毎にかなり異なっており、そのチェツクをする必要
がある。チエツクを容易にするため、許されるアドレッ
シングモードが区別しやすいようにビットパターンの割
り当てを行なう、特定のアドレッシングモードを禁止し
ているオペランドの場合は、原則として、それがそのオ
ペランドを含むハーフワードだけで分かるようになって
いる。 ・Pビットは、原則としてオペランド毎(レジスタ直接
指定とイミディエート指定を除<)、および暗黙のスタ
ック弁明について一つずつ独立に入れる。命令パターン
中では、lplまたは”0゛で表す。 ただし、−S形の命令でカバーできる場合は、同じ命令
の短縮形ではPビットが入らないこともある。(PUS
H,POP、 PUSHAのみは、スタック参照に関す
るPビットがない、) ・ビットパターンのうちLVreservedで示され
ているものは、各メーカーで自由に使用してよい命令ビ
ットパターンである。この命令ビットパターンは、例え
ばICEとのインターフェースを行なうための、ユーザ
に解放しない命令として利用することができる。 以下第368図に示す。 A10−21、・命 の について上記のビット
パターン中で(RIE)で示されたパターンは、将来の
拡張のために予約された(reserved)のビット
パターンである。この命令ビットパターンを実行すると
、予約命令例外(RIB)は発生する。 このほか、インプリメントされていないオプションやサ
イズ(未実装の<<L2>>を含む)を指定した場合、
未定義のオプションを指定した場合、命令ピントパター
ンの′−° の部分を°l°にした場合、命令ビットパ
ターンの°÷°の部分を0”にした場合、命令中の°p
l 、 I Q+ のビットをl°にした場合、res
ervedの条件(cccc)や終了条件(eeee)
を指定した場合にも、すべて予約命令例外(RIE)と
なる。 現在、LDATE、 Ml;LXなどの例外を除けば、
原則として第一〜第四バイトについてはすべての命令パ
ターンをチエツクし、パターンが違っている場合には、
RIHにしている。第五、第六バイトについてはチエツ
クを行わず、パターンが違っていてもエラーとはしてい
ない。 上記のビットパターンのうちで、特に(RIE−X)で
示したものは、第−IWが汎用アドレッシングモードを
含み、第二IIWまで読まないとRIEであることがわ
からないビットパターンである。この場合は、第一1開
のEaの拡張部の後に第二IIG(が置かれる。 現在使用していないビットパターンのうち、将来の機能
拡張にともなって実装の予定のあるパターンや、他のメ
ーカーのチップと動作の異なりそうなパターンについて
は、特に積極的に検出を行なうべきである。これは、そ
の命令パターンを実行した場合の間違いを防ぐためであ
る。このような方針に基づいて場合、予約命令の例外(
+?IE)のチエツクの優先度は次のようになる。 ↑高優先度 (既に意味が決まっているもの) 未定義の<<L2>>機能の指定 64ビツトサイズの指定(RR,MM、&JW、 SS
= 11)(命令の拡張に利用される可能性の高いもの
)(RIE)となっている命令パターンの指定BVPA
T NBVSCH(7) I、Xl ノ’+’PST
LB〜EXITD:Gのグループの第二HWの1−9P
ビツト指定 (命令の拡張にはまず利用されないもの)LDATE〜
INDEXのグループの第一11W’!R’の1!1S
TATE〜旧NSのグループの第二I(W’+W’の°
+゛PSTLB −EX ITD : G (7)グル
ープの第一〇W’+X’(7)’+’ACB:R,SC
B:Rの第二IIHの1−1↓低優先度 現在チエツクすべきビットパターンは前述のような仕様
になっているが、今後、このような方針に基づいて予約
命令例外の検出に関する詳細仕様の調整を行ない、一部
は変更の行われる可能性がある。 なお、命令をどこまで読んだ時にHITを起動するかと
いうことは、特に規定しないものとする。第一)IWだ
けでBITを起動することが明らかである場合にも、第
二HWまで読んでもよい。また、オペコード部だけでB
ITを起動することが明らかである場合(予約命令例外
など)に、Eaの拡張部まで処理しても構わない。 ^10−3.オペーンドフィールド U第369図に示
す。 ・サイズ関係 Of 16 bit 10 32 bit 11 64 bit ・アドレッシングモード 競 areg十など 狙 16 bit相対間接モード 迎 32 bit相対間接モード ■ 付加モード ・レジスタ指定 競 (特殊) 叶 (SP) 10 absまたは0 11 PC 付力已ロ二丘 El<Rx>MS PXXD<d4>−゛は0にリザ
ーブされるビット 傘車<Rn>Q本事XX****宰R1がインデクス木
本−01本本−*宰率宰本 インチフスナシ木本 −t
it 宰2ネ率本本率 RCがインデクスxx≠0
0によるスケ− リングは利用できない 章章木本傘本率本 本傘本0<d4> 4ピツ
トテイ 7!、 7” L/ −スメント 傘零*率木本本本 *宰宰1−Of 16ヒー/
ドア’イ スラ°レースメント 本*本*木本**傘本本1−10 32ビーツトデイ
スプレースメント 傘木本本本零本本本ネ本1−11 64ヒ−ントテイ
スフレースメント 〈d4〉のサイズ指定部分とMISCモードのdjsp
:16.diSρ=32の指定部分が同じビット位置に
なっている。 玉木玉二上 POOOxxxx MISCP=0:5h0000
(RIE) 0001 (RIB) 0010 (RIB) 0011 (RIE)−aads:64吐00
2SP+(read:asp+、write:ille
gal。 raw:illegal) 0101 2SP+(write:illegal、
read:asp+。 r+*w:illegal) 0110 (RIE) 0111 (RIE) 1000 (RIB) ・ 1001 1ilads:16 1010 aads:32 ■■ 絶対付加モード 1100 Imm+(read:asp+、evri
te:illegal。 rmw:illegal) 1101 a(disp:16.Rn)1110
aRn 1111 a(disp:32.Rn)0001
<Rn> Rn
5h1001 xxxx
(RIE)POIO<Rn> a(disp:
16.Rn) P−0:5hPo
ll <Rn> aRn
P=0:5hP100 <R
n> a(disp:32.Rn)Plot
<d4> a(disp:4.FP) <<
L2>>PIIQ <Rn> レジスタ相対付加モー
ドPill <d4> 1i(disp:4.
SP) <<L2>>・零車本1木本車本のパター
ンの時には拡張部が付かない。 ・aads:64の割り当てが変則的であるが、64ビ
ット拡張部に対しては、おそらく内部の回路でも特殊な
扱いが必要であると思われる(例えば、本発明装置でも
a(−disp:64. Rn)は基本モードで実現で
きなGりので、それほど問題ではないと思われる。むし
ろ、付加モードとの関係が統一的になるようにした。 未定義のアドレッシングモードを指定した場合(EA中
のPビット・1を含む)には、予約命令例外(RIE)
となる。具体的には、以下のパターンの場合にRIEと
なる。 (Ea) (
Sh)oooo oo本*
oo oo寧本000
0 011$
00 011傘0101 *本傘傘(<<L
2>>未実装時のみ)otii *傘傘* (<<L2
>>未実装時のみ)11*率 **本木 本加モードでリザーブのパターンを指定した場合にも、
予約命令例外(RIE)となる。M、lで<Rn〉≠0
000.0001の場合、D・1で<d4〉≠0001
,0010以外の場合、P=1の場合、XX=11の場
合もこれに含まれる。 付加モードのある段で、PCに対して、×2、×4、×
8以外のスケーリングを指定した場合には、ぞの段の終
了処理後の中間値として、インプリメントに依存した不
定値が入る。 EITにはならない。 <<L2>>未定義で、5段以上の付加モードを指定し
た場合にも、予約命令例外(RIB)となる、〔詳細調
整中、予約機能例外RFEとなる可能性もある。〕命令
によって使用できないアドレッシングモードの組み合わ
せを指定した場合(JMP #imm−data、CM
P#0. Illなど)にも、予約命令例外CRI E
)となる。 <<L2>>未実装のために実行できない組み合わせを
指定した場合も、これに含まれる。(これに当てはまる
ものは、レジスタ指定のビットフィールド命令である。 ) AIO−5,命令オプシヨンのビット 当ていずれの
場合にも、最初に記述した方(オプション値が0.00
.、の方)がアセンブラでのデフォルトになる。 cccc Bcc、TRAP/ccでの条件指定ee
ee ストリング命令、QSCH命令での終了条件指
定 ρ+Q、、Pビット指定(Q3.は、Pビットの必要な
オペランドが複数の場合) b /F=O,/B=l(BSCIl、BVSCI
l、BVMAP、BVCPY、SCMP。 5M0V、QSCII) r /F=0. /R−1(SSCH)Cハ=O+
/S−1(CIIK) −CIIK、change 1
ndex valueの”c′ d 10J、/bl(BSCI、BVSCII)−
dataの1d1m /NM=0./MRd(QS
CII)−maskの1.1p /AS=0./S
S・1(PTLB、PSTLB、LDATE)−PTL
B、5pecific 5paceの1pIttt
/PT・000./5T−001,/AT・110.
(RIE) =010〜101.111(1’5TL
B、LDATE、5TATE)xx /LS=00
./C3J1. (RIE) =10.11(LDCT
X。 5TCTX) Δ10−6.8cc命令、TRAP/cc命 の条イ”
、(cccc)eCCCの値の割り当ては、第370
図のようになる。 ^10−7.終了条件の2(eeee)eeecの値の
割り当ては、第371図のようになる。 0000〜0101については、cccc (Bcon
d命令の条件指定)のビットパターンに意味を合わせで
ある。特に、LTU、 G[!Uは、5UBX命令など
におイテ、オペランドを符号なしデータと考えた場合の
比較結果がLflagに反映されるのに合わせたもので
ある。 なお、<<L2>>の終了条件のうち、二つの条件が、
or。 で結ばれているものについては、そのうちのいずれの条
件で終了したかを示すために、MJlagを使用する。 MJlagがセットされるのは、原則としてR4との比
較によって 終了した時であり、具体的には第372図のような場合
である。 MJ1ag=1の条件を満たさなかった場合、および、
これ以外の終了条件で終了した場合には、MJlag・
0となる。 <<L2>>の終了条件をインプリメント
しない場合には常にMJlag・0となるが、その場合
でも、将来はMJ1ag≠0となる場合が生じるという
ことを、マニュアルに明記しておくのが望ましい。 Al0−8. BV?lAP命五の’:2−)’R5の
下位4ビツトに人、れる演算コードである。 これを第373図に示す。 Δ10−9.7ドレツシングモ」 各命令のオペランドと、禁止されているアドレッシング
モードモードとの対応を第374図に示す。 Oの組み合わせに対しては、そのアドレッシングモード
モードが使用可能である。 ×の組み合わせに対しては、それを実行しようとした場
合に予約命令例外(RIE)が発生ずる。 ・: 1 x、 −□ 、7合の羊鞭仇掻ど静ヱ町
辺セツ各命令の解説の項では、高機能命令の詳細や終了
時のレジスタ値について明確に述べられていないので、
ここでまとめて説明を行なう。 什ヒL五 lの ハL″″″の 針 5M0V/B、SCMP/B、 BVMAP/B、 B
VCPY10テは、@−5Pとの対応などからプリデク
リメントの形で処理を行なうという考え方と、5M0V
/F、5SC)l/Rなどとの整合性からボストデクリ
メントの形で処理を行なうという考え方とがある。例え
ば、:げ100〜H’1ff(7)領域を5NOV/B
、BC,l:よッテ転送する場合、5NOV/Bがプリ
デクリメントの仕様であればレジスタの初期値はl+’
200となるし、5M0V/Bがポストデクリメントの
仕様であればレジスタの初期値はll’lffとなる。 [ポストデクリメントのデメリットコ 5M0V/Fと5M0V/B、SCMP/FとSCMP
/Bとの対称性が悪くなる。例えば、Hゝ000000
ffまでの領域を占めるストリングに対し T 5NOV/Bを実行する場合、5M0V/B、Bt
’あればポインタの初期値としてll’oo0000f
fを設定し、5NOV/B、Wテあればポインタの初期
値としてlI’oo0000fcを設定する必要がある
。 [プリデクリメントのデメリット] 5SCII 、 B5Clなどのサーチ系の命令との整
合性が悪くなる。もし、5SCHで、命令終了後のポイ
ンタ最終値が必ず終了条 件成立のエレメント(サーチ結果のエ レメント)を指すという原則を設ける とすると、/F、/B、/Rといった処理方向によって
ブリ更新/ボスト更新を変え ることはできなくなる。したがって、 /Bのみプリデクリメントとするわけにはいかない。(
実際には5SCH,/Bは存在しないが、BSCH/B
などの仕様との関連がある) TRONCHII’では、 [ポストデクリメントのデ
メリット]の方を重視し、5M0V/B、SCMP/B
テハプリデクリメントの仕様にする。 次に、5M0V、SCMP、5SC1l力終了条件ニよ
ッテ終了した場合、ポインタの更新を行なってから命令
を終了するか、ポインタの更新前に命令を終了するか、
という問題がある。 [ポインタの更新前に命令を終了するデメリット] エレメントサイズによって命令を終了 する場合には、ポインタの更新が行な われ、ポインタが次のエレメント(/Fの場合はまだ処
理の終わ)ていない工 レメント)を指すようになってから命 令を終了するので、その仕様とは合わ なくなる。つまり、終了条件が成立す るかどうかによってポインタを更新し て良いかどうかの状況が変わるため、 仕様がわかりにくくなる上、高速なイ ンプリメントが難しくなる。 また、5SCHで、サーチが成功してから連続して次の
サーチを行なう場合には、次の5SCII実行前に別命
令でポインタの更新が必要になる。5M0V、SCMP
でも同様である。 [ポインタの更新後に命令を終了するデメリット] 命令実行後のポインタ値が終了条件 (サーチ条件)成立のエレメントより も進んでいるので、5SCH命令としてはすなおな仕様
ではない。BVSCH、B5Cl+命令の仕様とも合わ
ない。 TPONCHI Pでは、 [ポインタの更新前に命令
を終了するデメリットコの方を重視し、終了条件成立の
場合には、ポインタの更新後に命令を終了するという仕
様にする。したがって、5M0V/F、SCMP/F、
5SC)l/F、/R命令終了後のポインタは、終了条
件の成立したエレメントの次のエレメントを指すことに
なる。また、5M0V/B、SCMP/B命令の場合は
プリデクリメントでポインタを更新するため、命令終了
後のポインタは終了条件の成立したエレメントを指すこ
とになる。 5M0V/ B 、SSCMP/Bト(7) 仕様’t
合h セルトL”) 、を味で、BVMAP/B、B
VCPY/Bの場合にも、演算の対象となるビットフィ
ールドの最大オフセット+lをR1、R4で指定する。 ただし、BVSCH、B5Cl+については、命令終了
後のビットオフセットが直接サーチ対象のビットを指し
ている方が便利だと考えられるため、/F、/FJとも
そのような仕様にする。また、QSCIIについては、
ポインタがブリ更新となっているため、5SCH、B5
Cl+とはポインタ更新のタイミングが異なフている。 結局、BSCH/F(BVSC)l/F)、5SCII
/F、QSC)l/Fのサーチのパターンをまとめると
、次のようになる。 BSC)I/F 現在ポインタの指しているものから
サーチする。 サーチ終了後のポインタは、 見付かったデータを指す。 5SCH/F 現在ポインタの指しているものからサ
ーチする。 サーチ終了後のポインタは、 見付かったデータの次を指す。 QS(Jl/F 現在ポインタの指している次のもの
からサーチする。 サーチ終了後のポインタは、 見付かったデータを指す。 ストリング命令の場合、エレメント数R2は符号なしの
数として扱われる。これは、R2を符号なしと考えるこ
とにより、R2=0の指定によってエレメント数をI+
’ 100000000と解釈し、エレメント数によ
る終了を行なわないようにできるためである。この機能
は、言語Cのstrcmp関数の実現などに利用できる
。また、インプリメント上も、R2を符号なしと考える
方がエレメント数による終了の判定が楽にな一方、ビッ
トフィールド命令のwidthは、以下のような理由に
より、固定長ビットフィールド命令、任意長ビットフィ
ールド命令とも符号付きとして扱うことにする。 ・命令実行時、ビットフィールド命令のwidthはo
ffsetに加算される形になるが、offsetは符
号付きである。widthを符号なしとすると、符号付
きと符号 なしの数を足すことになり、すっきりしない
。 ストリング命令のエレメントサイズの 場合は、サイズを乗じた上でポインタ に加算するのであるから、符号なしの 方が自然である。 ・命令実行の上で符号付きか符号なしかの違いが出てく
るのは、任意長ピッ トフィールド命令t’widthがH’8000000
0〜H’ffffffffの場合である。誓1dthを
符号付きとしておけば、widthがこの値の時VJI
agをセットするだけで命令を終了するが、 widthを符号なしとした場合には、widthがこ
の値の時もビットフィールド操作を行なうことになる。 しかし、widthが H’ 80000000〜1げfffffHfだとする
と、offset + widthの値を符号付きとし
て扱う場合には既にオーバーフローしているし、off
set + widthを符号なしくあるいは33ビッ
ト符号付き)として扱う場合にも、 offsetの値によってはオーバーフローする。 オーバーフローに関しては、 roffset +wi
dthがオーバーフローした場合には動作を保証しない
」となフているのであるから、同じようなインプリメン
トをするのであれば、ν1clthを符号なしとしても
「動作を保証しないJケースが増えるだけである。 豐1dthを符号なしとして、しかもwidth >H
’80000000の場合の動作を保証するのであれば
、ハードウェアの負担を伴う。 ・ストリング命令の場合は、終了条件によって命令を終
了する場合があった ため、エレメントサイズによる終了をしたくない時にO
を設定するという使い方がある。0で無限大(H’ 1
00000000)を表現するには、どうしてもエレメ
ントサイズを符号なしとして扱う必要があった。これに
刻して、BVMAP、BVCPYI?はwidth以外
に命令終了の要素がないため、プログラミング上、wi
dthとして必ず意味のある値を設定することになる。 その場合は、 「レジスタ上の値は原則として符号付き
の数と考える」という原則に合わせる方が自然である。 [ストリング命令、任意長ビットフィールド命令の基本
原則のまとめコ ・サーチ系の命令では、ポインタ更新のタイミングはサ
ーチ方向に依存しな い。 B5Cl、BVSC1l’t’は、/F、IBともサー
チ終了後のポインタは見付かったビットを指 す。 5SCHでは、/F、lRともサーチ終了後のポインタ
は見付かったエレメントの次の エレメントを指す。 ・実際にデータを操作する命令では、/Fの場合にポス
トインクリメント、IB の場合にプリデクリメント
の形で処理を行なう。 これに該当するのは、5M0V、SCMP。 BVMAP 、 BVCPYテある。 5STR,BVPATは/F(7)みであるが、やはり
同じ原則にあてはまる。 ・ストリング命令では、エレメントサイズは符号なしと
して扱われ、′09の場 合はH’ 10000000
0を表わす。一方、任意長ビットフィールド命令では、
wid thは符号付きとして扱われ、widthが
I+’00000001〜ll’7fffffffの場
合にのみ 実際のビットフィールド操作を行Al1−2
. 鵞 ゝ ロ Δの萱 、 −影
10V SMOVのオペレーションをまとめると、次のようにな
る。ただし、最終的な結果が同じであれば、メモリアク
セスの順番が下記のものと異なっていても構わない(他
の高機能命令も同様)。また、SrCとdestがオー
バーラツプしていた時に、正しくない方のオプションを
使用した場合(src< destで/Fを使用した場
合、およびSrC>destで/Bを使用した場合)の
動作も、下記の通りでなくてもよい。 [5M0V/Fのオペレーション] 0 ==> VJlag epeat R2−1==> R2 mem[Ro] ==> mem[R1] ==>te
mp RO+ 5ize ==> RO Rl + 5ize ===> Rlcompa
re temp with R3,R4and set
Fjlag、 M−flagaccording
Lo eeee/ネ終了条件成立の場合 Fjlag:1となるネ/ if (FJIag = 1) thenxit chec3interrupt until (R2= O) 1 ==> VJIag [5NOV/Bのオペレーション] 0 ==> VJIag epeat R2−1==> R2 RO−5ize ==> RO Rl −5ize ==> Rl mem[RO] ==> mem[R1] ==>te
mp compare temp with R3,R4an
d set FJIag、 M−flagaccord
ing to eeee /ネ終了条件成立の場合 FJIag=1となるネ/ if (FJIag = 1) thenxit check−1nterrupt until (R2= O) 1 ===>、、V−flag SNOVでは、R2の初期値が何であっても、かならず
1個以上のエレメントは処理される。 5NOVの終了要因をまとめると、次のようになる。 1、エレメント(データ)数(R2)による終了エレメ
ント数によって命令を終了した 場合には、VJIag=1となる。20ケースとは同時
には起こらない。 2、終了条件による終了 この時は、FJ!ag=1となる。終了条件を満足した
エレメントの転送も行なわ れる。 ≦2辻 SCMPでは、エレメント数による命令の終了と終了条
件による命令の終了のほかに、比較データの不一致によ
って命令を終了することがある。SCMPでデータの不
一致により命令を終了した場合にも、終了条件により命
令を終了した場合と同様に、ポインタの更新が行なわれ
てから命令が終了する。 SCMPでは、エレメント数
による終了要因と他の終了要因とが同時に発生すること
はないが、終了条件とデータネ一致の終了要因が同時に
満たされる可能性はある。 SCMPがエレメント数によフて終了した場合には、次
のエレメントの比較は行なわず、次のエレメントが不一
致または終了条件成立てあっても、VJIag=0.F
−f Iag=0.Z−flag=1として命令を終了
する。 SCMPのオペレーションをまとめると、次のようにな
る。ただし、最終的な結果が同じてあれば、メモリアク
セスの順番が下記のものと異なっていても構わない。こ
れと等価の動作をすればよい。 [SCMP/Fのオペレーション] 0 =:> V−flag epeat R2−1==> R2 mem[Ro] ==> temp1 meo+[R1] ==> temp2RO+ 5i
ze ==> RO Rl + 5ize ==> Rlcompar
e templ with temp2and set
ZJlag。 し−flag、 X、、flag /ネデータ不一致の不合 致JIag=Oとなる*/ compare templ with R3゜R4a
nd set FJIag。 −fla3 according to eeee /*終了条件成立の場合 Fjla8=1となる*l if (Fjlag = 1 、or。 ZJlag = O) then xit /*終了条件またはデ ータネ一致による終了 check−interrupt until (R2= O) 1 ==> V−flag [SCMP/Bのオペレーションコ 0 ==> VJIag epeat R2−1==> R2 RO−5ize ==> RO Rl −5ize ==> Rl mem[Ro] ==> tempt mem[R1コ ==> temp2compare
tempt with temp2and set
Zjlag。 Ljlag、 X−flag /ネデータ不一致の場合 Zjlag=0となる ネ/ compare templ with R3゜R4a
nd set FJIag。 門−flag accordin8to eeee /*終了条件成立の場合 Fjlag=1となる*l if (Fjlag = 1 、or。 Z−flag = O) then xit /を終了条件またはデ ータネ一致による終了 */ chec31nterrupt until (R2= 0) 1 ==> V−flag SCMPの終了要因をまとめると、次のようになる。 1、エレメント(データ)数(R2)による終了この時
、Z、、flag=1. F−flag=0. V−f
lag=1となる。2,30ケースとは同時には起こら
ない。 2、終了条件による終了 この時は、FJlag=1となる。終了条件を満足した
エレメントの比較も行なわ れ、その比較結果がjflag、L−flag。 XJIagに設定される。比較が不一致だフた場合は、
2,3の2つの終了要因が同時に満たされたことに相当
する。 3、比較中のエレメントの不一致による終了この時は、
不一致のあったエレメント の比較結果がZ−flag(=0)、L−flag。 X−flagに設定される。V−flagは0となる。 8江l 5SC11が終了条件(検索条件)によつそ終了した場
合には、/F、/Rとも、命令実行後のポインタは終了
条件の成立したエレメントの次のエレメントを指す。ま
た、5SCI+がエレメント数によって終了した場合に
も、命令実行後のポインタは次のエレメントを指す。 5SCIIのオペレーションをまとめると次のようにな
る。 [5SCIl/Fのオペレーション] 0 ==> VJlag epeat ・ R2−1==> R2 mem[Ro] ==> temp RO+ 5ize ==> RO compare temp with R3,R4a
ndset FJlaH,道Flag according to eeee /零終了条件成立の場合 Fjlag=1となる*/ if (FJIag = 1) then exit/
ネ終了条件(検索条件) による終了、t/ chec31nterrupt until (R2= O) 1 ==> VJlag [5SCI/Rのオペレーション] 0 ==> Vjlag epeat R2−1==> R2 mem[Roコ ==> temp RO+ R5==> RO compare temp with R3,R4a
ndset Fjla3.町flag according to eeee/ネ終了条件成
立の場合 jflag=1となる*/ if (Fjlag = 1) then exit/
*終了条件(検索条件) による終了*/ check−1nterrupt until (R2= 0) 1 ==> VJIag SSCHの終了要因をまとめると、次のようになる。 1、エレメント(データ)数(R2)による終了この時
、V−flag=1となる。20ケースとは同時には起
こらない。 2、終了条件(検索条件)による終了 この時は、jflag=1となる。 鐸B 55TRではフラグ変化は起こらない。5STRのオペ
レーションをまとめると次のようになる。 [5STRのオペレーションコ epeat R2−1==> R2 R3==> mem[R1コ R1+ 5ize ==> R1 chec3interrupt until (R2= O) A −・丁 ゛ロ4零−Bのレジ 菌TR0NCHI
Pで高機能命令を実行した場合、命令終了時の各レジ
スタの値は次のようになる。 なお、RXinitは命令実行前のレジスタR×の値を
示す。また、RXendは命令実行後のレジスタRXの
値を示す。 [:BVSC11] /Fの時は、オフセットがR11nit〜R11nit
+R21nit−1 の範囲をサーチする。 /Bの時は、オフセットがR1ini t〜R1ini
t−R21nit+1 の範囲をサーチする。 R21ni t(width)≦Oの場合は、Vjla
gをセットして命令を終了す る。 R1,R2は不変である。 一サーチが成功した場合 RO(base address):不変R1(off
set): サーチ結果見付かったビットのビ ットオフセット。 R2(讐1dth): まだサーケしていない
ビットフィールドと見 付かったビットとを合 わせたビットフィール ドの長さ つまり、/Fであれば R21ntt+R11nit−Rlend。 /BであればR21nit− R11nit+R1endとなる。 −サーチが失敗した場合 RO(base address):不変R1(off
set): 最後にサーチサーチしたビットの次
のビット オフセット。 つまり、/Fであれば R11nit+R21nit、/BであればR11ni
t−R2initとな る。 これはBSCHと同じ考え 方である。 R2(width): 0 [BVMAP] [BVCPY] /Fの時は、R11nit 〜R11nit+R21n
it−1のビットオフセット を持つ領域がsrc、R41nit 〜R41nit+R21nit−1 のビットオフセットを持 つ領域がdestとなる。 /8の時は、Rf tnit 〜R11nit−R21
nit+1のビットオフセットを持 つ領域がsrc、R41nit−1〜 R41nit−R2initのビットオフセットを持つ
領域が destとなる。 R21ni t(width)≦0の場合は、何もせず
に命令を終了する。 R1,R2,R4は不変である。 RO(src base): 不変R1(src
offset): /FであればR11nit+R1
1nit、/Bであれば R11nit−R2initとなる。 R2(width): 0 R3(dest base) 不変R4(dest
offset) /FであればR41nit+R2
1nit、/Bであれば R41nit−R2initとなる。 R5(演算の種gl) 不変(8VMAP(7)み)
[BVPATコ R41nit 〜R41nit+R21nit−1(7
)ビットオフセットを持つ領域がdestとなる。 R2init(width、)≦0の場合は、何もせず
に命令を終了する。 R2,R4は不変である。 RO(pattern): 不変R2(widt
h): 0 R3(dest base): 不変R4(des
t offset): R41nit+R21nit
R5(演算の種類) 不変 [5M0Vコ /Fの時は、 ROinit−S−ROinit+R21nitネエレ
メントサ・イズー1のアドレスを持つ 領域がsrc。 R11nit 〜R11nit+R21nit*エレメ
ントサイズ−1のアドレスを持つ 領域がdestとなる。 lBの時は、 ROiniL−1〜ROinit−R2initネエレ
メントサイズのアドレス を持つ領域がsrc、 R11nit−1〜R11nit−R2initネエレ
メントサイズのアドレス を持つ領域がdestとなる。 例えば、H’0000〜H’00ffのストリングをH
’ 0300〜ll’03ffに転送する場合、5M0
V/F、Wテ:ffビーすると、RO=ll’0000
.R1=H’0300.R2=l+’0040SMOV
/B、W1? :12ピーすると、RO=)l’o10
0.R1=)I’0400.R2=)l’0040とす
ればよい。 ただし、終了条件が成立した場合には、処理が途中で打
ち切られる。終了条 件の成立したデータもdest側に転送される。 −エレメント数によって終了した場合 (Lrlag=1) RO(src address): /FであればR
Oi n i t+R21nitl:工ルメントサイ ズ、 lBであればROinit− R2i n i t*エレメントサイ ズ R1(dest address): /FであればR
11nit+R2i n i t*エレメントサイ ズ、 lBであればR11nit− R2initネエレメントサイ ズ R2(エレメント数)二〇 R3(終了条件l): 不変 R4(終了条件2): 不変 一終了条件が成立して終了した場合(jflag=l) RO(src address): /Fの時終了条
件の成立したSrCのエレメントの 次のエレメントのアド レス lBの時終了条件の成立 したsrcのエレメントの アドレス R1(dest address): /Fの時終了条
件の成立したsrcのエレメントの 次のエレメントを転送 すべきdestのアドレス lBの時終了条件の成立 したsrcのエレメントを 転送すべきdestのアド レス /F、lBともR11nit+ ROend −ROi n i tとなる。 R2(エレメント数):まだ転送されていないエレメン
トの数 /Fの時R21nit−(ROend−ROinit)
/エレメント数 イズ、 lBの時R21nit−(ROinit、、−ROen
d)/エレメントサ イズとなる。 R3(終了条件l): 不変 R4(終了条件2): 不変 (:SCMP] /Fの時は、 ROinit 〜ROinit+R21nitネエレメ
ントサイズ−1のアドレスを持つ 領域が5rcl。 R11nit〜R11nit+R21nit*エレメン
トサイズ−1のアドレスを持つ 領域が5rc2となる。 lBの時は、 ROinit−1〜ROinit−R2initネエレ
メントサイズのアドレス を持つ領域が5rcl、 R11nit−1〜R11nit−R2initネエレ
メントサイズのアドレスを 持つ領域が5rc2となる。 例えば、Il’0O00−)1’00ffのストリング
をH’0300−H’03ffのストリングとを比較す
る場合、 SCMP/F、%+Iで比較すると、 RO=H’0000.RI=l’0300.R2=l+
’0040SCMP/B、%Ilで比較すると、 RO=H’0100.R1=ll’0400.R2=1
1’0040とすればよい。 ただし、終了条件が成立した場合には、処理が途中で打
ち切られる。終了条件 の成立したエレメントについても比較が行なわれ、その
結果がLjlag、X−flag。 Zjlagにセットされる。また、比較中に不一致のエ
レメントが見付かった場合にも、処理が途中で打ち切ら
れる。 −エレメント数によって終了した場合 (VJlag=1) RO(srcl address): /FであればR
Oinit+R21nitネエレメントサイズ、 lBであればROinit− R2init*エレメントサイズ ただし、R21nit<Oの場合 には無変化 R1(src2 address): /FてあればR
11nit+R21nitネエレメントサイズ、 lBであればR11nit− R2initネエレメントサイズ R2(エレメント数)二〇 R3(終了条件l): 不変 R4(終了条件2): 不変 一終了条件の成立、またはエレメント値の不一致によっ
て終了した場合 (Fjlag=I 、or、 Z−flag==0 )
RO(srcl address): /Fの時終了条
件の成立した(または不一致であ った) srclのエレメントの次の エレメントのアドレス lBの時終了条件の成立 した(または不一致であ った) srclのエレメントのアド レス R1(src2 address): /Fの時終了条
件の成立した(または不一致てあ った) srclのエレメントの次の エレメントと対応する 5rc2のエレメントのアド レス /8の時終了条件の成立 した(または不一致であ った) srclのエレメントと対応 する5rc2のエレメントの アドレス /F、lBともRIinit+ ROend −ROi n i tとなる。 R2(エレメント数):まだ比較されていないエレメン
トの数 /Fの時R21nit−(ROend−ROinit)
/zレメントサイ ズ、 lBの時R21nit(ROinit −ROend)/エレメントサイ となる。 R3(終了条件1): 不変 R4($?了条件2): 不変 [5SCH] /Fの時は、 ROinit、〜ROinit+R21nit*エレメ
ントサイズ−1のアドレスを持つ 領域を検索する。 /Rの時は、 ROinit−ROinit+R5ネR21nit−1
のアドレスを持つ領域を、R5H に飛び飛びに検索する。 ただし、終了条件(検索条件)が成立 した場合には、処理が途中で打ち切ら れる。 −エレメント数によって終了した場合 (VJIag=1) RO(src address): /FてあればR
Oinit÷R21nitl:エレメントサイズ、 /RであればROiniL+ R2in i t*R5 R2(エレメント数)二〇 R3(終了条件l): 不変 R4(終了条件2): 不変 R5(*”インタ更新値): 不変 −終了条件(検索条件)が成立して終了した場合(FJ
lag=1) RO(src address): 終了条件の成立
したSrCのエレメントのアド レス R2(エレメント数):終了条件の成立したエレメント
と、まだ検索 されていないニレメン トの合計数 /Fの時R21nit−(ROend−ROinit)
/エレメント数 イズ、 /Rの時R21nit−(ROend−ROinit)
/R5となる。 R3(終了条件l): 不変 R4(終了条件2): 不変 R50°インタ更新値): 不変 [5STR] R11nit−R1init+R21niL*エレメン
トサイズ−1のアドレスを持つ領域 に、R3で指定されるデータを繰り返 し書き込む。他のストリング命令と は異なり、終了条件の指定名よ行なわ ない。また、フラグのセットも行な わない。 R2init(width)≦Oの場合は、即座に命令
を終了する。R1,R2は不変である。 R1(dest address): R11nit+
R21nit*エレメントサイズ R2(エレメント数):0 R3(書き込みデータ):不変 [QSC)I ] −キュー終了値(R2)によって終了した場合(V−f
lag=1) RO(entry address):R21nitR
1(privious entry):ROendで示
されるエントリの直前(/Fの場合) または直後(/Bの場合) のエントリのアドレス R2(キュー終了値):不変 R3(終了条件l): 不変 R4(終了条件2): 不変 R5(オフセット):不変 R6(マスク): 不変 −終了条件(検索条件)が成立して終了した場合(FJ
Iag=1) RO(entry address):終了条件の成立
しているキューエントリのア ドレス R1(privious entry):ROendで
示されるエントリの直前(/Fの場合) または直後(/Hの場合) のエントリのアドレス R2(キュー終了値):不変 R3(終了条件l): 不変 R4(終了条件2): 不変 R5(オフセット):不変 封−IAj2.−オご一久ンー1力51〕渉しな場合の
動作−つの命令が複数のオペランドを持ち、その中で、
dsPト、 1−St’モードとS11を参照するモー
トとを併用した場合には、asP+、 a−3Pモード
によっ°C行進されたSP値がいつから反映されるかと
いうことが問題になる。この問題をより一般的に考える
と、オペランドが1−渉しζいた場合の動作を明確に規
定すればよいということになる。 この試料は、本発明装置で、命令中のオペランドが干渉
を起こした場合に、その動作をきちんと定義することを
目的としたものである。資料の最初の方でこの問題に対
する考え方を述べ、資料のこうせはんでは、実際に本発
明装置の動作の規定を行っている。 A12−1.命童犬丘±1灰 オペランド干渉の問題を整理するために、まず、各命令
からメモリやレジスタに対して行われる「ead、 w
ri to、 rttad−s+odiry−wri
Laの基本°rツクセス:i作をすべて含むような仮想
的な命令パターンを考え、それを以ドのようにモデル化
する。 RAl、 第一・readオペランド(IJOI)
実効アドレス計算 ■ RRl、 第−readオペランド(Rot)読み
だし RA2. 第二readオペランド(RO2)実効
アドレス計算 ↓ RR2,第二readオペランド(R02)読みだし ↓ R^3. 第三readオペランド(RO3)実効ア
ドレス計算 ↓ R1?3. 第二readオペランド(RO3)読
みだし AAl、 第−addressオペランド(AOI
)実効アドレス計算 ^^2. 第一・addressオペランド(AO2
)実効アドレス計算 ↓ WAl、 第・=wriLeオペランド(Hot)
実効アドレス計算 ?IA1. 第−read1odify−writ
eオペランド(問1)実効アドレス計算 MRl、 第−read−modify−wri
teオペランド(MOI)読みだし ↓ !Xi wn、命令の実行(1〜n) ↓ MWl、 第−read−modify−writ
eオペランド(Mol)−7き込み 五 四1. 第一・−riLeオペランド(間1)書き込
み ・モデルを構成するRAI−Mlの夫々の要素を1−ス
テップ、1と呼ぶ。 ・asp+、 1−5llのアドレッシングモードを指
定した場合、Sll値の更新は1実効アドレス計算jの
ステップ(RAl、Rへ2.Rへ3.?IAl、−八1
)で行へれるものとする。 ・各ステップは、次のいずれかのパターンでリソースを
“?クセスする。ただし、1リソース」とはメモリまた
はプログラムから見えるレジスタを指す。 一リソースアクセスなし 一一一つまたは複数のリソースからのread−−一つ
のリソースへのwriLe ([X1〜1EXn、MW
I。 賀引のみ) −リソースSPのread−modify−wriLe
(R^1.R^2゜k^3.MAl、−^l、賀八2
へ ・各ステップでリソースの値の更新があった場合には、
次のステップから更新された値が反映される。 ・一般の命令では、このうち一部のステップのみが存在
する。 ・F!Xl 、〜hXnのステップは、実際には、命令
の種類によってuXl、EX2.Eχ3・・・のいくつ
かのステップに分かれ°ζいる。 上記のモデルでは、各ステップで書き込みを行なうリソ
ースが高々 ・つであること、Sllのr l! a
dmodify−writeのケースを除けば、一つの
ステップ内でreadとwriLeが混在するケースは
ないごと、リソースに古き込んだ値が次のステップから
反映されること、といった条件を明らかにしているので
、ステップ間で共通のオペランドをアクセスした場合に
も動作は明確に規定される。したがって、各命令の動作
を上記のモデルにうまく当てはめることができれば、オ
ペランドが重なっていた場合の動作もきらんと規定する
ことができる。 本発明装置のほとんどの命令の動作は1.上記の実効パ
ターンのサブセットとt/−ζ成り1γっ°ζいる。 ただしどの動作がどのステップに対応するかというごと
については、命令動作の、α味付けによっているいろな
解釈ができる。 例えばACO:G asl’+’、sP、1sP)、n
ewpcの場合には、次の■のような解釈をするのが自
然である。つまり、ACB命令の各動作ステップやオペ
ランドと1、l二記のモデルとの対応は、次の■のよう
に行なうのが普通であり、実際、これが正しいTR0M
仕様となっている。 ■^CBの5TEPオペランドがモデルのROIに対応
ACBのLIMITオペランドがモデルのRO2に対応
xregオペランドはEXI−1!X3の中だけで扱い
、Run、MOnJOnとは名えない。 RAl、 5P=−>roladdr: SP+5i
ze==>5PRR1,aroladdrr=>5te
pRA2. 5P==>ro2addrHSP+5iz
e==>5PRR2,aro2addr*=>11m1
tR八3〜M)+1. なし EXI、 5PY−>xreg 1!X2. xreg)sLep=−−>xreHi
f(xreg<Ii+wiL)jump to new
pcend i f EX3. xreg−=>SP MWI〜賀W1. なし roladdr、ro2addr、5tep、 l1
m1L xrelは内部変数であり、モデルで使用す
る 50味での1リソース」には含めない この場合、命令実行前のSP値を1nitsPとすると
、5tep: a(in口S1すxr
eRネ刀μす1イ一%: 1niLsr’+5i
ze*211m1L: d(iniLsl’1
sixtりBXの後のgreR: 1niLsP4si
zt+$21ij(initslυジャンプ条件: 1
niLsl’)size*2+d(iniLslす<1
(iniLsI’+5iza) S11最終値: 1nitsP+5ize*24a
(initsl’)しかし、実際のACB命令の動作と
モデルとの対応を次の■のようにすることも不i1能で
はない。 ■の動作は、鮪密にはO)と同じではない。 ■^CBの5LepオペランドがモデルのROlに対応
ACHのXl”0gオペランドが読みだし時P()2に
、古き込み時−01に対応 八COのIi@iLオペランドがモデルのRO3に対応
RA1. 5P−=>roladdrHSP+5ize
−=>5PRR1,aroladdr==>sLepR
A2. 何も参照しない RR2,5PF=>xreB RAJ、 Sl’=、>ro:bidtlrHSl
’4size−I−>Sl’RR3,aro3addr
==>11m1t八八l〜MH1,なし EX、 xreg+sLep==)xreHif
(xrttg<l1m1L) jump LOne
wpcndif 間1.なし WWl、 xreH==>5P roladdr、 ro3addr+ 5tep li
*it+ xregは内部変数であり、モデルで使用す
る 意味での1゛リソース」には含めない この場合、命令実行前のSl’(/i /cini L
SPとすると、5tep: a(initsP
)xreg初7133値: 1niLsP+s’iz
e1iw+it: a(initsP+5iz
e)Exの後のxrag: 1niLsl’+5iza
4d(iniLsIリジャンプ条件: 1nitsP+
5ize+a(initsP)<1j(initsP+
5ize) S11最柊稙: 1niLsI’+5iz(!1
2j(iniLslつこれは■とは異なる動作である。 仕様古の命令の解説の項だけでは(Dが1l−L、いか
■が正しいかは厳密にはわからないため、命令によっ°
ζは、モデルとの対応付けの曖昧な場合が出てくる。モ
デルとの対応付けが違うと、−ヒの例のように細かい動
作が異なっ°ζくることがある。 この資料では本発明装置の命令について、」−記のよう
な方法C命令動イ1とモう・′ルとの対応を決め乎いく
ことにより、オペランドが重なった場合の動作を明確に
規定することをL1的としている。 獣?72虹Aレリ仄則 命令について個別に検討する前に、オペランドの干渉に
ついての基本原則を述べる。 (原則l)短縮形と一般形では、全く同じ動作をしなけ
ればならない、ずなわら、命令フォーマットの違いはオ
ペランド干渉の問題には影響しない、短縮形は完全に・
船形のサブセットとなるべきであり、動作の異なる短縮
形は混乱を招く。 命令実行モデルは、・インプリメントへの依存性やイン
プリメントの都合を考えたものではないため、場合によ
っζは、規定した通りにインプリメントできないことが
ある0例えば、八〇〇:L 1jsl’+、 Sl”が
ADD:G asP+、 SPと異なった動作をする場
合があるというのは、この例である。このようなケース
に関し°ζは、命令実行モデルの力はそのままにし°(
おき、場合に応じて例外とし°ζ扱う。 (原則2)基本的には、命令ビットパターンの中でのオ
ペランドの出現順序にしたがって、命令のオペランドと
モデルでの第・−・readオペランド(ROI) 、
第−T、readオペランド(RO2) ”・・との対
応を決める。 こうし°ζおけば、・般には・インプリメント方法とも
矛盾しない。 命令実行モデルは、各命令の動作とビットパターンから
考えて、鰻も自然な形になるようにする。短縮形と−・
殻形を持つ命令の場合、命令実行モデルと実際の命令動
作との対応が自然になるかどうかは、どのフォー°ンソ
トの命令ビットパターンを!1.準にするかによって異
なるが、この場合は減速として−・m形を基準にする。 命令動作とモデルとの対応という点に関し°(は、命令
ビットパターンの都合は名えるが、インプリメントの都
合は特に考えない。 < trtt !!13 >原則2があっても、汎用ア
ドレッシングでないオペランド(八CRのxregなと
)については、モデルでの第n readオペランド(
ROn) 、第a+−wri teオペランド(Woe
)としては扱わず、Exのステップ中だけで扱うのがt
P通である。 (原則4)また、命令の、α味の中に1111黙に含ま
れζいるメモリアクセス(PUSH,1)01’でのス
タック操作t(ど)に−ノい゛(も、モデルでの第n、
readオペランド(ROn) 、第n+−wriLe
オペランド(WoIll)とし°Cは吸わず、liXの
ステップ中だけで扱うのが’tY 通である。 さらに、各命令ごとに特殊な事情のある場合や、多数の
オペランドを持−)場合(1,IIM、 STl’1な
ど)には、これらの原則が当てはまらないことがある。 詳しくは命令ごとに検討する。 ^−■、?ニュジ9ユマシー命−令二ζ!≦p二ノζ際
。 本発明装置の命令をいく・ノかのパターンに分1r1し
一ζモデルとの対応付けを行ない、オペランドが緩衝し
た場合の動作を明確に4°る。(9111月)により、
命令フォーマットが違ってもオペランドが干渉した場合
の動作は替わらないので、命令フォーマットの違いによ
る場合分けを行なう必要はない。 なお、動作例の中に出てくる1niLsl’は、命令実
行前のSPの意味である。また、動作例で出゛ζくる命
令のオペランドサイズは、断わりのない限りずべ”ζ3
2ビツトとする。゛・〜〉”は値の代入を、゛(〜〕゛
はコメントを示ず、 RAI −WWl、のステップの
うら、その命令で使用し°Cいないステップに一ノい゛
(は、説明を省略しである。 該当命令: OII ++ 1 Is 村TS RRNt; RAP R1!IT TCTX II T L Is 11VSCII BVM八P へvcpv VFAT NOV CMII 5C11 STR 5C11 命令の動作は、1−てモデルの14Xのステップだけで
行なわれ、それ以外の部分は存在しない、したがって、
オペランドの干渉については特に問題とはならない。 高機能命令では、HXのステップ数が有限とはならない
場合も生じるため、このモデルでは正確に表現できない
ことがある。しかし、これはオペランドの1−渉の問題
には直接官界しないので、ここでは議論しない。 〔命令実行モデルとオペランドとの対応〕EX、
命令161有の動作 [−オヱχ」〕ミー゛イエート (±1−当該命令: [IRA newpc 11cc newpc BSRnewpc TRAI)八 vector WAIT iggask オペランドを−・・つもつが、オペランドの値は命令コ
ード中で直接指定されるため、オペランドのに渉につい
°ζは問題とならない。netvpCl vector
。 imaskはI!xのステップで操作すると占える。 〔命令実行モデルとオペランドとの対応〕EX、
命令固有の動作(newpc、 vecLor+ima
skの参照を含む] L±ごjノー5−rリ−1J−縁と 該¥1命令: 1’Usll src。 LDl’S11 src LDPSM 5rc JRNG vector このパターンの命令の場合、srt:、 ve<二to
rをモデルの第一・−readオペランド’(ROI)
として扱う。 5rc=ijsl’+の場合、Q全1/rl(+の動作
をiiなう時点では、既にSPのインクリメントが行な
われていることになる。 〔命令実行モデルとオペランドとの対応〕RA1.
src、 vectorのアドレス計算=s>rol
addr RRl、 aroladdr−−>5rc−+
vectorEX、 命令固有の動作(命令によ
る暗黙のスタック操作を含む) PIjSIIでは 5rc=−>PSIILDPSB
では 、op、(PSB、 5rc)−>PSBl、叶
SMでは 、op、 (PSM、 5rc)−=>PS
M例えばPt1SllaSP+にこのモデルを適用する
と、[Xで1111 S II命令固有の動作(src
=s>a−5lυを行なう前に、RAl、で既に5rc
−4jsI’+によるsr’の更新が行われることがわ
かる。ただし、間違いを防ぐため、pusoasp+は
禁止(RIB)となっている(第375図参照)。 1 f−=Sランj’ address (A)該当命
令: 1’UsIIA 5rcaddr PSTLB prgaddr LDCTX cLxaddr AC5chkaddr JMP newpc JSRnewpc Src、addr+ prgaddr、cLxaddr
、cllkaddr+ newpcをモデルの第一・t
hddrt!ssオペランド(八()1)として扱う、
なお、AAIではasP+、 1il−SPのモードは
利用できない。 〔命令実行モデルとオペランドとの対応〕AA1.
5rcaddr+prgaddr、cLxadd
r+を二I+kaddr+newpcのアドレス計算=
=>、Ioladdr14X、 命令固(+の動作
(命令による暗黙のスタック操作を含む) PUS11^では aoIacltlr=、>1−sr
’JSRでは PC==> a−Sl’: aol+
ddrll冨〉PC PUSIIA asPとJSR1jsPの動作は第37
6図のとおり。 t、−i−シラ、ンドーr 、j je−(,0)該当
命令: 1)01ぐ desL STPSB dest STPSM dest desLを第・−riteオペランド(組)1) とし
°ζ扱う、この場合、EXのステップより前のWAIの
ステップでdt+sLの実効アドレス計算が行なわれ、
値の書き込みのみExより後の四lのステップで行なわ
れるごとになる。 〔命令実行モデルとオペランドとの対応〕−^1.
desLの実効°メトレス、11算r、−>wola
ddrBX、 命令固有の動作(命令による暗黙の
スタック操作を含む) 1)OPでは aSP+=、> desL2STPS
Bでは 、 op、 (PSB) −=>das t2
STPSMでは 、 op、 (PSM) =−>de
s t2M1. dest2==>awoladd
r例えばIjOP &、、sPにこのモデルを適用する
と、EX、でpop命令固有の動作(asP+==>
deal2)を行なう前に、−A1.で既にdasシ1
j−5PによるSPの更新が行なわれることがわかる。 また、POII d(d、SP) ニ、L、ノモデルを
適用すると、Il、X。 でpop命令固有の動作(aSP+−>deal2)を
行なう前に、WAl、でdest=i(d、SP)のア
ドレス計算が行なわれ、dostのアドレス計算には1
nits!’が使用されることがわかる。 ただし、間違いを防ぐため、実際には1101) 1j
spは禁止(RIB)となっている、また、pop a
(d、SP)については、tj(d、輩n)のアドレッ
シングモードでRn*SPの時のみ実行禁止とするのは
無理があること、スタック操作におい°ζPOP a(
disp、sP)を使用する用途も考えられること、に
より、禁止にはしていない。 pop命令の動作例は第377図のようになる。 lオペラZドrmw(M) 該当命令: Nt!G dest NOT desk SIIXL desk SIIXRdeal des tをMolに対応させる。この場合、MALで
dsl’+、 a−5t’を°指定することはできない
。 〔命令実行モデルとオペランドとの対応〕MAL、
desLの実効アドレス計算==>soladdrM
Rl、 amoladdr==> das口EX、
命令固有の動作 、op、(dastl) ==> dest2MW1.
desL2 ==> amoladdrLオーペ
ーンドread 〜wr i te (RW)−該当命
令: MOV sre、 desL MOVII src、 des LRVIIY
srt:、 desLRVBI src、
dest PACKss src、 destUNPKs
s src、 dest、 adjsrcをROI
、 destを間1に対応させる。したがって、sr
c側の実効アドレス計算とそれに伴うSllの更新がず
べ°ζ終わってからsrcのフェッチを行ない、その後
des を側の実効アドレス計算を行ない、最後に命令
固有の動作を行って結果をdestにセットする。 UNPKssのadj はHXのステップで扱い、第n
−readオペランドとはしない。 〔命令実行モデルとオペランドとの対応〕RAI、
srcの実効アトルス計算==) roladdrR
Rl、 aroladdr==> 5rclWA1
. desLの実効°メトレス計算==> wol
addrOX、 命令固有の動作 、op、(srcl)==> desL2IJNPKs
sではadj を参!!((Ml、 desL2−
〉1wol+oldrNOVの動作例は第378図の
とおり。 PACに、 UNPKの動作例は第379図のとおり。 Lti九乙り岐紅郊りご一町j」0pリー該当命令: STCsrc、 dest STP src、 dest M(IVA 5rcaddr、 +11!SLMO
VPA 5rcaddr、 destSTATI4
5rcaddr、 市!!1【(101ミL
queue、 dest制御空間、物理空間など
特殊な空間からの読みだしを行なう命令では、特殊空間
側の実効アドレスSrC,5rcaddrをAOIとし
て扱い、特殊空間の実際のアクセスはExのステップで
行なう、また、QDEI、命令でも、キューエントリを
指定する側の実効アドレスqueueを八〇1 として
扱い、キューリンクの実際の操作はF、Xのステップで
行なう。こうし“ζおけば、命令ビットパターンやイン
プリメント方法ともうまく対応する。1八lでは、ds
l’l、 77 Sllを指定することはできない。 des tは同lとし°ζ扱う。 AAl、 src、 5rcaddr、 queu
eの実効アドレス計算==> aoladdr 諭1.destの実効アドレス計算・・>woladd
rEX、 命令固有の動作 、op、 (aoladdr)−=>desL2WW1
. desL2==>cjwoladdrSTC,
N0VAの動作例との対応は第380図のとおり。 IIIova dSP、 1j−5l’の場合、5rc
addrの実効アト スレス計算(A^1)のステ
ップで既にS11が参照されており、destの実効ア
ドレス計算(WAI)ステップにおけるS+3の更新は
5rcaddrに反映されない、これに対して、STC
1ispO,a−5Pがモデル通りの動作をするものと
考えると、S「(−の実効アドレス計算(AAI)のス
テップではまだSllが参照され”ζおらず、制御レジ
スタとしてのSl)のアドレス(11’0124)が計
算されるだけである。 S11が参照されるのは[Xの
ステップであり、これはdesLの実効アドレス計算(
賀^l)ステップにおいてSPを更新した後である。し
たがって、1niLsP−4がdes tに転送される
ことになる。 ただし、STCaspo、 a−5Pの動作ニツイては
、以、ヒのようなモデル通りの動作をするかどうかがイ
ンシリメンI・依存になっζいる。・)まり、モデル通
り1nitsP−4を転送する場合と、モデルにた4い
しζは例外の扱いとなるが、1nitsPを転送する場
合とがある。 −むラント’ rc2adヱI亘【邦1仙−へし該当命
令: LDC5rC1desL LDP src、 dest LDATt! SrC+ destaddrl
lTST offseL baseusF、’r
offseL+ baseRCI、Ro[s(!L
、bastr BNOT offset、 basells[ET
i offsat+ baseBCI、R1offs
et、 baseBFEXT offset、 wi
dth、 base+ desL肝uXTII o[
st+L、 widLh、 hase、 desLBP
INS 5rC1offset、 widLh+ b
ase旧’lN5U srt:、o[seLlwid
Lh、basLIBFCMP src+ offse
t、 width、 base11PcMl’U 5
rC1offseL、 widLh、 bastICI
IK bound、 1ndex+ xreg制御
空間、物理空間など特殊な空間への書き込みを行なう命
令LDC,l、叶、 I、DATEでは、特殊空間側の
実効アドレス’1.L desLaddrを^01 。 srcをROIとして扱う。特殊空間の実際のアクセス
はOXで行なう。 ビット操作命令では、baseの実効アドレスを八01
s offsetをROI として扱う@ base
とoffsetの合成を行ない、操作対象となるビット
を実際にアクセスするのは、IiXの中で行なわれる。 固定長ビットフィールド操作命令でも、ヒツト操作命令
と同様に、b 13 S eの実効アドレスをAOI
s offsetをl?ol とし°C扱う、 off
setとbase以外のオペランド、即ちwidth、
src、destについては、Exの中でのみアーク
セスし、第−readオペランド(ROn) 、第m−
raadオペランド(WOm)としては扱わない。 C11にの場合は、ビットパターンとの関係から、1n
dex ;f!−ROI 、boundをAOIとして
扱い、b。 undの内容である(上限値二 上限値)の読みだしと
xregへの書き込みはεXで行なうことにする。 以、I:、のような形で各命令の動作とモデルとの対応
をつけておけば、命令ピントパターンやインプリメント
方法とも矛盾しない。 AAI テは、aSP+、 a−5Pを指定することは
できない、 src、offset、1ndex= 1
jsI’+の場合、des Ldestaddr、 b
ase+ houndの実効アドレス計算で参照される
Sl+(、へとし°ζは、インクリメント後の値が使用
されることになる。CHに命令の場合、これは゛lセン
ブラ表記での順序と逆になっているので、注意が必要で
ある。また、固定長ビットフィールド命令でoffse
L・dsl’+を指定し、src、 widthなどで
同じSPを指定した場合のSP値としては、やはりイン
クリメント後の値が使用されることになる。アセンブラ
表記では、BFINS、 BFCMflの場合にoff
setよりもsrt:の方が先に書かれるようになっ°
(いるが、実際にはoffsetの実効アドレス計算で
更新されたS商’srcに反映されるので、注意が必要
である。 RAl、 src、 offset、 1ndex
の実効アドレス計算=+−> rolxddr RRl、 aroladdr==> 5rcl八
八1. dasL、 destauldr+
base、 boundの実効アドレス計算==
> aoladdrEX、 命令固有の動作 、op、 (srcL aoladdr)C11にでは 、op、(srcl、 aoladdr)=−>reH bドINs、np+Nsu、IIPcMP、肝CMl’
llでは1 、op、(srcl、 aoladdr、 width
。 5rc) BFEXT、 [1FPXT(I テは1、op、(s
rcl、 aoladdr、 width)y、=)
dI!5L BFINS、 BPEXTの動作例は第381図のとお
り。 2オペランドraaj 〜read (RR)該当命令
: CMP 5rc1. src2 CMPU 5rcl+ 5rc21NDt!X
1ndexsize、 5ubscript+
xreg^CB 5tep、 xreg、
1isit、 newpcSCB 5te
p、 xreg* 11mft、 newpcC
MIl、 CM円1では、5rclをP旧に、5rc2
をRO2に対応させる。 INI)UXでは、1ndaxsixo 4:ROlに
、5ubscripLをRO2に対応させる。xreg
は[にで扱う。 AにB、 SCBでは5tep4:ROlに、11m1
tをRO2に対応させる。 Xregl ne’114
pc、はr!×で扱うeしたがって、5rcL 1nd
ex+ize、5Lep−aSP+の場合、5rc2*
5ubscript、 l1m1 tの実効アドレス計
算で参照されるSPとしては、インクリメント後の値が
使用される。また、INDEX、 Act(、5(II
命令で1ndexsize+stepg&sP+または
5ubscript。 11m1t−aSP+の場合、Xr(!ljとし°ζ参
照されるSPとしては、やはりインクリメント後の値が
使用される。 賢^1. 5rcl+1ndt+xsfu++5Le
pのアドレス計算we> roladdr RRl、 1jroladdr==> 5rcl
lRA2. 5rc2.5ubscript、Ji*
jtの実効アドレス計算、、> ro2addr RR2,aro2addrvt=> 5rc21EX、
命令固有の動作 、op、(srclL 5rc21) INIII’Xでは 、op、(Srcll、 5rc21.xre#り*z
) Xreg 八〇〇、 SCB’では 、op、(srcll−+ src2Lxreg+ne
eipc)==> xreg CMPの動作例は第382図のとおり。 lN0Eにの動作例は第383図のとよiす。 ただし、[NDIEX命令については、インプリメント
の制約によって、5ubscripL=isPl +
xreg・SPの場合に必ずしもモデル通りの動作がで
きない場合がある。詳しくは2.1−とり≦仁す四疫ム
邑(1撲と、の項を参照。 ACB、SCBの動作例は第384図のとおり。 亀iご一5Z、ド、(胡j−二r−警嵯即り一該当命令
: A口D src、 destADDIJ
src、 dest八口lへX sr
c、 dasLSOB src、 dest SUIIU Src、 deSLSIJ[l
X srr、、 destMOL src、
dest MOLD src、 dest DJV 3rC+ dest DIVU src、 dest REM src、 dest REMII src、 desL^NO3rC1
dest ORsrc、 dasL XORsrc、 desL SOLル count+ desLSOL
counL、desLRO↑ counL、
desL ^DDDX src、 dasLSUBDX
src、 destBSCII data、
offsetM[jLX Src1 dest、
tapDfVに src+ desk、
Ls+psrc、counL、dataJttR
Olに、dest、offsetをMOIに対応させる
。 5rc−ijsP4の場合、des tの実効アド
レス計算で参照されるS11としては、インクリメント
後の値が使用される。 H^1では、asP+、 a−5Pのモードを指定する
ことはできない。 1’1tll、X、旧VXの場合、srcがRO鳳、d
estがMOIに対応し、tapはExの中で処理され
るも、のとする、したがって、5rc=asI’+の場
合に、des tの実効アドレス計算で参照される5P
(tff、およびL町νで参照されるSll値とし°ζ
は、インクリメント後の値が使用される。また、ts+
pとdesLで同じレジスタを指定した場合には、tI
Ipの稙が消え、最終的にlb!SLの値が残ることに
なる。 RAl、 src、count、daLaの実効ア
ドレス計算==> roladdr RRl、 arlladdr==> srclMA
l、 dest、 offsetの実効アドレス計
算二〜> s+oladdr MRl、 aa+oladdr==> destl
!ミX、 命令固イ1の動作 、op 、 (desLl、 sr<:1)
>des L2 MIILXでは 、op、(destL 5rcl) ==>des t
2 + Ltsp 口IVXでは 、op、(desLl、 5rcl* Lap)==>
dest2 、Lsp MWl、 dest2 =−> ijmoladd
r八〇〇の動作例はへ385図のとおり。 このうち、一つのハーソワードの中で、レジスタ指定R
flR+ RRMと汎用アドレッシング指定EaR,l
!aW、 ShR,Sh−の両方を含む命令では、Ra
R,Ear、 ShR,ShWでasP+、 1i−3
Pのモードを指定し、RgR,RgMでspを指定した
場合に、[aR。 Ea%1. ShR,Sh−によるSP値の更新がRg
R,RgMとしてのSPの読みだし値に影響するため、
パイプライン実装が難しいという意見がある。 具体的に問題となるのは、以下のような命令である。 ^0口: l、 asI’+ 、 5PSOB:
L asl’+、SP CMP:L asP+、5P INDI!X 本、aSP+、SP(MOV:L
は含まない) そこで、これらの命令については、動作がインプリメン
ト依存になるものとする。つまり、八〇〇:L asP
4.SP実行後のsp値は、インプリメントによっ°ζ
不定の値をとるというごとにする。 BITの検出も難しいのす、BITとはしない。 これらの命令は、短縮形が一般形と同じ動作をするとい
う原則には違反することになる。 ′Lt <’t 7 F ad−dress−…、He
、5s(71A)−該当命令: (IINS enLr3’+ quoII。 en tryを^O1に、q tl e II eをA
O2に対応させる。 キューリンクの実際の操作はIjXのステップで行なわ
れる。 ^^1. anLryの実効アドレス計算 〉ao
laddr A^2. queueの実効アドレス計算・・〉a
o2addr MAI−MHl、 なし EX、 命令固有の動作 、op、(aoladdr、 ao2addr)、z
:C;ヨ上2−ン、上、−!14%gsz−7..t
37Jld、(へ1法該当命令: C5I (:0llPI updaLa、 dt+
5LCSItlでは、ビットパターンとの関係から、d
os tをAOIに、upda LeをROIに対応さ
セるc。 sapのアクセスと比較、交換の実際の操作は、EXで
行なわれる。 C5I命令のオペランドの処理は、アセンブラ表記とは
異なり、updateの実効アドレス計算、des t
の実効アドレス計算、comp値の参照といった順序で
行なわれる。destではasP+、 1−Sl’が使
用できないが、upda L(!ではdsI’+が使用
できるので、c、o s+ pでSPを参照した場合に
は注意が必要である。 k^1. updaLeの実効アドレス計’m’!
、−>roladdr RRl、 2jroladdr==> updaL
elAAl、 destの実効アドレス計算・・〉
aoladdr EX、 命令固有の動作 、op、に1o1+ddr、 updaLel。 comp)七> comp C81の動作例は第386図のとおり。 lオペーンドread〜reglisL(R迎−該当命
令: )’、NT!R1ocal、reRIisL[XITD
reglisL、adjspP、NTI!R,[
XITDでは、1oca1.adjsp ’a−ROI
に対応させる。reglistの参照とスタックフレー
ムの操作は、EXのステップに含める。したがって、1
oca1. adjspの実効アドレス計算の際に参照
される511. I’11. RO〜R13は、スタッ
クフレーム1m作を初めてからの値ではなく、ずべ゛ζ
命令実行前の値を使用することになる。 r、X ITIIでは、アセンブラ表記でのオペランド
順と逆の順番で実効アドレスが評価されるので、注意が
必要である。 (ただし、命令再実行の関係で、1oca1.adjs
pはレジスタ直接RnとイミディエートIi++ve−
dataのモードした使用できない、) RAl、 1ocal、adjspの実効アドレス
計算==> roladdr (実際にはRnとIimm−clnLaのモードしか使
用できないので、この ステップでは何もアクセスしな い、) RRl、 1iroladdr==> 5rc
l[X、 reglisL参照とスタックフレーム
操作 ENTERでは 、op、 (srcl、 RO〜R13+ l’P、
SP。 realist)==> PI’、Sl’、5Lac
kEχITOでは 、op、 (srcl+FI’、SI’、5Lack。 reFXIisL)、−=> RO〜旧3.Fll。 SP、PC lオペラフ F addre杼二朋L」韮tm、)−九
該当命令: LDM src、 reglistSTM r
eglisL、 desLl、1)M、 STMでは
、src、 desLを^il+に対応させる。 r
eglistの参照と実際のレジスタ転送は、14Xの
ステップに含める。したがっ”ζ、src、desLの
実効アドレス計算の際に参照されるSl)、l’P。 四〜R13は、レジスタ転送を始めてからの値ではなく
、ずベーζ命令実行前の値を使月目°ることになる。 LDM reg I is t、 asI’4とSTM
regliSL、1−5t’についでは、SPが複数
回更新されるため、−m命令でのasP+、 a−5P
とは異なった扱いをする必要がある。すなわち、モデル
の「実効アドレス計算」のステップでisI’+、 d
、sl’によるs +14.;の更新を扱うのではなく
、liXのステップで5ll(直の史1)rを扱うよう
にする。このため、Sl’をM(+1に対応させる。 (ijsl’+、 ii、sl’以外のモートを使用し
た場合〕AA1. src、、 destの実効
°rドレスAIIγ==> aoladdr 1iX、 re(HIisL参照とレジスタ転iX
LDMでは d(aolJoldr 〜・・・) =・>RE[
+(realist) STMでは RP、G(reglist)==>1j(aoladd
r〜・・・) (ijsP+、 d Sl’のモードを使用した場合〕
MR1,5P==> tamaddr EX、 reglisL参照とレジスタ転送Ll)
Mでは a (tmpaddr〜”・) ==>RIEG(te
alist) Lmpaddr 1転送レジスタ 数、、>Lmpaddr STMでは Lmpaddr −一転送しジ゛スタ敗=−>LII
lpaddr 肛G (regl is t) = =>iil (t
mpaddr〜・・・) 〔実際のインプリメントで は、レジスタ転送の順序 は自由である。これと等 価な動作をすればよい、〕 MWl、 La1IpadtJr = > Sl’
LDM iiSP+、 reglisL、の場合、re
gHsL中に計が指定されていても、最後のMWIのス
テップでLmpaddrがspにoverwriteさ
れるため、結果的にメモリからロードされたSP値が消
えてしまうことになる。 LDM、 STHの動作例は
第387図のとおり。 何3j13.キャッシュやTLBの隻伍@@&茎ついて
キャッシュやTLBの整合性の確保については、それぞ
れ関連する命令のところで説明を行なっているが、整理
すると以下のようになる。 〔ATを変更した場合の整合性: ・TLB、a=理キャッシュ(データキャッシュ)の整
合性 −LDC,LDCTX、 EIT、 RErTによりp
swの中のATが変更された場合、TLr(、論理デー
タキャッジ1の整合性か保証される。(LSIDがない
場合はパージされる。LS[Dがある場合、AT・00
の物理空間に対して特別の1.SIDを与えると考えれ
ば、必ずしもパージする必要はない。) ・命令パイプライン、命令キャッシュの整合性−命令コ
ード整合性の状態は変化しない。 )Tを変更しても、命令コート−整合性が保証されるわ
けではない。 (UATB、 5ATBの操作をした場合の整合性〕・
TLBj#理キャッシュ(データキャッシュ)の整合性 −LDC,LDCTXニよるUATB、 5ATFlt
7)操作テハ、TLB、論理データキャッシュの整合性
が保証される。(LSIDがない場合、−・般に:よパ
ージされる) ・命令パイプライン、命令キャッシュの整合性−LDC
,LDCTX!、:よりUATB、 5ATIIを1桑
(乍しても、命令コード整合性の状態は変化しない。 インプリメントによってはミ命令キャッシュのパージに
よって命令コード整合性が良くなる場合もあるが、それ
が保証されているわけではない。 例えば、論理学II A 、論理空間Bの命令コードを
それぞれ書き換えた後、論理空間へでPIB命令を実行
すると、論理空間^での命令コード整合性は保証される
。この後LDCまたはLDCTXでUATBを操作し、
論理空間Bに切り換えたとしても、論理空間Bでの命令
コード整合性は保証されず、それを保証するためには論
理空間Bでもう一度PIB命令を実行する必要がある。 ただし、論理空間8でPTB命令を実行してもしな(で
も、再度UATBを操作して論理空間Aに戻ってきた場
合には、命令コードの整合性が保証されている。 実際には、論理命令キー・ツシュのパージにより、にA
T B操作の後は自動的に命令コード整合性か保証さ
れるかもしれないが、プログラミング上はこの機能を当
てにしてはいけない。将来LSIDを導入してパージを
避けることを考えると、−iには、UATnを操作して
も命令コード整合性は変わらないと考えなければならな
い。 :、1T Hの操作をした場合の整合性〕・TLB、論
理キャッシュ(データキャッシュ)の整合性 −LDATEによるATEの操作て;よ、TLB、論理
データキャッシュの整合性が保証さ7′Lる。 (影響のある部分がパージされる) −1,DATEを用いず、一般のメモリアクセス命令で
ATHに使用しているメモリ領域を書き喚えた場合には
、ru、論理データキャッシュの整合性は保証されない
。 ・命令パイプライン、命令キャッジ1の整合性−ATE
を更新した場合、そのATEによりアドレス変換される
領域の「命令コードの整合性、は失われる。つまり、そ
の領域のメモリ内容をプログラムとして実行しても、動
作は保証されない。これは、LDATE命令を用いるか
どうかには関係しない。命令コードの整合性を回復する
必要があれば、別にPIB命令を実行する。 〔メモリの操作をした場合の整合性〕 ・論理キャッシュ (データキャッシュ)の整合性 一論理アドレスによってメモリをアクセスする場合には
、論理データキャッシュの整合性が保証される。(キャ
ッシュの制2II1機構による) −LDP命令を使って、物理アドレスによりメモリアク
セスする場合には、論理データキャッシュの整合性は保
証されない。 ・命令パイプライン、命令キャッシュの整合性−メモリ
内容を変更した場合、その領域の「命令コードの整合性
−は失われる。これは、論理アドレスによるアクセスか
物理アドレスによるアクセスかということには関係しな
い。内容を変更したメモリをプロクラムとして実行する
には、PIB命令を実行し、命令コードの整合性を回復
する必要かある。 [発明の効果] 以上のように本発明によれば、E1′F処理要求が受は
付けられ、EIT処理ハンドラの先頭アドレスを外部記
憶装置から読み込むのと同時に内部状態を示す情報も取
り込むのて、EIT処理ハン1ζう起動時のプロセッサ
の内部状態が自由に設定できる。また、多重EIT処理
に刻して優先度の高いEIT処理が優先度の低いEIT
処理を禁止することをプログラムしておくことが容易に
でき、EIT処理方法に関してもプログラム作成者の自
由度と容易性が向上する。 い −C′□′獣7 臼)
、本発明装置のビットについてのデータタイプ説明図 第3図は、本発明装置のビットフィールドについてのデ
ータタイプ説明図 第4図は、本発明装置の符号なしビットフィールドにつ
いてのデータタイプ説明図 第5図は、本発明装置の整数についてのデータタイプ説
明図 第6図は、本発明装置の10進数についてのデータタイ
プ説明図 第7図は、本発明装置のストリングについてのデータタ
イプ説明図 第8図は、本発明装置のキューについてのデータタイプ
説明図 第9図は、本発明装置の命令フォーマットの記述例を示
す説明図 第10図は、そのビットパターン図 第11〜21図は、本発明装置の命令フォーマット図 第22〜33図は、本発明装置のアドレッシングモード
のフォーマット図 第34図は、本発明装置のローカル変数配置例の説明図 第35〜38図は、本発明装置のアドレッシングモード
のフォーマット図 第39図は、命令NOVでの注意事項説明図第40図は
、PSWのフォーマット図 第41図は、PSSのフォーマット図 第42図は、PSHのフォーマット図 第43図は、命令セットの記述例を示すフォーマット図 第44図(a)は、命令MOVのフォーマット図第44
図(b)は、そのフラグ変化の説明図第45図は、命令
MOVUのフォーマット図第46図は、そのフラグ変化
の説明図 第47図は、命令PUSHのフォーマット図第48図は
、そのフラグ変化の説明図 第49図は、命令POPのフォーマット図第50図は、
そのフラグ変化の説明図 第51図は、命令LDMのフォーマット図第52図は、
そのフラグ変化の説明図 第53図は、ビットマツプ指定の説明図第54図は、命
令STMのフォーマット図第55図は、そのフラグ変化
の説明図 箱56.57図は、ビットマツプ指定の説明図第58図
は、命令MOVAのフォーマット図第59図は、そのフ
ラグ変化の説明図 第60図は、命令PUSHAのフォーマット図第61図
は、そのフラグ変化の説明図 第62図は、命令CMPのフォーマット図第63図は、
そのフラグ変化の説明図 第64図は、命令CMPUのフォーマット図第65図は
、そのフラグ変化の説明図 第66図は、命令C)IKのフォーマット図第67図は
、そのフラグ変化の説明図 第68図は、命令CIIKのオペレーションの説明図第
69図は、命令ADDのフォーマット図第70図は、そ
のフラグ変化の説明図 第71図は、命令ADDUのフォーマット図第72図は
、そのフラグ変化の説明図 第73図は、命令ADDXのフォーマット図第74図は
、そのフラグ変化の説明図 第75図は、命令SUBのフォーマット図第76図は、
そのフラグ変化の説明図 第77図は、命令5uauのフォーマット図第78図は
、そのフラグ変化の説明図 第79図は、命令5UBXのフォーマット図第80図は
、そのフラグ変化の説明図 第81図は、命令MULのフォーマット図第82図は、
そのフラグ変化の説明図 第83図は、命令MULUのフォーマット図第84図は
、そのフラグ変化の説明図 第85図は、命令MULXのフォーマット図第86図は
、そのフラグ変化の説明図 第87図は、命令DIVのフォーマット図第88図は、
そのフラグ変化の説明図 第89図は、命令DIVUのフォーマット図第90図は
、そのフラグ変化の説明図 第91図は、命令DIVXのフォーマット図第92図は
、そのフラグ変化の説明図 第93図は、命令REMのフォーマット図第94図は、
そのフラグ変化の説明図 第96図は、命令REMUのフォーマット図第96図は
、そのフラグ変化の説明図 第97図は、命令NECのフォーマット図第98図は、
そのフラグ変化の説明図 第99図は、命令INDEXのフォーマット図第100
図は、そのフラグ変化の説明図第101図は、゛命令A
NDのフォーマット図第102図は、そのフラグ変化の
説明図第103図は、命令ORのフォーマット図第10
4図は、そのフラグ変化の説明図第105図は、命令X
ORのフォーマット図第106図は、そのフラグ変化の
説明図第107図は、命令NOTのフォーマット図第1
08図は、そのフラグ変化の説明図第109図は、命令
5t−IAのフォーマット図第110図は、そのフラグ
変化の説明図第111図は、左シフトの説明図 第112図は、右シフトの説明図 第113図は、命令5)ILのフォーマット図第114
図は、そのフラグ変化の説明図第115図は、左シフト
の説明図 第116図は、右シフトの説明図 第117図は、命令ROTのフォーマット図第118図
は、そのフラグ変化の説明図第119図は、左回転の説
明図 第120図は、右回転の説明図 第121図は、命令5HXLのフォーマット図第122
図は、そのフラグ変化の説明図第123図は、命令Xt
lXLのフォーマット図第124図は、命令XHXRの
フォーマット図第125図は、そのフラグ変化の説明図
第126図は、命令5HXRのフォーマ゛ット図第12
7図は、命令RVBYのフォーマット図第128図は、
そのフラグ変化の説明図第129図は、命令RVB +
のフォーマット図第130図は、そのフラグ変化の説明
図第131,132図は、ビット操作命令の説明図 第133(fflは、命令BTSTのフォーマット図第
134図は、そのフラグ変化の説明図第135図は、命
令BSETのフォーマット図第136図は、そのフラグ
変化の説明図第137図は、命令BCLRのフォーマッ
ト図第138図は、そのフラグ変化の説明図第139図
は、命令BNOTのフォーマット図第140図は、その
フラグ変化の説明図第141図は、命令BSCHのフォ
ーマット図第142図は、そのフラグ変化の説明図第1
43図は、固定長ビットフィールド操作命令の説明図 第144図は、ビットフィールド命令のフォーマット図 第145図は、命令BFEXTのフォーマット図第14
6図は、そのフラグ変化の説明図第147図は、命令B
FEXTUのフォーマット図第148図は、そのフラグ
変化の説明図第149図は、命令BF I NSのフォ
ーマツ)N第150図は、そのフラグ変化の説明図第1
51図は、命令BF I NSυのフォーマット図第1
52図は、そのフラグ変化の説明図第153図は、命令
BFCMPのフォーマット図第154図は、そのフラグ
変化の説明図第155図は、命令BFCMPUのフォー
マット図第156図は、そのフラグ変化の説明図第15
7図は、命令BVSCHのフォーマット図第158図は
、そのフラグ変化の説明図第159図は、命令8VMA
Pのフォーマット図第160図は、そのフラグ変化の説
明図第161〜163図は、命令BVMAP(7) ニ
ア t −マット図 第164図は、命令BVCPYのフォーマット図第16
5図は、そのフラグ変化の説明図第166図は、命令B
VFATのフォーマット図第167図は、そのフラグ変
化の説明図第168図は、命令ADDDXのフォーマッ
ト図第169図は、そのフラグ変化の説明図第170図
は、命令5IJ80Xのフォーマット図第171図は、
そのフラグ変化の説明図第172図は、命令PACKs
sのフォーマット図第173図は、そのフラグ変化の説
明図第174図は、命令UNPにssのフォーマット図
第175図は、そのフラグ変化の説明図第176図は、
命令UNPKssの説明図第177図は、命令5NOV
のフォーマット図第178図は、そのフラグ変化の説明
図第179図は、命令SCMPの説明図 第180,181図は、そのフラグ変化の説明図 第182図は、命令5SCHのフォーマット図第183
図は、そのフラグ変化の説明図第184図は、命令5S
TRのフォーマット図第185図は、そのフラグ変化の
説明図第186図は、命令QINSのフォーマット図第
187図は、そのフラグ変化の説明図第188〜190
図は、命令QINSの説明図第191図は、命令QDE
Lのフォーマット図第192図は、そのフラグ変化の説
明図第193〜195図は、命令QDELの説明図第1
96図は、命令QSCHのフォーマット図第197図は
、そのフラグ変化の説明図第198〜200図は、命令
QSCHの説明図第201図は、命令BRAのフォーマ
ット図第202図は、そのフラグ変化の説明図第203
図は、命令Bccのフォーマット図第204図は、その
フラグ変化の説明図第205図は、命令BSRのフォー
マット図第206図は、そのフラグ変化の説明図第20
7図は、命令JMPのフォーマット図第208図は、そ
のプラグ変化の説明図第209図は、命令JSRのフォ
ーマット図第210図は、そのフラグ変化の説明図第2
11図は、命令ACBのフォーマットti第212図は
、そのフラグ変化の説明図第213図は、命令ACBの
説明図 第214図は、命令SCBのフォーマット図第215図
は、そのフラグ変化の説明図第216図は、命令ENT
ERのフォーマット図第217図は、そのフラグ変化の
説明図第218図は、命令ENTERの説明図第219
図は、命令EX I TDの説明図第220図は、その
フラグ変化の説明図第221図は、命令EX I TO
の説明図第222図は、命令RTSのフォーマット図第
223図は、そのフラグ変化の説明図第224図は、命
令NOPのフォーマット図第225図は、そのフラグ変
化の説明図第226図は、命令PIBのフォーマット図
第227図は、そのフラグ変化の説明図第228図は、
命令BSET+のフォーマット図第229図は、そのフ
ラグ変化の説明図第230図は、命令BCLRIのフォ
ーマット図第231図は、そのフラグ変化の説明図第2
32図は、命令C51のフォーマット図第233図は、
そのフラグ変化の説明図第234図は、命令LDCのフ
ォーマット図第235図は、そのフラグ変化の説明図第
236図は、命令STCのフォーマット図第237図は
、そのフラグ変化の説明図第238図は、命令LDPS
Bのフォーマット図第239図は、そのフラグ変化の説
明図第240図は、命令LDPSMのフォーマット図第
241図は、そのフラグ変化の説明図第242図は、命
令5TPSBのフォーマット図第243図は、そのフラ
グ変化の説明図第244図は、命令5TPSHのフォー
マット図第245図は、そのフラグ変化の説明図第24
6図は、命令LDPのフォーマット図第247図は、そ
のフラグ変化の説明図第248図は、命令STPのフォ
ーマット図第249図は、そのフラグ変化の説明図第2
50図は、命令JRNGのフォーマット図第251図は
、そのフラグ変化の説明図第252〜257図は、命令
JRNGのフォーマット図 第258図は、命令RRNGのフォーマット図第259
図は、そのフラグ変化の説明図第260〜262図は、
命令RRNGの説明図第263図は、命令TRAPAの
フォーマット図第264図は、そのフラグ変化の説明図
第265図は、命令TRAPのフォーマット図第266
図は、そのフラグ変化の説明図第267図は、命令RE
ITのフォーマット図第268図は、そのフラグ変化の
説明図第269図は、命令REITのフォーマット図第
270図は、命令WAITのフォーマット図第271図
は、そのフラグ変化の説明図第272図は、命令LDC
TXのフォーマット図第273図は、そのフラグ変化の
説明図第274図は、命令5TCTXのフォーマット図
第275図は、そのフラグ変化の説明図第276図は、
命令AC5のフォーマット図第277図は、そのフラグ
変化の説明図第278図は、命令MOVPAのフォーマ
ット図第279図は、そのフラグ変化の説明図第280
,281図は、命令MOVPA(7) フt −マ’7
ト図 第282図は、命令LDATEの説明図第283,28
4図は、そのフラグ変化の説明図 第285図は、命令5TATEのフォーマット図第28
6,287図は、そのフラグ変化の説明図 第288図は、命令PTLBのフォーマット図第289
図は、そのフラグ変化の説明図第290図は、命令PS
TLBのフォーマット図第291図は、そのフラグ変化
の説明図第292図は、ATフィールドの説明図第29
3図は、論理アドレスの説明図 第294図は、ページアドレスの説明図第295図は、
多重論理空間の説明図 第296図は、UATBのフォーマット図第297図は
、5ATBのフォーマット図第298図は、SXの制限
を示す説明図第299〜301図は、テーブル領域の説
明図第302図は、STEのフォーマット図第303図
は、Pxの制限を示す説明図第304図は、STEの説
明図 第305図は、論理アドレスの説明図 第306図は、PTEのフォーマット図第307図は、
PTEの各値とアクセス可能リングとの関係を示す説明
図 第308図は、PTEの説明図 第309,310図は、本発明装置の論理アドレス拡張
に係るメモリマツプ 第311図は、データ転送命令のフラグ変化の説明図 第312図は、比較テスト命令のフラグ変化の説明図 第313図は、算術演算命令のフラグ変化の説明図 第314図は、論理演算命令のフラグ変化の説明図 第316図は、シフト命令のフラグ変化の説明図 第316図は、ビット操作命令のフラグ変化の説明図 第317,318図は、固定表ビットフィールド命令の
フラグ変化の説明図 第319図は、任意表ビットフィールド命令のフラグ変
化の説明図 第320図は、10進演算命令のフラグ変化の説明図 第321図は、ストリング命令のフラグ変化の説明図 第322図は、キュー操作命令のフラグ変化の説明図 第323図は、ジャンプ命令のフラグ変化の説明図 第324図は、マルチブセッサ命令のフラグ変化の説明
図 第325図は、制御空間、物理空間操作命令のフラグ変
化の説明図 第326図は、O8関連命令のフラグ変化の説明図 第327図は、MMU関連命令のフラグ変化の説明図 第328図は、サブルーチンコールの説明図第329図
は、スタッフクレームの説明図第330,331図は、
命令シーケンスの説明図 第332図は、プログラム例を示す説明図第333図は
、サブルーチンコールの説明図第334図は、制御空間
の説明図 第335図は、PSWのフォーマット図第336図は、
IMAsにのフォーマット図第337図は、SMRNG
のフォーマット図第338図は、CTXBBのフォーマ
ット図第339図は、Dlのフォーマット図 第340図は、C5Wのフォーマット図第341図は、
[)CEのフォーマット図第342図は、CTXBFM
のフォーマット図第343図は、EITVBのフォーマ
ット図第344図は、JRNGVB(7) フt −マ
ツ) 口笛345図は、spo〜SP3のフォーマット
図第346図は、SP+のフォーマット図第347図は
、l0ADDR,IOMASにのフォーマット図第34
8図は、UATBのフォーマット図第349図は、5A
TBのフォーマット図第350図は、LSI0のフォー
マット図第351図は、CTXBのフォーマット図第3
52図は、CTXBFMのフォーマット図第353図は
、EITVTEのフォーマット図第354図は、スタッ
フクレームの説明図第355,356図は、EITのス
タックフォーマット図 第357図は、l0INFのフォーマット図第358図
は、EITのベクトルテーブル第359図は、JRNG
の説明図 第360,361図は、EITの説明図第362図は、
IMASにの説明図 第363,364図は、システムコールの説明図 第365図は、DCEの説明図 第366図は、DCE、DI、Elの比較口笛367図
は、DCEの使用例の説明図第368図は、ビット割当
図 第369図は、オペランドフィールド名索引図第370
図は、ccccの割当て口 笛371図は、eeeeの割当て口 笛372図は、Mflagの説明図 第373図は、BVMAP命令の演算コード図第374
図は、アドレッシングモードの対応口笛376図は、命
令実行モデルのオペランドとの対応図 第376図は、Pu5)IA @ SP等の説明図第3
77図は、POP命令の説明図 第378図は、MOV命令の説明図 第379図は、PACに命令等の説明図第380図は、
STC命令等の説明図 第381図は、BFINS命令等の説明図第382図は
、CMP命令の説明図。 第383図は、IN[)EX命令の説明図第384図は
、Ace命令等の説明図 第385図は、ADD命令の説明図 第386図は、CS+命令の説明図 第387図は、LDM命令等の説明図 第388図は従来のデータ処理装置におけるEIT処理
起動方法のフローチャー1・、第389図は本発明のデ
ータ処理装置におけるEIT処理起動方法のフローチャ
ート、第390図は本発明におけるデータ処理装置にお
いてEIT処理発生時、外部記憶装置より取り込んでく
るEIT処理ハンドラの先頭アドレスとデータ処理装置
の内部状態変数の一部を含んだEITVTEのフォーマ
ットを示した図、 第391図は本発明におけるデータ処理装置のEIT処
理起動時に形成されるスタックフォーマットを示した図
、 第392図は本発明におけるデータ処理装置のEIT処
理の種類に応じたスタックフォーマットを示す図、 第393図は本発明におけるデータ処理装置が多重EI
T処理を行うとき形成されるスタックフォーマットおよ
びPC,PSWのデータを示した図である。 1001−1006・・・本発明装置におけるEIT処
理の各ステップの処理内容 1007〜1011・・・従来のデータ処理装置におけ
るEIT処理の各ステップの処理内容 1020 ・・・EIT処理後のスタックポイン
タ使用モードの指定を示す1ビツト のデータ 1021 ・・・EIT処理後のコンテキストの
データサイズが32ビツトか64ビ ットかを示ず1ビットのデータ 1022 ・・・EIT処理後のアドレス変換モ
ードの指定を示す2ビットのデータ 1023 ・・・EIT処理後のデバッグモード
の有無を示ず1ビットのデータ 1024 ・・・EIT処理後の割り込み受付優
先度のレベル指定を行う4ビツトの データ 1027 ・・・EIT処理の種類に応じたスタ
ックフォーマットの種類を示す1バ イトのデータ 102B ・・・EIT処理の種類を示す1バイ
トのデータ 1029 ・・・EITベクトル番号を示すlO
ビットのデータ 1030 ・・・EIT処理が発生した時点のデ
ータ処理装置のPCの値 1031 ・・・EIT処理の種類に応じたいろ
いろな追加情報を格納する数バイト の領域 !032〜!035・・・本発明の一実施例におけるデ
ータ処理装置の各種EIT処理によフ て形成されるスタックフォーマ ット 1036 ・・・多1重EIT発生時の最終的な
PCの値 1037 ・・・多重EIT発生時の最終的なP
SWの値 1038〜1044・・・多重EIT処理発生時に形成
されるスタックフォーマット
Claims (1)
- 【特許請求の範囲】 1、複数の命令からなるプログラムを処理するデータ処
理装置において、各命令処理の境界で、その外部から割
り込み要求信号を受けて割り込み処理を検出する手段と
、 命令の例外事象を検出する手段と、 内部割り込み命令の実行であるトラップ処理を検出する
手段とを備え、 上記3種類の処理のいずれか1つに分類される複数のE
IT処理がそれぞれ固有の優先度及び処理方法を持ち、 上記優先度に応じて検出されたEITのうちいずれのE
IT処理を起動するかを選択する手段と上記選択された
EIT処理が起動された時点の状態であり、EIT処理
起動時に書換え対象となる第1の情報群を含む内部状態
を外部の記憶装置に格納する手段と、 上記選択されたEIT処理に対応する一連の処理を実行
すべきEIT処理ハンドラの先頭番地が格納されている
上記外部記憶装置の番地を上記選択されたEIT処理各
々について1対1に生成する手段とを有し、 更に上記生成された外部記憶装置の番地に、上記EIT
処理ハンドラの先頭番地とともに、上部EIT処理ハン
ドラの実行開始時の新たな内部状態の一部又は全部とな
るべき候補である第2の情報群を、上記選択されたEI
T処理の一部又は全部の各々について1対1に格納して
あることを特徴とするデータ処理装置。 2、選択されたEIT処理において第2の情報群を読み
だす手段と、 第1の情報群と第2の情報群とを比較して、新たな内部
状態の一部又は全部である第3の情報群の一部又は全部
の値を決定する手段とを備える特許請求の範囲第1項記
載のデータ処理装置。 3、選択されたEIT処理において第2の情報群を読み
だす手段と、 割り込み要求信号に示された第1の割り込 み優先度と第2の情報群の一部である第2の割り込み優
先度とを比較して、新たな内部状態の一部又は全部であ
る第3の情報群の一部である第3の割り込み優先度を決
定する手段と を備える特許請求の範囲第1項記載のデータ処理装置。 4、データ処理装置がある第1の内部状態にある場合に
、少なくとも2つのEIT処理が同時に検出されたとき
、固有の優先度に従い優先度が高い第1のEIT処理を
起動し、第1のEIT処理に対する処理プログラムの最
初の命令を実行する前の第2の内部状態で同時に検出さ
れた優先度の低い第2のEIT処理を検出するかどうか
を新たに判断すべくなしてある特許請求の範囲第1項記
載のデータ処理装置。 5、EIT処理ハンドラからそのEIT処理ハンドラを
起動したときに実行されていたプログラムにもどる専用
復帰命令をもち、 上記専用復帰命令の実行直後とその他の命令の実行直後
とでEIT処理検出条件を異にしていることを特徴とす
る特許請求の範囲第1項記載のデータ処理装置。
Priority Applications (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP62250216A JP2556870B2 (ja) | 1987-10-02 | 1987-10-02 | データ処理装置 |
| US07/554,945 US5182811A (en) | 1987-10-02 | 1990-07-10 | Exception, interrupt, and trap handling apparatus which fetches addressing and context data using a single instruction following an interrupt |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP62250216A JP2556870B2 (ja) | 1987-10-02 | 1987-10-02 | データ処理装置 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JPH0192840A true JPH0192840A (ja) | 1989-04-12 |
| JP2556870B2 JP2556870B2 (ja) | 1996-11-27 |
Family
ID=17204555
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP62250216A Expired - Lifetime JP2556870B2 (ja) | 1987-10-02 | 1987-10-02 | データ処理装置 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JP2556870B2 (ja) |
Cited By (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH02291027A (ja) * | 1989-05-01 | 1990-11-30 | Fujitsu Ltd | 情報処理装置 |
| US5502827A (en) * | 1989-11-16 | 1996-03-26 | Mitsubishi Denki Kabushiki Kaisha | Pipelined data processor for floating point and integer operation with exception handling |
Families Citing this family (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US8799620B2 (en) | 2007-06-01 | 2014-08-05 | Intel Corporation | Linear to physical address translation with support for page attributes |
-
1987
- 1987-10-02 JP JP62250216A patent/JP2556870B2/ja not_active Expired - Lifetime
Cited By (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH02291027A (ja) * | 1989-05-01 | 1990-11-30 | Fujitsu Ltd | 情報処理装置 |
| US5502827A (en) * | 1989-11-16 | 1996-03-26 | Mitsubishi Denki Kabushiki Kaisha | Pipelined data processor for floating point and integer operation with exception handling |
Also Published As
| Publication number | Publication date |
|---|---|
| JP2556870B2 (ja) | 1996-11-27 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US11080087B2 (en) | Transaction begin/end instructions | |
| US5201039A (en) | Multiple address-space data processor with addressable register and context switching | |
| US9792125B2 (en) | Saving/restoring selected registers in transactional processing | |
| JP2902402B2 (ja) | データ処理装置 | |
| US9858082B2 (en) | Restricted instructions in transactional execution | |
| US5182811A (en) | Exception, interrupt, and trap handling apparatus which fetches addressing and context data using a single instruction following an interrupt | |
| EP2275930B1 (en) | Executing programs for a first computer architecture on a computer of a second architecture | |
| RU2606878C2 (ru) | Обработка транзакций | |
| US9395998B2 (en) | Selectively controlling instruction execution in transactional processing | |
| US5029069A (en) | Data processor | |
| US6965984B2 (en) | Data processing using multiple instruction sets | |
| US20190114234A1 (en) | Randomized testing within transactional execution | |
| US8887003B2 (en) | Transaction diagnostic block | |
| US5974440A (en) | Microprocessor with circuits, systems, and methods for interrupt handling during virtual task operation | |
| US7089539B2 (en) | Program instruction interpretation | |
| US6615339B1 (en) | VLIW processor accepting branching to any instruction in an instruction word set to be executed consecutively | |
| JPH01214932A (ja) | データ処理装置 | |
| ES2389894T3 (es) | Equipo de extracción de tiempo de CPU | |
| US6662298B2 (en) | Method and apparatus for manipulation of non-general purpose registers for use during computer boot-up procedures | |
| US6907515B2 (en) | Configuration control within data processing systems | |
| GB2200482A (en) | Monitoring control flow in a microprocessor | |
| CN108834427B (zh) | 处理向量指令 | |
| JPH0192840A (ja) | データ処理装置 | |
| US8713289B2 (en) | Efficiently emulating computer architecture condition code settings without executing branch instructions | |
| JPH09288564A (ja) | データ処理装置 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313115 |
|
| R371 | Transfer withdrawn |
Free format text: JAPANESE INTERMEDIATE CODE: R371 |
|
| S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313115 |
|
| R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
| R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20070905 Year of fee payment: 11 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080905 Year of fee payment: 12 |
|
| EXPY | Cancellation because of completion of term | ||
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080905 Year of fee payment: 12 |