THMMY.gr

Μαθήματα Βασικού Κύκλου => Ιστορία μου Αμαρτία μου της Α.Υ. => Topic started by: Maxwell on August 26, 2006, 22:02:26 pm



Title: Macroεντολές
Post by: Maxwell on August 26, 2006, 22:02:26 pm
Πρέπει να τις διαβάσουμε και τέλος πάντων πως λειτουργούν?
Προσπαθώ με βάση το βιβλίο αλλά δεν μπορώ να την κάνω να δουλέψει.
Έχει κανείς έτοιμο κώδικα με μακροεντολή? Αν μπορεί ας το ανεβάσει.


Title: Απ: Macroεντολές
Post by: kekropas on August 26, 2006, 22:23:46 pm
Απ'ότι έχω ακούσει μπαίνει συχνά θέμα με μακροεντολή. Αν δε δουλεύει κάτι είναι λάθος στη σύνταξη. Αν δεν κάνω κάπου λάθος το βιβλίο έχει ένα λάθος: Όταν ορίζουμε τη μακροεντολή θα έπρεπε λογικά να είναι ex: macro p,q  ενώ στο βιβλίο παραλείπει την άνω-κάτω τελεία. Για δοκίμασε το και πες μας αν έγινε κάτι αλλιώς δώσε τον κώδικα που δε σου βγαίνει


Title: Απ: Macroεντολές
Post by: Maxwell on August 27, 2006, 19:59:03 pm
NAM MAIN
EXT EX
ENA 5
TAG1: RES 1
TAG2: RES 1
STA TAG1
STA TAG2
EX TAG1,TAG2
HLT
END

NAM EXAM
P: RES 10
Q: RES 1
EX MACRO P,Q
LDA P
ADA Q
STA P
EMC
END
Κάνε δοκιμές. Θα δεις ότι δεν δέχεται τον ορισμό της
μακροεντολής.


Title: Απ: Macroεντολές
Post by: kekropas on August 28, 2006, 00:59:39 am
Δοκίμασες αντί για EX MACRO P,Q να βάλεις EX: MACRO P,Q ;


Title: Απ: Macroεντολές
Post by: Maxwell on August 28, 2006, 01:18:40 am
Εννοείται  Κέκρωψ. Το πρόβλημα είναι πως
δεν φαίνεται να γνωρίζει κάποιος - ούτε καν οι
συγγραφείς του βιβλίου - πως δουλεύουν οι
μακρο... Φαντάσου λοιπόν να πέσει και θέμα.
Όποιος έχει κάτι υπόψιν του ας βοηθήσει γιατί
οι πειραματισμοί μάλλον χρόνο μας τρώνε.


Title: Re: Macroεντολές
Post by: Megawatt on August 28, 2006, 03:13:33 am
Νομίζω Maxwell κάνεις κάποιο λάθος.

Η εντολή EXT EX στην αρχή του προγράμματος ΔΕΝ πρέπει να υπάρχει.

Η Μακροεντολή δεν είναι υποπρόγραμμα. Αλλά τί είναι?

Το υποπρόγραμμα (υπορουτίνα) είναι κάτι που υποχρεώνει τον assembler να κάνει μια ενέργεια καθώς αυτός εκτελεί το πρόγραμμα. Παράδειγμα τέτοιας ενέργειας είναι το άλμα στην υπορουτίνα και η επιστροφή άπό αυτήν.

Η μακροεντολή είναι κάτι που υποχρεώνει τον assembler να κάνει μια ενέργεια στο στάδιο μετάφρασης του προγράμματος. Παράδειγμα τέτοιας ενέργειας είναι η αντικατάσταση μιας μακροεντολής από ομάδα εντολών οι οποίες εμπεριέχονται στο σώμα της μακροεντολής.

Άρα, υποπτεύομαι ότι καθώς ο assembler πάει να μεταφράσει το πρόγραμμά σου, δεν βρίσκει καμία διεύθυνση με τον κωδικό "EX" η οποία να αφορά άλλο πρόγραμμα. Επίσης ΔΕΝ γίνεται καποιο άλμα σε κάποιο άλλο πρόγραμμα για να υπάρχει εντολή EXT. Τέλος, η μακροεντολή "κολλάει" στο τέλος του προγράμματος. Άρα εσύ δεν πρέπει να την βάλεις στο τέλος του δεύτερου προγράμματος, αλλά στο πρώτο.

Επίσης οι εντολές:
.
.
NAM EXAM
P: RES 10
Q: RES 1

...

πρέπει να σβηστούν, καθώς επιφυλάσσομαι για την δήλωση των διευθύνσεων P και Q οι οποίες βρίσκονται ΕΞΩ από το σώμα της μακροεντολής. Ταυτόχρονα, αν θες να δεσμεύσεις μνήμη, γιατί το κάνεις με μακροεντολή-δεν σε κατάλαβα-πρώτη φορά είδα κάτι τέτοιο. Η δέμευση μνήμης γίνεται κατευθείαν με την ψευδοεντολή RES μέσα στο κυρίως πρόγραμμα. Άρα το δεύτερο πρόγραμμά σου είναι άκυρο τελείως.

Να τελειώσω λέγοντας ότι ΔΕΝ έτρεξα κανένα πρόγραμμα στον TRN. Μιλάω ΜΟΝΟ από θεωρητικής πλευράς.  ::) Για σβήσε αυτά που σου είπα και δες αν τρέχει. Καλή τύχη.  :D


Title: Re: Macroεντολές
Post by: Faidon on August 28, 2006, 18:14:59 pm
Εγώ έχω μια ιδέα!!! Διαβάστε μόνο ότι βρίσκεται σε παλαιότερα θέματα!! Μη χάνετε το χρόνο σας. Εξάλου από ότι κατάλαβα ο TRN δεν είναι και ο καλύτερος ώστε να κάτσεις να ασχοληθείς από ενδιαφέρον...


Title: Απ: Macroεντολές
Post by: Maxwell on August 28, 2006, 23:36:57 pm
Megawatt χρησιμοποιώ τις RES απλά για να ορίσω τις διευθλυνσεις P Q.
Είναι μία από τις αποτυχημένες προσπάθειες που κάνω
μπας και δουλεψει το πρόγραμμα. Ανέβασα τον κώδικα απλά
για αυτούς που θέλουν να πειραματιστούν για να κάνουν
copy paste και να μη το γράφουν οι ίδιοι.


Title: Re: Macroεντολές
Post by: Megawatt on August 31, 2006, 01:28:27 am
Τώρα ήρθε η ώρα να παίξω με τον προσομοιωτή. Θα πειραματιστώ με τις macro και θα ρθώ πάλι να γράψω ποιά είναι η σωστή σύνταξη. Έτσι απλά για να ξέρουμε...  ;)