0
I는 사용자로부터 입력 된 문자열을 받아 연속 동일한 문자의 긴 문자열 MIPS의 출력을 이용하여 프로그램을 작성하고있다. 내 문제는 프로그램이 대상 문자열을 출력하기 전에 '끝'에 도달 한 것으로 보입니다. 어떤 도움을 주셔서 감사합니다!산출 길이 MIPS
는main:
la $a0,input_msg # Prompting input from user
li $v0,4
syscall
li $v0, 8 # Reading string and storing in memory
la $a0, input_string
li $a1, 100
syscall
li $t0, 0
la $t1, input_string # address of the first element
lb $a0, ($t1) # input_string[0] (the first character)
move $s0, $a0 # current_char=read_char();
move $s1, $a0 # previous_char = input_string[0];
move $s2, $a0 # final_char=input_string[0];
li $s3, 1 # current_num_chars=1;
li $s4, 1 # final_num_chars=1;
la $t5, new_line
loop:
addi $t0, $t0, 1 # for(k=1; k<i-1; k++) {
add $t1, $t1, $t0
lb $t3, ($t1)
beq $s5, $t3, print_final
move $s0, $t3 # current_char=input_string[k];
bne $s0, $s1, else # if(current_char == previous_char)
addi $s3, $s3, 1 # current_num_chars++;
bge $s3, $s4, increase_final # if(current_num_chars >= final_num_chars) {
move $s1, $s0
j loop # else do nothing
increase_final:
move $s2, $s0 # final_char=current_char;
move $s4, $s3 # final_num_chars=current_num_chars;
move $s1, $s0
j loop # }
else:
move $s1, $s0
j loop # else {
# current_num_chars=1;
# }
# }
print_final:
la $a0, output_msg
li $v0, 4
syscall
li $t2, 0
print_chars:
li $t2, 0 # for(k=0; k<final_num_chars; k++) {
beq $t2, $s3, end
move $a0, $s2 # print_char(final_char);
li $v0, 11
syscall
j print_chars # }
end:
li $v0, 4 # print_string("\n");
la $a0, new_line
syscall
li $v0, 10 # exit()
syscall
아! 나는 심지어 그것을 알아 차리지 않고 있었다! 감사! 불행하게도 이제는 실행되지만'loop : \t을 시작하는 섹션 인 ln58에 관한 오류가 발생합니다. addi $ t0, $ t0, 1 \t # for (k = 1; k
원래 코드가 바뀌었고'la $ s4, new_line'이 아닌 'la $ s5, new_line'이되어야합니다. 그리고'bge $ t0, $ t8, end'는'beq $ s3, $ s5, print_c hars' –
새 코드 및 문제/w 질문을 편집 할 수 있습니다하지 않는 한,이 질문을 닫습니다 및 새 게시하시기 바랍니다. –