Assembly

...συζητήσεις περί τεχνολογίας για hardware, software, υπηρεσίες, κλπ (για ubuntu ... στο Γενικά)

Συντονιστές: Geochr, ubuderix

Re: Assembly

Δημοσίευσηαπό Star_Light » 30 Ιουν 2011, 18:29

να ρωτησω κατι???? Γιατι πχ λεμε οτι ενας διαυλος διευθυνσεων μπορει να προσπελασει μεχρι και 2^32 μνημη αν ειναι 32 bit??? θελω να πω η βαση 2 μπαινει επειδη υπαρχουν 2 γραμμες read και write που ελεγχουν την κατευθυνση ροης δεδομενων στον διαυλο δεδομενων????

"Με μια μόνο γραμμή διευθύνσεων στον δίαυλο διευθύνσεων, ο επεξεργαστής μπορεί να δημιουργήσει ακριβώς 2 μοναδικές διευθύνσεις (0 και 1). "

Για αυτο το λογο βάζουμε το 2 σαν βάση???
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: Assembly

Δημοσίευσηαπό pc_magas » 30 Ιουν 2011, 19:11

ΌΧι αλλα επειδή 1 bit μπορεί να πάρει 2 τιμές το 0 και το 1. Το 2^32 θα το καταλάβεις από αυτό το απλό παράδειγμα:
πχ. 8bit άρα 8 θέσεις κάθε θέση και 1 bit. Η σειρά κάθε θέσης-bit παίζει ρόλο άλλο να έχεις την σειρά 00010000 και άλλο να έχεις το 10000000. Άρα σύμφωνα με την Πολ/κη αρχή έχεις 2*2*2*2*2*2*2*2=2^8 bit. Άρα και στο παράδειγμά σου έτσι εξηγείτε το 2^32 επειδή έχεις 32 "θέσεις" που μπορούν να πάρουν 2 τιμές.
My blog|Κυπριακή Κοινότητα Ελευθέρου Λογισμικού Λογισμικού ανοικτού Κώδικα
Γνώσεις Linux:Ποτέ αρκετές|Προγραμματισμός: Php, javascript, nodejs, python, bash |Aγγλικά:Καλά
Οι υπολογιστές μου:
Spoiler: show
Ubuntu 16.04 64 bit σεIntel(R) Pentium(R) CPU G4400 @ 3.30GHz, 16Gib Ram, 500Gib Hard Disk, και κάρτα γραφικών Nvidia Geforce GT610
Lubuntu 14.04 σε Dell Inspiron mini 10(1010) intel Atom Z500 1Gb ram και gma500 (εδώθη σε άλλον)
Kubuntu 16.04 Lenovo G70 Intel i5 Nvidia Grapgics Card, Intel Graphics card (έχει 2) με Nouveau, 16Gb RAM, 126GB SSD Σκληρό Δίσκο
Άβαταρ μέλους
pc_magas
powerTUX
powerTUX
 
Δημοσιεύσεις: 2599
Εγγραφή: 12 Απρ 2009, 18:55
Τοποθεσία: Αχαρναί Αττικής
Launchpad: pc_magas
IRC: pc_magas
Εκτύπωση

Re: Assembly

Δημοσίευσηαπό vasster » 30 Ιουν 2011, 19:57

Μία γραμμή δεδομένων ή διεύθυνσης μπορεί (σε κατάσταση εξόδου) να είναι σε υψηλή ή χαμηλή κατάσταση (π.χ. σε 1 ή 0). Μια δεύτερη γραμμή το ίδιο, αλλά αν συνδυαστούν αυτές οι δύο γραμμές μεταξύ τους, τότε μπορούν να σχηματίσουν τέσσερις (2^2) διαφορετικές καταστάσεις δηλαδή : 00 01 10 11
Αν προστεθεί μία γραμμή ακόμα (δηλαδή θα είναι συνολικά τρεις γραμμές) τότε οι πιθανοί συνδυασμοί είναι 2^3 ή 8, δηλαδή : 000 001 010 011 100 101 110 111

Οπως πιθανόν να καταλάβες, εμφανίζεται το δυαδικό μέτρημα.

