C 코드를 MIPS로 변환하는 방법에 대해 혼란스러워합니다. 나는 루프를 혼란스럽게하는 것처럼 보입니다. 나는 잘못된 명령을 사용하고있을 가능성이 있다고 생각합니다. 다음과 같이 내가이 일을 만든 C 코드는 다음과 같이 MIPS 번역에서MIPS에서 두 값 사이의 짝수 정수의 합을 계산하는 방법은 무엇입니까?
int main()
{
int x, y;
int sum = 0;
printf("Please enter values for X and Y:\n ");
scanf("%d %d",&x,&y);
if (x > y)
{
printf("\n** Error");
exit(0);
}
while (x <= y)
{
if (x%2 == 0)
sum += x;
x++;
}
printf("\nThe sum of the even integers between X and Y is: %d\n\n",sum);
return 0;
}
내 시도는 다음과 같습니다
.data
Prompt: .asciiz "Please enter values for X and Y:\n"
Result: .asciiz "The sum of the even integers between X and Y is: \n"
.text
li $v0,4 #load $v0 with the print_string code.
la $a0, Prompt #load $a0 with the message to me displayed
syscall
li $v0,5 #load $v0 with the read_int code for X
syscall
move $t0,$v0
li $v0,5 #load $v0 with the read_int code for Y
syscall
move $t1, $v0
while:
slt $t2, $t1,$t0 #$t1 = y $t0 = x
li $t3,2
div $t2,$t3
beq $t2,$0,else
add $s1,$s1,$t0 #s1 = s1 + x
addi $t0,$t0,1 #x++
j while
else:
li $v0,4
la $a0, Result
syscall
move $a0,$s1
li $v0,1
syscall
이 내 오류 내 MIPS 코드에서 루프라고 생각합니다. 내 결과는 0을 계속 생성하고 내 코드가 루프를 확인한 다음 내 else 문으로 점프한다고 생각합니다.
추가 작업이 끝나면 나는 모든 정수의 합을 계산할 수있게되었는데 왜 그런지 정확히 알지 못합니다. 나는 1, 5,은 1 계산 입력하고 3 인 경우, 그래서 지금
while:
sle $t2, $t0,$t1 #$t1 = y $t0 = x
li $t3,2 #t3 = 2
div $t2,$t3 #$t2/2
beq $t2,$0, else #if ($t2/2 == 0), jump to the else, otherwise do else
add $s1,$s1,$t0 #s1 = s1 + x
addi $t0,$t0,1 #x++
j while
대신 짝수 합계의 단지 2