2011-12-05 38 views
1

我在試圖弄清楚如何在Mips/Mars體系結構中實現這一點時遇到了很多麻煩。如何跳回到分支語句?

我正在製作一艘戰艦遊戲,並將該板儲存爲一個可容納100個整數的陣列。

我需要遍歷播放器的數組,並將存儲在每個「單元」中的信息轉換爲圖形數據,以便向用戶顯示該板。

我的煩惱源於顯示給用戶的字符是基於數組的每個單元格中的值。如果值爲0(空) - 打印'[]',如果1(猜測和清空)打印 - '[O]',並且如果2(猜測和打印)打印 - '[X]'。

因此,當我遍歷數組中的每個單元格時,我需要檢查值並轉移到相應的打印函數。

我的問題是,如果我分支到打印語句,我該如何跳回到分支語句的位置?

僞代碼:

Looping through array, 'ArrayCell' = value at current array location 
branch if equal ArrayCell, 0, print empty 
branch if equal ArrayCell, 1, print miss 
branch if equal ArrayCell, 2, print hit 
increment array 

print empty: 
print then jump back to loop 
print miss: 
print then jump back to loop 
print hit: 
print then jump back to loop 

你怎麼跳回到分支語句打印後保存你在哪裏,在數組中?

非常感謝!

+0

請格式化您的代碼。 – Beginner

回答

2

放置一個標籤上方的操作者increment array並在print emptyprint miss,和print hitj到標籤的末端。

例子:

Looping through array, 'ArrayCell' = value at current array location 
    branch if equal ArrayCell, 0, print empty 
    branch if equal ArrayCell, 1, print miss 
    branch if equal ArrayCell, 2, print hit 

    LBL_Increment: 
    increment array 

    loop 


    print empty: 
    print 
    j LBL_Increment 
    print miss: 
    print 
    j LBL_Increment 
    print hit: 
    print 
    j LBL_Increment 
+0

這很有道理。對不起,我對這件事很陌生,覺得很難把頭髮拉出來。 非常感謝!我會試試看。 – user1021118

2

你真的應該使用function calls這一點。

Looping through array, 'ArrayCell' = value at current array location 
    if equal ArrayCell, 0, JAL empty 
    if equal ArrayCell, 1, JAL miss 
    if equal ArrayCell, 2, JAL hit 

    LBL_Increment: 
    increment array 

    loop 


    empty: 
    print " " 
    JR $RA // return to the instruction after the "JAL empty" instruction. 
    miss: 
    print "miss" 
    JR $RA 
    hit: 
    print "hit" 
    JR $RA 
+0

這是正確的答案。另一個可能最終導致你到所謂的意大利麪代碼。 – ninjalj