Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Γεια σε όλους...είναι η πρώτη φορά που γράφω στο forum και θα ήθελα να με βοηθήσετε σε μία εργασία που έχω να κάνω σε assembly για mips32. Πρέπει να φτιάξω ένα πρόγραμμα που μεταξύ άλλων πρέπει να καλέσει μία void συνάρτηση η οποία ζητάει από τον χρήστη να εισάγει τις τιμές ενός πίνακα Α 10 θέσεων και να τις αποθηκεύσει...όποιος μπορεί παρακαλώ να με βοηθήσει...ευχαριστώ εκ των προτέρων!

Δημοσ.

Να γραφεί το παρακάτω πρόγραμμα σε συμβολική γλώσσα (είναι γραμμένο σε java)

void readPin(int [] pin){

for (int i=0; i<pin.length; i++)

pin = readInt ("Position " + i +" :");

} //readPin

 

Αυτό έχω κάνει μέχρι στιγμής και όταν το τρέχω μου πετάει exception στην εντολή sw...

 

la $a1,pin

lw $a2,N

jal readpin

readpin:

addi $sp,$sp,-4

sw $s0,0($sp)

move $s0,$zero

for:

bge $s0,$a2,exit2 #if i>=N goto exit2

 

la $a0,pos

li $v0,4

syscall

 

move $a0,$s0

li $v0,1

syscall

 

la $a0,tel

li $v0,4

syscall #": "

 

li $v0,5

syscall

move $s2,$v0

sw $s2,0($a1)

 

la $a0,crlf

li $v0,4

syscall

 

addi $s0,$s0,1

 

addi $a1,$a1,4

j for

 

exit2:

lw $s0,0($sp)

addi $sp,$sp,4

 

j main

 

.data

crlf: .asciiz "\n"

pin: .space 40

N: .word 10

pos: .asciiz "Position "

tel: .asciiz " :"

Δημοσ.

Παιδιά συγγνώμη αλλά χρειάζομαι και άλλη βοήθεια...προσπαθώ να φτιάξω αυτό το υποπρόγραμμα αλλά δεν βγάζω άκρη...όποιος μπορεί ας με βοηθήσει....

>
int add (int [] SparseA, int mikosA, int [] SparseB, int mikosB, int [] SparseC) 
{
// Προσθέτει δύο αραιούς πίνακες και δημιουργεί έναν τρίτο αραιό πίνακα. 
// Επιστρέφει το μήκος του νέου πίνακα.
int a,b,c;
for (a=0, b=0, c=0; a<mikosA && b<mikosB; ) 
if (SparseA[a] < SparseB [b]) {
SparseC [c++] = SparseA[a++];
SparseC [c++] = SparseA[a++];
}
else if (SparseA[a] > SparseB [b]) {
SparseC [c++] = SparseB[b++];
SparseC [c++] = SparseB[b++];
}
else { SparseC [c++] = SparseA[a++]; 
b++;
SparseC [c++] = SparseA[a++] + SparseB[b++];
} //if
for (;a<mikosA;) {
SparseC [c++] = SparseA[a++];
SparseC [c++] = SparseA[a++];
} // for
for (;b<mikosB;) {
SparseC [c++] = SparseB[b++];
SparseC [c++] = SparseB[b++];
} // for   
return c;   
} //ad

Δημοσ. (επεξεργασμένο)

που κολλάς στην assembly ή στο τι κάνει το πρόγραμμα?

 

αν στο πρόγραμμα τότε δες το και έτσι να σε βοηθήσει

 

 

>
int add (int [] SparseA, int mikosA, int [] SparseB, int mikosB, int [] SparseC) 
{
// Προσθέτει δύο αραιούς πίνακες και δημιουργεί έναν τρίτο αραιό πίνακα. 
// Επιστρέφει το μήκος του νέου πίνακα.

int a=0,b=0,c=0;
while(a<mikosA && b<mikosB) 
   if (SparseA[a] < SparseB [b]) {
       SparseC [c] = SparseA[a];
       c=c+1;
       a=a+1;
       SparseC [c] = SparseA[a];
       c=c+1;
       a=a+1;
   }
   else if (SparseA[a] > SparseB [b]) {
       SparseC [c] = SparseB[b];
       c=c+1;
       b=b+1;
       SparseC [c] = SparseB[b];
       c=c+1;
       b=b+1;
   }
   else { 
       SparseC [c] = SparseA[a]; 
       c=c+1;
       a=a+1;
       b=b+1;
       SparseC [c] = SparseA[a] + SparseB[b];
       c=c+1;
       a=a+1;
       b=b+1;
   } //if
   while(a<mikosA) {
       SparseC [c] = SparseA[a];
       c=c+1;
       a=a+1;
       SparseC [c] = SparseA[a];
       c=c+1;
       a=a+1;
   } // while
   while(b<mikosB) {
       SparseC [c] = SparseB[b];
       c=c+1;
       b=b+1;
       SparseC [c] = SparseB[b];
       c=c+1;
       b=b+1;
   } // while   
   return c;
}//add

 

 

 

hint:

=====

-βρες 5 καταχωρητές για τα a,b,c,mikosA,mikosB

και αντικατέστησε στον πιο πάνω κώδικα

και άρχισε να μετατρέπεις τις εντολές σε assembly

 

 

 

>
το while μπορεις να το δεις σαν if
while ( a < b )
 {
   .......
   c=c+1 ;
   ......
 }

o κώδικας με if
Label1: if ( a < b )
     {
       ......
       c=c+1 ;
       ......
       goto Label1 ;
     }

ή ακόμα καλύτερα
Label1: if ( a >= b ) goto EXIT_loop;
       ......
       c=c+1 ;
       ......
       goto Label1 ;
EXIT_loop:

το οποίο σε Mips32 γράφεται (αν $r3=c $r1=a  $r2= b )

Label1:   bge  $r1, $r2, EXIT_loop
         .......
         addi $r3, $r3, 1 # c=c+1
         .......
     j    Label1
EXIT_loop: 

 

 

Επεξ/σία από virxen75

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...