Mips:在 2 行中打印多个值

Mips: Printout multiple values in 2 rows

我有一个字节数组,我想用系统调用打印出来。 第一行的前3个字节和第二行的第4到6个字节。

预期输出为:

 0  1  2 
 3  4  5 

但是打印出来的是这样的:

 0
  1
  2
 
 3
  4
  5

似乎每打印出一个字节还包括一个换行符。 这是编码:

.data
     board: .byte '0', '1', '2', '3', '4', '5'
     cell: .asciiz ""
     newline: .asciiz "\n"
     space: .asciiz " "

.text
.globl main

main:
    la  $a0 board
    jal drawBoard

drawBoard:
    la $t0, ($a0)            # load the address of board byte array 
    la $t1, cell             # load address of cell string

    #### ROW 1 ################################################
        
    #*** Cell 1 ******************************************
    # Space
    li $v0,4
    la $a0, space
    syscall
    # Byte 0 from board
    lbu  $t2, 0($t0)         # load the first byte of $t0 (board) into $t2
    sb   $t2, 0($t1)         # save $t2 into first byte of $t1 (cell)    
    li $v0,4
    la $a0, cell
    syscall
    # Space
    li $v0,4
    la $a0, space
    syscall

    #*** Cell 2 ******************************************
    # Space
    li $v0,4
    la $a0, space
    syscall
    # Byte 1 from board
    lbu  $t2, 1($t0)         # load the first byte of $t0 (board) into $t2
    sb   $t2, 0($t1)         # save $t2 into first byte of $t1 (cell)    
    li $v0,4
    la $a0, cell
    syscall
    # Space
    li $v0,4
    la $a0, space
    syscall

    #*** Cell 3 ******************************************
    # Space
    li $v0,4
    la $a0, space
    syscall
    # Byte 2 from board
    lbu  $t2, 2($t0)         # load the first byte of $t0 (board) into $t2
    sb   $t2, 0($t1)         # save $t2 into first byte of $t1 (cell)    
    li $v0,4
    la $a0, cell
    syscall
    # Space
    li $v0,4
    la $a0, space
    syscall
 
    #*** Newline ******************************************
    li $v0,4
    la $a0, newline
    syscall
    
    #### ROW 2 ################################################
        
    #*** Cell 4 ******************************************
    # Space
    li $v0,4
    la $a0, space
    syscall
    # Byte 3 from board
    lbu  $t2, 3($t0)         # load the first byte of $t0 (board) into $t2
    sb   $t2, 0($t1)         # save $t2 into first byte of $t1 (cell)    
    li $v0,4
    la $a0, cell
    syscall
    # Space
    li $v0,4
    la $a0, space
    syscall

    #*** Cell 5 ******************************************
    # Space
    li $v0,4
    la $a0, space
    syscall
    # Byte 4 from board
    lbu  $t2, 4($t0)         # load the first byte of $t0 (board) into $t2
    sb   $t2, 0($t1)         # save $t2 into first byte of $t1 (cell)    
    li $v0,4
    la $a0, cell
    syscall
    # Space
    li $v0,4
    la $a0, space
    syscall

    #*** Cell 6 ******************************************
    # Space
    li $v0,4
    la $a0, space
    syscall
    # Byte 5 from board
    lbu  $t2, 5($t0)         # load the first byte of $t0 (board) into $t2
    sb   $t2, 0($t1)         # save $t2 into first byte of $t1 (cell)    
    li $v0,4
    la $a0, cell
    syscall
    # Space
    li $v0,4
    la $a0, space
    syscall

如有任何帮助,我将不胜感激!

提前致谢, 文森特

################编辑#########################

当我切换 space 和换行的声明时,输出看起来几乎正确! 但是数之间是一个space太多了:

 0   1   2  
 3   4   5  

这真的很奇怪!!! 数据声明的顺序怎么可能改变输出?

谢谢,文森特

cell 是一个空字符串,即只是一个 NUL 终止符。因此,当您将字符存储到该地址时,您将覆盖 NUL 终止符。这会导致紧跟在 cell 之后的字符串在您打印 cell.

时也被打印出来

解决此问题的一种方法是将 cell 的声明更改为 .asciiz " "。或者您可以完全跳过 cell 并使用系统调用 11 打印单个字符(您必须将其加载到 $a0)。