1
我正在做一個項目,在這個項目中我必須創建一個可以爲C代碼生成MIPS彙編代碼的翻譯器。我正在使用的編程語言是C++,並且我已經完成了三代地址代碼的生成,並且對如何進一步深入瞭解感到困惑。如何將三個地址代碼轉換爲MIPS彙編語言?
我正在做一個項目,在這個項目中我必須創建一個可以爲C代碼生成MIPS彙編代碼的翻譯器。我正在使用的編程語言是C++,並且我已經完成了三代地址代碼的生成,並且對如何進一步深入瞭解感到困惑。如何將三個地址代碼轉換爲MIPS彙編語言?
如前所述,這是一個直接翻譯。沒有什麼可以澄清的。作爲一個例子,下面三個地址代碼:
i := 0 ; assignment
L1: if i >= 10 goto L2 ; conditional jump
t0 := i*i
t1 := &b ; address-of operation
t2 := t1 + i ; t2 holds the address of b[i]
*t2 := t0 ; store through pointer
i := i + 1
goto L1
L2:
MIPS的翻譯是:
li $t0, 0 #allocator assigned i to t0
L1: bge $t0, 10, L2
mult $t1, $t0, $t0
la $t2, b
add $t3, $t2, $t0
sw $t1, ($t3)
addi $t0, $t0, 1
j L1
L2:
如果你足夠幸運,有這樣的三個地址,你幾乎做任何事情。找到相應的操作碼以符合指令。寄存器分配已經完成。如果三地址代碼字面上是一串字符串,我會考慮編寫一個小解析器(使用生成器),而不是試圖從字符串中提取信息。
3地址代碼?你能澄清嗎? (我已經刪除了關於你的問題的編譯器優化標記,考慮到它還沒有完全正常工作,我假設你沒有優化。) – Corbin 2012-04-28 09:28:16
開始尋找一個3地址指令的翻譯,比如說'add' 。你可以在MIPS指令列表中找到一個等價物嗎?也許是近似的等值? – 2012-04-28 09:48:03
@user - 您必須查看每個3地址指令,並弄清楚如何在彙編中執行此操作。然後產生一個或多個彙編指令。 – 2012-04-28 09:57:47