如何解决如何在mips中将char数组的元素初始化为二维数组?
根据c代码,数组p的基地址中的值应该与数组str的基地址相等,但它们不匹配我还是mips assbley的新手,所以请原谅我,随时做任何编辑提前致谢 我认为问题在于加载字节并将字节存储在数组中,但仍然无法弄清楚, 我留下了汇编代码的额外部分,以便让查看者更容易了解代码的内容,但我具体询问的部分在 while 循环内
this is the psudo code
i=0;
j=0;
k=0;
while(j < my_strlen(str))
{
if (str[j] == ' ')
{
p[i][k] = '\0';
i++;
k = 0;
}
else
{
p[i][k++] = str[j];
}
j++;
}
this is my attempted mips code
.data
msg: .asciiz "Enter a string \n"
str: .space 30 # get the paragraph from the user
p: .space 400 #p[20][20]
stringlen: .asciiz "String length is "
blankSpace: .ascii " "
.text
main:
la $a3,blankSpace
lb $s4,0($a3) # $s4 =blankspace
la $s5,str # address start of str
la $s6,p # address start of p
la $s7,ptr1 # address start of ptrl
li $t9,20 # width =20
li $t0,0 # i=0
li $t2,0 # j=0
li $t3,0 #k=0
WHILE:
bge $t2,$s3,End_While # branch if j<=strlength
lbu $t7,($s5) # $t7 = str[j]
beq $t7,$s4,L # if str[j]== ' ' branch L
mul $t8,$t9,$t0 # width *i
add $t8,$t8,$t3 # width * i+k
add $t8,$s6 # base array (width *i+k)
sb $t7,($t8) # p[i][k++]=str[j]
addi $t3,$t3,1 # k++
L2: addi $t2,$t2,1 # j++
addi $s5,$s5,1 # str[j+1]
j WHILE
L: mul $t8,$t0 # array width * i
add $t8,$s6 # base array +(width * i+k)
sb $zero,($t8) # p[i][k++]='\0'
addi $t0,$t0,1 # i++
addi $t3,$zero,0 # k=0
j L2
End_While:
The whole programe
.data
msg: .asciiz "Enter a string \n"
str: .space 30 # get the paragraph from the user
ptr1 : .space 400 #ptr1[20][20]
p: .space 400 #p[20][20]
stringlen: .asciiz "String length is "
blankSpace: .ascii " "
next: .asciiz "\n Next while"
.text
main:
li $v0,4
la $a0,msg
syscall # printing the message to the user
li $v0,8
la $a0,str
li $a1,30
syscall # getting a paragraph from the user
li $v0,4
la $a0,stringlen #"String length is "
syscall
la $a0,str
jal strlen
addi $a0,$v0,0
addi $s3,$a0,0 #strlen value $s3
li $v0,1
syscall # calling the strlen function to count the string lengt
la $a3,0 #k=0
WHILE:
bge $t2,1 # k++
L2: addi $t2,1 # j++
addi $s5,1 # str[j+1]
j WHILE
L: mul $t8,0 # k=0
j L2
End_While:
li $v0,4
la $a0,p
syscall
li $v0,10
syscall # Exit terminating the program
strlen:
addi $sp,$sp,-4
sw $ra,0($sp)
addi $t0,$0,0 # i=0
addi $t1,0 # len=0
l: add $t2,$t0 # add base address to offset
lbu $t3,0($t2) # load base unsigned for char array
beq $t3,finish # if value of array[i] = '\0'
addi $t0,1 # i++
addi $t1,$t1,1 # len++
j l
finish:
subi $s0,$s0,1
add $v0,$s0
lw $ra,0($sp) # restore old $s0
addi $sp $sp 4
jr $ra
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。