3
因此,我正在写一个MIPS程序,它将接收一个输入字符串,然后打印该字符串的所有可能的UNIQUE置换。 (也就是说,如果这个词是LoOp,LoOp和LOop是相同的)。如何在MIPS中删除换行符?
为了做到这一点,我知道我需要在我的输入字符串的末尾没有换行符,但我不知道确保它没有添加。这是我到目前为止:
.data
newLine:
.asciiz "\n"
promptUser:
.asciiz "Enter a 20 letter or less word:\n"
word:
.space 21
.text
main:
la $a0, promptUser
li $v0, 4 # Ask User for Input
syscall
la $a0, word
li $a1,21 # Max number of characters 20
li $v0,8
syscall # Prompting User
la $a0,newLine # Newline
li $v0, 4
syscall
la $a0, word # Printing Word
li $v0, 4
syscall
'\ n'不包括的唯一时间是当输入的字母数是刚好20.任何建议?
FIX:
这工作:
li $s0,0 # Set index to 0
remove:
lb $a3,word($s0) # Load character at index
addi $s0,$s0,1 # Increment index
bnez $a3,remove # Loop until the end of string is reached
beq $a1,$s0,skip # Do not remove \n when string = maxlength
subiu $s0,$s0,2 # If above not true, Backtrack index to '\n'
sb $0, word($s0) # Add the terminating character in its place
skip:
没有太大的工作。 xor $ a2,$ a2,$ a2的用途是什么? – ErikAGriffin
@ user1739675:它将寄存器$ a2设置为零。你是否在提示单词的系统调用和说'la $ a0,newLine'的行之间加入了一段代码?还有,你是否延迟了分支激活?如果是这种情况,你可以在'bnez $ a3,循环' – gusbro
后添加'nop',我不能发布我自己的答案,lawl。但是使用你的代码作为指导,我能够用下面的代码实现预期的结果。 – ErikAGriffin