Γράμματα στο 16ο σύστημα αριθμών. Hex κωδικός

Δεκαεξαδικό σύστημα αριθμών, είναι μακράν το πιο δημοφιλές μέσο για συμπαγή εγγραφή δυαδικών αριθμών. Χρησιμοποιείται πολύ ευρέως στην ανάπτυξη και σχεδιασμό ψηφιακής τεχνολογίας.

Όπως υποδηλώνει το όνομα, η βάση αυτού του συστήματος είναι ο αριθμός δεκαέξι 16 ή σε δεκαεξαδικό 10 16 . Για να αποφευχθεί η σύγχυση, όταν γράφουμε αριθμούς σε συστήματα αριθμών εκτός των δεκαδικών, θα υποδεικνύουμε τη βάση του συστήματος αριθμών στο κάτω δεξιά μέρος του κύριου συμβολισμού αριθμών. Εφόσον η βάση του συστήματος είναι ο αριθμός δεκαέξι, σημαίνει ότι για να αναπαραστήσουμε τους αριθμούς χρειαζόμαστε δεκαέξι ψηφία. Τα πρώτα δέκα ψηφία λαμβάνονται από το γνωστό σε εμάς δεκαδικό σύστημα (0,1,..,8,9) και προστίθενται επίσης έξι γράμματα του λατινικού αλφαβήτου (a,b,c,d,e,f). Για παράδειγμα, στον δεκαεξαδικό αριθμό 3f7c2, τα γράμματα "f" και "c" είναι δεκαεξαδικά ψηφία.

Η μέτρηση σε δεκαεξαδικό είναι παρόμοια με τη μέτρηση σε δεκαδικό. Ας προσπαθήσουμε να μετρήσουμε και να γράψουμε αριθμούς κατασκευάζοντάς τους από τα διαθέσιμα δεκαέξι ψηφία:

Μηδέν - 0 ;
Ενας - 1 ;
Δύο - 2 ;
...
και ούτω καθεξής…
...
Οκτώ - 8 ;
Εννέα - 9 ;
Δέκα - ένα;
Εντεκα - σι;
Δώδεκα - ντο;
Δεκατρείς - ρε;
Δεκατέσσερα - μι;
Δεκαπέντε - φά;

Τι να κάνω μετά? Όλα τα νούμερα έχουν χαθεί. Πώς να απεικονίσετε τον αριθμό Δεκαέξι; Ας κάνουμε το ίδιο όπως κάναμε στο δεκαδικό σύστημα. Εκεί εισαγάγαμε την έννοια του δέκα, εδώ θα εισαγάγουμε την έννοια του «δεκαέξι» και θα πούμε ότι το δεκάξι είναι ένα «δεκαέξι» και το μηδέν ένα. Και αυτό μπορεί ήδη να γραφτεί - "10 16".

Ετσι, Δεκαέξι - 10 16 (ένα "δεκαέξι", μηδέν ένα)
Δεκαεπτά - 11 16 (ένα "δεκαέξι", μία μονάδα)
...
και ούτω καθεξής…
...
Είκοσι πέντε - 19 16 (ένα "δεκαέξι", εννέα ένα)
Εικοσι εξι - 16 (ένα "δεκαέξι", δέκα μονάδες)
Είκοσιεφτά - 16 (ένα "δεκαέξι", έντεκα μονάδες)
...
και ούτω καθεξής…
...
Τριάντα - 16 (ένα "δεκαέξι", δεκατέσσερα ένα)
Τριάντα ένα - 1στ 16 (ένα "δεκαέξι", δεκαπέντε μονάδες)
Τριάντα δύο - 20 16 (δύο δεκαέξι, μηδέν ένα)
Τριάντα τρία - 21 16 (δύο δεκαέξι, ένα ένα)
...
και ούτω καθεξής…
...
Διακόσια πενήντα πέντε - ff 16 (δεκαπέντε επί "δεκαέξι", δεκαπέντε ένα)

διακόσια πενήντα έξι - 100 16 (ένα "διακόσια πενήντα έξι", μηδέν "δεκαέξι", μηδέν ένα)
διακόσια πενήντα επτά - 101 16 (ένα "διακόσια πενήντα έξι", από μηδέν έως "δεκαέξι", ένα ένα)
διακόσια πενήντα οκτώ - 102 16 (ένα "Διακόσια πενήντα έξι", από μηδέν έως "δεκαέξι", δύο ένα)
...
και ούτω καθεξής...
...

Κάθε φορά που έχουμε εξαντλήσει το σύνολο των ψηφίων για να εμφανίσουμε τον επόμενο αριθμό, εισάγουμε μεγαλύτερες μονάδες μέτρησης (δηλαδή μετρώντας με «δεκαέξι», «διακόσια πενήντα έξι» κ.λπ.) και γράφουμε τον αριθμό που εκτείνεται κατά ένα ψηφίο .

Σκεφτείτε τον αριθμό 3e2c 16 γραμμένο σε δεκαεξαδικό σύστημα αριθμών. Μπορούμε να πούμε σχετικά ότι περιέχει: τρεις x τέσσερις χιλιάδες ενενήντα έξι, «ε» (δεκατέσσερα) x διακόσια πενήντα έξι, δύο x δεκαέξι και «γ» (δώδεκα) ένα. Και μπορείτε να πάρετε την αξία του μέσω των αριθμών που περιλαμβάνονται σε αυτό ως εξής.

