Τι είναι η γλώσσα συναρμολόγησης;

Μερικές φορές αναφέρεται ως συναρμολόγηση ή ASM, μια γλώσσα συναρμολόγησης είναι μια γλώσσα προγραμματισμού χαμηλού επιπέδου.

Τα προγράμματα γραμμένα σε γλώσσες συναρμολόγησης συντάσσονται από έναν συναρμολογητή. Κάθε assembler έχει τη δική του γλώσσα συναρμολόγησης, η οποία είναι σχεδιασμένη για μια συγκεκριμένη αρχιτεκτονική υπολογιστών.

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

Το μειονέκτημα είναι ότι όλα όσα κάνει ο υπολογιστής πρέπει να περιγράφονται ρητά, με συγκεκριμένες λεπτομέρειες. Το πλεονέκτημα είναι ότι ο προγραμματιστής έχει τον μέγιστο έλεγχο σε ό, τι κάνει ο υπολογιστής.

Γιατί είναι ASM γλώσσα "χαμηλού επιπέδου";

Η συναρμολόγηση ονομάζεται γλώσσα προγραμματισμού χαμηλού επιπέδου επειδή υπάρχει (σχεδόν) μια σχέση ενός προς ένα μεταξύ του τι λέει ο υπολογιστής να κάνει και του τι κάνει ο υπολογιστής. Γενικά, μια γραμμή ενός προγράμματος συναρμολόγησης περιέχει μια μέγιστη εντολή για τον υπολογιστή.

Πώς είναι το ASM διαφορετικό από μια γλώσσα "υψηλού επιπέδου";

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

Τα προγράμματα που γράφονται σε γλώσσες υψηλού επιπέδου δεν θα ταιριάζουν ποτέ με την πρωτογενή ταχύτητα και αποτελεσματικότητα των προγραμμάτων που συντάσσονται στη συναρμολόγηση. Παραδείγματα γλωσσών υψηλού επιπέδου περιλαμβάνουν Python, Java, JavaScript, Clojure και Lisp.

Τι είναι η γλώσσα "μεσαίου επιπέδου";

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

Τα προγράμματα γραμμένα σε γλώσσες μεσαίων επιπέδων μπορούν επίσης να εκτελεστούν, ή σχεδόν εξίσου καλά, ως προγράμματα γραμμένα στη γλώσσα συναρμολόγησης. Παραδείγματα γλωσσών προγραμματισμού μεσαίου επιπέδου περιλαμβάνουν τα C, C ++, Ada, Nim και Rust.

Είναι ASM φορητό;

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

Η φορητότητα είναι ένα από τα κύρια πλεονεκτήματα των γλωσσών υψηλού επιπέδου. Η γλώσσα προγραμματισμού C ονομάζεται συχνά "φορητή συναρμολόγηση" επειδή υπάρχουν μεταγλωττιστές C για σχεδόν κάθε σύγχρονη αρχιτεκτονική του συστήματος. Ένα πρόγραμμα γραμμένο στο C μπορεί να απαιτήσει κάποιες αλλαγές πριν να μεταγλωττιστεί σε άλλο υπολογιστή, αλλά η γλώσσα του πυρήνα είναι φορητή.

Σε γενικές γραμμές, η υψηλότερη είναι μια γλώσσα, τόσο λιγότερες αλλαγές πρέπει να γίνουν για να τρέξει σε μια άλλη αρχιτεκτονική. Οι γλώσσες χαμηλότερου επιπέδου - γλώσσα μηχανής και γλώσσα συναρμολόγησης - δεν είναι φορητές.

Παράδειγμα: Γεια σας, Κόσμος! σε συναρμολόγηση 32 bit, για Windows

Εδώ είναι "Hello, World" γραμμένο για επεξεργαστή Intel 32 bit. Θα τρέχει επίσης σε επεξεργαστή 64-bit. Θα το καταρτίσουμε και θα το εκτελέσουμε στα Windows 10.

 παγκόσμιο _main εξωτερικό τμήμα _printf .text _main: push μήνυμα κλήση _printf add esp, 4 μήνυμα μήνυμα: db 'Hello, World!', 10, 0 

