View Full Version : Assembly
Τι είναι αυτό ρε παιδιά που κάνει αυτήν την γλώσσα μηχανής τόσο απρόσιτη απο όλες τις άλλες γλώσσες προγραμματισμού?
Ποιά είναι δηλαδή η διαφορά της με τις άλλες γλώσσες?
Κανείς δηλαδή δεν μπορεί να την μάθει και γιατί ?
Με τις άλλες γλώσσες είναι σαν να προσπαθείς να πιάσεις κουβέντα με Κινέζο με την βοήθεια διερμηνέα. Σπαστικό μεν αλλά η κουβέντα θα γίνει.
Με την Assemply είναι σαν να αποφασίζεις να πιάσεις κουβέντα με Κινέζο αλλά μαθαίνοντας πρώτα Κινέζικα. Η συζήτηση θα είναι σαφώς καλύτερου επιπέδου και η συννενόηση-κουβέντα ποιο γρήγορη αλλά άντε να μάθεις Κινέζικα.... ΒΑΣΑΝΟ.
circular
27-03-2005, 13:51
LOL Γιάννη, το έθεσες σε καλή βάση. Το να γράψει κανείς assembly σημαίνει οτι ξέρει ακριβώς τις δυνατότητες του επεξεργαστή στον οποίο στοχεύει και του δίνει απευθείας εντολές. GERORG έχεις δει ποτέ πρόγραμμα σε assembly? Για να πάρεις μια ιδέα δες αυτή τη μέθοδο που προσθέτει 2 32μπιτους αριθμούς και στοχεύει σε χ86 επεξεργαστές (συγκεκριμένα σε Pentium) (Ο κώδικας προέρχεται από τη βιβλιοθήκη κρυπτογραφίας του Wei Dai)
static __declspec(naked) word __fastcall Add(word *C, const word *A, const word *B, unsigned int N)
{
__asm
{
push ebp
push ebx
push esi
push edi
mov esi, [esp+24] ; N
mov ebx, [esp+20] ; B
// now: ebx = B, ecx = C, edx = A, esi = N
sub ecx, edx // hold the distance between C & A so we can add this to A to get C
xor eax, eax // clear eax
sub eax, esi // eax is a negative index from end of B
lea ebx, [ebx+4*esi] // ebx is end of B
sar eax, 1 // unit of eax is now dwords; this also clears the carry flag
jz loopend // if no dwords then nothing to do
loopstart:
mov esi,[edx] // load lower word of A
mov ebp,[edx+4] // load higher word of A
mov edi,[ebx+8*eax] // load lower word of B
lea edx,[edx+8] // advance A and C
adc esi,edi // add lower words
mov edi,[ebx+8*eax+4] // load higher word of B
adc ebp,edi // add higher words
inc eax // advance B
mov [edx+ecx-8],esi // store lower word result
mov [edx+ecx-4],ebp // store higher word result
jnz loopstart // loop until eax overflows and becomes zero
loopend:
adc eax, 0 // store carry into eax (return result register)
pop edi
pop esi
pop ebx
pop ebp
ret 8
}
}
kagelar34
27-03-2005, 16:01
Γιάννη ωραίο παράδειγμα!λολ
Πάντως αν θέλει κανείς να μάθει assembly δεν ξεκινά από pentium αλλά από κανα pic
Ξεκίνα καλύτερα από κανέναν mips. Σημασία έχει να καταλάβεις πως δουλεύει η assembly.
Είναι λίγο παράξενο να αντιληφθείς την φιλοσοφία της...
Πραγματικά όμως για εμένα ήταν ευχαρίστηση να προγραμματίζω σε assembly.
Μας έχετε τρελάνει τι είναι ρε παιδιά πάλι το mips ?
circular προς το παρόν πήρα ένα βιβλίο που κάνει εισαγωγή
στον προγραμματισμό και ξεκινάει με την Liderty Basic λογικά είναι
γνωστή αυτή η γλώσσα που λέω για σας.....
Ποια είναι η γνώμη σας βοηθάει για ξεκίνημα?
svizi και circular για να γράφετε Assembly μάλλον είστε προγραμματιστές έτσι?
Πόσα χρόνια ασχολήστε με τον προγραμματισμό?
Σας ρωτάω γιατί εγώ δεν είμαι προγραμματιστής και θέλω να δω αν θα μπορέσω να τα καταφέρω....(ε!!! οχι για Assembly για άλλες γλώσσες μιλάω μη τρελαθούμε)
circular
28-03-2005, 12:54
GERORG μέχρι πριν από 5.5 χρόνια που μπήκα στο πανεπιστήμιο δεν είχα ιδέα από υπολογιστες ή προγραμματισμό, ήμουν συνέχεια με ένα κολλητήρι στο χερι. Ωστόσο πριν απο κανα μήνα τελειώσα την διπλωματική για το μεταπτυχιακό μου η οποία ήταν μια εφαρμογή με συνολικά λίγο πάνω από 100.000 γραμμές κώδικα. Οπότε μην ανησυχείς, αν ασχοληθείς λιγάκι σοβαρά σε κανα χρόνο θα μπορείς να γράφεις τα προγράμματα που θες και μετά από εμπειρία 3-4 χρόνων θα μπορείς να είσαι ένας καλός προγραμματιστής. Εγώ δεν ασχολούμαι με assembly - παρά μόνο ελάχιστα σε μικροελεγκτές της ATMEL για ρομποτάκια.
Κατά τη γνώμη μου αν θες να γίνεις προγραμματιστής ξεκίνα με C/C++, μετά θα μπορέσεις να μεταπηδήσεις σε οποιαδήποτε σχεδόν γλώσσα με πολύ μικρό learning curve.
DarthMoul
28-03-2005, 13:18
Οι mips είναι από τους πρώτους risc επεξεργαστές που εμφανήστηκαν στα τέλη της δεκαετίας του 80. Μαζί με τον alpha είναι από τους πλέον ευλαβείς risc επεξεργαστές με αποτέλεσμα ο κώδικας μηχανής του και κατά συνέπεια η assembly να είναι σχετικά απλή και εύκολη. Σήμερα τους χρησιμοποιεί ακόμα η SGI για τις δικές της μηχανές. Από το 2006 η παραγωγή του σταματάει και θα αντικατασταθεί από τον itanium.
kagelar34
28-03-2005, 18:28
ελάχιστα σε μικροελεγκτές της ATMEL για ρομποτάκια.
Έχεις κανα project, με κανα AVR ή τίποτα άλλο?
Να δοκιμάσεις και την MAXIM (Dallas electronics κλπ) που στέλνει και δείγματα αν αποφασίσεις να ασχοληθείς με τέτοια.
Τι μεταπτυχιακό ή τι διπλωματική αν επιτρέπεται ?
Εξακολουθώ να πιστεύω πως η assembly είναι εύκολη γλώσσα απλώς είναι διαφορετική για κάθε μηχάνημα
assembly ενός μηχανήματος μπορείς να την μάθεις σε μια μέρα ενώ C++ με τίποτα
assembly είναι τρόπος σκέψης και όχο γλώσσα προγραμματισμου
Αν θελεις μπορεις να βρεις ενα προγραμμα που λέγεται TRN το οποιο το χρησιμοποιούνε στο μετσόβιο και στο αριστοτέλειο για εκπαιδευτικούς σκοπους.
kagelar34
28-03-2005, 19:16
Αν θελεις μπορεις να βρεις ενα προγραμμα που λέγεται TRN το οποιο το χρησιμοποιούνε στο μετσόβιο και στο αριστοτέλειο για εκπαιδευτικούς σκοπους.
αυτό σε ποιόν πήγαινε ?Υπάρχει δλδ περίπτωση να με ενδιαφέρει?
circular
28-03-2005, 20:58
Έχεις κανα project, με κανα AVR ή τίποτα άλλο?
Να δοκιμάσεις και την MAXIM (Dallas electronics κλπ) που στέλνει και δείγματα αν αποφασίσεις να ασχοληθείς με τέτοια.
Τι μεταπτυχιακό ή τι διπλωματική αν επιτρέπεται ?
Εξακολουθώ να πιστεύω πως η assembly είναι εύκολη γλώσσα απλώς είναι διαφορετική για κάθε μηχάνημα
assembly ενός μηχανήματος μπορείς να την μάθεις σε μια μέρα ενώ C++ με τίποτα
assembly είναι τρόπος σκέψης και όχο γλώσσα προγραμματισμου
Έχω ένα φίλο στη Γερμανία ο οποίος φτιάχνει ρομποτάκια για διάφορα πανεπιστήμια (τελευταία έστειλε ένα στην Ιαπωνία) και ασχολείται αποκλειστικά με ATMEL. Με AVR έχω παίξει γράφοντας προγραμματάκια σε C αλλά τίποτα το εξεζητημένο, δυστυχώς δεν βρήκα χρόνο αλλά ελπίζω να ασχοληθώ στο μέλλον (σκέφτομαι να κατασκευάζω modules για τα ρομποτ αυτού του φίλου).
Με τσιπάκια της MAXIM έχω φτιάξει διάφορα πραγματάκια, πχ θερμόμετρα για τον υπολογιστή, μετρητές στροφών ανεμιστήρων, φορτιστές για μπαταρίες ΝιΜΗ κλπ... και θέλω να ασχοληθώ γενικά με τέτοια ηλεκτρονικά περισσότερο στο μέλλον.
Τελείωσα το Μεταπτυχιακό Πρόγραμμα στα Πληροφοριακά Συστήματα του Οικονομικού Πανεπιστημιου Αθήνας (ΑΣΟΕΕ) (Σήμερα παρέδωσα το hard copy)
Αφορούσε στην κατασκευή ενός κατανεμημένου web crawler που στοχεύει στη γρήγορη συλλογή και ευρετηρίαση του ελληνικού web με σκοπό την υποστήριξη της λειτουργίας μιας ερευνητικής μηχανής αναζήτησης που χρησιμοποιείται για πειράματα με αλγορίθμους εξατομίκευσης (personalization)
Aseembly μπορεί να μαθεις σε μια μέρα αλλά αποκλείεται σε μια μέρα να καταφέρεις να γράψεις οποιοδήποτε πρόγραμμα που να δουλεύει σωστά ή γρήγορα. Τουλάχιστον αυτό μου λέει η εμπειρία μου σε x86 assembly.
Η assembly παντως ειναι χρησιμη σε time critical εφαρμογες για τον πυρηνα της εφαρμογης (κομματια κωδικα που εκτελουνται πολυ συχνα). Εγω στη διπλωματικη μου (επεξεργασια εικονας σε ενα DSP) ειχα χρησιμοποιησει assembly κατα κορον. Η διαφορα απο την υλοποιηση σε "σκετη" C ήταν της ταξης του 3. Επισης χρησιμοποιώντας assembly πρωτοείδα και χρησιμοποιησα τις μεθοδους βελτιστοποιησης κωδικα που παρουσιαζει στα sticky ο Darthmoul (και ήταν και ο λογος που χρησιμοποιησα assembly τελικα)
DarthMoul
03-04-2005, 17:40
Αν έκανες software pipelining σε assembly σου αξίζουν συγχαρητήρια!!! :109:
Αν και δεν νομίζω να κέρδισες τίποτα σημαντικό σε x86. Τα tips πάντως είναι ιδιαίτερα αποτελεσματικά και σε C. Πολλές φορές η χρήση τους, κάνει την χρήση της assembly εντελώς περιττή αφού οι διαφορές είναι αμελητέες.
Ηταν λιγο abc η εφαρμογη των optimizations, documentation για development στον επεξεργαστη, ξενυχτια, πολλέεεες δοκιμες και όλα σιγα σιγα ερχονται στην θεση τους. Ο επεξεργαστής δεν ήταν general purpose (x86) ήταν ένας dsp (multiply & accumulate, γι αυτο και τον χρησιμοποιησαμε γιατι θελαμε εφαρμογη fft). Αυτο που ουσιαστικά έκανα ήταν να "αναδιαμορφώσω" τον κώδικα ώστε να πιανουν καλυτερα τα optimizations του compiler. Αφου πρωτα εγραψα τον κωδικα σε C, μετετρεψα τα αργα κομματια σε "linear assembly". Τελευταιο σταδιο είναι η handwritten assembly που εχεις όλο τον ελεγχο πλεον... Για δες τα θυμαμαι ακομα!!!
GERORG μέχρι πριν από 5.5 χρόνια που μπήκα στο πανεπιστήμιο δεν είχα ιδέα από υπολογιστες ή προγραμματισμό, ήμουν συνέχεια με ένα κολλητήρι στο χερι. Ωστόσο πριν απο κανα μήνα τελειώσα την διπλωματική για το μεταπτυχιακό μου η οποία ήταν μια εφαρμογή με συνολικά λίγο πάνω από 100.000 γραμμές κώδικα. Οπότε μην ανησυχείς, αν ασχοληθείς λιγάκι σοβαρά σε κανα χρόνο θα μπορείς να γράφεις τα προγράμματα που θες και μετά από εμπειρία 3-4 χρόνων θα μπορείς να είσαι ένας καλός προγραμματιστής. Εγώ δεν ασχολούμαι με assembly - παρά μόνο ελάχιστα σε μικροελεγκτές της ATMEL για ρομποτάκια.
Κατά τη γνώμη μου αν θες να γίνεις προγραμματιστής ξεκίνα με C/C++, μετά θα μπορέσεις να μεταπηδήσεις σε οποιαδήποτε σχεδόν γλώσσα με πολύ μικρό learning curve.
Ήθελα να σε ρωτήσω γιατί μου είχες πει τότε να ξεκινήσω με C++ γιατί εχώ ακούσει οτι είναι δύσκολη γλώσσα και στο λέω αυτό γιατί ξεκίνησα με VB.6 και σήκωσα τα χέρια ψηλά....είναι πιστέυω πόλυ δυσκολη γλώσσα τι λες και εσύ φίλε?
circular
15-04-2005, 20:55
Ξέχνα τη VB6, έχει πεθάνει εδώ και χρόνια και δεν έχει νόημα να αναπτύσεις νέες εφαρμογές σε αυτήν. Αν θες να δεις τη νέα έκδοσή της (VB.NET) η Microsoft κάνει ένα σεμινάριο την επόμενη Πέμπτη με δωρεάν είσοδο για να δεις πως μπορείς να κάνεις αυτή τη μετάβαση. Ο λόγος που σου είπα να ασχοληθείς με C++ είναι οτι σου ανοίγει το δρόμο για να προχωρήσεις σε οποιαδήποτε γλώσσα χρειαστεί και εκτός αυτού μπορείς να ξεκινήσεις αργά με procedural programming και σιγά σιγά να μπεις σε object oriented.
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.