如何在WinMips64上打印数组?

时间:2013-05-10 21:43:23

标签: printing mips mips64

如何在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,但我仍然遗漏了一些内容。

1 个答案:

答案 0 :(得分:3)

WinMips64似乎没有像{SPIM / MARS那样使用syscall作为终端输出,而是使用内存映射I / O来实现它(参见this example code)。

CONTROL端口位于地址0x10000DATA端口位于地址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