我想要8个输入并在汇编中创建两个2X2阵列。然而,当我运行它时它只询问我(1,1)a(1,2)a(2,2)b(1,2)b(2,2)然后错误。有什么问题?我想使用双打而不是整数。那是我的代码
.data
arrA: .space 32
arrB: .space 32
arrC: .space 32
msg1: .asciiz "a(1,1)="
msg2: .asciiz "a(1,2)="
msg3: .asciiz "a(2,1)="
msg4: .asciiz "a(2,2)="
msg5: .asciiz "b(1,1)="
msg6: .asciiz "b(1,2)="
msg7: .asciiz "b(2,1)="
msg8: .asciiz "b(2,2)="
.text
.globl main
main:
la $a0, arrA
la $a1, arrB
la $a2, arrC
#Prints msg1
li $v0, 4
la $a0, msg1
syscall
li $v0, 7
syscall
sdc1 $f0, 0($a0)
#Prints msg2
li $v0, 4
la $a0, msg2
syscall
li $v0, 7
syscall
sdc1 $f0, 8($a0)
#Prints msg3
li $v0, 4
la $a0, msg3
syscall
li $v0, 7
syscall
sdc1 $f0, 16($a0)
#Prints msg4
li $v0, 4
la $a0, msg4
syscall
li $v0, 7
syscall
sdc1 $f0, 24($a0)
#Prints msg5
li $v0, 4
la $a0, msg5
syscall
li $v0, 7
syscall
sdc1 $f0, 0($a1)
#Prints msg6
li $v0, 4
la $a0, msg6
syscall
li $v0, 7
syscall
sdc1 $f0, 8($a1)
#Prints msg7
li $v0, 4
la $a0, msg7
syscall
li $v0, 7
syscall
sdc1 $f0, 16($a1)
#Prints msg8
li $v0, 4
la $a0, msg8
syscall
li $v0, 7
syscall
sdc1 $f0, 24($a0)`
答案 0 :(得分:2)
对于需要整数参数的每个系统调用,您都需要修改$a0
。一旦您完成了该操作,$a0
不再包含arrA
的地址。所以你最终将双打存储到你的字符串所在的内存中。
最简单的解决方案是使用另一个寄存器作为arrA
的地址。
你真的应该把它简化成一个循环,因为你只做了8次同样的事情。