input texinfo

Copyright © Information-technology Promotion Agency, Japan. All rights reserved 2012

システム COMETIIの仕様
***************

ハードウェアの仕様
=========

 1. 1語は16ビットで、そのビット構成は、次のとおりである。

      上位8ビット                               下位8ビット
     | 15 | 14 | 13 | 12 | 11 | 10 |  9 |  8 |  7 |  6 |  5 |  4 |  3 |  2 |  1 |  0 |（ビット番号）
       ↑
     符号（負:1、非負:0）

 2. 主記憶の容量は65536語で、そのアドレスは0～65535番地である。

 3. 数値は、16ビットの2進数で表現する。負数は、2の補数で表現する。

 4. 制御方式は逐次制御で、命令語は1語長又は2語長である。

 5. レジスタとして、GR（16ビット）、SP（16ビット）、PR（16ビット）、FR（3ビット）の 4 種類がある。

     GR（汎用レジスタ、General Register）は、GR0～GR7の8個があり、算術、論理、比較、シフトなどの演算に用いる。このうち、GR1～GR7のレジスタは、指標レジスタ（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. 論理加算又は論理減算は、被演算データを符号のない数値とみなして、加算又は減算する。

命令
==

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

 1. ロード、ストア、ロードアドレス命令

     命令   書き方
      命令コード   書き方
      オペランド   命令の説明   FRの設定
     ロード
      LoaD   LD   r1,r2
      -----
      r,adr[,x]   r1 ← (r2)
      -----
      r ← (実効アドレス)   ○
      ただし、OFには0が設定される。
     ストア
      STore   ST   r,adr[,x]    実効アドレス ← (r)   --
     ロードアドレス
      Load ADdress   LAD   r,adr[,x]   r ← 実効アドレス   --

 2. 算術、論理演算命令

     命令   書き方
      命令コード   書き方
      オペランド   命令の説明   FRの設定
     算術加算
      ADD Arithmetic   ADDA   r1,r2
      -----
      r,adr[,x]   r1 ← (r1) + (r2)
      -----
      r ← (r) + (実効アドレス)   ○
     論理加算
      ADD Logical   ADDL   r1,r2
      -----
      r,adr[,x]   r1 ← (r1) +L (r2)
      -----
      r ← (r) +L (実効アドレス)   ○
     算術減算
      SUBtract Arithmetic   SUBA   r1,r2
      -----
      r,adr[,x]   r1 ← (r1) - (r2)
      -----
      r ← (r) - (実効アドレス)   ○
     論理減算
      SUBtract Logical   SUBL   r1,r2
      -----
      r,adr[,x]   r1 ← (r1) - L(r2)
      -----
      r ← (r) - L(実効アドレス)   ○
     論理積
      AND   AND   r1,r2
      -----
      r,adr[,x]   r1 ← (r1) AND (r2)
      -----
      r ← (r) AND (実効アドレス)   ○
      ただし、OFには0が設定される。
     論理和
      OR   OR   r1,r2
      -----
      r,adr[,x]   r1 ← (r1) OR (r2)
      -----
      r ← (r) OR (実効アドレス)   ○
      ただし、OFには0が設定される。
     排他的論理和
      eXclusive OR   XOR   r1,r2
      -----
      r,adr[,x]   r1 ← (r1) XOR (r2)
      -----
      r ← (r) XOR (実効アドレス)   ○
      ただし、OFには0が設定される。

 3. 比較演算命令

     命令   書き方
      命令コード   書き方
      オペランド   命令の説明   FRの設定
     算術比較
      ComPare Arithmetic   CPA  r1,r2
      -----
      r,adr[,x]   (r1)と(r2)、又は(r)と(実効アドレス)の算術比較を行い、比較結果によって、FRに次の値を設定する。

     比較結果
          FRの値

     (r1) > (r2) 又は (r) > (実効アドレス)
          SF:0, ZF:0

     (r1) = (r2) 又は (r) = (実効アドレス)
          SF:0, ZF:1

     (r1) < (r2) 又は (r) < (実効アドレス)
          SF:1, ZF:0

     ○
      ただし、OFには0が設定される。
     論理比較
      ComPare Logical   CPL   r1,r2
      -----
      r,adr[,x]   (r1)と(r2)、又は(r)と(実効アドレス)の論理比較を行い、比較結果によって、FRに次の値を設定する。

     比較結果
          FRの値

     (r1) > (r2) 又は (r) > (実効アドレス)
          SF:0, ZF:0

     (r1) = (r2) 又は (r) = (実効アドレス)
          SF:0, ZF:1

     (r1) < (r2) 又は (r) < (実効アドレス)
          SF:1, ZF:0

     ○
      ただし、OFには0が設定される。

 4. シフト演算命令

     命令   書き方
      命令コード   書き方
      オペランド   命令の説明   FRの設定
     算術左シフト
      Shift Left Arithmetic   SLA   r,adr[,x]   符号を除き(r)を実効アドレスで指定したビット数だけ左にシフトする。シフトの結果、空いたビット位置には、0が入る。   ○
      ただし、OFにはレジスタから最後に送り出されたビットの値が設定される。
     算術右シフト
      Shift Right Arithmetic   SRA   r,adr[,x]   符号を除き(r)を実効アドレスで指定したビット数だけ右にシフトする。シフトの結果、空いたビット位置には、符号と同じものが入る。   ○
      ただし、OFにはレジスタから最後に送り出されたビットの値が設定される。
     論理左シフト
      Shift Left Logical   SLL   r,adr[,x]   符号を含み(r)を実効アドレスで指定したビット数だけ左にシフトする。シフトの結果,空いたビット位置には0が入る。   ○
      ただし、OFにはレジスタから最後に送り出されたビットの値が設定される。
     論理右シフト
      Shift Right Logical   SRL   r,adr[,x]   符号を含み(r)を実効アドレスで指定したビット数だけ右にシフトする。シフトの結果、空いたビット位置には0が入る。   ○
      ただし、OFにはレジスタから最後に送り出されたビットの値が設定される。

 5. 分岐命令

     命令   書き方
      命令コード   書き方
      オペランド   命令の説明   FRの設定
     正分岐
      Jump on Plus   JPL   adr[,x]   FRの値によって、実効アドレスに分岐する。分岐しないときは、次の命令に進む。

     分岐するときのFRの値
          SF:0, ZF:0

     --
     負分岐
      Jump on MINUS   JMI   adr[,x]   FRの値によって、実効アドレスに分岐する。分岐しないときは、次の命令に進む。

     分岐するときのFRの値
          SF:1

     --
     非零分岐
      Jump on Non Zero   JNZ   adr[,x]   FRの値によって、実効アドレスに分岐する。分岐しないときは、次の命令に進む。

     分岐するときのFRの値
          ZF:0

     --
     零分岐
      Jump on ZEro   JZE   adr[,x]   FRの値によって、実効アドレスに分岐する。分岐しないときは、次の命令に進む。

     分岐するときのFRの値
          ZF:1

     --
     オーバーフロー分岐
      Jump on OVerflow   JOV   adr[,x]   FRの値によって、実効アドレスに分岐する。分岐しないときは、次の命令に進む。

     分岐するときのFRの値
          OF:1

     --
     無条件分岐
      unconditional Jump   JUMP   adr[,x]   無条件に実効アドレスに分岐する。   --

 6. スタック操作命令

     命令   書き方
      命令コード   書き方
      オペランド   命令の説明   FRの設定
     プッシュ
      PUSH   PUSH   adr[,x]   SP ← (SP)-L1,
      (SP)← (実効アドレス)   --
     ポップ
      POP   POP   r   r ← ( (SP) ),
      SP ← (SP) +L 1   --

 7. コール、リターン命令

     命令   書き方
      命令コード   書き方
      オペランド   命令の説明   FRの設定
     コール
      CALL subroutine   CALL   adr[,x]   SP ← (SP)-L 1,
      (SP) ← (PR),
      PR ← 実効アドレス   --
     リターン
      RETrun form subroutine   RET     PR ← ( (SP) ),
      SP ← (SP) +L 1   --

 8. その他

     命令   書き方
      命令コード   書き方
      オペランド   命令の説明   FRの設定
     スーパーバイザコール
      SuperVisor CALL   SVC   adr[,x]   実効アドレスを引数として割出しを行う。実行後のGRとFRは不定となる。   --
     ノーオペレーション
      No operation   NOP     何もしない。   --

  * 注

     r, r1, r2
          いずれも GRを示す。指定できるGRはGR0～GR7

     adr
          アドレスを示す。指定できる値の範囲は0～65535

     x
          指標レジスタとして用いるGRを示す。指定できるGRはGR1～GR7

     [ ]
          [ ]内の指定は省略できることを示す。

     ( )
          ( )内のレジスタ又はアドレスに格納されている内容を示す。

     実効アドレス
          adrとxの内容との論理加算値又はその値が示す番地

     ←
          演算結果を、左辺のレジスタ又はアドレスに格納することを示す。

     +L, -L
          論理加算、論理減算を示す。

     FRの設定

            * ○: 設定されることを示す。

            * ー: 実行前の値が保持されることを示す。

文字の符号表
======

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

(1) 行 列 0

1 (2) 右に符号表の一部を示す。1 文字は 8 ビットからなり,上位 4 ビットを列で,下位 4 ビットを行で示す。例えば,間隔,4,H,¥ のビット構成は,16 進表示で,それぞれ 20,34,48, 2

3

4

5 6 5C である。16 進表示で,ビット構成が 21 ~7E(及び表では省略している A1 ~ DF)に対応する文字を図形文字という。図形文字は,表示(印刷)装置で,文字として表示(印字)できる。 7

8

9 10

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

12 13 14 15 02 03 間隔 0 ! 1 ” 2 # 3 $ 4 % 5 & 6 ' 7 ( 8 ) 9 * : + ; , < ‐ = . > / ? 04 A B C D E F G H I J K L M N O 05 P Q R S T U V W X Y Z [ ¥ ] ^ _ 06 ` a b c d e f g h i j k l m n o 07 p q r s t u v w x y z

|

~