如何在Mips64中打印数组?我已成功使用以下代码在QtSPIM(MIPS32)中打印数组:
.data
array: .word 10 20 30 40 50
.text
#load base address of array
la $t1,array
#load number of elements
ld $t2,num
loop:
#load word
lw $a0, ($t1)
#print element
li $v0,1
syscall
#print space
la $a0, space
li $v0,4
syscall
addi $t1,4
#increase counter
addi $t0, 1
bne $t0,$t2,loop
#end
li $v0,10
syscall
我知道MIPS64有daddi
而不是addi
,但我仍然遗漏了一些内容。
答案 0 :(得分:3)
WinMips64似乎没有像{SPIM / MARS那样使用syscall
作为终端输出,而是使用内存映射I / O来实现它(参见this example code)。
CONTROL
端口位于地址0x10000
,DATA
端口位于地址0x10008
。
由于您正在打印整数,因此您主要对这两种输出模式感兴趣:
; Set CONTROL = 1, Set DATA to Unsigned Integer to be output
; Set CONTROL = 2, Set DATA to Signed Integer to be output
例如:
ori $a1,$0,0
lui $a1,1 ; $a1 = 0x10000 (CONTROL)
ori $a2,$a1,8 ; $a2 = 0x10008 (DATA)
lwu $a0,($t1) ; load an unsigned 32-bit value
ori $v0,$0,1 ; 1 == print unsigned integer
sd $a0, ($a2) ; set value to print
sd $v0, ($a1) ; ..and write the command to print it