如何在mips中将char数组的元素初始化为二维数组?

如何解决如何在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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?