Assembler for nktk-architecture processor/computer.
- Clone this repository.
- Execute
cargo run <input_file>
git clone https://github.com/lemonadern/assembler.git
cargo r input.asm
By executing cargo run -- --help
, you can see the usage instructions for the
command.
Usage: assembler [OPTIONS] <INPUT_FILE>
Arguments:
<INPUT_FILE> Input file path
Options:
-b, --base-address <BASE_ADDRESS> Address for first instruction [default: 0]
-o, --output <FILE> Output file [default: output.txt]
-h, --help Print help
-V, --version Print version
Numbering | Name | Assembly format | Status |
---|---|---|---|
0 | add | add rd, rs, rt |
✅ |
1 | addi | addi rt, rs, imm |
✅ |
2 | lw | lw rt, addr(rs) |
✅ |
3 | sw | sw rt, addr(rs) |
✅ |
4 | beq | beq rs, rt, addr |
✅ |
5 | j | j addr |
✅ |
6 | jal | jal addr |
✅ |
7 | jr | jr rs |
✅ |
Register Name | Status |
---|---|
$0 , $zero |
✅ |
$1 , $at |
✅ |
$2 , $v0 |
✅ |
$3 , $v1 |
✅ |
$4 , $a0 |
✅ |
$5 , $a1 |
✅ |
$6 , $a2 |
✅ |
$7 , $a3 |
✅ |
$8 , $t0 |
✅ |
$9 , $t1 |
✅ |
$10 , $t2 |
✅ |
$11 , $t3 |
✅ |
$12 , $t4 |
✅ |
$13 , $t5 |
✅ |
$14 , $t6 |
✅ |
$15 , $t7 |
✅ |
$16 , $s0 |
✅ |
$17 , $s1 |
✅ |
$18 , $s2 |
✅ |
$19 , $s3 |
✅ |
$20 , $s4 |
✅ |
$21 , $s5 |
✅ |
$22 , $s6 |
✅ |
$23 , $s7 |
✅ |
$24 , $t8 |
✅ |
$25 , $t9 |
✅ |
$26 , $k0 |
✅ |
$27 , $k1 |
✅ |
$28 , $gp |
✅ |
$29 , $sp |
✅ |
$30 , $fp |
✅ |
$31 , $ra |
✅ |
このアセンブラが解釈するアセンブリ言語は、(一般的なアセンブリ言語に比べて)限られた機能しか持ちません。また、パースの作業を簡略なものにするために、非常に限定された文法のみをサポートしています。
-
命令(オペコードとオペランド)およびそれに対するラベルの解釈しかサポートしていません。
-
ディレクティブはサポート外なので、以下のことはできません
- データセグメントでのデータ定義
- データセグメントで定義されたデータに対するラベルを使った値の読み込み
- 他ファイルと組み合わせての実行
BNF書こうと思ったんですが面倒なのでやめます。説明から感じ取って理解してください
- 1行につき1命令
- ラベルを書く場合は行頭に書いて、命令との間に
:
を置く #
による一行コメントが書ける- コメントのみの行も可
- 空行も可
以下に例を示します:
label: addi $sp, $sp, -4
sw $ra, 0($sp) # comment
その他の制約など
beq
,j
,jal
命令におけるオペランドaddr
は、ラベル指定による入力のみを受け付けます