如何在没有换行符的情况下打印字符串 Mips 汇编语言
How to print an string without the newline Mips Assembly language
我试图让输出与结果(字符串)在同一行。我找到了示例,但其中 none 解释了该过程。我知道字符串必须存储在内存中,然后一点一点地访问它,但是我在这个过程中迷路了。
.data
prompt: .asciiz "Enter your name: "
name: .space 101
result: .asciiz " ...that's the name"
.text
.globl main
main:
la $a0, prompt
li $v0, 4
syscall
la $a0, name # Get the input
li $v0, 8
li $a1,101
syscall
la $a0, name # print the result
li $v0, 4
syscall
la $a0, result
li $v0, 4
syscall
li $v0,10
syscall
问题在于,当您在输入中读取时,新行也会被读取,因此必须将其删除才能满足您的需求。
这是一种方法:
.data
prompt: .asciiz "Enter your name: "
name: .space 101
result: .asciiz " ...that's the name"
.text
.globl main
main:
la $a0, prompt
li $v0, 4
syscall
la $a0, name # Get the input
li $v0, 8
li $a1,101
syscall
addi $t1, $t1, 0 # len = 0
len_to_new_line:
lb $t2, ($a0) # t2 = *a0
beq $t2, '\n', end # if t2 == '\n' -> stop
addi $t1, $t1, 1 # len++
addi $a0, $a0, 1 # a0++
b len_to_new_line
end:
la $a0, name
add $a0, $a0, $t1
sb $zero, ($a0) # overwrite '\n' with 0
la $a0, name # print the result
li $v0, 4
syscall
la $a0, result
li $v0, 4
syscall
li $v0,10
syscall
输出
Enter your name: David
David ...that's the name
编辑:甚至不需要 len,代码可以减少到这个(只有更改的部分)
len_to_new_line:
lb $t2, ($a0) # t2 = *a0
beq $t2, '\n', end # if t2 == '\n' -> stop
addi $a0, $a0, 1 # a0++
b len_to_new_line
end:
sb $zero, ($a0) # overwrite '\n' with 0
我试图让输出与结果(字符串)在同一行。我找到了示例,但其中 none 解释了该过程。我知道字符串必须存储在内存中,然后一点一点地访问它,但是我在这个过程中迷路了。
.data
prompt: .asciiz "Enter your name: "
name: .space 101
result: .asciiz " ...that's the name"
.text
.globl main
main:
la $a0, prompt
li $v0, 4
syscall
la $a0, name # Get the input
li $v0, 8
li $a1,101
syscall
la $a0, name # print the result
li $v0, 4
syscall
la $a0, result
li $v0, 4
syscall
li $v0,10
syscall
问题在于,当您在输入中读取时,新行也会被读取,因此必须将其删除才能满足您的需求。
这是一种方法:
.data
prompt: .asciiz "Enter your name: "
name: .space 101
result: .asciiz " ...that's the name"
.text
.globl main
main:
la $a0, prompt
li $v0, 4
syscall
la $a0, name # Get the input
li $v0, 8
li $a1,101
syscall
addi $t1, $t1, 0 # len = 0
len_to_new_line:
lb $t2, ($a0) # t2 = *a0
beq $t2, '\n', end # if t2 == '\n' -> stop
addi $t1, $t1, 1 # len++
addi $a0, $a0, 1 # a0++
b len_to_new_line
end:
la $a0, name
add $a0, $a0, $t1
sb $zero, ($a0) # overwrite '\n' with 0
la $a0, name # print the result
li $v0, 4
syscall
la $a0, result
li $v0, 4
syscall
li $v0,10
syscall
输出
Enter your name: David
David ...that's the name
编辑:甚至不需要 len,代码可以减少到这个(只有更改的部分)
len_to_new_line:
lb $t2, ($a0) # t2 = *a0
beq $t2, '\n', end # if t2 == '\n' -> stop
addi $a0, $a0, 1 # a0++
b len_to_new_line
end:
sb $zero, ($a0) # overwrite '\n' with 0