td4
TD4は、書籍「CPUの創りかた」で題材となっているCPUである。
TD4は、4ビットの入力ポート1個と、4ビットの出力ポート1個を持つ。
TD4は、以下のレジスタを持つ。
MikeAssemblerでは、以下の命令をサポートしている。
命令およびレジスタ名の大文字・小文字は区別しない。
Im
は、4ビットの即値である。
通常の式による表現に加え、0101
のように0/1を4個並べた2進数での表現が可能である。
即値は、機械語のmmmm
の部分に反映される。
命令 | 機械語 (ビット列) | 動作 | 実行後のC (フラグ) |
---|---|---|---|
ADD A, Im | 0000 mmmm | A ← A + Im | キャリー |
ADD B, Im | 0101 mmmm | B ← B + Im | キャリー |
MOV A, Im | 0011 mmmm | A ← Im | 0 |
MOV B, Im | 0111 mmmm | B ← Im | 0 |
MOV A, B | 0001 0000 | A ← B | 0 |
MOV B, A | 0100 0000 | B ← A | 0 |
IN A | 0010 0000 | A ← 入力ポート | 0 |
IN B | 0110 0000 | B ← 入力ポート | 0 |
OUT Im | 1011 mmmm | 出力ポート ← Im | 0 |
OUT B | 1001 0000 | 出力ポート ← B | 0 |
JMP Im | 1111 mmmm | PC ← Im | 0 |
JNC Im | 1110 mmmm | if (C == 0) PC ← Im | 0 |
JNC
命令は必ず加算命令(ADD
)の直後に実行しなければならないとされているが、MikeAssemblerではチェックを行わない。
なお、レジスタA
の値を出力ポートに出力する命令は、TD4では定義されていない。
MOV
命令の第2オペランド、およびOUT
命令の第1オペランドにおけるa
、A
、b
、B
は、レジスタとして扱われる。
(OUT A
命令は定義されていないため、エラーになる)
これらの場所でこれらを識別子として用いたい場合は、+b
などのようにすると良い。