2013-10-03 6 views
0

이 코드를 Mips로 변환하려면 어떻게해야합니까?Loop in Mips (Mips 신제품)

int n = 100; int sum = 0; while (n>0) { 
    sum = sum + n; 
    n--; } 

나는 이것을 가지고 있으며 이것을 마무리하기 위해 무엇을 해야할지 잘 모릅니다.

.data 

    n: .word 100 

    .text 

    main: 

    la $t0, n 
    lw $t1, 0(t0) 
    li $so, 0 

    Loop: 
     bgt $t1, $zero, EXIT 
     add $t1, $s0, $t1 
     addi $t1, $t1, -1 

     j Loop 

    exit: 

답변

1

"Mips"는 언어가 아닙니다. MIPS 명령어 세트 아키텍처 (ISA). C 코드를 MIPS 어셈블리 코드로 바꾸는 방법을 찾으려고하십니까?

이것은 Patterson and Hennessy 교과서에서 숙제 한 것 같습니다. 그렇다면 교수님의 근무 시간에 가서 도움을 받아야합니다. 거의 모든 대학은 학업 핸드북에 숙제 도움을 온라인으로 요청하는 것이 비 윤리적이라는 진술을 포함하고 있습니다.

요청이 숙제가 아니면 C 코드를 MIPS 어셈블리 코드로 변환하는 가장 좋은 방법은 컴파일러를 사용하는 것입니다. 간단한 루프의 경우 컴파일러는 직접 생성 할 수있는 것보다 더 효과적인 코드를 생성합니다. 예를 들어 "gcc -march = native -O3"은 파이프 라인 깊이와 캐시 대기 시간을 고려하여 컴파일중인 정확한 CPU를 최적화하는 코드를 생성합니다.

어셈블리 코드를 반드시 확인해야하는 경우 "gcc -S"를 사용하여 어셈블리 파일을 생성하십시오.

0

Mips에는 루프가 없으므로 대신에 조건이있는 점프 문을 사용하고 루프를 반복하면됩니다.

2

변경 라인 :

add $t1, $s0, $t1 

하려면 :

add $s0, $s0, $t1 

는 또한, 데이터 세그먼트의 사용에 대한 필요가 없습니다.

li $t1, 100 
0

나는 $ b1 $, $ 0, EXIT가 원하는 것의 반대라고 생각합니다. while (n> 100)으로 변환하고 싶다면 while 루프 내부에서 코드를 수행하는 다른 메소드를 작성한 다음 bgt $ t1, $ zero,를 작성하면 도움이 될 것입니다. 틀 렸으면 고쳐줘.