如果我理解得很好,这个程序应该打印用户输入的字符串, 因为它会将其值存储在
$a0
中,然后打印 $a0
中的内容
但是它给了我错误 - “内存地址超出范围”
我理解有误还是什么??
提前致谢
.data
.text
main:
li $v0, 8
syscall
li $v0, 4
syscall
li $v0, 10
syscall
.end main
syscall
与 $v0 = 8
需要 $a0
中的缓冲区地址以及 $a1
中传递的缓冲区的长度。
检查调用
main
时是否传递了正确的参数。
如果没有,分配一个缓冲区(用
.space
之类的)并正确设置系统调用的参数。
.文本 主要的: 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