Για να γίνω λίγο πιο κατανοητός θα σου δώσω ένα παράδειγμα ενός απλοϊκού υπολογιστή που θέλει να διαβάσει μία λέξη 32 μπιτ από τη μνήμη:
Για να προσπελάσει η CPU μια διεύθυνση μνήμης, πρέπει να ενεργοποιήσει (πχ να τις κάνει 1) στον δίαυλο τις αντίστοιχες γραμμές που σχηματίζουν την διεύθυνση της μνήμης που θέλει να διαβάσει και στη συνέχεια να ενεργοποιήσει κάποιες άλλες γραμμές που ειδοποιούν τον δίαυλο ότι επάνω στις γραμμές του υπάρχει μια διεύθυνση.

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

Αυτή η εργασία που περιέγραψα αντιστοιχεί σε ένα κομμάτι μιας εντολής MOV ή LD (MOVe ή LoaD) η οποία μεταφέρει μία τιμή σε ένα καταχωρητή στην CPU. Για να προγραμματίσεις λοιπόν κάτι απλό όπως είναι ένα σειριακό πρωτόκολλο για την επικοινωνία δύο περιφερειακών, πρέπει να μάθεις την γλώσσα και τις εντολές τους γιατί αλλοιώς δεν γίνεται να τα καταφέρεις. Εκεί βρίσκεται λοιπόν η assembly.

Η πραγματική γλώσσα μηχανής είναι αριθμοί. Η assembly είναι η γλώσσα που αντιστοιχεί στους αριθμούς αλλά με μνημονικές εντολές που είναι ευκολότερες να κατανοεί και να γράφει ένας άνθρωπος. Μπορείς πραγματικά να γράψεις ένα πρόγραμμα σε γλώσσα μηχανής, δηλαδή αριθμούς, (και πραγματικά κάποτε ήταν πολύ συνηθισμένο) αλλά είναι κατά πολύ ευκολότερο να κάνεις το ίδιο σε assembly. Βέβαια πρέπει να γνωρίζεις πως δουλεύει ο επεξεργαστής σου και τι εντολές υποστηρίζει, π.χ. υλοποιεί για παράδειγμα κάποια εντολή για πολλαπλασιασμό 32 bit τιμών ή πρέπει να γράψεις την ρουτίνα που κάνει τον πολλαπλασιασμό 2 32 μπιτων τιμών και επιστρέφει το 64 μπιτ αποτέλεσμα ως ένα συνδυασμό για παράδειγμα δύο τιμών. Πως υλοποιεί πράξεις με προσημασμένους αριθμούς; Εχει εντολές που είναι εγγυημένα ατομικές; Πως υλοποιεί για παράδειγμα mutexes και semaphores;

Η πολυπλοκότητα από ένα σημείο και μετά είναι μεγάλη. Βέβαια οι πιο πολλές εργασίες έχουν να κάνουν με κοινή και επαναλαμβανόμενη δουλειά γι' αυτό δημιουργήθηκε μία γλώσσα που ήταν λίγο παραπάνω από την assembly και έκανε ευκολότερη τη χαμαλοδουλειά. Ανεβαίνοντας λοιπόν ένα επίπεδο παραπάνω, συναντάμε την C. Η οποία με ανώτερες δομές όπως η for η if κλπ απλούστευσε την συγγραφή προγραμμάτων.

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

Ο compiler GCC της C, μεταφράζει το πρόγραμμα σε assembly (μπορείς να δεις αυτό το βήμα αν καλέσεις το gcc με switch -S πχ gcc -S hello.c -o hello.s) την οποία στη συνέχεια αναλαμβάνει να μεταγλωττίσει σε γλώσσα μηχανής.

Η γνώση λοιπόν της assembly δεν είναι στην αρχή απαραίτητη αλλά χωρίς αυτή δεν πρόκειται να πας πολύ μακριά. Αν ο σκοπός κάποιου είναι να γράφει μικρά προγράμματα σε κάποια script γλώσσα, απλές ή πολύπλοκες εφαρμογές για το Ιντερνέτ, εμπορικές εφαρμογές κλπ πιθανόν να μη χρειασθεί ποτέ παραπάνω γνώσεις. Αν θέλεις όμως να εμβαθύνεις και να γράψεις εφαρμογές που θα μιλούν για παράδειγμα με ένα περιφερειακό, ή ένα device driver ή τέλος πάντων να κάνεις κάτι που δεν έχει γράψει κάποιος άλλος για σένα μια βιβλιοθήκη, θα χρειασθεί να μάθεις πιο πολλά.
Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
Ubuntu 17.04 (Zesty Zapus) 4.10.0-19-generic 64bit (en_US.UTF-8, Unity ubuntu)
Intel Core i5-6500 CPU @ 3.20GHz ‖ RAM 15915 MiB ‖ MSI H170M PRO-VDH (MS-7982) - MSI MS-7982
Intel Sky Lake Integrated Graphics [8086:1912] {i915_bpo}
enp1s0: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 15) ⋮ wlx784476b5edea: 148f:5370 Ralink Technology, Corp. RT5370 Wireless Adapter
vasster
punkTUX
punkTUX
 
