装配有选择地打印出来

时间:2017-04-21 05:12:43

标签: arrays assembly printing mips

我想要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)`

1 个答案:

答案 0 :(得分:2)

对于需要整数参数的每个系统调用,您都需要修改$a0。一旦您完成了该操作,$a0不再包含arrA的地址。所以你最终将双打存储到你的字符串所在的内存中。

最简单的解决方案是使用另一个寄存器作为arrA的地址。

你真的应该把它简化成一个循环,因为你只做了8次同样的事情。