anvc Δημοσ. 4 Ιουνίου 2008 Μέλος Share Δημοσ. 4 Ιουνίου 2008 Πως θα γινει αυτο; Το παρακατω ειναι λαθος; ADC AX,BX CMP ΑΧ,00 JNL COMMON NEG ΑΧ COMMON:MOV [211H],AX HLT ;TELOS PROGRAMMATOS Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
GCMH Δημοσ. 4 Ιουνίου 2008 Share Δημοσ. 4 Ιουνίου 2008 >ADD AX,BX // κάνουμε την πρόσθεση MOV BX,AX //αντιγράφουμε το αποτέλεσμα AND ΒX,$8000 // μασκάρουμε τα πρώτα 15 μπιτ και κρατάμε το 16 CMP ΒX,$0000 //αν είναι μηδεν θετικός, αν είναι $8000 αρνητικός (ενδέχεται να μην χρειάζεται αυτό εφόσον με την AND επηρεάζεται το zero flag) JZ COMMON NEG AX COMMON: τα υπόλοιπα... Ελπίζω να δουλέψει έτσι... Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
anvc Δημοσ. 4 Ιουνίου 2008 Μέλος Share Δημοσ. 4 Ιουνίου 2008 Ο emulator δε μου δεχεται το AND AX,$8000... αυτο που ειχα γραψει πριν ηταν λαθος; Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
gtroza Δημοσ. 4 Ιουνίου 2008 Share Δημοσ. 4 Ιουνίου 2008 gtroza... οι ημερομηνιες που καταχωρω πρεπει να ειναι μεγαλυτερες του 2000, δηλαδη αν βαλω 03 εννοειται οτι ειναι 2003. ναι αλλά 3 - 99 δίνει -96 και όχι 4 που είναι το σωστό άρα το πρόβλημα σου είναι ο αλγόριθμος και όχι οι αρνητικοί αριθμοί αν δεν κάνω λάθος φυσικά ! . αν κατάλαβα καλά τα χρόνια δίνουν πάντα θετική διαφορά οι μήνες όμως ? άρα θα προσθέτεις 12 μήνες και θα μειώνεις κατα 1 τα χρόνια, για να έχεις σωστό αποτέλεσμα (ώς συνέπεια ενός σωστού συλλογισμού - αλγόριθμου ) και όχι σωστών αριθμητικών πράξεων και με την προϋπόθεση οτι είναι σωστό αυτό που λέω . Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
anvc Δημοσ. 4 Ιουνίου 2008 Μέλος Share Δημοσ. 4 Ιουνίου 2008 ναιαλλά 3 - 99 δίνει -96 και όχι 4 που είναι το σωστό άρα το πρόβλημα σου είναι ο αλγόριθμος και όχι οι αρνητικοί αριθμοί αν δεν κάνω λάθος φυσικά ! . Aυτο που λες, αν δεν κανω λαθος κι εγω, διορθωνεται με την χρηση της εντολης NEG. Γιατι 03-99=-96 και 99-03=96. Δηλαδη αρκει να αλλαχτει το προσημο! Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
gtroza Δημοσ. 4 Ιουνίου 2008 Share Δημοσ. 4 Ιουνίου 2008 δεν εννοούσα αυτό εννοούσα 2003 - 1999 δες αυτό που συμπλήρωσα παραπάνω . Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
anvc Δημοσ. 4 Ιουνίου 2008 Μέλος Share Δημοσ. 4 Ιουνίου 2008 Γιατι βαζεις ετη που ειναι μικροτερα του 2000 και με μπερδευεις; :Ρ Για τα ετη που ειπες... κι αυτα δινουν αρνητικη διαφορα... θα εξαρταται απο την σειρα που θα καταχωρουμε τις δυο ημερομηνιες. Δηλαδη μπορει εγω να καταχωρησω πρωτα το 04-06-08 (στη θεση μνημης 200 με 203) και μετα το 03-05-20 ή και αντιθετα. Αυτο θα μας βγαλει 04-03=1, 06-12=-06 και 08-20=-18. Ακομα δεν ξερω αν καταλαβα αυτο που λες... sorry! Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
alkisg Δημοσ. 4 Ιουνίου 2008 Share Δημοσ. 4 Ιουνίου 2008 Το πρόβλημα είναι το εξής: ;POLLAPLASIASMOS XRONON ME TO 360 GIA NA GINOUN MERES MOV BL,[208H] MOV AX,0168H IMUL BX MOV [20BH],AX MOV [20DH],DX Αν μετά την αφαίρεση των χρόνων έχει προκύψει αποτέλεσμα FF, αυτό σημαίνει -1, όχι 255. Με τις παραπάνω πράξεις, έχεις BX = 00FF = 255 και το πολλαπλασιάζεις με 360 και άρα βγαίνει κάτι τελείως λάθος. Κοίτα λίγο την εντολή cbw: μετατρέπει ένα byte στο αντίστοιχο signed word, δηλαδή αυτό που θες. Π.χ. mov al,[208h] cbw mov bx,ax mov ax,0168h ... Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
gtroza Δημοσ. 4 Ιουνίου 2008 Share Δημοσ. 4 Ιουνίου 2008 παράδειγμα η μία ημερομηνία είναι 30-11-99 η άλλη (μεταγενέστερη) είναι 04-07-08 τι θα κάνεις σ'αυτή την περίπτωση ? αυτό είναι το πρόβλημα κατά τη γνώμη μου άρα ή τα κάνεις όλα ημέρες και πάντα έχεις θετική διαφορά ή βρίσκεις τμηματικά τις διαφορές, αλλά δανείζεσαι μέρες απο τους μήνες ή μήνες απο τα χρόνια οπότε οι ημερομηνίες γίνονται 30-11-99 > 30-11-99 04-07-08 > 34-06-08 > 34-18-07 για τα χρόνια εσύ αποφασίζεις αν υπάρχει η περίπτωση που λέω Γιατι βαζεις ετη που ειναι μικροτερα του 2000 και με μπερδευεις; :Ρ εντάξει για τα χρόνια , κάνε το 99 00 δεν θέλω να σε μπερδεύω ! . Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
anvc Δημοσ. 4 Ιουνίου 2008 Μέλος Share Δημοσ. 4 Ιουνίου 2008 παράδειγμα η μία ημερομηνία είναι 30-11-99 η άλλη (μεταγενέστερη) είναι 04-07-08 τι θα κάνεις σ'αυτή την περίπτωση ? αυτό είναι το πρόβλημα κατά τη γνώμη μου Δεν υπαρχει τετοιο προβλημα... γιατι η εκφωνηση της ασκησης γραφει οτι το ετος που θα καταχωρει ο χρηστης θα ειναι μεγαλυτερο του 2000!!! Ο καθηγητης μου ξεκαθαρισε το συγκεκριμενο... οτι συμφωνα με αυτο (>2000) θα εργαστω στην ασκηση. Καταλαβες; EDIT: Γραψε λαθος! Τωρα καταλαβα τι εννοεις! Απ'το τελευταιο edit που εκανες κι εσυ! lol Να σου πω την αληθεια με μπερδευει πολυ αυτος ο τροπος που διαλεξες... και θα πρεπει να αλλαξω ολο το προγραμμα που εχω φτιαξει μεχρι στιγμης. Δεν εχω το χρονο... αυριο πρεπει να την παραδωσω! Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
alkisg Δημοσ. 4 Ιουνίου 2008 Share Δημοσ. 4 Ιουνίου 2008 Υ.Γ. αν δεν έχεις assembly instruction set πρόχειρο για να δεις την cbw, εδώ τα έχει αρκετά καλά: http://www.itis.mn.it/linux/quarta/x86/index.htm Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
GCMH Δημοσ. 4 Ιουνίου 2008 Share Δημοσ. 4 Ιουνίου 2008 Ο emulator δε μου δεχεται το AND AX,$8000... αυτο που ειχα γραψει πριν ηταν λαθος; Όταν λες ότι δεν το δέχεται μπορεί να σημαίνει πολλά... 1. το $8000 είναι στο δεκαεξαδικό, μπορεί να πρέπει να δώσεις 32768 στο δεκαδικό. 2. υπάρχει περίπτωση να μη δέχεται την εντολή με όρισμα 16 μπιτ... φόρτωσε έναν άλλο καταχωρητή πχ τον DX με την δεκαδική τιμή και μετά "AND AX,DX". Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
anvc Δημοσ. 4 Ιουνίου 2008 Μέλος Share Δημοσ. 4 Ιουνίου 2008 Μη με βρισετε... εκανα μια ακομη προσπαθεια(αυτα που αλλαξα απο το προηγουμενο ειναι με bold... η λογικη του μου φαινεται σωστη... ειναι ομως; ): MOV AX,00 MOV BX,00 MOV CX,00 ;1H AFAIRESI - IMERON MOV AL,[200H] SUB AL,[203H] CMP AL,00 JNL IMERES NEG AL IMERES: MOV [206H],AL ;2H AFAIRESI - MINON MOV AL,[201H] SUB AL,[204H] MOV [207H],AL ;3H AFAIRESI - XRONON MOV AL,[202H] SUB AL,[205H] MOV [208H],AL ;;POLLAPLASIASMOS MINON ME TO 30 GIA NA GINOUN MERES MOV AL,[207H] MOV BL,1EH IMUL BL CMP AX,00 JNL MINES NEG AX MINES: MOV [209H],AX ;POLLAPLASIASMOS XRONON ME TO 360 GIA NA GINOUN MERES MOV BL,[208H] MOV AX,0168H IMUL BX CMP AX,00 JNL ETH NEG AX ETH: MOV [20BH],AX MOV [20DH],DX ;PROSTHESI IMERON ME TIS IMERES TON MINON MOV BX,[209H] MOV CL,[206H] ADC BX,CX MOV [20FH],BX ;;PROSTHESI TOU PROIGOUMENOU APOTELESMATOS ME TIS IMERES TON XRONON ADC AX,BX ;TO APOTELESMA KATAXOREITAI SE 16BITO KATAXORITI MOV [211H],AX HLT ;TELOS PROGRAMMA Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
GCMH Δημοσ. 4 Ιουνίου 2008 Share Δημοσ. 4 Ιουνίου 2008 Μα τα CMP AX,00 που έχεις βάλει δεν κάνουν κάτι ουσιαστικό... δεν έχουν την ικανότητα να ελέγξουν πρόσημο... δεν πρόκειται να σου βγάλουν αν ο αριθμός είναι μικρότερος του μηδέν... για αυτήν την δουλειά πρέπει να ελέγχθεί το περισσότερα σημαντικό μπιτ. Δοκίμασέ το όπως σου είπα στο ποστ 32 (και δες και το 42). Αλλιώς παραιτούμαι και σκίζω τα πτυχία που δεν έχω (να αυτοσαρκαστώ και λιγάκι, ε; ) Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
anvc Δημοσ. 4 Ιουνίου 2008 Μέλος Share Δημοσ. 4 Ιουνίου 2008 >ADD AX,BX // κάνουμε την πρόσθεση MOV BX,AX //αντιγράφουμε το αποτέλεσμα AND ΒX,$8000 // μασκάρουμε τα πρώτα 15 μπιτ και κρατάμε το 16 CMP ΒX,$0000 //αν είναι μηδεν θετικός, αν είναι $8000 αρνητικός (ενδέχεται να μην χρειάζεται αυτό εφόσον με την AND επηρεάζεται το zero flag) JZ COMMON NEG AX COMMON: τα υπόλοιπα... Ελπίζω να δουλέψει έτσι... Αυτο που ειχες γραψει που ακριβως θα μπει; Επισης δεν καταλαβα τι ειναι το 8000, τιμη; Απ'οτι καταλαβα μαλλον ειναι τροπος για να παιρνουμε το 16ο bit, αλλα μπορεις να μου εξηγησεις γιατι εβαλες το 8000; Να δοκιμασω το σκεπτικο σου να δω μηπως βγει σωστο! Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.