2017-02-04 12 views
0

이것은 MIPS에서의 첫 번째 시도이며 가능한 알고리즘에 대한 의사 코드 설명을 디자인했습니다. 다음과 같이 코드의 개요는 다음과 같습니다1에서 N까지의 정수를 찾는 프로그램을 어떻게 디자인 할 것입니까? N은 키보드에서 읽은 값입니까?

main: Print: "Please input a value for N =" 
read v0 
If(v0 >0) 
{ 
    t0 = 0 
    while(v0 > 0) do 
    { 
    t0 = t0 + v0 
    v0 = v0 +v0 -1 
    } 
print: The sum of integers from 1 to N is = ", t0 
go to main 
} 
else 
    print: "Honest Abe" 

때문에,이 개요와 함께, 내가 MIPS에이 번역을 시도하지만, 전체 저장 변수의 다소 만든 나를 혼란에서 그들을 읽고. 실제 코드의 내 시도는 여기에서

.data 
    Prompt: .asciiz "\n Please input a value for N=" 
    Result: .asciiz "\n The sum of integers from 1 to N is " 
    Bye:  .asciiz "\n ***Honest Abe***" 

.text 
    main: 
     li $v0,4    #load $v0 with print_string code 
     la $a0, Prompt   #load $a0 with the message to be displayed 
     syscall 

     bgz $v0, else 
     li $t0, 0 
     while: 
       bgz $v0 
       add $t0,$t0,$v0 
       addi $v0,$vo -1 

, 나는 루프에 대한이 MIPS에서 어떻게 작동하는지 이해하지 못하는이도 올바른 접근 방식의 경우 이해가 안 돼요. 숫자로 읽은 다음 정수를 저장한다는 아이디어는 내 머리 속에 처리되지 않습니다. 또한 루프에 적절한 명령을 사용하고 있는지 확신 할 수 없습니다. 이 질문에 도움이 될 것입니다!

+0

한 가지 방법은 조건 (J있는 동안)없이 레이블로 점프를하고있다. 다른 하나는'slt'와'beq' 명령을 사용하여 조건으로 반복하거나'while (v0> 0)'에 대해 단순히'bgt'입니다. – Coursal

+0

우선, (n/2) * (n min + n max)이므로 귀하의 경우 (1에서부터 계산할 때) 산술 계열에 대한 방정식은 (n/2)이므로 루프를 필요로하지 않습니다. * (1 + n) –

답변

0

알고리즘이 조금 이상하고 너무 혼란스러워 보입니다.

간단한 for 루프를 사용하여 특정 숫자까지 합계를 계산할 수 있습니다. C와 마찬가지로 :

scanf("%d", &num); 
for(i=0;i<num;i++) 
sum=sum+i; 

과 같은 배열입니다. MARS의 참조 카드의 도움으로 , 당신은이 같은 끝낼 수 : MIPS에 루프를 만들 수

.text 
main: 

li $v0, 5 #read a number from the keyboard 
syscall 

addi $s0, $v0, 1 #s0= the number from the keyboard + 1 (the limit) 

li $t0, 1  #counter set to 1 

loop: 
    beq $t0, $s0, exit  #if the counter becomes equal tothe limit, exit the loop 

    add $t1, $t1, $t0  #add the counter to the sum to this point 

    addiu $t0, $t0, 1  #add 1 to the counter for each loop 

j loop      #go to the "loop" label above 

exit: 

li $v0, 1 
move $a0, $t1 
syscall 

li $v0, 10 
syscall