MIPS汇编中的简单操作有问题

时间:2015-03-04 02:11:39

标签: assembly mips

我正在为我的大会班做第二个家庭作业,即使是最基本的事情,我也遇到了麻烦。该赋值涉及从用户读取几行输入,其中每行包含最多8个字符("标记"),后跟一个表示"类型"的整数。令牌。然后我们将它存储在"符号表中#34;与每个令牌的位置和一个名为" DEFN"值为0或1,表示它是标签还是变量。

现在我正在研究" getTokens"函数,它应该是一个循环,它不断地要求用户输入,直到它遇到以#字符开头的标记,此时它完成并运行程序的其余部分。在getTokens中,我需要读取构成令牌的两个单词,然后是一个整数,并将它们按顺序存储在" inArr"阵列。我遇到的问题是将信息存储在数组中。正如我现在所做的那样,我输入一个输入并且循环终止。我在记忆中看到"循环"并且第二个单词只包含3个空格和一个\ 0字符,但我不会在任何地方看到整数。

有人可以看一下并告诉我可能出现的问题吗?

getTokens:
    li  $t0, 0  # For keeping track of how many inputs the user has already entered.
tokenLoop:
    # First, print the token prompt.
    la  $a0, prompt    # <--- prompt contains "Enter tokens:\n"
    li  $v0, 4         # <--- system code for printing a string
    syscall

    # Read the token into inArr($t0)
    la  $a0, inArr($t0)    # <--- load the token into inArr at current pos
    li  $a1, 8             # <--- length of buffer is 8 (2 words)
    li  $v0, 8             # <--- system code for reading a string
    syscall

    # Read the integer representing the type into inArr+8($t0)
    li  $v0, 5              # system code for reading an integer
    syscall
    la  $s0, inArr+8($t0)   # supposed to copy $v0 into inArr+8($t0)...
    move    $s0, $v0

    # Add 12 to $t0.
    addi    $t0, $t0, 12    # <--- increment by 12 (2 words + 1 int = 12)

    # If the first character of the token is #, end the token input. Else, restart the input loop.
    lb  $t1, inArr($t0)        # get first character of token (from first word)
    bne $t1, '#', tokenLoop

    jr  $ra

如果有帮助,这里是来自用户的示例输入。

Enter tokens:
loop    2
:       4
beqz    2
$       5
t1      2
,       4
next    2
#       6   <--- At this point, loop terminates because token is '#'

0 个答案:

没有答案