사실, 올바른 출력은 귀하의 코드도 조립하지 않을 jloahn
입니다. 그리고, 그것은 두 문자열 중 하나를 사용합니다. 두 가지 버전을 제공했습니다. 하나는 버그로 주석 처리됩니다. 다른 하나는 완전히 수정 된 버전입니다. [gratuitous style cleanup을 용서해주십시오.]
주석이 달린 버전 :
.data
texto: .asciiz "john"
cifra: .asciiz "la"
.text
la $a0,texto # pass address of str1
la $a1,cifra # pass address of str2
jal conc
# BUG: no exit program
li $v0,10
syscall
conc:
add $t1,$zero,$a0
add $t2,$zero,$a1
loop:
# BUG: these won't even assemble
###lb $t3($t1)
###lb $t4($t2)
lb $t3,0($t1)
lb $t4,0($t2)
# BUG: these fetch from $a1 which is never incremented -- in other words,
# t4 will always get the same first char (i.e. "l")
###lbu $t4,0($a1)
###sb $t4,0($a1)
beq $t3,$zero,end
nop
# output next char
# BUG: this only outputs chars from one string
move $a0,$t4
li $v0,11
syscall
addi $t1,$t1,1
addi $t2,$t2,1
j loop
end:
jr $ra
위쪽 청소하고 수정 된 버전 :
.data
texto: .asciiz "john"
cifra: .asciiz "la"
out: .space 80
.text
la $a0,out # get address of output
la $a1,texto # pass address of str1
la $a2,cifra # pass address of str2
jal conc
# output the concatenated string
la $a0,out
li $v0,4
syscall
# BUG: no exit program
li $v0,10
syscall
# conc -- concatenate strings char-by-char
#
# arguments:
# a0 -- output pointer
# a1 -- pointer to string to concatenate
# a2 -- pointer to string to concatenate
conc:
lb $t1,0($a1) # get string char
beqz $t1,conc_no1st # EOS? if yes, skip
addi $a1,$a1,1 # advance 1st source pointer
sb $t1,0($a0) # add to output
addi $a0,$a0,1 # advance output pointer
conc_no1st:
lb $t2,0($a2) # add to output
beqz $t2,conc_no2nd # EOS? if yes, skip
addi $a2,$a2,1 # advance 2nd source pointer
sb $t2,0($a0) # add to output
addi $a0,$a0,1 # advance output pointer
conc_no2nd:
or $t1,$t1,$t2 # both chars EOS?
bnez $t1,conc # no, loop
sb $zero,0($a0) # store final EOS
jr $ra
내가 "lalal"했지만 원의 출력은'jloahn'가를 기반으로 끝 –
에 대한 감사 귀하의 질문의 제목 [_ "두 문자열을 문자로 연결"_ "두 문자열'존 '과'라 '. 간단한 단어 concat은'johnla'입니다. 따라서 _two_ 문자열에서 두 번째 문자열 (예 : 'lalal') 만 반복하고 길이가 5이고 입력 길이가 각각 4와 2 인 항목으로 어떻게 연결되는지 잘 모르겠습니다. 따라서 적어도 두 개의 입력 문자열을 결합하고 'lalal'출력을 생성하기 위해 어떤 알고리즘이 사용되는지 즉시 알 수 없으므로 질문을 편집하여 도움이 될 수 있습니다. –