读取一个字符串并在 MIPS 中显示前 5 个字符

Read a string and display first 5 characters in MIPS

我正在尝试读取用户输入的字符串并显示前 5 个字符。我能够获取并打印回字符串,但我得到 内存地址越界 最有可能在行 move $a0,$t8 中,因为我对 lb $t8 的分配是错误的。我无法完成这项工作。

#data segment
.data
    buffer: .space 20       #allocate space for 20 bytes=characters

#text segment
.text
    .globl __start 

#program start
__start:

    #get user input
    li $v0,8
    #load byte space
    la $a0,buffer
    #tell the system the max length
    li $a1,20
    move $t1,$a0
    syscall

    #display the input
    li $v0,4
    syscall

    #print 5 first characters
    li $t6,5

loop:   lb $t8,($t1)

    li $v0,4
    la $a0,buffer
    move $a0,$t8
    syscall 

    add $t1,1
    
    #1 less letter to print
    sub $t6,1

    #have we printed all 5
    bne $t6,0,loop

t1没有第一个字符串的字节吗?

所有帮助 and/or 在此问题之外的任何一般提示都将受到赞赏。

移动指令不可能导致内存越界异常。只有加载和存储指令会导致这种情况。

您正在使用系统调用 #4 来打印单个字节,因此系统调用会尝试将 $a0 中提供的字节取消引用为指针,如果不匹配,就会出错。

lb $t8,($t1)

li $v0,4
la $a0,buffer # putting buffer address in $a0
move $a0,$t8  # overwriting the buffer address with byte value in $t8
syscall