Assembly Mips:打印两行中的多个值
我有一个字节数组,我想用syscall打印出来。 第一行的前3个字节和第二行的4到6个字节 预期产出为: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 "
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
)