Δημοσιεύσεις: 253
Εγγραφή: 23 Μάιος 2010, 09:51
Εκτύπωση

Re: Assembly

Δημοσίευσηαπό pc_magas » 30 Ιουν 2011, 22:15

@vasster
Asmb χρειάζεται σε εραρμογές όπου θέλει ταχύτητα κυρίως σε επεξεργαστές ειδικού σκοπού px. microcontrollers όπου έχουν μικρό ρεπερτόριο από εντολές.

Η εφαρμογές όπως BIOS. Όσο μια επικοινωνία με περιφεριακά υπάρχουν και οι βιβλιοθήκες του λειτουργικου :D
πχ Για να κάνω μια βιβλιοθήκη να επικοινωνει με το arduino χρησιμοποίησα κατα κόρψν την termios.h και την unistd.h
My blog|Κυπριακή Κοινότητα Ελευθέρου Λογισμικού Λογισμικού ανοικτού Κώδικα
Γνώσεις Linux:Ποτέ αρκετές|Προγραμματισμός: Php, javascript, nodejs, python, bash |Aγγλικά:Καλά
Οι υπολογιστές μου:
Spoiler: show
Ubuntu 16.04 64 bit σεIntel(R) Pentium(R) CPU G4400 @ 3.30GHz, 16Gib Ram, 500Gib Hard Disk, και κάρτα γραφικών Nvidia Geforce GT610
Lubuntu 14.04 σε Dell Inspiron mini 10(1010) intel Atom Z500 1Gb ram και gma500 (εδώθη σε άλλον)
Kubuntu 16.04 Lenovo G70 Intel i5 Nvidia Grapgics Card, Intel Graphics card (έχει 2) με Nouveau, 16Gb RAM, 126GB SSD Σκληρό Δίσκο
Άβαταρ μέλους
pc_magas
powerTUX
powerTUX
 
Δημοσιεύσεις: 2599
Εγγραφή: 12 Απρ 2009, 18:55
Τοποθεσία: Αχαρναί Αττικής
Launchpad: pc_magas
IRC: pc_magas
Εκτύπωση

Re: Assembly

Δημοσίευσηαπό Star_Light » 30 Ιουν 2011, 22:24

@vasster ετρεξα την εντολη που μου ειπες αλλα δεν εγινε κατι....

Κώδικας: Επιλογή όλων
kostas@kostas-SSL:~/PROGRAMS$ gcc -S arxeio.c -o arxeio


Π.Σ Ευχαριστω και τον pc_magas βασικα δεν θελω να εμβαθυνω πολυ σε assembly γιατι παιζω και με C απλα θελω να μαθω μερικα βασικα πραγματα και 2-3 βασικες εντολες σε assembly πχ η εντολη MOV ΚΑΙ ως εκει... !!!!!!
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: Assembly

Δημοσίευσηαπό vasster » 30 Ιουν 2011, 22:41

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

Ομως assembly δεν χρειάζεται μόνο για ταχύτητα στην εκτέλεση. Πολλές φορές (πάμπολλες) η C παρότι ευέλικτη, δεν υποστηρίζει απόλυτα το ρεπερτόριο εντολών κάποιου επεξεργαστή αλλά επιτρέπει τη δημιουργία εξειδικευμένων assembly function που μπορούν αν χρησιμοποιηθούν εκεί που δε μπορεί ο compiler. Αλλο παράδειγμα είναι η συγγραφή ρουτινών διακοπών. Πρέπει να γνωρίζεις τον επεξεργαστή, τον compiler και τον assembler που θα χρησιμοποιήσεις για να κάνεις δουλειά.

Τα τελευταία χρόνια προγραμματίζω arm cortex, οι οποίοι δεν απαιτούν assembly για ρουτίνες διακοπής αλλά παρόλα αυτά, χρειάζονται ένα καλό υπόβαθρο σε προγραμματισμό.

