/cherry-nlp16-assembler

Assember for Cherry-takuan's NLP-16 processor

Primary LanguageCMIT LicenseMIT

cherry-nlp16-assembler

ちぇりーたくあんさんの NLP-16 プロジェクト 用のアセンブラです。NLP は NANA Logic Processor の略で、NAND 素子(74HC00)だけ で 16 ビット CPU を作る壮大なプロジェクトです。

ビルド方法

ビルドは make を実行するだけです。nlpasm が出力されます。

$ cd cherry-nlp16-asm
$ make

C コンパイラが必要です。GCC 9 での動作確認をしています。

使い方

標準入力にアセンブリプログラムを入力すると、機械語列が標準出力に表示されます。

$ echo "add sp, 0x10, sp" | ./nlpasm
121E
1E10

機械語のアドレスを分かりやすく表示するには -d オプションを付与します。

$ echo "add a, 0x432, b
> add sp, 0x10, sp" | ./nlpasm -d
00000000: 1215 2600 0432
00000003: 121E 1E10

出力を見ると、1 個目の add 命令が 3 ワード命令で 2 個目が 2 ワード命令であるこ とが分かります。1 個目の add は 8 ビットで表せないリテラルが含まれるため、自動 的に 3 ワード命令になります。2 個目の add は 8 ビットで表せるリテラルが 1 つだ けしかないため、自動的に 2 ワード命令となります。あえて 3 ワード命令にしたければ リテラルにサイズプレフィクス word(後述)を付与してください。

ラベルとサイズプレフィクス

nlpasm はラベルを含んだプログラムに対応します。ラベルを使用する場合はサイズプ レフィクス(byteword)を指定する必要があります。サイズプレフィクスはラベ ル以外の数値リテラルにも指定できます。

    add a, byte label1, b
    add addr, 0x400, 0xd3
label1:
    add sp, sp, 2

この例ではラベルは後方参照となっています。最初に label1 が使用された時点ではま だ定義されておらず、後になって label1: で定義されます。これでもちゃんとアセン ブル可能です。label1 の値は 5 となります。

byte を指定したにも関わらずラベルの値が 255 を超えた場合はエラーとなります。 word に変更して再度アセンブルしてください。word に変更すると 3 ワード命令と なりますので、機械語のサイズが増加します。