repository
0.0.0-20241002011901-6a9bef481b30
Repository: https://github.com/ayase-mstk/go32as.git
Documentation: pkg.go.dev
# README
RV32I Assembler
概要
このプロジェクトは、RISC-V(RV32I)命令セットアーキテクチャ用の自作アセンブラです。
RV32I基本命令セットをサポートし、アセンブリ言語で書かれたコード(.s)をELFフォーマットに従って機械語に変換し、オブジェクトファイル(.o)を作成します。
サポート事項
RV32I基本命令セットの完全サポート
多くのgABIディレクティブのサポート
シンボルテーブルとラベル解決機能
エラー検出とエラーメッセージの出力
非サポート事項
疑似命令のサポート
一部重要でないディレクティブ
詳細なエラー検出
事前準備
riscv-gnu-toolchain, spike, pkのinstall
こちらの記事を参考に環境構築しました。(https://zenn.dev/ohno418/articles/5f6d5e01dc4981)
// path
$ export RISCV=/path/to/riscv/tools
$ export PATH=$RISCV/bin:$PATH
// riscv-gnu-toolchain for rv32i
$ ./configure --prefix=$RISCV --with-arch=rv32i --with-abi=ilp32
$ make
$ make install
// spike
$ mkdir build && cd build
$ sudo ../configure --prefix=$RISCV --with-isa=rv32i
$ sudo make
$ sudo make install
// pk
$ mkdir build && cd build
$ ../configure --prefix=$RISCV --host=riscv32-unknown-linux-gnu --with-arch=rv32i --with-abi=ilp32
$ sudo make
$ sudo make install
使い方
make
./rv32i-as sample/helloworld.s
path/to/riscv32-unknown-linux-gnu-gcc -static -nostartfiles output.o -o a.out
path/to/spike path/to/pk a.out
命令
RV32I命令セットをすべてサポートしています。
主な命令には以下が含まれます:
算術演算命令: ADD, SUB, ADDI など
論理演算命令: AND, OR, XOR など
分岐命令: BEQ, BNE, BLT など
ロード/ストア命令: LW, SW など
ジャンプ命令: JAL, JALR
完全な命令リストについては、RISCV REFERENCE CARDを参照してください。
ディレクティブ
riscv-asm-manualに記載されているほとんどの32bit向けディレクティブをサポートしています。
主なディレクティブには以下が含まれます:
シンボル関連: .local, .globl, size, .type
セクション関連: .section, .text, .data, .bss, .rodata
データ関連: .string, .word