NAR 2


NAR_2
NAR 2 ( Serbian Na stavni R ačunar 2, en. Educational Computer 2) は、ベオグラード大学の数学科教授Nedeljko Parezanovićによって、その前身であるNAR 1の機能強化として作成された 32ビットワード コンピューターの理論モデルです。アセンブリ言語とコンピューター アーキテクチャのコースで使用されました。「ナル」という言葉は、セルビア語でザクロを意味します。多くのNAR 2 シミュレーターが作成されました。 Serbia、「nar」はそうではありません。
コンテンツ
1 命令構造
2 レジスター
3 ニーモニック
3.1 メモリ/レジスタアクセス 3.2 整数演算 3.3 浮動小数点演算 3.4 ビット単位/論理 3.5 論理シフト 3.6 フロー制御
4 標準アセンブリ言語構文
5 アドレッシング モード
5.1 多段メモ​​リ間接 5.2 インデックス レジスタからの値の読み取り
6 こちらもご覧ください
7 外部リンク

命令構造
NAR 2プロセッサは、32 ビットの機械語を使用します。各機械 語命令には次が含まれます。
上位8ビットのオペコード(ビット 24 ~ 31)
インデックス付きアドレッシング モードで使用するインデックス レジスタを指定する 4 ビット (20 ~ 23)
アドレス モード フラグを含む 4 ビット (16 ~ 19) :
ビット 19: P ( sr. P osredno, en. 介在) – インデックス付き
ビット 18: R ( sr. R elativno) – プログラム カウンターに対する相対値
ビット 17: I ( sr. I ndirektno) -マルチレベル メモリ間接(注: アドレスは指定された場所からロードされ、”I” フラグも指定されている場合は、間接アドレス計算が続行されます)
ビット 16: N ( sr. N eposredno) – 即時
16 ビットの符号付きパラメータ値

レジスター
NAR 2 には 4 つのレジスタが
BNと呼ばれるプログラムカウンター( sr. B rojač N redbi, en. Counter of Instructions )
整数 (固定小数点) または実数 (浮動小数点)として扱うことができる単一の 32 ビットアキュムレータ
X0 ~ X15 の最大 16のインデックス レジスタを指定できます。ただし、X0 はプログラム カウンター (BN) として予約されていたためか、使用されませんでした。
フラグまたはフラグレジスタはありませんでした

ニーモニック
次のオペコードが利用可能でした (実際のコードは指定されておらず、ニーモニックのみが指定されていました)。

メモリ/レジスタアクセス
MUA ( sr. Memorija U A kumulator , en. Memory Into Accumulator) 値をアキュムレータにロードします
AUM ( sr. A kumulator U Memoriju , en. Accumulator Into Memory) はアキュムレータの内容を保存します
PIR ( sr. P unjenje Indeksnog Registra , en. Load Index Register) 値をインデックスレジスタにロードします

整数演算
注: このグループのすべてのニーモニックは、”Fiksni zarez” ( en.固定小数点) 演算を示す文字 “F” で終わります。ただし、これは、足し算、引き算、および否定 (符号変更) の場合にのみ当てはまります。乗算と除算では、「ポイント」が最下位ビットの右側に固定されていると想定しています。つまり、数値が整数であるということです。
SABF ( sr. Sab eri u F iksnom zarezu , en. Add, Fixed Point) – アキュムレータにパラメータを追加します
ODUF ( sr. Odu zmi u F iksnom zarezu , en. Subtract, Fixed Point) – アキュムレータからパラメータを減算します
MNOF ( sr. Mno ži u F iksnom zarezu , en. Multiply, Fixed Point) – アキュムレータをパラメータで乗算します
DELF ( sr. Del i u F iksnom zarezu , en. Divide, Fixed Point) – アキュムレータをパラメータで割ります
PZAF ( sr. Promeni Z nak A kumulatora u F iksnom zarezu , en.アキュムレータの符号を変更、固定小数点) – アキュムレータの符号を変更 (反転)

浮動小数点演算
SAB ( sr. Sab eri , en. Add) – アキュムレータにパラメータを追加します
ODU ( sr. Odu zmi , en. Subtract) – アキュムレータからパラメータを減算します
MNO ( sr. Mno ži , en. Multiply) – アキュムレータをパラメータで乗算します
DEL ( sr. Del i , en. Divide) – アキュムレータをパラメータで割ります
PZA ( sr. Promeni Z nak A kumulatora , en. Change the Sign of Accumuator) – アキュムレータの符号を変更 (反転) します

ビット単位/論理
KON ( sr. Kon jumpcija , en. Conjunction ) -パラメータとアキュムレータで論理積を実行し、結果をアキュムレータに格納します
DIS ( sr. Dis jumpcija , en. Disjunction ) -パラメータとアキュムレータで論理 ORを実行し、結果をアキュムレータに格納します。
NEG ( sr. Neg acija , en. Negation ) -アキュムレータの内容に対して論理否定を実行します (パラメータを無視します)
注: 上記の操作はすべてビット単位です。それらの名前は、それらが純粋な論理演算であることを暗示していますが、ビットのベクトルを操作し、ビットの各ペアに個別に論理演算を適用するかのように説明できます。

論理シフト
POL ( sr. Po meri L evo , en. Shift Left) – アキュムレータのビットを左にシフトします
POD ( sr. Po meri D esno , en. Shift Right) – アキュムレータのビットを右にシフトします

