Προς το περιεχόμενο

Assembly


Zaknafein199

Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)

Καλησπέρα ! 

Όπως είναι γνωστό ο κάθε επεξεργαστής έχει μία εντελώς δική του έκδοση της 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 δεν την θυμάμαι καλά γιατί απ' το πανεπιστήμιο και μετά δεν την ξαναχρησιμοποίησα. 

Να είστε καλά, 

Ο Άσπρος Γάτος

Επεξ/σία από White_Cat
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

 Παιδιά, το παραδέχομαι, θέλω κρέμασμα, έκανα ένα πολύ σοβαρό λάθος που σίγουρα αποπροσανατολίζει το χρήστη που ξεκίνησε το συγκεκριμένο νήμα. Η λέξη MIPS, ναι μεν ανάλογα με τα συμφραζόμενα ενδέχεται να σημαίνει "Millions of instructions per second", αλλά υπάρχει και αρχιτεκτονική επεξεργαστών MIPS, οπού τα αρχικά προέρχονται αυτή τη φορά από εντελώς διαφορετικές λέξεις. 
 Απ' ό,τι βλέπω οι καταχωρητές των επεξεργαστών MIPS δεν έχουν απολύτως καμία σχέση με όσα ξέρω εγώ απ' τους Intel 8086/8088. Η ρουτίνα σε MIPS Assembly που υψώνει το Χ εις την Υ υπάρχει έτοιμη εδώ : http://akomaenablog.blogspot.com/2008/04/mips-power-xy-example.html

Αυτά για σήμερα, 

Καλή σας νύχτα... 

Τι να κάνουμε ; Έχουμε αδυναμίες κι εμείς οι γάτοι. Ο,τι διαβάζετε περί επτά ψυχών είναι αστικός μύθος. 

Ο Άσπρος Γάτος

Επεξ/σία από White_Cat
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • 3 χρόνια αργότερα...
Στις 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 δεν την θυμάμαι καλά γιατί απ' το πανεπιστήμιο και μετά δεν την ξαναχρησιμοποίησα. 

Να είστε καλά, 

Ο Άσπρος Γάτος

Καλημέρα, μήπως υπάρχει κάποιο αντίγραφο το βιβλίου για αγορά ή έστω σε ηλεκτρονική μορφή? Το αναζητώ από τότε που ήμουν μαθητής. Ευχαριστώ

 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...