3e2c 16 = 3 *4096+14 *256+2 *16+12 *1, εδώ και κάτω το σύμβολο * (αστερίσκος) σημαίνει πολλαπλασιασμό.

Αλλά η σειρά των αριθμών 4096, 256, 16, 1 δεν είναι τίποτα άλλο από ακέραιες δυνάμεις του αριθμού δεκαέξι (η βάση του συστήματος αριθμών) και επομένως μπορεί να γραφτεί:

3e2c 16 = 3 *16 3 +14 *16 2 +2 *16 1 +12 *16 0

Ομοίως για ένα δεκαεξαδικό κλάσμα (κλασματικός αριθμός) για παράδειγμα: 0,5a2 16 σχετικά με αυτό μπορούμε να πούμε ότι περιέχει: πέντε δέκατα έκτα, «α» (δέκα) διακόσια πενήντα έκτα και δύο τέσσερις χιλιάδες ενενήντα έκτα. Και η αξία του μπορεί να υπολογιστεί ως εξής:

0,5a2 16 = 5 *(1/16) + 10 *(1/256) + 2 *(1/4096)

Και εδώ είναι μια σειρά αριθμών 1/16. Το 1/256 και το 1/4096 δεν είναι τίποτα άλλο από ακέραιες δυνάμεις του δεκαέξι και μπορούμε επίσης να γράψουμε:

0,5a2 16 = 5 *16 -1 + 10 *16 -2 + 2 *16 -3

Για τον μικτό αριθμό 7b2.1f9 μπορούμε να γράψουμε με τον ίδιο τρόπο:

7b2.1f9 = 7 *16 2 +11 *16 1 +2 *16 0 +1 *16 -1 +15 *16 -2 +9 *16 -3

Ας αριθμήσουμε τα ψηφία του ακέραιου μέρους κάποιου δεκαεξαδικού αριθμού, από δεξιά προς τα αριστερά, ως 0,1,2...n (η αρίθμηση ξεκινά από το μηδέν!). Και τα ψηφία του κλασματικού μέρους, από αριστερά προς τα δεξιά, όπως -1,-2,-3...-m, τότε η τιμή ενός συγκεκριμένου δεκαεξαδικού αριθμού μπορεί να υπολογιστεί χρησιμοποιώντας τον τύπο:

N = d n 16 n +d n-1 16 n-1 +…+d 1 16 1 +d 0 16 0 +d -1 16 -1 +d -2 16 -2 +…+d -(m-1) 16 -(m-1) +d -m 16 -m

Οπου: n- τον αριθμό των ψηφίων στο ακέραιο μέρος του αριθμού μείον ένα.
Μ- τον αριθμό των ψηφίων στο κλασματικό μέρος του αριθμού
d i- ψηφίο που στέκεται μέσα Εγώ-η κατάταξη

Αυτός ο τύπος ονομάζεται τύπος για την κατά bit επέκταση ενός δεκαεξαδικού αριθμού, δηλ. αριθμός γραμμένος σε δεκαεξαδικό σύστημα αριθμών. Αν αντικαταστήσουμε τον αριθμό δεκαέξι σε αυτόν τον τύπο με κάποιον αυθαίρετο αριθμό q, τότε λαμβάνουμε τον τύπο επέκτασης για τον αριθμό που είναι γραμμένος qthαριθμητικό σύστημα, δηλ. με βάση q:

N = d n q n +d n-1 q n-1 +…+d 1 q 1 +d 0 q 0 +d -1 q -1 +d -2 q -2 +…+d -(m-1) q - (m-1) +d -m q -m

Χρησιμοποιώντας αυτόν τον τύπο, μπορείτε πάντα να υπολογίσετε την τιμή ενός αριθμού γραμμένου σε οποιοδήποτε σύστημα αριθμών θέσης με βάση q.

Άλλα συστήματα αριθμών μπορείτε να βρείτε στον ιστότοπό μας χρησιμοποιώντας τους παρακάτω συνδέσμους.

Προέρχεται από την αρχαία Βαβυλώνα. Στην Ινδία, το σύστημα λειτουργεί με τη μορφή δεκαδικής αρίθμησης με μηδέν, το αραβικό έθνος δανείστηκε αυτό το σύστημα αριθμών από τους Ινδούς και οι Ευρωπαίοι, με τη σειρά τους, το πήραν από αυτούς. Στην Ευρώπη, αυτό το σύστημα άρχισε να ονομάζεται αραβικό.

Σύστημα θέσηςνεκρός απολογισμός— η σημασία όλων των ψηφίων εξαρτάται από τη θέση (ψηφίο) του δεδομένου ψηφίου στον αριθμό.

Παραδείγματα, το τυπικό σύστημα δεκαδικών αριθμών είναι ένα σύστημα θέσης. Ας πούμε ότι δίνεται ένας αριθμός453 . Αριθμός 4 σημαίνει εκατοντάδες και αντιστοιχεί σε έναν αριθμό400, 5 - αριθμός δεκάδων και αντιστοιχεί στην τιμή50 , ΕΝΑ 3 - μονάδες και νόημα3 . Είναι εύκολο να δούμε ότι όσο αυξάνεται το ψηφίο, αυξάνεται και η τιμή. Έτσι, γράφουμε τον αριθμό που δίνεται ως άθροισμα400+50+3=453.

Δεκαεξαδικό σύστημα αριθμών.

