anvc Δημοσ. 30 Απριλίου 2008 Δημοσ. 30 Απριλίου 2008 Γεια σας παιδια! Χριστος Ανεστη και Χρονια σας Πολλα!!! Εχω να κανω την παρακατω ασκηση σε assembly 8088 και θα ηθελα τη βοηθεια σας, αν γινεται. Πρεπει να φτιαξω ενα προγραμμα που θα δεχεται 2 ημερομηνιες σε συγκεκριμενες διευθυνσεις στη μορφη dd-mm-yy (3 byte, το ετος θα ειναι διψηφιο και > 2000) και θα υπολογιζει ποσες ημερες απεχουν οι δυο ημερομηνιες, θεωρωντας οτι οι μηνες εχουν 30 μερες και τα ετη 360. Το αποτελεσμα θα καταχωρειται σε 16μπιτο νουμερο σε συγκεκριμενη διευθυνση. Θα σας πω το σκεπτικο μου και θα ηθελα να μου πειτε αν κανω λαθος πανω σ'αυτο. Λοιπον... οι δυο ημερομηνιες θα καταχωρουνται στις θεσεις μνημης [0200] μεχρι [0205] (δηλαδη 3 bytes). Καταρχας θα ξεκινησουμε με την αφαιρεση των ημερων της πρωτης ημερομηνιας απο τις ημερες της δευτερης, των μηνων της πρωτης απο της δευτερης, της χρονιας της πρωτης απο της δευτερης. Με τις θεσεις μνημης θα γινει ως εξης: η 0200 με την 0203(ημερες), η 0201 με την 0204(μηνες) και 0202 με την 0205(χρονια). Το αποτελεσμα των ημερων θα πηγαινει στη θεση μνημης 0206, των μηνων στην 0207 και των χρονων στην 0208. Τελος, το περιεχομενο της θεσης μνημης 0207 θα πολλαπλασιαζεται με το 30 και θα προστιθεται στη θεση μνημης 0206. Το ιδιο με τη θεση μνημης 0208, δηλαδη θα πολλαπλασιαζεται με το 360 - Πως;;;; και θα προστιθεται με το περιεχομενο της θεσης μνημης 0206. Σωστα μεχρι εδω;
gtroza Δημοσ. 30 Απριλίου 2008 Δημοσ. 30 Απριλίου 2008 Σωστα μεχρι εδω; Σωστα μεχρι εδω πιθανον θα έχεις και αρνητικούς αριθμούς (ελπίζω να μήν είναι πρόβλημα) αν κάνεις τις ημερομηνίες μέρες είναι μάλλον πιό εύκολο μέρ+30*μήν+360*χρό - μέρ+30*μήν+360*χρό = διαφορά σε μέρες ή 360+30*μην+360*(χρο-1) - μέρ+30*μήν+360*χρό = διαφορά σε μέρες υγ: Αληθώς Ανέστη και χρόνια πολλά ! .
anvc Δημοσ. 30 Απριλίου 2008 Μέλος Δημοσ. 30 Απριλίου 2008 Ευχαριστω πολυ που απαντησες!!! Δεν ξερω πως θα κανω αυτο που ειπες "μέρ+30*μήν+360*χρό - μέρ+30*μήν+360*χρό = διαφορά σε μέρες" σε assemply. Μια ακομα ερωτηση... πως θα καταχωρω τις 2 ημερομηνιες στο προγραμμα; Με MOV ax,[0200h], MOV bx,[0201h].... κλπ;
gtroza Δημοσ. 1 Μαΐου 2008 Δημοσ. 1 Μαΐου 2008 έχω πολλά χρόνια να ασχοληθώ ! δές αυτό http://faculty.etsu.edu/tarnoff/ntes2150/assembly/assembly.htm και αυτά http://www.insomnia.gr/forum/showthread.php?t=249106 http://www.insomnia.gr/forum/showthread.php?t=243936 Μια ακομα ερωτηση... πως θα καταχωρω τις 2 ημερομηνιες στο προγραμμα; Με MOV ax,[0200h], MOV bx,[0201h].... κλπ; http://www.insomnia.gr/forum/showthread.php?t=248084 http://www.insomnia.gr/forum/showpost.php?p=2095969&postcount=3. .
nnannos Δημοσ. 3 Μαΐου 2008 Δημοσ. 3 Μαΐου 2008 Όπως ειπε ο gtroza θα διαβαζεις τα περιεχομενα μνημης θα τα πολλαπ/ζεις κ μετα θα τα προσθέτεις σε μια νεα θέση μνημης όποια θες-προσοχή μη γινει overflow ομως. Εξομειωτη 8088 εχεις βρει? Μονο πειραματιζομενος εκει θα σαι σιγουρος πως δουλευει και θα δεις τα προβληματα-Σε ποια σχολή σπουδαζεις?
anvc Δημοσ. 4 Μαΐου 2008 Μέλος Δημοσ. 4 Μαΐου 2008 Όπως ειπε ο gtroza θα διαβαζεις τα περιεχομενα μνημης θα τα πολλαπ/ζεις κ μετα θα τα προσθέτεις σε μια νεα θέση μνημης όποια θες-προσοχή μη γινει overflow ομως. Εξομειωτη 8088 εχεις βρει? Μονο πειραματιζομενος εκει θα σαι σιγουρος πως δουλευει και θα δεις τα προβληματα-Σε ποια σχολή σπουδαζεις? Ναι εχω βρει, μας δινουν εναν απο τον server του τει στο οποιο σπουδαζω... σπουδαζω πληροφορικη και επικοινωνιες στις Σερρες. Και κατι αλλο... μπορει να σας φανει γελοια η ερωτηση μου αλλα δεν καταλαβα πως γινεται η εκχωρηση των ημερομηνιων στις θεσεις μνημης. Θα γραψω απλα "mov ax,[100]". Το 100 δεν ειναι η θεση μνημης; Αρα αυτο που ειχα γραψει πιο πριν... Μια ακομα ερωτηση... πως θα καταχωρω τις 2 ημερομηνιες στο προγραμμα; Με MOV ax,[0200h], MOV bx,[0201h].... κλπ; γιατι ηταν λαθος; Ευχαριστω πολυ!!!
gtroza Δημοσ. 4 Μαΐου 2008 Δημοσ. 4 Μαΐου 2008 περίπτωση 1η γράφεις τον κώδικα με όλα τα στοιχεία δηλαδή και τα δεδομένα (ημερομηνίες) και τον τρέχεις. μετά βλέπεις τις θέσεις μνήμης που σ'ενδιαφέρουν, άν έχουν το σωστό αποτέλεσμα. περίπτωση 2η γράφεις τον κώδικα αλλά τα δεδομένα (ημερομηνίες), θα δωθούν απο το πληκτρολόγιο, δηλαδή θα στα ζητάει το πρόγραμμα μόλις το τρέξεις, και ίσως να δείχνει το αποτέλεσμα στην οθόνη στην πρώτη περίπτωση οι mov .. κλπ, είναι η λύση στη δεύτερη περίπτωση όμως ? (σ' αυτήν αναφέρονται τα σχόλια του alkisg) εξαρτάται λοιπόν απο το τι ζητάει η άσκησή σου για την είσοδο των δεδομένων και το πως θα δείς το αποτέλεσμα. υγ. δεν είμαι προγραμματιστής "έπαιξα" κάποτε μ' αυτά σε dos με το debug:o
alkisg Δημοσ. 4 Μαΐου 2008 Δημοσ. 4 Μαΐου 2008 Με τις θεσεις μνημης θα γινει ως εξης: η 0200 με την 0203(ημερες), η 0201 με την 0204(μηνες) και 0202 με την 0205(χρονια). Το αποτελεσμα των ημερων θα πηγαινει στη θεση μνημης 0206, των μηνων στην 0207 και των χρονων στην 0208. Στην αρχή πρέπει να φορτώσεις από τη μνήμη στους καταχωρητές για να κάνεις τις πράξεις: > mov ax,[200] mov dx,[203] mul, sub κτλ κτλ Μετά τις πράξεις, θα πρέπει να γράψεις τα αποτελέσματα στη μνήμη: > mov [206],dx κτλ κτλ Δηλαδή μετά τη mov πρώτα μπαίνει ο προορισμός και μετά η αφετηρία των δεδομένων.
anvc Δημοσ. 2 Ιουνίου 2008 Μέλος Δημοσ. 2 Ιουνίου 2008 Παιδια μπορει καποιος να με βοηθησει με τα κρατουμενα;; Οσο κι αν εχω ψαξει, δε μπορω να καταλαβω τη σημασια τους γιατι δεν υπαρχει καπου καποια διευκρινιση. Ισως δεν το επιασα καλα απο την αρχη και τωρα δε μπορω να το καταλαβω! Edit: Ok αφηστε το αυτο... καταλαβα νομιζω!
anvc Δημοσ. 2 Ιουνίου 2008 Μέλος Δημοσ. 2 Ιουνίου 2008 Μια ερωτηση ακομα... Στο προγραμμα που εγραψα το πρωτο ποστ, θελω να πολλαπλασιασω τη διαφορα που βρηκα στα ετη (βρισκεται σε μια διευθυνση μνημης, την 0208), με το 360 που ειναι 2 byte! Αυτο ομως δε γινεται συμφωνα με τους κανονες της εντολης MUL. Μηπως μπορειτε να με βοηθησετε;;; Πρεπει να εχω παραδωσει την ασκηση μεχρι την Πεμπτη και εχω κολλησει σ'αυτο το σημειο! Ευχαριστω!
gtroza Δημοσ. 3 Ιουνίου 2008 Δημοσ. 3 Ιουνίου 2008 μάλλον γίνεται ελπίζω να μη σε μπερδεύω δεν είμαι σχετικός .
gtroza Δημοσ. 3 Ιουνίου 2008 Δημοσ. 3 Ιουνίου 2008 και αυτή συγγνώμη για το ανάποδο είναι απο το βιβλίο Προγραμματισμός του 8086/8088 James W. Coffron εκδόσεις Κλειδάριθμος 1987 καλή επιτυχία .
anvc Δημοσ. 3 Ιουνίου 2008 Μέλος Δημοσ. 3 Ιουνίου 2008 Ευχαριστω παρα πολυ παιδια!!!! Να 'στε καλα! Ξεπεραστηκε κι αυτο το προβλημα, τωρα ομως δημιουργηθηκαν αλλα! :'( Το αποτελεσμα του πολλαπλασιασμου το εβαλα σε 4 θεσεις μνημης λογω του οτι ηταν 32bit με τις εξης εντολες: MOV [020B],AX MOV [020D],DX Πως θα γινει η προσθεση τις αλλες θεσεις μνημης ετσι ωστε το τελικο αποτελεσμα να καταχωρηθει σε 16bit, οπως μου ζηταει η ασκηση; :-S Ουφφφφ πολυ μπερδεμα!
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.