Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly Mips:打印两行中的多个值_Assembly_Mips - Fatal编程技术网

Assembly Mips:打印两行中的多个值

Assembly Mips:打印两行中的多个值,assembly,mips,Assembly,Mips,我有一个字节数组,我想用syscall打印出来。 第一行的前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 "

我有一个字节数组,我想用syscall打印出来。 第一行的前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
我将感谢任何帮助

提前感谢,, 文森特

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

当我切换空格和换行符时,输出看起来几乎正确! 但数字之间的间距太大:

 0   1   2  
 3   4   5  
这真的很奇怪!!! 数据声明的顺序如何可能改变输出


谢谢,Vincent

单元格
是一个空字符串,即只是一个NUL终止符字符。因此,当您将字符存储到该地址时,您正在覆盖NUL终止符。这样,当您打印
单元格
时,也会打印紧跟在
单元格
后面的字符串

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