NAR 1


NAR_1

 “NAR 1”  
NAR 1または単にNAR (セルビア語 Na stavni R ačunar、en. Educational Computer ) は、ベオグラード大学の数学科教授Nedeljko Parezanović (セルビア語: Недељко Парезановић)によって作成されたコンピューターの理論モデルでした。アセンブリ言語とコンピューター アーキテクチャのコースで使用されました。
コンテンツ
1 仕様
2 命令のコーディングとセット
3 サンプルプログラム
4 トリビア
5 こちらもご覧ください

仕様
NAR 1プロセッサには、5ビットの アドレス バス(32バイトのアドレス指定可能なメモリ) と 8 ビットのデータ バスがマシン 命令はシングル バイトで、最上位 3 ビットがオペコードを指定し、最下位5ビットがパラメータメモリ アドレスを指定します。1 つの 8 ビットアキュムレータ レジスタが使用可能で、フラグやフラグ レジスタはありませんでした。絶対アドレッシング モードのみが利用可能で、その他はすべて自己修正コードによって実現されていました。
これは理論上のコンピューターにすぎませんが、次の物理的特性が与えられています。
メモリサイクル:1μs
算術演算(SABF)周期:0.9μs(900ns)
コントロールパネルは、電源のオンとオフ、メモリデータの入力と読み出し、命令カウンターの入力、およびプログラム実行モードまたはコントロールパネルモードの選択を容易にします。

命令のコーディングとセット
SABF (001aaaaa, sr. Sab eri u Fiksnom zarezu , en. Add Fixed point) は、アドレス パラメータで指定されたメモリ位置の内容をロードし、それをアキュムレータの現在の値に加算し、結果をアキュムレータに格納します。
PZAF (010xxxxx, sr. Promeni Z nak A kumulatora u F iksnom zarezu , en.固定小数点のアキュムレータの符号を変更します) アキュムレータの固定小数点 (整数など) の値を否定します
AUM (011aaaaa, sr . A kumulator U Memoriju , en. Accumulator Into Memory) アキュムレータの内容を、アドレス パラメータで指定されたメモリ位置に保存します。
MUA (100aaaaa, sr . Memorija U A kumulator , en. Memory Into Accumulator) アドレス パラメータで指定されたメモリ位置の内容をアキュムレータにロードします。
NES (101aaaaa, sr. Ne gativni S kok , en. Negative Jump) は、アキュムレータの現在の値が負の場合、パラメータで指定されたアドレスへの条件付きジャンプを実行します。
ZAR (110xxxxx, sr. Za ustavi R ačunar , en. Stop the Computer) は、それ以降の処理を停止します。
さらに 2 つの命令は指定されていませんが、シミュレーターには一般的に存在し、命令コード 000aaaaa と 111aaaaa を使用していました。
BES ( sr. Be zuslovni S kok , en. Unconditional Jump) は、パラメータで指定されたアドレスへの無条件ジャンプを実行します
NUS ( sr. Nu la -S kok , en. Zero Jump) は、アキュムレータの現在の値がゼロの場合、パラメータで指定されたアドレスへの条件付きジャンプを実行します

サンプルプログラム
8 ビット整数の配列を合計するサンプル プログラム:
00: 0 ; 入力: 0 または値 22、出力: 結果 01 ..21: 0,0,0 … ; 入力: 値 1..21 22:ムア0 ; プログラムの開始; アキュムレータをアドレス 0 からロードする
23: SABF 1 ; アドレス 1 からアキュムレータに値を追加します
24:運用資産0 ; アキュムレータをアドレス 0 に格納
25:ムア23 ; アドレス 23 のロード命令 (SABF)
26: SABF 31 ; アドレス 31 (+1) からの値をアキュムレータに加算します
27:運用資産23 ; アキュムレータをアドレス 23 に格納 (SABF 命令を変更)
28: SABF 30 ; アドレス 30 からアキュムレータに値を追加します
29:ファミコン22 ; アキュムレータの値が負の場合は 22 に戻ります
30: ZAR 10 ; コンピュータを停止します。引数により、このバイトの値は -(SABF 22) = -54 になります。
31: 1 ; 各反復でアドレスに追加する値
上記のプログラムは、アドレス 22 から実行される場合、最大 22 個の 8 ビット値を加算します。
値 1 ~ 21 は場所 1 ~ 21 に保存されます
値 22 は、定数 0 の代わりに位置 0 に格納され、結果によって置き換えられます
NAR 1 プログラムは一般に自己修正型です。他のいくつかのアーキテクチャとは異なり、これは「トリック」ではありません。メモリはレジスタによってアドレス指定できないため、メモリ データを動的に操作する唯一の方法は、メモリ操作命令を変更することです。上記の例には、メモリを節約するための典型的なトリックも含まれています。命令 (アドレス 30) は、別の命令 (アドレス 28) によってデータとして再利用されます。
アキュムレータの初期値をコントロール ペインから制御できる場合、23 番目の値をそこに格納できます。上記のプログラムを少しだけ変更する必要がアドレス 23 の命令 SABF 1 を SABF 0 に変更し、プログラムを 22 からではなく、そのアドレス (23) から実行する必要が
次の例に示すように、他のトリックには、命令が変更された後の記号の変更の使用が含まれていました。
00 ..21: 0,0,0 … ; 入力値 22 ~ 1 22: 0 ; 入力: 0 または値 23、出力: 結果 23:ムア21 ; プログラムの開始; ロード (次の) 値
24: SABF 22 ; アキュムレータに 22 の小計を追加
25:運用資産22 ; 新しい小計を 22 に格納
26:ムア23 ; 命令 23 をアキュムレータにロードする
27: SABF 31 ; 命令を 1 減らす
28:運用資産23 ; 更新命令
29:ファミコン23 ; 指示がまだ否定的である場合は繰り返します
30: ZAR ; それ以外の場合は、コンピューターを停止します
31: -1 ; 27時の命令に必要な定数
ここで、アドレス 23 の命令「MUA 21」のバイナリ値は 10010101 で、2 の補数の符号付き整数のように扱うと 10 進数で -107 になります。アドレス 26、27、および 28 の命令は、反復ごとにこの値を 1 ずつ減らします。これにより、アドレスを指定する 5 つの最下位ビットが変更され、その命令が MUA 0 (10000000 バイナリ = -128 10 進数、負) になるまで、命令を示す 3 ビットは変更されません。これが 1 減ると 01111111 (10 進数で +127) になり、これはもはや負ではなく、29 の負の場合のジャンプ命令が通過し、30 で「コンピューターを停止」します。
上記と同様に、このプログラムは、アドレス 22 を入力と出力の両方に使用できるかどうか、およびアキュムレータの初期値を入力として使用できるかどうかに応じて、22 ~ 24 個の値を加算できます (プログラムはアドレス 24 から実行され、 23 の命令は MUA にする必要があります 22)。
特定の実装により、未知のオペコードに遭遇した場合、またはオペコード「111aaaaa」を使用して追加の無条件ジャンプ命令を実装した場合にコンピューターが停止する場合、そのような動作は次のように使用できます。
00 ..22: 0,0,0 … ; 入力値 23 ~ 1 23: 0 ; 入力: 0 または値 24、出力: 結果 24:ムア22 ; プログラムの開始; ロード (次の) 値
25: SABF 23 ; アキュムレータに 23 の小計を追加
26:運用資産23 ; 新しい小計を 23 に格納
27:ムア24 ; 命令 24 をアキュムレータにロードする
28: SABF 31 ; 命令を 1 減らす
29: AUM 24 ; 更新命令
30:ファミコン24 ; 指示がまだ否定的である場合は繰り返します
31: -1 ; BES 31 または無効な命令 & 28 の命令の定数
上記で、アドレス 31 にある「-1」の値は、コンピュータを停止させる無効な命令として処理されるか、同じアドレスへの無条件ジャンプ (BES 31) として処理され、結果に影響を与えない無限ループが発生します (制御パネルを使用して表示できます)。
最後に、コンピュータがメモリの最後 (アドレス 31、アドレス 0 にロールバックしない) に達した場合にプログラムの実行を停止するかどうかに応じて、上記のプログラムを再編成して、次のように、「コンピュータを停止する」命令をまとめて実行します。
00 ..22: 0,0,0 … ; 入力値 23 ~ 1 23: 0 ; 入力: 0 または値 24、出力: 結果 24: -1 ; 29時の命令に必要な定数
25:ムア22 ; プログラムの開始; ロード (次の) 値
26: SABF 23 ; アキュムレータに 23 の小計を追加
27:運用資産23 ; 新しい小計を 23 に格納
28:ムア25 ; 命令 25 をアキュムレータにロードする
29: SABF 24 ; 命令を 1 減らす
30:運用資産25 ; 更新命令
31:ファミコン25 ; 指示がまだ否定的である場合は繰り返します
; – 記憶の終わり

トリビア
「nar」という言葉は、コンピューターモデルを教えるという意味です
多くの NAR 1 シミュレーターが作成されました。そのうちの 1 つは「 Šljiva 」(スモモの意)と名付けられましたが、これはセルビアで生育する果実であり、「nar」は生育しないためです。
頻繁に与えられるタスクの 1 つは、可能な限り多くの数を追加するプログラムを作成し、それらの数をプログラムと共に 32 バイトのメモリに格納することでした。
一部のアセンブリ言語プロトコルは、NAR1 khulil コードから派生しています。

こちらもご覧ください NAR 2 Prof.dr Nedeljko Parezanovic (セルビア語) ·