akrobatik Δημοσ. 16 Ιανουαρίου 2012 Δημοσ. 16 Ιανουαρίου 2012 Γεια σε όλους...είναι η πρώτη φορά που γράφω στο forum και θα ήθελα να με βοηθήσετε σε μία εργασία που έχω να κάνω σε assembly για mips32. Πρέπει να φτιάξω ένα πρόγραμμα που μεταξύ άλλων πρέπει να καλέσει μία void συνάρτηση η οποία ζητάει από τον χρήστη να εισάγει τις τιμές ενός πίνακα Α 10 θέσεων και να τις αποθηκεύσει...όποιος μπορεί παρακαλώ να με βοηθήσει...ευχαριστώ εκ των προτέρων!
virxen75 Δημοσ. 16 Ιανουαρίου 2012 Δημοσ. 16 Ιανουαρίου 2012 στείλε τον κώδικα σου μέχρι τώρα και την εκφώνηση της άσκησης (τα στοιχεία του Α είναι ακέραιοι?)
akrobatik Δημοσ. 16 Ιανουαρίου 2012 Μέλος Δημοσ. 16 Ιανουαρίου 2012 Να γραφεί το παρακάτω πρόγραμμα σε συμβολική γλώσσα (είναι γραμμένο σε 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 " :"
virxen75 Δημοσ. 16 Ιανουαρίου 2012 Δημοσ. 16 Ιανουαρίου 2012 πρόσθεσε το align για να μην πετάει exception > .... crlf: .asciiz "\n" .align 2 pin: .space 40 ....
akrobatik Δημοσ. 18 Ιανουαρίου 2012 Μέλος Δημοσ. 18 Ιανουαρίου 2012 Παιδιά συγγνώμη αλλά χρειάζομαι και άλλη βοήθεια...προσπαθώ να φτιάξω αυτό το υποπρόγραμμα αλλά δεν βγάζω άκρη...όποιος μπορεί ας με βοηθήσει.... > 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
virxen75 Δημοσ. 18 Ιανουαρίου 2012 Δημοσ. 18 Ιανουαρίου 2012 (επεξεργασμένο) που κολλάς στην 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: Επεξ/σία 18 Ιανουαρίου 2012 από virxen75
akrobatik Δημοσ. 19 Ιανουαρίου 2012 Μέλος Δημοσ. 19 Ιανουαρίου 2012 Ευχαριστώ πολύ πιστεύω από εδώ θα τα καταφέρω...!
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα