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
)。
我有一个字节数组,我想用系统调用打印出来。 第一行的前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
)。