Δεκαεξαδικό σύστημα αριθμών(δεκαεξαδικοί αριθμοί) - σύστημα αριθμών θέσης. Δεκαεξαδική βάσηείναι ο αριθμός 16.

Γράφοντας αριθμούς στο οκταδικό σύστημα αριθμών παίρνουμε αρκετά συμπαγείς εκφράσεις, αλλά στο δεκαεξαδικό σύστημα παίρνουμε πιο συμπαγείς εκφράσεις.

Τα πρώτα δέκα ψηφία των δεκαέξι δεκαεξαδικών ψηφίων είναι τυπική απόσταση 0 - 9 , τα επόμενα έξι ψηφία εκφράζονται χρησιμοποιώντας τα πρώτα γράμματα του λατινικού αλφαβήτου: ΕΝΑ, σι, ντο, ρε, μι, φά. Η μετατροπή από δεκαεξαδικό σε δυαδικό και αντίστροφα είναι παρόμοια με τη διαδικασία για το οκταδικό.

Εφαρμογή του δεκαεξαδικού συστήματος αριθμών.

Το δεκαεξαδικό σύστημα αριθμών χρησιμοποιείται αρκετά καλά στους σύγχρονους υπολογιστές, Για παράδειγμαχρησιμοποιήστε το για να υποδείξετε χρώμα: #FFFFFF- Ασπρο χρώμα.

Μετατροπή αριθμών από ένα σύστημα αριθμών σε άλλο.

Μετατροπή αριθμών από δεκαεξαδικό σε δεκαδικό.

Για να μετατρέψετε έναν δεκαεξαδικό αριθμό σε δεκαδικό αριθμό, πρέπει να μειώσετε τον δεδομένο αριθμό στη μορφή του αθροίσματος των δυνάμεων της βάσης του δεκαεξαδικού συστήματος αριθμών με τα αντίστοιχα ψηφία στα ψηφία του δεκαεξαδικού αριθμού.

Για παράδειγμα, μετατρέψτε τον δεκαεξαδικό αριθμό 5Α3σε δεκαδικό. Εδώ 3 αριθμοί. Με βάση τον παραπάνω κανόνα, τον ανάγουμε σε ένα άθροισμα δυνάμεων με βάση το 16:

5A3 16 = 3·16 0 +10·16 1 +5·16 2 = 3·1+10·16+5·256 = 3+160+1280 = 1443 10

Μετατροπή αριθμών από δυαδικό σε δεκαεξαδικό και αντίστροφα.

Για να μετατρέψετε έναν πολυψήφιο δυαδικό αριθμό σε δεκαεξαδικό, πρέπει να τον διαιρέσετε σε τετράδια από δεξιά προς τα αριστερά και να αντικαταστήσετε όλα τα τετράδια με το αντίστοιχο δεκαεξαδικό ψηφίο. Για να μετατρέψετε έναν αριθμό από το δεκαεξαδικό σύστημα στο δυαδικό σύστημα, πρέπει να αλλάξετε κάθε ψηφίο στα αντίστοιχα τετράδια από τον πίνακα μετατροπής, τον οποίο θα βρείτε παρακάτω.

Για παράδειγμα:

010110100011 2 = 0101 1010 0011 = 5A3 16

Πίνακας μετατροπής αριθμού.

Ένας αλγόριθμος για τη μετατροπή αριθμών από ένα σύστημα αριθμών σε ένα άλλο.

1. Από το δεκαδικό σύστημα αριθμών:

  • διαιρέστε τον αριθμό με τη βάση του μεταφρασμένου συστήματος αριθμών.
  • Να βρείτε το υπόλοιπο κατά τη διαίρεση του ακέραιου μέρους ενός αριθμού.
  • καταγράψτε όλα τα υπόλοιπα από τη διαίρεση με αντίστροφη σειρά.

2. Από το δυαδικό σύστημα αριθμών:

  • Για να μετατρέψουμε στο δεκαδικό σύστημα αριθμών, βρίσκουμε το άθροισμα των γινομένων της βάσης 2 με τον αντίστοιχο βαθμό ψηφίου.
  • Για να μετατρέψουμε έναν αριθμό σε οκταδικό, χωρίζουμε τον αριθμό σε τριάδες.

Για παράδειγμα, 1000110 = 1.000 110 = 1068

  • Για να μετατρέψουμε έναν αριθμό από το δυαδικό σύστημα αριθμών σε δεκαεξαδικό, χωρίζουμε τον αριθμό σε ομάδες των 4 ψηφίων.

Για παράδειγμα, 1000110 = 100 0110 = 4616.

Πίνακες μετάφρασης:

Δυαδικό SS

Δεκαεξαδικό SS

0000

0001

0010

0011

0100

0101

0110

0111

1000

1001

1010

1011

1100

1101

1110

1111

Δυαδικό SS

Για να γράψετε προγράμματα σε Assembly, πρέπει να κατανοήσετε το δεκαεξαδικό σύστημα αριθμών. Δεν υπάρχει τίποτα περίπλοκο σε αυτό. Χρησιμοποιούμε το δεκαδικό σύστημα στη ζωή. Είμαι σίγουρος ότι το γνωρίζετε όλοι, γι' αυτό θα προσπαθήσω να εξηγήσω το δεκαεξαδικό σύστημα χρησιμοποιώντας μια αναλογία με το δεκαδικό σύστημα.