Η assembly από μόνη της, για μια οικογένεια cpu, σε γενικές γραμμές είναι πολύ εύκολη. Συνήθως μερικές δεκάδες βασικές εντολές οι οποίες μάλιστα είναι και κατοπτρικές πχ rotate left - rotate right κλπ. Η δυσκολία έγκειται στο να μάθεις να προγραμματίζεις σε χαμηλό επίπεδο στο οποίο δεν υπάρχουν απλά όπως a = b + c, τα οποία όμως όταν μάθεις πως γίνονται, θα βοηθήσουν ώστε ποτέ πια να μην ξαναμπερδέψεις την χρήση των pointer ή του stack.

Ετσι καταλαβαίνεις το uninitialized variable, τα const, auto, static κλπ Θα μου πεις, είναι ο μόνος τρόπος; Οχι φυσικά. Αλλά η εις βάθος γνώση είναι αυτή που θα σε κάνει καλύτερο προγραμματιστή.
Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
Ubuntu 17.04 (Zesty Zapus) 4.10.0-19-generic 64bit (en_US.UTF-8, Unity ubuntu)
Intel Core i5-6500 CPU @ 3.20GHz ‖ RAM 15915 MiB ‖ MSI H170M PRO-VDH (MS-7982) - MSI MS-7982
Intel Sky Lake Integrated Graphics [8086:1912] {i915_bpo}
enp1s0: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 15) ⋮ wlx784476b5edea: 148f:5370 Ralink Technology, Corp. RT5370 Wireless Adapter
vasster
punkTUX
punkTUX
 
Δημοσιεύσεις: 253
Εγγραφή: 23 Μάιος 2010, 09:51
Εκτύπωση

Re: Assembly

Δημοσίευσηαπό vasster » 30 Ιουν 2011, 22:44

Star_Light έγραψε:@vasster ετρεξα την εντολη που μου ειπες αλλα δεν εγινε κατι....

Κώδικας: Επιλογή όλων
kostas@kostas-SSL:~/PROGRAMS$ gcc -S arxeio.c -o arxeio


Π.Σ Ευχαριστω και τον pc_magas βασικα δεν θελω να εμβαθυνω πολυ σε assembly γιατι παιζω και με C απλα θελω να μαθω μερικα βασικα πραγματα και 2-3 βασικες εντολες σε assembly πχ η εντολη MOV ΚΑΙ ως εκει... !!!!!!


πρέπει να έχεις κάποιο αρχείο κώδικα c. Αν θέλεις αντέγραψε τον παρακάτω
Κώδικας: Επιλογή όλων

/*
============================================================================
Name : hello.c
Author :
Version :
Copyright :
Description : Hello World in C, Ansi-style
============================================================================
*/

#include <stdio.h>
#include <stdlib.h>

int main(void) {
puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */
return EXIT_SUCCESS;
}


Στο δικό μου λοιπόν μηχάνημα είχε σαν έξοδο :
Κώδικας: Επιλογή όλων
.file "hello.c"
.section .rodata
.LC0:
.string "!!!Hello World!!!"
.text
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
movq %rsp, %rbp
.cfi_offset 6, -16
.cfi_def_cfa_register 6
movl $.LC0, %edi
call puts
movl $0, %eax
leave
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE0:
.size main, .-main
.ident "GCC: (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2"
.section .note.GNU-stack,"",@progbits


στο οποίο φυσικά δεν περιλαμβάνεται ο κώδικας από τα libraries που θα προστεθεί από τον linker, αλλά σου δίνει μια ιδέα πως μεταφράστηκε αυτό το μικρό πρόγραμμα. Περισσότερες οδήγίες θα βρεις στην τεκμηρίωση του compiler.
Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
Ubuntu 17.04 (Zesty Zapus) 4.10.0-19-generic 64bit (en_US.UTF-8, Unity ubuntu)
Intel Core i5-6500 CPU @ 3.20GHz ‖ RAM 15915 MiB ‖ MSI H170M PRO-VDH (MS-7982) - MSI MS-7982
Intel Sky Lake Integrated Graphics [8086:1912] {i915_bpo}
enp1s0: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 15) ⋮ wlx784476b5edea: 148f:5370 Ralink Technology, Corp. RT5370 Wireless Adapter
vasster
punkTUX
punkTUX
 
