1. システムCOMET兇了斗

1.1 ハードウェアの仕様

(1) 1語は16ビットで、そのビット構成は、次のとおりである。
上位ビット
下位ビット
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
↑符号ビット

(2) 主記憶の容量は65536語で、そのアドレスは65535番地である。
(3) 数値は、16ビットの2進数で表現する。負数は、2の補数で表現する。
(4) 制御方式は逐次制御で、命令後は1語長又は2語長である。
(5) レジスタとして、GR(16ビット)、SP(16ビット)、PR(16ビット)、FR(3ビット)の4種類がある。
 GR(汎用レジスタ、General Register)は、GR0GR7の8個があり、算術、論理、比較、シフトなどの演算に用いる。このうち、GR1GR7のレジスタは、指標レジスタ(Index Register)としてアドレスの修飾にも用いる。
 SP(スタックポインタ、Stack Pointer)は、スタックの最上段のアドレスを保持している。
 PR(プログラムレジスタ、Program Register)は、 次に実行すべき命令語の先頭アドレスを保持している。 FR(フラグレジスタ,Flag Register)は、OF (Overflow Flag)、SF(Sign Flag)、ZF(Zero Flag) と呼ぶ3個のビットからなり、演算命令などの実行によって次の値 が設定される。これらの値は、条件付き分岐命令で参照される。

OF 算術演算命令の場合は、演算結果が−32768〜32767に収まらなくなったとき1になり、 それ以外のとき0になる。論理演算命令の場合は、演算結果が0〜65535に収まらなくなったとき 1になり、それ以外のとき0になる。
SF 演算結果の符合が負(ビット番号15が1)のとき1、それ以外のとき0になる。
ZF 演算結果が零(全部のビットが0)のとき1、それ以外のとき0になる。

(6) 論理加算又は論理減算は、被演算データを符号の無い数値とみなして、加算又は減算する。

1.2 命令

 命令の形式およびその機能を示す。ここで、ひとつの命令コードに対し2種類のオペランドがある場合、上段はレジスタ間の命令、下段はレジスタと主記憶間の命令を表す。

命令 書き方 命令の説明 FRの設定
命令コード オペランド

(1) ロード、ストア、ロードアドレス命令

ロード
LoaD
LD r1,r2 r1 ← (r2) ○*1
r,adr[,x] r ← (実効アドレス)
ストア
STore
ST r,adr[,x] 実効アドレス ← (r)
ロードアドレス
Load ADdress
LAD r,adr[,x] r ← 実効アドレス

(2) 算術、論理演算命令

算術加算
ADD Arithmetic
ADDA r1,r2 r1 ← (r1) + (r2)
r,adr[,x] r ← (r) + (実効アドレス)
論理加算
ADD Logical
ADDL r1,r2 r1 ← (r1) +L (r2)
r,adr[,x] r ← (r) +L (実効アドレス)
算術減算
SUBtract Arithmetic
SUBA r1,r2 r1 ← (r1) − (r2)
r,adr[,x] r ← (r) − (実効アドレス)
論理減算
SUBtract Logical
SUBL r1,r2 r1 ← (r1) −L (r2)
r,adr[,x] r ← (r) −L (実効アドレス)
論理積
AND
AND r1,r2 r1 ← (r1) AND (r2) ○*1
r,adr[,x] r ← (r) AND (実効アドレス)
論理和
OR
OR r1,r2 r1 ← (r1) OR (r2)
r,adr[,x] r ← (r) OR (実効アドレス)
排他的論理和
eXclusive OR
XOR r1,r2 r1 ← (r1) XOR (r2)
r,adr[,x] r ← (r) XOR (実効アドレス)

(3) 比較演算命令

算術比較
ComPare Arithmetic
CPA r1,r2 (r1)と(r2)、又は(r)と(実効アドレス)の 算術比較又は論理比較を行い、比較結果によって、FRに次の値を設定する。
比較結果 FRの値
SF ZF
(r1)>(r2)
(r)>(実効アドレス)
(r1)=(r2)
(r)=(実効アドレス)
(r1)<(r2)
(r)<(実効アドレス)
○*1
r,adr[,x]
論理比較
ComPare Logical
CPL r1,r2
r,adr[,x]

(4) シフト演算命令

算術左シフト
Shift Left Arithmetic
SLA r,adr[,x]  符合を除き(r)を実効アドレスで 指定したビット数だけ左又は右にシフトする。
 シフトの結果、空いたビット位置には、左シフトの時は0、                                                                                                                                                                                                                                                 右シフトの時は符号と同じものが入る。
○*2
算術右シフト
Shift Right Arithmetic
SRA r,adr[,x]
論理左シフト
Shift Left Logical
SLL r,adr[,x]  符号を含み(r)を実効アドレスで 指定したビット数だけ左又は右にシフトする。
 シフトの結果、空いたビット位置には0が入る。
論理右シフト
Shift Right Logical
SRL r,adr[,x]

(5) 分岐命令

正分岐
Jump on PLus
JPL adr[,x]  FRの値によって、実効アドレスに分岐する。 分岐しない時は、次の命令に進む。

FR
OF SF ZF
JPL
JMI

JNZ

JZE

JOV

負分岐
Jump on MInus
JMI adr[,x]
非零分岐
Jump on Non Zero
JNZ adr[,x]
零分岐
Jump on ZEro
JZE adr[,x]
オーバーフロー分岐
Jump on OVerflow
JOV adr[,x]
無条件分岐
unconditional JUMP
JUMP adr[,x]  無条件に実効アドレスに分岐する。

(6) スタック操作命令

プッシュ
PUSH
PUSH adr[,x] SP ← (SP) −L 1,
(SP) ← 実効アドレス
ポップ
POP
POP r ← ((SP)),
SP ← (SP) +L

(7) コール、リターン命令

コール
CALL subroutine
CALL adr[,x] SP ← (SP) −L 1,
(SP) ← (PR),
PR ← 実効アドレス
リターン
RETurn from subroutine
RET
PR ← ((SP)),
SP ← (SP) +L

(8) その他

スーパバイザコール
SuperVisor Call
SVC adr[,x]  実効アドレスを引数として割出しを行う。実行後のGRとFRは不定となる。
ノーオペレーション
No OPeration
NOP
 何もしない。
(注) r,r1,r2 いずれもGRを示す。指定できるGRはGR0〜GR7
adr アドレスを示す。指定できる値の範囲は0〜65535
指標レジスタとして用いるGRを示す。指定できるGRはGR1〜GR7
[ ] [ ]内の指定は省略できることを示す。
( ) ( )内のレジスタ又はアドレスに格納されている内容を示す。
実効アドレス adrとxの内容との論理加算値又はその値が示す番地。
演算結果を、左辺のレジスタ又はアドレスに格納することを示す。
LL 論理加算,論理減算を示す。
FRの設定
設定されることを示す。
○*1 設定されることを示す。ただし、OFには0が設定される。
○*2 設定されることを示す。ただし、OFには レジスタから最後に送り出されたビットの値が設定される。
実行前の値が保持されることを示す。

1.3 文字の組

(1)JIS X 0201 ラテン文字・片仮名用8ビット符号で規定する文字の組を使用する。

(2)右に符号表の一部を示す。1文字は8ビットからなり、上位4ビットを列で、下位4ビットを行で示す。 たとえば、間隔、4、H、¥のビット構成は、16進表示で、ビット構成が 21〜7E(及び表では省略しているA1〜DF)に対応する文字を図形文字という。 図形文字は、表示(印刷)装置で、文字として表示(印字)できる。

(3)この表にない文字とそのビット構成が必要な場合は、問題中で与える。

行\列 02 03 04 05 06 07
間隔
10
11
12
13
14
15 _