Βοήθεια με γλώσσα μηχανής IJVM

markip

Εκκολαπτόμενο μέλος

Η markip αυτή τη στιγμή δεν είναι συνδεδεμένη. Είναι 31 ετών και Πτυχιούχος του τμήματος Μηχανικών Η/Υ & Πληροφορικής Ιωαννίνων. Έχει γράψει 199 μηνύματα.
Ξερει κανεις πως κανουμε πολλαπλασιασμο σε γλωσσα μηχανης ΙJVM? π.χ. αν εχουμε να κανουμε πινακα που να εκτυπωνει την προπαιδεια, και πρεπει να πολλαπλασιασουμε το i με το j Πως θα το κανουμε? Επισης το for πως θα το εκφρασουμε αφου μονο για if υπαρχει εντολη...
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 12 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

aergos

Δραστήριο μέλος

Ο aergos αυτή τη στιγμή δεν είναι συνδεδεμένος. Έχει γράψει 410 μηνύματα.
Ξερει κανεις πως κανουμε πολλαπλασιασμο σε γλωσσα μηχανης ΙJVM? π.χ. αν εχουμε να κανουμε πινακα που να εκτυπωνει την προπαιδεια, και πρεπει να πολλαπλασιασουμε το i με το j Πως θα το κανουμε? Επισης το for πως θα το εκφρασουμε αφου μονο για if υπαρχει εντολη...

Δε γνωρίζω τη συγκεκριμένη γλώσσα (ούτε με ενδιαφέρει να τη μάθω :P), γενικά πάντως σε κάθε γλώσσα μηχανής κάθε εντολή αντιστοιχεί σε μια συγκεκριμένη λειτουργία που μπορούν να εκτελέσουν τα κυκλώματα του υπολογιστή.
Τέτοιες εντολές είναι : απλές μαθηματικές και λογικές (boolean) πράξεις, GOTO (δηλαδή συνέχιση της εκτέλεσης του προγράμματος από άλλη διεύθυνση), εντολές σύγκρισης μεταξύ δύο αριθμών, GOTO υπο συνθήκη (ελέγχεται το αποτέλεσμα της τελευταίας εντολής σύγκρισης και αναλόγως εκτελείται ή όχι το GOTO, μεταφορά των περιεχόμενων μιας θέσης της κύριας μνήμης σε ένα καταχωρητή του επεξεργαστή ή αντίστροφα, κλπ....
Επίσης κάθε "μεταβλητή" που χρησιμοποιείται σε μία γλώσσα μηχανής φαίνεται ξεκάθαρα αν είναι κάποια θέση της κύριας μνήμης ή κάποιος καταχωρητής του επεξεργαστή. Οι περισσότερες πράξεις κατά κανόνα μπορούν να γίνουν μόνο στους καταχωρητές του επεξεργαστή, όχι απευθείας στην κύρια μνήμη.

Οπότε πρέπει να αναπτύξεις μια λογική ώστε αυτά που ξέρεις να κάνεις με γλώσεις όπως C ή JAVA να τα κάνεις με μία λίγο διαφορετική φιλοσοφία. πχ ο κώδικας
for (i=0;i<=5;i++)
{
.
κώδικας
.
}

σε γλώσσα μηχανής θα είναι κάπως έτσι :

LOAD ΜΕΤΑΒΛΗΤΗ , 0 ; (θέσε μία μεταβλητή στη τιμή 0)
LABEL1)
.
κώδικας
.
COMPARE ΜΕΤΑΒΛΗΤΗ, 5;
GOTO_IF_EQUAL LABEL2; (αν η μεταβλητή έχει τιμή 5 πήγαινε στο LABEL2)
ADD ΜΕΤΑΒΛΗΤΗ, 1; (πρόσθεσε στη μεταβλητή την τιμή 1)
GOTO LABEL1;
LABEL2)
END;

Με μια ματιά που έριξα στη wiki, η ΙJVM χρησιμοποιεί στοίβα, οπότε θα πρέπει να παίξεις με εντολές push και pop, αλλά η λογική είναι παρόμοια.
Τον πολλαπλασιασμό μπορείς να τον κάνεις με διαδοχικές προσθέσεις μέσα σε κώδικα σαν αυτό που έγραψα, που εξομοιώνει την εντολή for.
Πολλαπλασιαμοί και διαιρέσεις με αριθμούς που είναι δυνάμεις του 2 γίνονται για μεγαλύτερη ταχύτητα με εντολές shift left και shift right.
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 12 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

Χρήστες Βρείτε παρόμοια

  • Τα παρακάτω 0 μέλη και 1 επισκέπτες διαβάζουν μαζί με εσάς αυτό το θέμα:
    Tα παρακάτω 1 μέλη διάβασαν αυτό το θέμα:
  • Φορτώνει...
Top