$ a0 - 用于传递参数
$ t0 - 来自$ a0的临时寄存器lw
这是我的代码
.data
Str: .asciiz "please input words "
input: .space20
main:
la $a0, Str # asciiz loaded at $a0
li $v0, 4 # print string command
syscall # execute print string
la $a0, input # space for input
li $a1, 20 # space for input
li $v0, 8 # read string command
syscall # execute reading string
jal nextStep
nextStep:
lw $t0, 0($a0) # load first word from address $a0
move $a0, $t0 # move $t0 -> $a0
li $v0, 4 # print string command
syscall # execute print string
jr $ra
执行后,我收到一个错误'内存超出界限'在'移动$ a0,$ t0'。
我也试过
and $a0, $t0, $a0
而不是从上面移动线,但我仍然得到相同的错误
我想看到的是使用系统调用打印的$ t0(来自[lw $ t0,0($ a0)])的值。
例如,假设用户总是输入多于一个字的长度,我的期望是当用户输入' 1a2b3c4d5e6f'时,$ t0将包含' 1a2b3c4d' (单词长),那么它只会打印这些值,如果超过则不会显示其余值。
任何帮助都会感激不尽。
答案 0 :(得分:0)
你确定你不想以通常的人类意义打印第一个单词吗?这是第一个空间的字符串的一部分?在任何情况下,逻辑都是相同的:在你想要结束字符串的位置放一个零字节,因为print string
只会到那么远。
另请注意,您不应使用jal
来调用nextStep
,或者如果必须,请妥善保管返回地址。