[英]Cannot translate this C code to MIPS Assembly
基本上,我需要將此C代碼( http://pastebin.com/7EupfQ5n )轉換為MIPS程序集。 我對此表示懷疑,但遇到了麻煩。
到目前為止,我所擁有的是這個( http://pastebin.com/LpS6Mqr1 )。 但是,當我在模擬器中運行代碼時,盡管我將其放入數組,但它仍在無限循環中運行,而且我找不到執行此操作的位置。 我會假設它在while和if語句中以不正確的方式引用了數組,但是我不確定如何或為什么。
如果有人可以提供幫助,將不勝感激。
另外,有沒有辦法為Mac OSX提供C到MIPS編譯器(轉換器?)? 我已經安裝了GCC,但是-mips標志為我生成了一個錯誤。 謝謝!
下次,請使用調試器或模擬器逐步執行代碼。 您可能已經注意到了一些明顯的錯誤。
move
(偽)指令都將相反。 應該是move destination, source
。 $s0
。 bge $s3, $t4, sumBetween1If3
(第87行)使用了錯誤的寄存器(復制粘貼錯誤?)。 應該是bge $s4, $s6, sumBetween1If3
$s5
的總和)。 $ra
或堆棧。 因此,這些行將兩者都弄亂了,並導致了無限循環。 只需刪除這3行。 有趣的是,您的數組訪問還可以。 盡管有很多改進的可能性,但是最顯着的是,不需要兩次加載數組項。 我假設您打算刪除所有只會執行下一條指令的多余跳轉。
最簡單的檢查方法是將匯編代碼與編譯器生成的輸出進行比較。
如果您已經在計算機上安裝了clang,則不需要gcc來執行此操作(並執行創建跨平台編譯器所需的所有繁瑣步驟)。 但是,不幸的是,Mac上安裝的clang版本不支持mips,因此您必須直接從llvm網站獲取clang,或者在linux機器上進行操作。 聽到c聲后,只需運行
clang -S -target mips -o mips.asm ./your_file.c
並將您的匯編代碼與mips.asm
文件進行比較。
我在這里包括了命令的輸出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.