フロー制御
NES ( sr. Ne gativni S kok , en. Negative Jump) は、アキュムレータの現在の値が負の場合、パラメータで指定されたアドレスへの条件付きジャンプを実行します
BES ( sr. Be zuslovni S kok , en. Unconditional Jump) は、パラメータで指定されたアドレスへの無条件ジャンプを実行します
NUS ( sr. Nu la -S kok , en. Zero Jump) は、アキュムレータの現在の値がゼロの場合、パラメータで指定されたアドレスへの条件付きジャンプを実行します
ZAR ( sr. Za ustavi R ačunar , en. Stop the Computer) は、それ以降の処理を停止します。これは、パラメーターを無視する唯一の命令です。

標準アセンブリ言語構文
NAR 2 アセンブリ言語の構文は、単純で解析しやすいように設計されています。各プログラム行には、次のように指定された最大 1 つの命令を含めることができます。
命令ニモニック
命令が任意のインデックス レジスタ、アドレッシング モード、またはパラメータを指定し、カンマで区切られている場合は、空白:
インデックス レジスタの名前 (使用されている場合)
アドレッシング モード フラグの名前 (カンマ区切りも)
パラメータ値
サンプルコード:
aum X1, p, 0 muan , 1 aum 15 pir X1, p, n, 1 mua X1, p, n, 0 oduf n, 1 oduf X2, p, n, 0

アドレッシング モード
4 つのアドレス モード選択ビット (P、R、I、および N – インデックス、相対、間接、および即時) を使用して、NAR 2 命令は 16 の異なるアドレッシング モードを指定できますが、すべての命令ですべてが意味を持つわけではありません。次の表を参照して
M は、メモリ位置 x の 32 ビット値 (コンテンツ) を指定します。
BN はプログラム カウンターを指定します。
p は、位置にある 16 ビットの符号付きパラメーターを指定します
Xi は、ロケーションのデータによって選択されたインデックス レジスタを指定します。
f() は、間接アドレッシングに使用される「実効値」関数です (以下の詳細を参照)。
住所 フラグ
命令タイプP R I N
データ
ジャンプ
 – 
 –   –   – M p
 – 
 –   –  Np p
 – 
 –  私
 –  M f(M)
 – 
 –  私 N f(M)
f(M)
 –  R  –   – M BN+p
 –  R  –  NBN+p BN+p
 – R I
 – 
M[f(M)]
f(M)
 – R I N
f(M)
f(M) P  –   –   – M Xi+p P
 –   –  NXi+p Xi+p P
 –  私
 – 
M[f(M)]
f(M) P  –  私 N f(M)
f(M)P R
 –   –  M BN+Xi+pP R
 –  N
BN+Xi+p
BN+Xi+pP R I
 – 
M[f(M)]
f(M)P R I N
f(M)
f(M)
注 1: 「N」(即時) フラグは、ジャンプ (フロー制御) 命令には影響しません。プロセッサは指定された値にジャンプできず、メモリ アドレスにしかジャンプできないためです。

多段メモ​​リ間接
NAR 2 は、マルチレベル メモリ間接アドレッシング モードをサポートします。場所は、最初に P (インデックス付き) および R (プログラム カウンターに関連する) フラグを「調べる」ことによって選択されます。次に、I (間接) フラグが検出されると、それまでに計算されたメモリ位置から 32 ビット ワードがロードされ、計算が再開されます (すべてのアドレッシング モード フラグ、インデックス レジスタの選択、およびパラメータ値を含む – 「オペコード」のみが実行されます)。省略)。したがって、次のプログラムをメモリ位置 0 にロードして実行すると、次のようになります。
ムア私、0; Memory-Into-Accumulator、間接、ロケーション 0 から
… 無限のアドレス計算ループで NAR 2 をフリーズします。
“I, 0” は、実際のアドレスがメモリ位置 0 からロードされることを指定します。
メモリ位置 0 がロードされます。また「I, 0」と読みます
“I, 0” は、実際のアドレスがメモリ位置 0 からロードされることを指定します。
メモリ位置 0 がロードされます。また「I, 0」と読みます
“I, 0” は、実際のアドレスがメモリ位置 0 からロードされることを指定します。
メモリ位置 0 がロードされます。また「I, 0」と読みます

ご了承ください:
ムアR、私、0; メモリからアキュムレータへ、相対、間接、位置 BN+0 から
より一般的なように見えます (任意の場所から NAR 2 をフリーズする可能性があります) が、これは BN レジスタ値がいつインクリメント/変更されるかによって異なります。
I (間接) フラグが存在する場合の “N” (即時) フラグの処理の問題は、状況が多少あいまいであるため未解決です。つまり、元の命令で指定されたフラグ値を受け入れるかどうか、または間接的に指定された (ルックアップされた) アドレスは競合につながります。上の表は、この方法で実現可能なさまざまなアドレッシング モードを示す最初のケースを示しています。

インデックス レジスタからの値の読み取り
NAR 2 には、特定のインデックス レジスタの値を初期化する命令があります (「PIR」ニーモニック)。ただし、値インデックス レジスタを読み取るための特別な命令はありません。これは、次のようなインデックス付きおよび即時 (P、N) アドレッシング モード フラグを使用することによって実現されます。
mua Xi、P、N、n ; アキュムレータへのメモリ、インデックス付き、即時、0
…これは基本的に Xi+n をアキュムレータに入れます。n=0 の場合、これは「インデックス レジスタ値をアキュムレータにロードする」命令になります。

こちらもご覧ください NAR 1 MMIXは、学生の学習を支援するために教授によって設計された別のプロセッサです。

外部リンク
Primeri Seminarskih zadataka iz ORS – 「ORS」コース (コンピューター システムの基礎) の生徒の課題の例 (セルビア語) 。タスク「V1: NAR」では、学生は NAR 2 のシミュレーターを作成する必要が ·