0

我会很短。

我正在 MIPS 中制作一个程序,它从用户那里接收 15 个字符的字符串。我无法将字符串保存在堆栈上。请注意,我使用的是 2D 矩阵 [20][15],其中 20 是字符串,每个字符串有 15 个字符。

请指导我。在过去的 10 个小时里,我一直在尝试这个。

Loop:
bgt $t2,20,XYZ

li $v0,8        #take in input
la $a0, buffer  #load byte space into address
li $a1, 15      # allot the byte space for string
syscall

move $t3,$a0    #save string to t0


#transfering the data onto stack!

#num = $t2
#$base address of Matrix = $t1
#colums of Matrix = 15

mul $s0,$t2,15      #num * colums
li $s1,4            #String have 4 bit!
mul $s0,$s0,$s1 
add $s0,$s0,$t1     #$t1 is the base address!

#storing the data onto the stack!
sw $t3,0($s0)

add $t2,$t2,1
add $s0,$s0,-15 
j Loop
4

1 回答 1

0

您将字符串的地址存储在堆栈上,而不是字符串本身

t3 设置:

la $a0, buffer  #load byte space into address
move $t3,$a0    #save string to t0

存放说明:

sw $t3,0($s0)

下一条指令假设写入了 15 个字节:

add $s0,$s0,-15 

你只用 SW $t2,0($s0) 写了 4 个字节。无论如何,当您根据 T2 重新计算和覆盖 S0 时,这也会在下一个循环中被破坏。使 add $s0,$s0,-15 多余。

您需要一个字符串复制例程,例如

#A0=Dest, A1=Source
copy_string:
   lbu v0,(a1)    
   addiu a1,a1,#1   
   sb v0,(a0)
   addiu a0,a0,#1
   bnez v0, copy_string
于 2015-09-18T06:48:51.300 回答