Assembly 在mips中追加字符串
我应该读两个单独的字符串,计算长度,然后将第二个字符串放在第一个字符串末尾的新位置。我可以进行计数,并将第一个字符串保存到新位置,但在第二个字符串上,我只得到要追加的第一位。我不知道我的问题在哪里,提前谢谢Assembly 在mips中追加字符串,assembly,mips,Assembly,Mips,我应该读两个单独的字符串,计算长度,然后将第二个字符串放在第一个字符串末尾的新位置。我可以进行计数,并将第一个字符串保存到新位置,但在第二个字符串上,我只得到要追加的第一位。我不知道我的问题在哪里,提前谢谢 .data Prompt1: .asciiz"\nPlease enter the first string. " Prompt2: .asciiz"\nPlease enter the second string.
.data
Prompt1: .asciiz"\nPlease enter the first string. "
Prompt2: .asciiz"\nPlease enter the second string. "
theString: .asciiz"\nYou typed: \n"
equalPrompt: .asciiz"\nThe strings are equal\n"
notEqualPrompt: .asciiz"\nThe strings are not equal\n"
stringLengthPrompt: .asciiz"\nThe string length is: \n"
stringAppend: .asciiz"\nThe appended strings are: "
stringAppend2: .asciiz" "
stringOne: .space 100
stringTwo: .space 100
.text
main:
li $t0,0
jal getStrings
la $s4,stringOne
jal stringLength
move $s0,$t0 #copy string one length
la $s4,stringTwo
jal stringLength
move $s1,$t0 #copy string two length
la $t5,stringOne
la $t6,stringTwo
jal testEquality
la $t5,stringOne
lb $t1, 0($t5)
jal append1
la $t6,stringTwo
lb $t1, 0($t6)
jal append2
j end
getStrings:
li $v0,4
la $a0, Prompt1
syscall
li $v0,8
la $a0, stringOne
li $a1, 40
syscall
#string one has been read in
li $v0,4
la $a0, Prompt2
syscall
li $v0,8
la $a0, stringTwo
li $a1, 40
syscall
#string two has been read in
la $a0,theString # "you typed:"
li $v0,4
syscall
la $a0,stringOne
li $v0,4
syscall
la $a0,stringTwo
li $v0,4
syscall
jr $ra
end:
li $v0,10
syscall
stringLength: #calculate length of strings to allocate memory
li $t0,0
stringLength1:
lb $t1, 0($s4)
beqz $t1,out
addi $s4,$s4, 1 #move position
addi $t0,$t0, 1 #counter
j stringLength1
out:
la $a0,stringLengthPrompt
li $v0,4
syscall
move $a0, $t0 #length of string
li $v0,1
syscall
jr $ra
equal:
la $a0, equalPrompt
li $v0,4
syscall
jr $ra
notEqual:
la $a0, notEqualPrompt
li $v0,4
syscall
jr $ra
testEquality: #test if both strings are equal
lb $t1, 0($t5)
lb $t2, 0($t6)
bne $t1,$t2, notEqual
addi $t5,$t5,1
addi $t6,$t6,1
add $t7,$t1,$t2
beqz $t7,equal
j testEquality
append1:
add $s2,$s0,$s1
move $a0,$s2
li $v0,9
syscall
move $t8,$v0
move $t9,$v0
append2:
beqz $t1,append3
sb $t1,0($t8)
addi $t5,$t5,1
addi $t8,$t8,1
lb $t1, 0($t5)
b append2
append3:
beqz $t1,appendOut
sb $t1,0($t9)
addi $t6,$t6,1
addi $t9,$t9,1
lb $t1, 0($t6)
b append3
appendOut:
li $v0,4
la $a0, stringAppend
syscall
move $a0, $t9
li $v0,4
syscall
jr $ra
调试你的代码怎么样?这个例子太长了,不需要任何人阅读。孤立这个问题,有人会很乐意看一看。