asm

lex/yaccなソレ使ってMinIPS*2アセンブラぽいの

lex/yacc使ってアセンブラぽいの書けそう。とりあえずアセンブリプログラムを入力として、MinIPSマシン語を2進数で吐かせてみた。 % flex -I asm.l % bison -d -y asm.y % gcc lex.yy.c y.tab.c -lfl -o minasm % ./minasm add $1, $2, $3; add instruction …

こんだけわかれば大学のMIPSのアセンブリ言語の課題程度はできねーかな

もちろん適当だ。 各種命令 データ転送系 文法 説明 lw r1, n(r2) load word。r2レジスタの数値+nが示すメモリ番地の内容を1ワードをr1レジスタに代入(ロード)するぞ。 メモリ番地の単位はバイト。 sw r1, n(r2) store word。r2レジスタの数値+nが示すメモ…

gccのアセンブリ出力を読んでみよう。

% cat main.c int main(){exit(0);} % gcc main.c -S -Os % cat -n main.s 1: #.file 1 "main.c" 2: .set nobopt 3: .option pic2 4: .section .text,0x1,0x6,4,4 5: .text 6: .align 2 7: .globl main 8: .ent main 9: main: 10: .LFB3: 11: .frame $sp,32,…

再帰関数を書いてみよう

.text .globl fact .ent fact fact: subu $sp, 32 # $sp(スタックポインタ)-32を$spに代入。スタックフレームを32バイト確保ってこと sw $31, 28($sp) # $31(戻り先アドレス)を$sp+28が示すメモリ(確保したスタックフレームの一個目)に退避。store word move…

書こうとする度に、以前学んだことを忘れていることに気付く

gccの手続き呼び出し規約ではスタックフレームは6語(24バイト)以上確保することになっている。 スタックフレームは4語(16バイト)単位で確保するって聞いた。大学の講義で。 じゃあスタックフレームは最小でも32バイト確保しないといけないのかもしれない。 …

test