读取一个字符串并在 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
我正在尝试读取用户输入的字符串并显示前 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