Mips:“内存地址越界”-错误?

问题描述 投票:0回答:2

如果我理解得很好,这个程序应该打印用户输入的字符串, 因为它会将其值存储在

$a0
中,然后打印
$a0

中的内容

但是它给了我错误 - “内存地址超出范围”

我理解有误还是什么??

提前致谢

    .data
    .text
main:
    li $v0, 8
    syscall
    li $v0, 4
    syscall
    li $v0, 10
    syscall
    .end main
mips
2个回答
1
投票

syscall
$v0 = 8
需要
$a0
中的缓冲区地址以及
$a1
中传递的缓冲区的长度。

检查调用

main
时是否传递了正确的参数。

如果没有,分配一个缓冲区(用

.space
之类的)并正确设置系统调用的参数。


0
投票

.文本 主要的: la $t0, nums # 加载数组地址 addi $sp, $sp, -4 # 压栈 sw $t0, 0($sp) # 存储数组地址

lw $t1, length   # Load length
addi $sp, $sp, -4 # Push stack
sw $t1, 0($sp)   # Store length

jal Layan        # Call Layan

lw $s6, sum      # Load the sum

li $v0, 10       # Exit
syscall

拉扬: lw $s4, 0($sp) # 加载数组地址 lw $s3, 4($sp) # 负载长度

addi $sp, $sp, 8 # Pop stack for two words

li $s5, 0        # Initialize counter
li $s6, 0        # Initialize sum

循环: bge $s5, $s3, exit # 如果 counter >= length 则退出 lw $s7, 0($s4) # 加载元素 add $s6, $s6, $s7 # 总和 = 总和 + 元素 addi $s5, $s5, 1 # 递增计数器 addi $s4, $s4, 4 # 移动到下一个元素 j 循环

退出: move $v0, $s6 # 将总和存储在 $v0

.数据 数字:.word 1, 2, 3, 4 长度:.word 4 总和:.word 0

© www.soinside.com 2019 - 2024. All rights reserved.