是否可以在MIPS中对STRING整数执行算术运算?例如,如果我有一串整数44051401358,并且想将每个整数乘以某个数字并将它们全部加在一起,我将得到什么结果?
la $a1, user_input #assume string is in user input and the length is 11 integers
lb $t0, 0($a1)
lb $t1, 1($a1)
lb $t2, 2($a1)
lb $t3, 3($a1)
lb $t4, 4($a1)
lb $t5, 5($a1)
lb $t6, 6($a1)
lb $t7, 7($a1)
lb $t8, 8($a1)
lb $t9, 9($a1)
lb $s6, 10($a1)
mul $t0, $t0, 1
mul $t1, $t1, 3
mul $t2, $t2, 7
mul $t3, $t3, 9
mul $t4, $t4, 1
mul $t5, $t5, 3
mul $t6, $t6, 7
mul $t7, $t7, 9
mul $t8, $t8, 1
mul $t9, $t9, 3
add $t0, $t0, $t1
add $t1, $t1, $t0
add $t2, $t2, $t1
add $t3, $t3, $t2
add $t4, $t4, $t3
add $t5, $t5, $t4
add $t6, $t6, $t5
add $t7, $t7, $t6
add $t8, $t8, $t7
add $t9, $t9, $t8
syscall 1 #print them
我已尝试执行此操作,但似乎不起作用。也许有一种将字符串转换为整数的方法?不建议使用数组或其他任何东西。我对是否可以使用字符串整数感兴趣。
如果数组中$a1
的字节是数字的ASCII字符,则可以通过从每个数字中减去0的ASCII码(即48)来将它们转换为数字。
您的代码假定字符串长度为11个字符。这是一个相当随意的限制。我敢肯定,给您这项作业的人都不会将其限制为11个字符串。也许您应该写一个循环。
您的mul
和add
部分将忽略第11个字符,即您加载到$ s6的第一个字符。
此外,您的add
部分距离很远。跟踪并查看。
[也像其他人说的那样,您的syscall 1
序列已关闭。
感谢您提供的所有解决方案,但没有帮助。解决方案是将每个整数字符从字符串加载到寄存器:
la $a1, user_input
lb $t0, 0($a1)
lb $t1, 1($a1)
lb $t2, 2($a1)
lb $t3, 3($a1)
lb $t4, 4($a1)
lb $t5, 5($a1)
lb $t6, 6($a1)
lb $t7, 7($a1)
lb $t8, 8($a1)
lb $t9, 9($a1)
lb $s6, 10($a1)
然后将每个字符转换为如下所示的正整数:
#convert the string integers to regular integers
andi $t0, $t0, 0x0F
andi $t1, $t1, 0x0F
andi $t2, $t2, 0x0F
andi $t3, $t3, 0x0F
andi $t4, $t4, 0x0F
andi $t5, $t5, 0x0F
andi $t6, $t6, 0x0F
andi $t7, $t7, 0x0F
andi $t8, $t8, 0x0F
andi $t9, $t9, 0x0F
andi $s6, $s6, 0x0F
然后您可以执行所需的任何算术运算并获得适当的结果。
谢谢大家!!!!