Δημοσιεύσεις: 253
Εγγραφή: 23 Μάιος 2010, 09:51
Εκτύπωση

Re: Assembly

Δημοσίευσηαπό Star_Light » 01 Ιούλ 2011, 01:55

Κώδικας: Επιλογή όλων

kostas@kostas-SSL:~/PROGRAMS$ gcc -S oeo.c -o oeo
kostas@kostas-SSL:~/PROGRAMS$ ls
a.out first module2 socket system_calls third.c
arxeio first.c module2.c socket2 system_calls.c
arxeio2 four module.c socket2.c test2
arxeio2.c four.c module.h socket.c test2.c
arxeio.c led oeo sundedemeni_lista2 test.txt
crc.c led.h oeo.c sundedemeni_lista2.c third
kostas@kostas-SSL:~/PROGRAMS$ cat oeo
.file "oeo.c"
.section .rodata
.LC0:
.string "!!!Hello World!!!"
.text
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
movq %rsp, %rbp
.cfi_offset 6, -16
.cfi_def_cfa_register 6
movl $.LC0, %edi
call puts
movl $0, %eax
leave
ret
.cfi_endproc
.LFE0:
.size main, .-main
.ident "GCC: (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5"
.section .note.GNU-stack,"",@progbits
kostas@kostas-SSL:~/PROGRAMS$


WoW .... ευχαριστω!!!!!! Απλα ηθελε και μια cat!

Κώδικας: Επιλογή όλων

kostas@kostas-SSL:~/PROGRAMS$ file oeo
oeo: ASCII assembler program text


ASCII assembler program text! Καλη φαση
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: Assembly

Δημοσίευσηαπό Star_Light » 01 Ιούλ 2011, 04:53

πΑΝΤΩς ΣΥΜΦΩΝΑ ΜΕ την αρχιτεκτονικη 8086 που διαβαζω απο το βιβλιο δεν βλεπω πουθενα να υπαρχουν οι εντολες με τους καταχωρητες ... πρεπει να διαβασω δηλαδη την αρχιτεκτονικη x86_64 για να μπορεσω να καταλαβω τις εντολες του κωδικα????
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: Assembly

Δημοσίευσηαπό vasster » 01 Ιούλ 2011, 09:14

Η αρχιτεκτονική 8086 ανανφέρεται κυρίως σε 16b εντολές και καταχωρητές, για παράδειγμα αναφέρεται στον καταχωρητή ax. Στην 32b ο καταχωρητής απόκτησε μέγεθος 32 μπιτ και όνομα eax (Extendend AX) ενώ στην x86_64 μεγάλωσε σε μέγεθος και προστέθηκε πληθώρα άλλων νέων καταχωρητών. Η Intel κρατώντας συμβατότητα με τις παλαιότερες εκδόσεις. κράτησε τις παλαιές εντολές και μεγάλωσε τους καταχωρητές σταδιακά έτσι ώστε να παίζουν οι παλιότερς εφαρμογές.

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

Από την άλλη μπορεί να αναθεωρήσεις για πολλές πρακτικές προγραμματισμού που πιθανόν εφαρμόζεις σήμερα, και οι οποίες είτε δεν εκμεταλλεύονται τον επεξεργαστή στο έπακρο, είτε δουλεύουν με λάθος τρόπο. Επίσης θα μπορείς να καταλαβαίνεις αν ο compiler κάπου τα θαλασσώνει ή δεν παράγει σωστό κώδικα ή αν ο αλγόριθμος που υλοποιείς δεν αποδίδεται σωστά και να προσαρμόζεσαι ανάλογα.
Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
Ubuntu 17.04 (Zesty Zapus) 4.10.0-19-generic 64bit (en_US.UTF-8, Unity ubuntu)
Intel Core i5-6500 CPU @ 3.20GHz ‖ RAM 15915 MiB ‖ MSI H170M PRO-VDH (MS-7982) - MSI MS-7982
Intel Sky Lake Integrated Graphics [8086:1912] {i915_bpo}
enp1s0: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 15) ⋮ wlx784476b5edea: 148f:5370 Ralink Technology, Corp. RT5370 Wireless Adapter
vasster
punkTUX
punkTUX
 
Δημοσιεύσεις: 253
Εγγραφή: 23 Μάιος 2010, 09:51
Εκτύπωση

ΠροηγούμενηΕπόμενο

Επιστροφή στο Περί Τεχνολογίας