While Loop in Mips (nieuw bij Mips)

Hoe kan ik deze code omzetten in Mips?

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

Ik heb dit tot nu toe en weet niet zeker wat ik moet doen om dit af te maken.

   .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:

Antwoord 1, autoriteit 100%

Verander de regel:

add $t1, $s0, $t1

Aan:

add $s0, $s0, $t1

Het is ook niet nodig om het gegevenssegment te gebruiken. Stel gewoon $t1 in met:

li $t1, 100

Antwoord 2, autoriteit 33%

‘Mips’ is geen taal. MIPS een Instruction Set Architecture (ISA). Probeert u erachter te komen hoe u de C-code kunt omzetten in MIPS-assemblagecode?

Dit lijkt op een huiswerkopdracht uit het leerboek van Patterson en Hennessy. Als dat zo is, moet je naar het spreekuur van je professor gaan om hulp te krijgen. Bijna elke universiteit neemt in haar academische handboek een verklaring op dat het onethisch is om online huiswerkhulp te vragen.

Als uw verzoek geen huiswerkopdracht is, is de beste manier om die C-code naar MIPS-assemblagecode te converteren met een compiler. Voor eenvoudige lussen genereert de compiler effectievere code dan u met de hand kunt genereren. “gcc -march=native -O3” genereert bijvoorbeeld code die optimaliseert voor de exacte CPU waarop u compileert, rekening houdend met de pijplijndiepte en cache-latenties.

Als je de assembly-code absoluut moet zien, gebruik dan “gcc -S” om een assembly-bestand te maken.


Antwoord 3

Mips heeft geen loops per-say, in plaats daarvan gebruik je een jump-statement met voorwaarden en loop je daarmee.


Antwoord 4

Ik denk dat bgt $t1, $zero, EXIT het tegenovergestelde is van wat je wilt. Het lijkt erop dat je while(n > 100) wilt converteren, het zou helpen als je een andere methode maakt om de codes in de while-lus te doen, dan bgt $t1, $zero, . Verbeter mij als ik het fout heb.

Other episodes