命令符

先に作った算術論理演算器を利用する8桁の命令実行 器の命令符を作ります。




データ操作のための記憶器です。

レジスタ

  • 汎用レジスタ
    R0 から R3 の 4 個の 8 桁 汎用レジスタを置きます 。
    RP0 と RP1 の 16 桁レジスタを汎用レジスタの枠に はめます。
    この 16 桁レジスタは汎用レジスタから 16 桁値を転 送するために使います。

  • 番地レジスタ
    IX と IY をデータ転送に使うメモリ番地の指定に使 います。

  • 分岐レジスタ
    繰り返しに使う分岐命令の分岐先番地の指定に使いま す。

  • 命令ポインタ
    命令を読み出すメモリ番地の指定に使います。

  • スタックポインタ
    スタックデータを読み出すメモリ番地の指定に使いま す。




レジスタと算術論理演算器とメモリを結びつけて命令 実行器を駆動する符です。

命令符
命令名 書式 機能
7 6 5 4 3 2 1 0
ADD 0 0 0 1 ra1 ra0 rb1 rb0 ADD ra,rb ra = ra + rb , c と z を変化
SUB 0 0 1 0 ra1 ra0 rb1 rb0 SUB ra,rb ra = ra - rb ,  ↑
AND 0 0 1 1 ra1 ra0 rb1 rb0 AND ra,rb ra = ra & rb ,  ↑
OR 0 1 0 0 ra1 ra0 rb1 rb0 OR ra,rb ra = ra | rb ,  ↑
XOR 0 1 0 1 ra1 ra0 rb1 rb0 XOR ra,rb ra = ra ^ rb ,  ↑
NOT 0 1 1 0 ra1 ra0 rb1 rb0 NOT ra,rb ra = !rb ,    ↑
SHU 0 1 1 1 ra1 ra0 rb1 rb0 SHU ra,rb ra = rb >> 1 , c = rb.7 , z を変化
SHD 1 0 0 0 ra1 ra0 rb1 rb0 SHD ra,rb ra = rb << 1 , c = rb.0 , z を変化
MOVR 1 0 0 1 ra1 ra0 rb1 rb0 MOVR ra,rb ra = rb
MOVI 1 0 1 0 0 0 ra1 ra0 MOVI ra,imm ra = imm
MOVMR 1 0 1 1 ra1 ra0 ir1 ir0 MOVMR ra,ir ra = m[ir]
MOVRM 1 1 0 0 ra1 ra0 ir1 ir0 MOVRM ir,ra m[ir] = ra
MOVPR 1 1 0 1 ra1 ra0 ir1 ir0 MOVPR ra,ir ra = p[ir]
MOVRP 1 1 1 0 ra1 ra0 ir1 ir0 MOVRP ir,ra p[ir] = ra
MOVRX 0 0 0 0 rp1 rp0 0 0 MOVRX rp ix = rp
MOVRY 0 0 0 0 rp1 rp0 0 1 MOVRY rp iy = rp
MOVXR 0 0 0 0 rp1 rp0 1 0 MOVXR rp rp = ix
MOVYR 0 0 0 0 rp1 rp0 1 1 MOVYR rp rp = iy
JMP 1 1 1 1 0 0 0 0 JMP address ip = address
JMPC 1 1 1 1 0 0 0 1 JMPC address c が 1 なら ip = address
JMPZ 1 1 1 1 0 0 1 0 JMPZ address z が 1 なら ip = address
JMPR 1 1 1 1 0 0 1 1 JMPR jr ip = jr
JMPRC 1 1 1 1 0 1 0 0 JMPRC jr c が 1 なら ip = jr
JMPRZ 1 1 1 1 0 1 0 1 JMPRZ jr z が 1 なら ip = jr
MOVJ 1 1 1 1 0 1 1 0 MOVJ address jr = address
CALL 1 1 1 1 0 1 1 1 CALL address m[sp] = ip, ip = address, sp = sp - 2
RET 1 1 1 1 1 0 0 0 RET ip = m[sp], sp = sp + 2
PUSH 1 1 1 1 1 0 0 1 PUSH rx m[sp] = rx, sp = sp - sc
POP 1 1 1 1 1 0 1 0 POP rx rx = m[sp], sp = sp + sc
EI 1 1 1 1 1 0 1 1 EI 割り込み有効
DI 1 1 1 1 1 1 0 0 DI 割り込み無効
INC 1 1 1 1 1 1 0 1 INC rx rx = rx + 1
DEC 1 1 1 1 1 1 1 0 DEC rx rx = rx - 1
NOP 1 1 1 1 1 1 1 1 NOP 動作なし
LDSR 1 0 0 1 0 0 0 0 LDSR R0 = SR
LDIR 1 0 0 1 0 1 0 1 LDIR R0 = IR
STMR 1 0 0 1 1 0 1 0 STMR MR = R0
RETI 1 0 0 1 1 1 1 1 RETI ip = m[sp]
SR = m[sp]
sp = sp + 3
ADDC 0 0 1 1 0 0 0 0 ADDC r0 = r0 + r1 + c , c と z を変化
SUBC 0 0 1 1 0 1 0 1 SUBC r0 = r0 - r1 - c , c と z を変化
ROU 0 0 1 1 1 0 1 0 ROU r0 = r0 >> 1 , c = r0.7 , z を変化
ROD 0 0 1 1 1 1 1 1 ROD r0 = r0 << 1 , c = r0.0 , z を変化
CMP 0 1 0 0 0 0 0 0 CMP r0 - r1 , c と z を変化
MOVX 0 1 0 0 0 1 0 1 MOVX address IX = address
MOVY 0 1 0 0 1 0 1 0 MOVY address IY = address
MOVS 0 1 0 0 1 1 1 1 MOVS address SP = address
LDCPR 0 0 0 1 0 0 0 0 LDCPR R0 = CPR
LDDPR 0 0 0 1 0 1 0 1 LDDPR R0 = DPR
STCPR 0 0 0 1 1 0 1 0 STCPR CPR = R0
STDPR 0 0 0 1 1 1 1 1 STDPR DPR = R0
MOVFR 0 0 1 0 0 0 0 0 MOVFR R0 = RF(R2)
MOVRF 0 0 1 0 0 1 0 1 MOVRF RF(R2) = R0
INCR2 0 0 1 0 1 0 1 0 INCR2 R2 = R2 + 1
DECR2 0 0 1 0 1 1 1 1 DECR2 R2 = R2 - 1


  • ra, rb
    R0, R1, R2, R3 の 8 桁汎用レジスタです。
    4 個のレジスタを 2 進数の 2 桁で指定します。

    ra1
    rb1
    ra0
    rb0
    選択
    0 0 R0
    0 1 R1
    1 0 R2
    1 1 R3

  • rp
    RP0 か RP1 を 2 進数の 2 桁で指定します。

    rp 選択
    0 RP0
    1 RP1

  • ir
    IX か IY を 2 進数の 2 桁で指定します。

    ir 選択
    0 IX
    1 IY

  • ix, iy, ip, sp, jr
    IX , IY , IP , SP , JR です。

  • rx
    IP と SP を除くすべてのレジスタの内のひとつを指 定します。

    rx 選択
    1 R0
    2 R1
    3 R2
    4 R3
    5 RP0
    6 RP1
    7 IX
    8 IY
    9 JR
    10 SR

  • m[ir]
    番地レジスタの指定するメモリ番地のメモリ値を示し ます。

  • p[ir]
    番地レジスタの指定するポート番号のポート値を示し ます。

  • m[sp]
    スタックポインタの指定するメモリ番地のスタック値 を示します。

  • c
    算術論理演算器の演算結果です。桁上がりがあったと き 1 になります。

  • z
    算術論理演算器の演算結果です。 結果が 0 のとき 1 になります。

  • imm
    8 桁の即値です、2 番目の符に置きます。

  • address
    16 桁の即値です、2 番目の符に下位 8 桁を、3 番目 の符に上位 8 桁を置きます。

  • sc
    スタックの書き込み、または読み出し数です。
    8桁レジスタで 1 、16桁レジスタで 2 です。

  • SR
    指標を集めた状態レジスタです。

  • MR
    割り込みの有効/無効を決めるレジスタです。 1で該当端子の割り込みを無効にします。
  • IR
    割り込みの端子の値です。 各桁が1なら割り込み要求があり、0なら要求なしです。
  • CPR
    コード頁レジスタです。 分岐命令で有効になります。
  • DPR
    データ頁レジスタです。
  • RF(R2)
    R2の値を番号としたレジスタファイル、CPU8Aでは標 準で2進数8桁を8個実装します。







先頭