Για να ξεκινήσετε, ανοίξτε το Σημειωματάριο. Αντιγράψτε και επικολλήστε τον παραπάνω κώδικα σε ένα νέο αρχείο κειμένου και αποθηκεύστε το αρχείο ως hello.asm .

Για να καταρτίσουμε τη συναρμολόγηση, θα χρησιμοποιήσουμε το NASM, το Netwide Assembler. Μπορεί να μεταφορτωθεί στο //www.nasm.us/.

 nasm -f win32 hello.asm 

Όταν εκτελείτε αυτήν την εντολή, το NASM δημιουργεί ένα αρχείο αντικειμένων. Ένα αρχείο αντικειμένου περιέχει κώδικα μηχανής, αλλά δεν είναι αρκετά εκτελέσιμο αρχείο. Το αρχείο αντικειμένου μας ονομάζεται hello.obj .

Για να δημιουργήσουμε το εκτελέσιμο, θα χρησιμοποιήσουμε την έκδοση 32-bit του MinGW (Minimal GNU for Windows) που θα παρέχει τον μεταγλωττιστή gcc. Μπορεί να μεταφορτωθεί στο //www.mingw.org/.

 gcc -o hello.exe hello.obj 
 γεια σας 
 Γειά σου Κόσμε! 

Παράδειγμα: Γεια σας, Κόσμος! σε συναρμολόγηση 64-bit, για Linux

Εδώ είναι "Hello, World" γραμμένο για επεξεργαστή Intel 64 bit. Θα το καταρτίσουμε και θα το εκτελέσουμε σε 64-bit Linux.

 external printf; η λειτουργία C printf, που καλείται τμήμα .data. Τμήμα δεδομένων, αρχικές μεταβλητές msg: db "Γεια σας, κόσμος!", 0; Η συμβολοσειρά C τερματίζεται με 0 fmt: db "% s", 10, 0; Η μορφή printf, "\ n", "0", .text; Ξεκινήστε το τμήμα κώδικα παγκόσμιο κύριο. το τυπικό σημείο εισόδου gcc κύριο:; η ετικέτα προγράμματος για το σημείο εισόδου push rbp. ορίστε το πλαίσιο της στοίβας, πρέπει να ευθυγραμμιστεί mov rdi, fmt mov rsi, msg mov rax, 0; μπορεί επίσης να είναι: xor rax, rax κλήση printf? Κλήση C λειτουργία printf pop rbp; αποκαταστήστε το stack mov rax, 0; κανονικό, χωρίς σφάλμα, επιστρέφω αξία; ΕΠΙΣΤΡΟΦΗ 

Αντιγράψτε και επικολλήστε αυτό το πρόγραμμα σε ένα νέο αρχείο που ονομάζεται hello.asm .

Στη συνέχεια, καταρτίστε το συγκρότημα με το NASM, το οποίο μπορείτε να εγκαταστήσετε με τον διαχειριστή πακέτων. Για παράδειγμα, στο Ubuntu ή στο Debian, μπορείτε να εγκαταστήσετε το NASM χρησιμοποιώντας apt:

 sudo apt ενημέρωση && sudo apt εγκατάσταση nsm 

Εκτελέστε αυτήν την εντολή για να δημιουργήσετε το αρχείο αντικειμένου σας:

 nasm -f elf64 hello.asm 

Το αρχείο αντικειμένου ονομάζεται hello.o .

Στη συνέχεια, χρησιμοποιήστε το gcc για να συνδέσετε αυτό το αρχείο αντικειμένων με τις απαραίτητες βιβλιοθήκες του υπολογιστή σας και να το μεταγλωττίσετε σε ένα εκτελέσιμο αρχείο που καλείται hello :

 gcc hello.o -o γεια 

Τέλος, εκτελέστε το εκτελέσιμο αρχείο:

 ./γεια σας 
 Γειά σου Κόσμε! 

Για αναφορά, αυτό είναι το ίδιο πρόγραμμα, γραμμένο σε C:

 #include int main () {char msg [] = "Γεια σας κόσμος \ n"; printf ("% s \ n", msg); επιστροφή 0? }} 

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

2GL, Assembler, γλώσσα χαμηλού επιπέδου, γλώσσα μηχανής, όροι προγραμματισμού