2013-10-03 51 views
0

如何將此代碼轉換爲Mips?以Mips循環(Mips新功能)

int n = 100; int sum = 0; while (n>0) { 
    sum = sum + n; 
    n--; } 

我有這個到目前爲止,我不知道該怎麼做才能完成這個。

.data 

    n: .word 100 

    .text 

    main: 

    la $t0, n 
    lw $t1, 0(t0) 
    li $so, 0 

    Loop: 
     bgt $t1, $zero, EXIT 
     add $t1, $s0, $t1 
     addi $t1, $t1, -1 

     j Loop 

    exit: 

回答

1

「Mips」不是一種語言。 MIPS指令集架構(ISA)。您是否想知道如何將C代碼轉換爲MIPS彙編代碼?

這看起來像是帕特森和軒尼詩教科書的家庭作業。如果是這樣,你應該去教授的辦公室獲得幫助。幾乎每所大學都在其學術手冊中包含一項聲明,稱在線尋求作業幫助是不道德的。

如果您的請求不是家庭作業,那麼將該C代碼轉換爲MIPS彙編代碼的最佳方法是使用編譯器。對於簡單的循環,編譯器將生成比手動生成更有效的代碼。例如,「gcc -march = native -O3」會生成代碼,針對您正在編譯的確切CPU進行優化,同時考慮到管道深度和緩存延遲。

如果您絕對需要查看彙編代碼,請使用「gcc -S」生成彙編文件。

0

Mips沒有循環說,而是你要做的就是使用帶條件的跳轉語句並循環。

2

更改行:

add $t1, $s0, $t1 

要:

add $s0, $s0, $t1 

而且,也沒有必要使用的數據段。只需設置$ t1使用:

li $t1, 100 
0

我認爲bgt $ t1,$ zero,EXIT與您想要的相反。看起來你想在(n> 100)時進行轉換,如果你在while循環中創建另一個方法來執行代碼,那麼它會有所幫助,那麼bgt $ t1,$ zero,。如我錯了請糾正我。