【问题标题】:how to jump back to a branch statement?如何跳回分支语句?
【发布时间】:2012-01-12 21:45:49
【问题描述】:

我在试图弄清楚如何在 Mips/Mars 架构中实现这一点时遇到了很多麻烦。

我正在制作一款战舰游戏,并将棋盘存储为一个可容纳 100 个整数的数组。

我需要遍历玩家的数组并将存储在每个“单元格”中的信息转换为图形数据,以便向用户显示棋盘。

我的麻烦源于这样一个事实,即向用户显示的字符是基于数组每个单元格中的值。

如果值为 0(空) - 打印 '[ ]',如果 1(猜测和空)打印 - '[O]',如果 2(猜测和命中)打印 - '[X]'。

所以当我循环遍历数组中的每个单元格时,我需要检查值并分支到适当的打印函数。

我的问题是,如果我分支到 print 语句,我该如何跳回到分支语句所在的位置?

伪代码:

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

打印后如何跳回分支语句以保留你在数组中的位置?

非常感谢!

【问题讨论】:

  • 请格式化您的代码。

标签: arrays assembly return mips mars-simulator


【解决方案1】:

increment array 运算符上方以及print emptyprint missprint 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

【讨论】:

  • 这是有道理的。抱歉,我对此很陌生,感觉想扯掉我的头发。非常感谢!我试试看。
【解决方案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

【讨论】:

  • 这是正确的答案。另一个可能最终会导致您使用所谓的意大利面条代码。
猜你喜欢
  • 2017-01-25
  • 1970-01-01
  • 2020-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
  • 2022-06-10
相关资源
最近更新 更多