Zaknafein199 Δημοσ. 22 Οκτωβρίου 2019 Δημοσ. 22 Οκτωβρίου 2019 Πως ακριβως θα κανω πραξεις δυναμεων στην assembly? (MIPS)
White_Cat Δημοσ. 22 Οκτωβρίου 2019 Δημοσ. 22 Οκτωβρίου 2019 (επεξεργασμένο) Καλησπέρα ! Όπως είναι γνωστό ο κάθε επεξεργαστής έχει μία εντελώς δική του έκδοση της Assembly και συνεπώς θα έπρεπε να διευκρινίζεις σε ποιά ακριβώς έκδοση της γλώσσας πρέπει να γραφεί αυτό που θέλεις. Τα MIPS που γράφεις είναι μονάδα μέτρησης ταχύτητας του επεξεργαστή και όχι κάποια εκδοχή της γλώσσας Assembly. Εμείς στο πανεπιστήμιο (2ο έτος) κάναμε την Assembly των 8086/8088 και ως βασική πηγή είχαμε ένα πολύ ωραίο βιβλίο του Νίκου Νασούφη με τίτλο "Προγραμματισμός σε 8086/8088". Άρα μόνο σ' αυτήν μπορώ να γράψω μέσω emulator. .MODEL SMALL .DATA VASI DB ? EKTH DB ? MSG1 DB 0AH,0DH,\'DWSTE THN VASI:\',\'$\' MSG2 DB 0AH,0DH,\'DWSTE TON EKTHETI:\',\'$\' .CODE MAIN PROC MOV AX,@DATA MOV DS,AX DWSTE_VASI: LEA DX,MSG1 MOV AH,09H INT 21H MOV AH,01H INT 21H SUB AL,30H MOV BL,AL MOV VASI,AL DWSTE_EKTHETI: LEA DX,MSG2 MOV AH,09H INT 21H MOV AH,01H INT 21H SUB AL,30H MOV CL,EKTH DEC CL MOV AX,00 MOV AL,VASI VRONHOS: MUL BL LOOP VRONHOS MOV CL,10 DIV CL ADD AX,3030H MOV DX,AX MOV AH,02H INT 21H MOV DL,DH INT 21H MOV AH,4CH INT 21H MAIN ENDP END MAIN Τα προγράμματα σ' αυτό το είδος Assembly έχουνε 2 τμήματα. Το πρώτο λέγεται DATA κι εκεί μέσα βάζουμε τα αλφαριθμητικά που θα χρησιμοποιήσουμε. Εδώ είναι οι μτβλ MSG1 & MSG2. To $\ δηλώνει το τέλος του κάθε αλφαριθμητικού. Μετά αρχίζει το τμήμα με όνομα CODE που εκεί μέσα γίνεται η βασική επεξεργασία. Χρησιμοποιούμε τις υπηρεσίες του interrupt 21h για να τυπώσουμε τα μηνύματα "Δώστε τη βάση" και "Δώστε τον εκθέτη". Ύστερα φορτώνουμε στον καταχωρητή AL τη βάση και μπαίνουμε στο βρόγχο ονόματι VRONHOS και με διαδοχικά MUL πολλαπλασιάζουμε μέχρι να φτάσουμε στο επιθυμητό αποτέλεσμα. Τέλος χρησιμοποιούμε πάλι τις υπηρεσίες του interrupt 21h όπως πριν για να τυπωθεί το τελικό αποτέλεσμα. Δοκίμασα με 2 εξομοιωτές να το τρέξω, ο ένας τα πάει καλά ο άλλος όχι. Δυστυχώς δεν γνωρίζω αμα μου ξέφυγε πουθενά κάτι, πάντως η βασική λογική είναι αυτή. Την Assembly δεν την θυμάμαι καλά γιατί απ' το πανεπιστήμιο και μετά δεν την ξαναχρησιμοποίησα. Να είστε καλά, Ο Άσπρος Γάτος Επεξ/σία 22 Οκτωβρίου 2019 από White_Cat
GCMH Δημοσ. 22 Οκτωβρίου 2019 Δημοσ. 22 Οκτωβρίου 2019 https://en.wikipedia.org/wiki/MIPS_architecture 1
White_Cat Δημοσ. 22 Οκτωβρίου 2019 Δημοσ. 22 Οκτωβρίου 2019 (επεξεργασμένο) Παιδιά, το παραδέχομαι, θέλω κρέμασμα, έκανα ένα πολύ σοβαρό λάθος που σίγουρα αποπροσανατολίζει το χρήστη που ξεκίνησε το συγκεκριμένο νήμα. Η λέξη MIPS, ναι μεν ανάλογα με τα συμφραζόμενα ενδέχεται να σημαίνει "Millions of instructions per second", αλλά υπάρχει και αρχιτεκτονική επεξεργαστών MIPS, οπού τα αρχικά προέρχονται αυτή τη φορά από εντελώς διαφορετικές λέξεις. Απ' ό,τι βλέπω οι καταχωρητές των επεξεργαστών MIPS δεν έχουν απολύτως καμία σχέση με όσα ξέρω εγώ απ' τους Intel 8086/8088. Η ρουτίνα σε MIPS Assembly που υψώνει το Χ εις την Υ υπάρχει έτοιμη εδώ : http://akomaenablog.blogspot.com/2008/04/mips-power-xy-example.html Αυτά για σήμερα, Καλή σας νύχτα... Τι να κάνουμε ; Έχουμε αδυναμίες κι εμείς οι γάτοι. Ο,τι διαβάζετε περί επτά ψυχών είναι αστικός μύθος. Ο Άσπρος Γάτος Επεξ/σία 22 Οκτωβρίου 2019 από White_Cat
Επισκέπτης Δημοσ. 17 Φεβρουαρίου 2023 Δημοσ. 17 Φεβρουαρίου 2023 Στις 22/10/2019 στις 6:00 ΜΜ, White_Cat είπε Καλησπέρα ! Όπως είναι γνωστό ο κάθε επεξεργαστής έχει μία εντελώς δική του έκδοση της Assembly και συνεπώς θα έπρεπε να διευκρινίζεις σε ποιά ακριβώς έκδοση της γλώσσας πρέπει να γραφεί αυτό που θέλεις. Τα MIPS που γράφεις είναι μονάδα μέτρησης ταχύτητας του επεξεργαστή και όχι κάποια εκδοχή της γλώσσας Assembly. Εμείς στο πανεπιστήμιο (2ο έτος) κάναμε την Assembly των 8086/8088 και ως βασική πηγή είχαμε ένα πολύ ωραίο βιβλίο του Νίκου Νασούφη με τίτλο "Προγραμματισμός σε 8086/8088". Άρα μόνο σ' αυτήν μπορώ να γράψω μέσω emulator. .MODEL SMALL .DATA VASI DB ? EKTH DB ? MSG1 DB 0AH,0DH,\'DWSTE THN VASI:\',\'$\' MSG2 DB 0AH,0DH,\'DWSTE TON EKTHETI:\',\'$\' .CODE MAIN PROC MOV AX,@DATA MOV DS,AX DWSTE_VASI: LEA DX,MSG1 MOV AH,09H INT 21H MOV AH,01H INT 21H SUB AL,30H MOV BL,AL MOV VASI,AL DWSTE_EKTHETI: LEA DX,MSG2 MOV AH,09H INT 21H MOV AH,01H INT 21H SUB AL,30H MOV CL,EKTH DEC CL MOV AX,00 MOV AL,VASI VRONHOS: MUL BL LOOP VRONHOS MOV CL,10 DIV CL ADD AX,3030H MOV DX,AX MOV AH,02H INT 21H MOV DL,DH INT 21H MOV AH,4CH INT 21H MAIN ENDP END MAIN Τα προγράμματα σ' αυτό το είδος Assembly έχουνε 2 τμήματα. Το πρώτο λέγεται DATA κι εκεί μέσα βάζουμε τα αλφαριθμητικά που θα χρησιμοποιήσουμε. Εδώ είναι οι μτβλ MSG1 & MSG2. To $\ δηλώνει το τέλος του κάθε αλφαριθμητικού. Μετά αρχίζει το τμήμα με όνομα CODE που εκεί μέσα γίνεται η βασική επεξεργασία. Χρησιμοποιούμε τις υπηρεσίες του interrupt 21h για να τυπώσουμε τα μηνύματα "Δώστε τη βάση" και "Δώστε τον εκθέτη". Ύστερα φορτώνουμε στον καταχωρητή AL τη βάση και μπαίνουμε στο βρόγχο ονόματι VRONHOS και με διαδοχικά MUL πολλαπλασιάζουμε μέχρι να φτάσουμε στο επιθυμητό αποτέλεσμα. Τέλος χρησιμοποιούμε πάλι τις υπηρεσίες του interrupt 21h όπως πριν για να τυπωθεί το τελικό αποτέλεσμα. Δοκίμασα με 2 εξομοιωτές να το τρέξω, ο ένας τα πάει καλά ο άλλος όχι. Δυστυχώς δεν γνωρίζω αμα μου ξέφυγε πουθενά κάτι, πάντως η βασική λογική είναι αυτή. Την Assembly δεν την θυμάμαι καλά γιατί απ' το πανεπιστήμιο και μετά δεν την ξαναχρησιμοποίησα. Να είστε καλά, Ο Άσπρος Γάτος Καλημέρα, μήπως υπάρχει κάποιο αντίγραφο το βιβλίου για αγορά ή έστω σε ηλεκτρονική μορφή? Το αναζητώ από τότε που ήμουν μαθητής. Ευχαριστώ
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα