【问题标题】:How to Display String array in MIPS如何在 MIPS 中显示字符串数组
【发布时间】:2012-10-06 16:05:00
【问题描述】:

这是 MIPS 编程中的一个非常初级的程序,我试图从用户那里获取输入并在屏幕上显示输入数据。但是当我运行这个程序时,我得到“Memory out of bound error”,然后程序在尝试显示数据时崩溃。这段代码有什么问题:

.data 

Array: .space 20

Promt: .asciiz "Enter a String:\n"
Line: .asciiz "\n"

.text

main:

la $a0,Promt
li $v0,4
syscall

la $a0,Array
li $a1,20
li $v0,8
syscall

la $t0,Array  # BASE ADDRESS OF ARRAY
li $t1,4

Loop:

lw $a0,0($t0)

add $t0,$t0,$t1

beq $a0,0, Exit

li $v0,4

syscall


j Loop

Exit:

li $v0,10
syscall

问候

【问题讨论】:

    标签: string assembly mips mips32 pcspim


    【解决方案1】:

    两个问题:

    1) 在您的循环中,您正在使用$v0 == 4 执行syscall,它会在地址$a0 处打印字符串。 $a0 中有什么内容?它是实际的字符串数据,不是有效的地址。你可能想要$v0 == 11,它打印一个单独的字符;但这会导致下一个问题:

    2) 您一次加载四个字符。一个字是 4 个字节,您使用的是lw,这意味着“加载字”。您一次只能使用syscall 11 打印一个字符,并且您的循环只会在它恰好加载全部为零的 4 个字符块时退出。您应该一次加载一个字符。使用lb(加载字节)代替lw(加载word),使用$t1 == 1代替$t1 == 4

    【讨论】:

      【解决方案2】:

      正如 Jeff 指出的,您似乎在 $a0 中加载了不合适的值。以下是您的程序的修改。我对你的程序做了两个简单的改动。

       .data 
      
              Array: .space 20 
                  Promt: .asciiz "Enter a String:\n"  
                  Line: .asciiz "\n"
      
      .text
      
      main:
      
          la $a0,Promt    
          li $v0,4    
          syscall
      
          la $a0,Array    
          li $a1,20   
          li $v0,8    
          syscall
      
          la $t0,Array  # BASE ADDRESS OF ARRAY   
          li $t1,4    
          lw $a0,0($t0) #***MOVED THIS OUT***     
          Loop:
              add $t0,$t0,$t1         
                  beq $a0,0, Exit         
                  la $a0, Array       
                  li $v0,4        
                  syscall         
      
                  li $a0, 0  #****ADDED THIS LINE****         
                  j Loop
      
          Exit:
              li $v0,10   
                  syscall
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-19
        相关资源
        最近更新 更多