Έτσι, στο δεκαδικό σύστημα, αν προσθέσουμε ένα μηδέν σε οποιονδήποτε αριθμό στα δεξιά, τότε αυτός ο αριθμός θα αυξηθεί κατά 10 φορές. Για παράδειγμα: 1 x 10 = 10; 10 x 10 = 100; 100 x 10 = 1000, κ.λπ. Σε αυτό το σύστημα χρησιμοποιούμε αριθμούς από το 0 έως το 9, δηλ. δέκα διαφορετικοί αριθμοί (για την ακρίβεια, γι' αυτό λέγεται δεκαδικός).

Στο δεκαεξαδικό σύστημα, χρησιμοποιούμε δεκαέξι «ψηφία». Έγραψα συγκεκριμένα τη λέξη «ψηφία» σε εισαγωγικά, γιατί... Δεν χρησιμοποιεί μόνο αριθμούς. Και αλήθεια, πώς μπορεί να είναι αυτό; Επιτρέψτε μου να εξηγήσω: από το 0 έως το 9 μετράμε με τον ίδιο τρόπο όπως στο δεκαδικό, αλλά τότε θα είναι έτσι: A, B, C, D, E, F. Ο αριθμός F δεν είναι δύσκολος μετρήστε, θα είναι ίσο με 15 στο δεκαδικό σύστημα (βλ. Πίνακα 1).

Δεκαδικός αριθμός

Δεκαεξαδικός αριθμός

Πίνακας 1. Δεκαδικά και δεκαεξαδικά συστήματα.

Έτσι, αν προσθέσουμε ένα μηδέν στα δεξιά οποιουδήποτε αριθμού στο δεκαεξαδικό σύστημα, τότε αυτός ο αριθμός θα αυξηθεί κατά16 μια φορά.

Παράδειγμα 1: 1 x 16 = 10; 10 x 16 = 100; 100 x 16 = 1000, κ.λπ.

Καταφέρατε να διακρίνετε τους δεκαεξαδικούς αριθμούς από τους δεκαδικούς στο Παράδειγμα 1; Και από αυτή τη σειρά: 10, 12, 45, 64, 12, 8, 19; Αυτά μπορεί να είναι είτε δεκαεξαδικά είτε δεκαδικά. Προκειμένου να αποφευχθεί η σύγχυση και ο υπολογιστής να μπορεί να διακρίνει καθαρά έναν αριθμό από τον άλλο, στο assembler είναι συνηθισμένο να τοποθετείται το σύμβολο h ή H μετά από έναν δεκαεξαδικό αριθμό ( Το H είναι συντομογραφία για τα αγγλικά. δεκαεξαδικό (δεκαεξαδικό). Για συντομία, μερικές φορές ονομάζεται απλώς Γοητεύω ) . Και μην βάζετε τίποτα μετά το δεκαδικό. Επειδή Οι αριθμοί από το 0 έως το 9 και στα δύο συστήματα έχουν την ίδια σημασία, τότε οι αριθμοί που γράφονται ως 5 και 5h είναι οι ίδιοι.

Οτι. Το Παράδειγμα 1 (βλ. παραπάνω) θα ήταν πιο σωστό να γραφτεί ως εξής: 1 x 16 = 10h; 10h x 16 = 100h; 100h x 16 = 1000h. Ή ως εξής: 1h x 10h = 10h; 10h x 10h = 100h; 100h x 10h = 1000h.

Θα εξετάσουμε γιατί χρειάζεται το δεκαεξαδικό σύστημα σε επόμενα τεύχη. Προς το παρόν, για το παράδειγμα του προγράμματος μας, το οποίο θα συζητηθεί παρακάτω, πρέπει να γνωρίζουμε την ύπαρξη δεκαεξαδικών αριθμών.

Λοιπόν, ας συνοψίσουμε. Το δεκαεξαδικό σύστημα αριθμών αποτελείται από 10 ψηφία (από το 0 έως το 9) και 6 γράμματα του λατινικού αλφαβήτου (A, B, C, D, E, F). Αν προσθέσουμε ένα μηδέν στα δεξιά οποιουδήποτε αριθμού στο δεκαεξαδικό σύστημα, τότε αυτός ο αριθμός θα αυξηθεί κατά16 μια φορά. Είναι πολύ σημαντικό να κατανοήσουμε αυτό το θέμα, αφού θα το χρησιμοποιούμε συνεχώς όταν γράφουμε προγράμματα.

Τώρα λίγο για το πώς θα φτιάξω παραδείγματα στο Assembly. Δεν είναι απολύτως βολικό να τα παρουσιάζετε σε μορφή HTML, επομένως πρώτα θα υπάρχει ο ίδιος ο κώδικας του προγράμματος με αριθμημένες γραμμές και αμέσως μετά θα υπάρχουν επεξηγήσεις και σημειώσεις.

Σαν αυτό:

γραμμές Κωδικός προγράμματος
(1) mov ah, 9

Επεξηγήσεις:

Στη γραμμή (1) κάνουμε αυτό, και στη γραμμή (15) κάνουμε αυτό.

Τεράστιο αίτημα: ΜΗΝ αντιγράψετε προγράμματα από μια σελίδα στο πρόχειρο και στη συνέχεια επικολλήστε τα στο Σημειωματάριο (ή οπουδήποτε αλλού)! Πληκτρολογήστε τα ξανά με μη αυτόματο τρόπο σε ένα πρόγραμμα επεξεργασίας κειμένου. Εάν έχετε εκτυπωτή, επιλέξτε το πρόγραμμα, εκτυπώστε το επιλεγμένο τμήμα και, στη συνέχεια, μεταφέρετέ το στο πρόγραμμα επεξεργασίας από χαρτί. Όλα τα παραδείγματα πρέπει να πληκτρολογήσετε μόνοι σας!Αυτό θα επιταχύνει την απομνημόνευση των χειριστών.

Και επιπλέον. Δεν υπάρχει διαφορά μεταξύ πεζών και κεφαλαίων γραμμάτων στο assembler. Αρχεία της φόρμας:

Ο συναρμολογητής τα αντιλαμβάνεται με τον ίδιο τρόπο. Μπορείτε, φυσικά, να αναγκάσετε το assembler να κάνει διάκριση μεταξύ πεζών και κεφαλαίων χαρακτήρων, αλλά δεν θα το κάνουμε προς το παρόν. Για να διευκολύνετε την ανάγνωση του προγράμματος, είναι καλύτερο να πληκτρολογήσετε τελεστές με πεζά γράμματα και να ξεκινήσετε τα ονόματα των υπορουτινών και των ετικετών με κεφαλαία γράμματα. Εξαρτάται όμως από το ποιος θα βολευτεί.

Ας προχωρήσουμε λοιπόν στο πρώτο μας πρόγραμμα:

(1) τμήμα CSEG

(2)org 100h

(4) Έναρξη:

(6) mov ah,9

(7) mov dx,offset μήνυμα

(8) int 21h

(10) int 20h

(11)

(12) Μήνυμα db "Hello, world!$"

(13)Τέλος CSEG

(14) τέλος Αρχή

Για να εξηγήσουμε όλους τους τελεστές σε αυτό το παράδειγμα, θα χρειαστούμε αρκετές εκδόσεις. Επομένως, απλά θα παραλείψουμε την περιγραφή ορισμένων εντολών σε αυτό το στάδιο. Απλώς υποθέστε ότι έτσι πρέπει να είναι. Θα εξετάσουμε λεπτομερώς αυτούς τους χειριστές στο πολύ εγγύς μέλλον. Έτσι, οι γραμμές με αριθμό (1), (2) και (13) απλά αγνοείτε.

Οι γραμμές (3), (5), (9) και (11) παραμένουν κενές. Αυτό γίνεται για λόγους σαφήνειας. Ο συναρμολογητής απλώς θα τα παραλείψει.

Τώρα ας προχωρήσουμε στην εξέταση των υπόλοιπων τελεστών. Ο κωδικός προγράμματος ξεκινά με τη γραμμή (4). Αυτό είναι ένα σημάδι που λέει στον assembler την αρχή του κώδικα. Η γραμμή (14) περιέχει τους τελεστές τέλος Αρχή (Ξεκινήστε αγγλικά Αρχή; τέλος τέλος). Αυτό είναι το τέλος του προγράμματος. Γενικά, αντί για τη λέξηΑρχίζουν κάτι άλλο θα μπορούσε να είχε χρησιμοποιηθεί. Για παράδειγμα,Αρχή:. Σε αυτή την περίπτωση, θα έπρεπε να τερματίσουμε το πρόγραμμαΤέλος Έναρξη (14).

Οι γραμμές (6) (8) εμφανίζουν το μήνυμα Hello, world!. Εδώ θα πρέπει να μιλήσουμε εν συντομία για τους καταχωρητές επεξεργαστών (θα εξετάσουμε αυτό το θέμα πιο αναλυτικά στο επόμενο τεύχος).

Ένας καταχωρητής επεξεργαστή είναι μια ειδικά εκχωρημένη μνήμη για την αποθήκευση ενός αριθμού.

Για παράδειγμα:

Αν θέλουμε να προσθέσουμε δύο αριθμούς, τότε στα μαθηματικά το γράφουμε ως εξής:

Α, Β και Γ πρόκειται για ένα είδος καταχωρητών (αν μιλάμε για υπολογιστή) στους οποίους μπορούν να αποθηκευτούν κάποια δεδομένα. Το A=5 μπορεί να διαβαστεί ως: Αντιστοιχίστε στον Α τον αριθμό 5 .

Για να εκχωρήσετε μια τιμή σε έναν καταχωρητή, υπάρχει ένας τελεστής mov στο Assembler (από το αγγλικό move load). Η γραμμή (6) πρέπει να διαβαστεί ως εξής: Φόρτωση στο μητρώο A.H.αριθμός 9 (με άλλα λόγια, αναθέτουμε A.H.αριθμός 9).Παρακάτω θα δούμε γιατί αυτό είναι απαραίτητο.

Στη γραμμή (7) φορτώνουμε στο μητρώο DX διεύθυνση μηνύματος για έξοδο (σε αυτό το παράδειγμα θα είναι η συμβολοσειράΓεια σου κόσμο!$).

Οι διακοπές θα καλυφθούν αναλυτικά σε επόμενα τεύχη. Εδώ θα πω δυο λόγια.

Διακοπή MS-DOS είναι ένα είδος υπορουτίνας (μέρος MS-DOS), το οποίο βρίσκεται μόνιμα στη μνήμη και μπορεί να κληθεί ανά πάσα στιγμή από οποιοδήποτε πρόγραμμα.

Ας εξετάσουμε τα παραπάνω χρησιμοποιώντας ένα παράδειγμα (Σημειώσεις με μικρά γράμματα):

Το πρόγραμμα για την πρόσθεση δύο αριθμών

HomePrograms

Α=5 Εισάγουμε την τιμή 5 στη μεταβλητή Α

Β=8 στη μεταβλητή Β η τιμή 8

Προσθήκη υπορουτίνων κλήσης

τώρα το C ισούται με 13

Α=10 το ίδιο πράγμα, απλά διαφορετικοί αριθμοί

Β=25

Προσθήκη υπορουτίνων κλήσης

τώρα το C είναι ίσο με 35

Τέλος Προγράμματος

Προσθήκη υπορουτίνας

Γ=Α+Β

ReturnFromSubroutine επιστρέφουμε στο μέρος από το οποίο καλέσαμε

EndSubroutine

Σε αυτό το παράδειγμα, καλέσαμε την υπορουτίνα δύο φορές Πρόσθεση, το οποίο πρόσθεσε δύο αριθμούς που του μεταβιβάστηκαν σε μεταβλητέςΑ και Β . Το αποτέλεσμα τοποθετείται στη μεταβλητή C. Όταν καλείται μια υπορουτίνα, ο υπολογιστής θυμάται από πού κλήθηκε και, στη συνέχεια, όταν η υπορουτίνα τελειώσει, ο υπολογιστής επιστρέφει στο μέρος από το οποίο κλήθηκε. Οτι. Μπορείτε να καλέσετε υπορουτίνες απεριόριστες φορές από οπουδήποτε.

Κατά την εκτέλεση της γραμμής (8) ενός προγράμματος Συναρμολόγησης, καλούμε μια υπορουτίνα (στην περίπτωση αυτή ονομάζεται διακοπή), η οποία εμφανίζει τη γραμμή στην οθόνη. Για το σκοπό αυτό, στην πραγματικότητα, τοποθετούμε τις απαραίτητες τιμές σε μητρώα. Όλη την απαραίτητη εργασία (εξαγωγή γραμμής, μετακίνηση του δρομέα) αναλαμβάνει η υπορουτίνα. Αυτή η γραμμή μπορεί να διαβαστεί ως εξής: καλέστε την εικοστή πρώτη διακοπή ( int από τα αγγλικά διακοπή διακοπή). Σημειώστε ότι μετά τον αριθμό 21 υπάρχει ένα γράμμαη . Αυτό, όπως ήδη γνωρίζουμε, είναι ένας δεκαεξαδικός αριθμός (33 σε δεκαδικό). Φυσικά, τίποτα δεν μας εμποδίζει να αντικαταστήσουμε τη γραμμή int 21h έως int 33. Το πρόγραμμα θα λειτουργήσει σωστά. Είναι απλώς κοινή πρακτική στο Assembler να υποδεικνύεται ο αριθμός διακοπής σε δεκαεξαδικό.

Στη γραμμή (10) καλούμε, όπως ίσως μαντέψατε, το interrupt 20η . Για να καλέσετε αυτήν τη διακοπή, δεν χρειάζεται να καθορίσετε καμία τιμή στους καταχωρητές. Εκτελεί μόνο μία εργασία: έξοδο από το πρόγραμμα (έξοδος στο DOS). Ως αποτέλεσμα της εκτέλεσης της διακοπής 20h, το πρόγραμμα θα επιστρέψει εκεί από όπου ξεκίνησε (φόρτωση, κλήση). Για παράδειγμα, σε Norton Commander ή DOS Navigator.

Η γραμμή (12) περιέχει το μήνυμα προς έξοδο. Πρώτη λέξη (μήνυμα μήνυμα) τίτλος μηνύματος. Μπορεί να είναι οτιδήποτε (για παράδειγμα,χάος ή χορδή, κ.λπ.). ΣΧΕΤΙΚΑ ΜΕ Δώστε προσοχή στη γραμμή (7), στην οποία φορτώνουμε στο μητρώο DX τη διεύθυνση του μηνύματός μας.

Μπορούμε να δημιουργήσουμε μια άλλη γραμμή, την οποία θα καλέσουμεΑκατάστατο 2. Στη συνέχεια, ξεκινώντας από τη γραμμή (9), εισαγάγετε τις ακόλουθες εντολές:

(10) mov dx, offset Mess2

(13) Μήνυμα db "Hello, world!$"

(14) Mess2 db "Είμαι ΕΓΩ! $"

και συναρμολογήστε ξανά το πρόγραμμά μας. Ελπίζω να μπορείτε να μαντέψετε τι πρόκειται να συμβεί

Δώστε προσοχή στον τελευταίο χαρακτήρα στις γραμμέςΜήνυμα και Mess2 - $. Δείχνει στο τέλος της γραμμής. Αν το αφαιρέσουμε, τότε 21η η διακοπή θα συνεχίσει να βγαίνει μέχρι να συναντήσει έναν χαρακτήρα κάπου στη μνήμη $. Στην οθόνη θα δούμεσκουπίδια.

Εάν έχετε πρόγραμμα εντοπισμού σφαλμάτων, μπορείτε να δείτε πώς θα λειτουργεί το πρόγραμμά μας.

Ο σκοπός αυτού του θέματος δεν ήταν να καταλάβουμε αναλυτικά με κάθε χειριστή. Αυτό είναι αδύνατο, γιατί δεν έχετε αρκετές γνώσεις ακόμα. Πιστεύω ότι μετά από 3-4 εκδόσεις θα κατανοήσετε την αρχή και τη δομή ενός προγράμματος Assembly. Ίσως η γλώσσα Assembly σας φάνηκε εξαιρετικά περίπλοκη, αλλά πιστέψτε με, αυτό είναι με την πρώτη ματιά.

Για την αναπαράσταση αριθμών σε έναν μικροεπεξεργαστή χρησιμοποιείται δυαδικό σύστημα αριθμών.
Σε αυτήν την περίπτωση, οποιοδήποτε ψηφιακό σήμα μπορεί να έχει δύο σταθερές καταστάσεις: «υψηλό επίπεδο» και «χαμηλό επίπεδο». Στο σύστημα δυαδικών αριθμών, δύο ψηφία χρησιμοποιούνται για την αναπαράσταση οποιουδήποτε αριθμού, αντίστοιχα: 0 και 1. Αυθαίρετος αριθμός x=a n a n-1 ..a 1 a 0 ,a -1 a -2 …a -mθα γραφεί σε δυαδικό σύστημα αριθμών ως

x = a n ·2 n +a n-1 ·2 n-1 +…+a 1 ·2 1 +a 0 ·2 0 +a -1 ·2 -1 +a -2 ·2 -2 +…+a -m ·2 -m

Οπου ένα i— δυαδικά ψηφία (0 ή 1).

Οκταδικό σύστημα αριθμών

Στο σύστημα οκταδικών αριθμών, τα βασικά ψηφία είναι οι αριθμοί από το 0 έως το 7. 8 χαμηλής τάξης συνδυάζονται σε ένα υψηλής τάξης.

Δεκαεξαδικό σύστημα αριθμών

Στο δεκαεξαδικό σύστημα αριθμών, τα βασικά ψηφία είναι οι αριθμοί από το 0 έως το 15 συμπεριλαμβανομένων. Για να ορίσετε βασικά ψηφία μεγαλύτερα από 9 με ένα σύμβολο, εκτός από τους αραβικούς αριθμούς 0...9 στο δεκαεξαδικό σύστημα αριθμών, χρησιμοποιούνται γράμματα του λατινικού αλφαβήτου:

10 10 = A 16 12 10 = C 16 14 10 = E 16
11 10 = B 16 13 10 = D 16 15 10 = F 16.

Για παράδειγμα, ο αριθμός 175 10 στο δεκαεξαδικό σύστημα αριθμών θα γραφτεί ως AF 16. Πραγματικά,

10·16 1 +15·16 0 =160+15=175

Ο πίνακας δείχνει αριθμούς από το 0 έως το 16 σε δεκαδικά, δυαδικά, οκταδικά και δεκαεξαδικά συστήματα αριθμών.

Δεκαδικός Δυάδικος Οκτάεδρος Δεκαεξαδικό
0 0 0 0
1 1 1 1
2 10 2 2
3 11 3 3
4 100 4 4
5 101 5 5
6 110 6 6
7 111 7 7
8 1000 10 8
9 1001 11 9
10 1010 12 ΕΝΑ
11 1011 13 σι
12 1100 14 ντο
13 1101 15 ρε
14 1110 16 μι
15 1111 17 φά
16 10000 20 10

Δυαδικές-οκταδικές και δυαδικές-δεκαεξαδικές μετατροπές

Το δυαδικό σύστημα αριθμών είναι βολικό για την εκτέλεση αριθμητικών πράξεων με χρήση υλικού μικροεπεξεργαστή, αλλά δεν είναι βολικό για την ανθρώπινη αντίληψη επειδή απαιτεί μεγάλο αριθμό ψηφίων. Ως εκ τούτου, στην τεχνολογία των υπολογιστών, εκτός από το δυαδικό σύστημα αριθμών, τα οκταδικά και δεκαεξαδικά συστήματα αριθμών έχουν χρησιμοποιηθεί ευρέως για μια πιο συμπαγή αναπαράσταση αριθμών.

Τα τρία ψηφία του οκταδικού συστήματος αριθμών υλοποιούν όλους τους πιθανούς συνδυασμούς οκταδικών ψηφίων στο δυαδικό σύστημα αριθμών: από 0 (000) έως 7 (111). Για να μετατρέψετε έναν δυαδικό αριθμό σε οκταδικό, πρέπει να συνδυάσετε τα δυαδικά ψηφία σε ομάδες των 3 ψηφίων (τριάδες) προς δύο κατευθύνσεις, ξεκινώντας από το δεκαδικό διαχωριστικό. Εάν είναι απαραίτητο, πρέπει να προσθέσετε ασήμαντα μηδενικά στα αριστερά του αρχικού αριθμού. Εάν ένας αριθμός περιέχει ένα κλασματικό μέρος, τότε στα δεξιά του μπορείτε επίσης να προσθέσετε ασήμαντα μηδενικά μέχρι να συμπληρωθούν όλες οι τριάδες. Κάθε τριάδα αντικαθίσταται στη συνέχεια από ένα οκταδικό ψηφίο.

Παράδειγμα: Μετατρέψτε τον αριθμό 1101110.01 2 σε οκταδικό σύστημα αριθμών.

Συνδυάζουμε δυαδικά ψηφία σε τριάδες από δεξιά προς τα αριστερά. Παίρνουμε

001 101 110,010 2 = 156,2 8 .

Για να μετατρέψετε έναν αριθμό από οκταδικό σε δυαδικό, πρέπει να γράψετε κάθε οκταδικό ψηφίο σε δυαδικό κώδικα:

156,2 8 = 001 101 110,010 2 .

Τα τέσσερα ψηφία του δεκαεξαδικού συστήματος αριθμών υλοποιούν όλους τους πιθανούς συνδυασμούς δεκαεξαδικών ψηφίων στο δυαδικό σύστημα αριθμών: από 0 (0000) έως F(1111). Για να μετατρέψετε έναν δυαδικό αριθμό σε δεκαεξαδικό, πρέπει να συνδυάσετε τα δυαδικά ψηφία σε ομάδες των 4 ψηφίων (τετράδια) προς δύο κατευθύνσεις, ξεκινώντας από το δεκαδικό διαχωριστικό. Εάν είναι απαραίτητο, πρέπει να προσθέσετε ασήμαντα μηδενικά στα αριστερά του αρχικού αριθμού. Εάν ο αριθμός περιέχει ένα κλασματικό μέρος, τότε στα δεξιά του πρέπει επίσης να προσθέσετε ασήμαντα μηδενικά μέχρι να συμπληρωθούν όλα τα σημειωματάρια. Κάθε τετράδα αντικαθίσταται στη συνέχεια με ένα δεκαεξαδικό ψηφίο.

Παράδειγμα: Μετατρέψτε τον αριθμό 1101110.11 2 σε δεκαεξαδικό σύστημα αριθμών.

Συνδυάζουμε δυαδικά ψηφία σε τετράδια από δεξιά προς τα αριστερά. Παίρνουμε

0110 1110.1100 2 = 6E,C 16 .

Για να μετατρέψετε έναν αριθμό από δεκαεξαδικό σε δυαδικό, πρέπει να γράψετε κάθε δεκαεξαδικό ψηφίο σε δυαδικό κώδικα.

Δεκαεξαδικός συμβολισμός ("Hex")- ένας βολικός τρόπος αναπαράστασης δυαδικών τιμών. Όπως το δεκαδικό σύστημα αριθμών έχει βάση το δέκα και το δυαδικό σύστημα έχει βάση το δύο, το δεκαεξαδικό σύστημα αριθμών έχει βάση το δεκαέξι.

Το σύστημα αριθμών βάσης 16 χρησιμοποιεί τους αριθμούς 0 έως 9 και τα γράμματα A έως F. Το σχήμα δείχνει τις ισοδύναμες δεκαδικές, δυαδικές και δεκαεξαδικές τιμές για τους δυαδικούς αριθμούς 0000 έως 1111. Βρίσκουμε ευκολότερο να εκφράσουμε μια τιμή ως ένα δεκαεξαδικό ψηφίο από τέσσερα bit

Κατανόηση Bytes

Δεδομένου ότι τα 8 bit (bytes) είναι η τυπική δυαδική ομαδοποίηση, οι δυαδικοί αριθμοί 00000000 έως 11111111 μπορούν να αναπαρασταθούν με δεκαεξαδικό συμβολισμό ως οι αριθμοί 00 έως FF. Τα προηγούμενα μηδενικά εμφανίζονται πάντα για να ολοκληρωθεί η αναπαράσταση των 8 bit. Για παράδειγμα, η δυαδική τιμή 0000 1010 σε δεκαεξαδικό θα ήταν 0Α.

Αναπαράσταση Δεκαεξαδικών Τιμών

Παρακαλώ σημειώστε:Είναι σημαντικό να διακρίνουμε τις δεκαεξαδικές τιμές από τις δεκαδικές τιμές για τους χαρακτήρες 0 έως 9, όπως φαίνεται στο σχήμα.

Οι δεκαεξαδικές τιμές συνήθως αντιπροσωπεύονται στο κείμενο με μια τιμή που προηγείται από το 0x (όπως το 0x73) ή με τη χρήση δείκτη του 16. Λιγότερο συχνά, μπορεί να ακολουθούνται από το γράμμα H, όπως το 73H. Ωστόσο, επειδή το κείμενο του δείκτη δεν αναγνωρίζεται στη γραμμή εντολών ή σε περιβάλλοντα προγραμματισμού, προηγείται το "0x" (μηδέν X) στην τεχνική αναπαράσταση δεκαεξαδικών αριθμών. Επομένως, τα παραπάνω παραδείγματα θα εμφανίζονται ως 0x0A και 0x73 αντίστοιχα.

Ο δεκαεξαδικός συμβολισμός χρησιμοποιείται για την αναπαράσταση διευθύνσεων MAC Ethernet και διευθύνσεων IP Έκδοσης 6.

Δεκαεξαδικές μετατροπές

Η μετατροπή αριθμών μεταξύ δεκαδικών και δεκαεξαδικών τιμών είναι απλή, αλλά η γρήγορη διαίρεση ή πολλαπλασιασμός με το 16 δεν είναι πάντα βολική. Εάν τέτοιες μετατροπές είναι απαραίτητες, είναι συνήθως ευκολότερο να μετατρέψετε μια δεκαδική ή δεκαεξαδική τιμή σε δυαδική και στη συνέχεια να μετατρέψετε τη δυαδική τιμή σε δεκαδική ή δεκαεξαδική, ανάλογα με το τι θέλετε να λάβετε.

Με εξάσκηση, είναι δυνατό να αναγνωριστούν τα δυαδικά μοτίβα bit που αντιστοιχούν σε δεκαδικές και δεκαεξαδικές τιμές. Το σχήμα δείχνει αυτά τα μοτίβα για ορισμένες τιμές 8-bit.