Categorygithub.com/ayase-mstk/go32as
repository
0.0.0-20241002011901-6a9bef481b30
Repository: https://github.com/ayase-mstk/go32as.git
Documentation: pkg.go.dev

# Packages

No description provided by the author
No description provided by the author

# 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

その他参考文献

gABI ELF format 仕様書
riscv elf format