我正在为我的大会班做第二个家庭作业,即使是最基本的事情,我也遇到了麻烦。该赋值涉及从用户读取几行输入,其中每行包含最多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 '#'