desolatorXT Δημοσ. 30 Απριλίου 2007 Δημοσ. 30 Απριλίου 2007 Λοιπόν έχω τις εξής απορίες... 1)Έχω ένα pc χωρίς λειτουργικό σύστημα περασμένο μέσα του. Θέλω λοιπόν εγώ να χρησιμοποιήσω αυτό το pc. Πως θα δώσω σε αυτό εντολές? Αυτό που ενοοώ δλδ είναι, έστω ότι εγώ έχω την δυνατότητα με κάποιον τρόπο να περάσω ένα πρόγραμμα σε μια δισκέτα. Σε ποια γλώσσα θα πρέπει να είναι γραμμένο το πρόγραμμα για να το καταλάβει ο υπολογιστής? σε γλώσσα μηχανής? Εκτός αυτού όμως, πως εγώ θα "πώ" στον υπολογιστή να διαβάσει τα περιεχόμενα της δισκέτας και να τρέξει το αρχείο τάδε? Επιπλέον, έστω ότι γράφω ένα πρόγραμμα σε γλώσσα μηχανής... Πώς θα το κάνω αυτό? θα ανοίξω ένα έγγραφο κειμένου και θα αρχίσω να περνάω 0 και 1? Και άντε και με κάποιον τρόπο τα γράφω, πως θα πώ στον υπολογιστή ότι αυτή η σειρά 0 και 1 είναι εντολή, ενώ η απο δίπλα σειρά είναι ένας αριθμός? Με λίγα πώς ακριβώς γράφτηκαν οι πρώτες γλώσσες προγραμματισμού? 2)Γνωρίζω ότι τα λειτουργικά συστήματα Windowς είναι γραμμένα σε C++ (εκτός αν κάνω λάθος), γνωρίζω όμως επίσης ότι για να μπορέσει να καταλάβει το Pc μια γλώσσα προγραμματισμένου χρειάζετε και έναν αντίστοιχο μεταγλωτιστή που μεταφράζει το πρόγραμμα σε γλώσσα μηχανής... Πώς λοιπόν όταν ο υπολογιστής ξεκινάει αναγνωρίζει τα windows, και τα τρέχει? έχουν τα pc ενσωματωμένο μετταγλωτιστή για C++? έχουν κάποιες αρχικές οδηγίες στην ROM για να αναζητήσουν κάποιο συγκεκριμένο αρχείο λειτουργικού συστήματος? Αν ισχύει το δεύτερο, αυτό συνεπάγετε ότι όλα τα λειτουργικά συστήματα πρέπει να εμπεριέχουν αυτο το αρχείο? ίσως να είναι οι πιο ηλίθιες απορίες που έχετε ακούσει, αλλα anyway Αφήνω το τόπικ ανοιχτό για απαντήσεις, αλλα και για όποιον άλλον θέλει να κάνει παρόμοιες απορίες...
dark_banishing Δημοσ. 30 Απριλίου 2007 Δημοσ. 30 Απριλίου 2007 Πρέπει να υπάρχει λειτουργικό σύστημα για να μπορείς να "μιλάς" στο pc. Αν θες να υλοποιήσεις τόσο χαμηλού επιπέδου λειτουργίες δεν χρειάζεται να γράψεις σε 0 και 1, αρκεί να γράψεις ένα κομμάτι του κώδικα σε assembly. Οι εντολές έχουν συγκεκριμένη σύνταξη όπως σε όλες τις γλώσσες προφανώς. Μπορεις να γράψεις και σε notepad και όπου θες, όπως σε κάθε γλωσσα. Έχεις μπερδέψει το εξής. Φτιάχνεις ένα πρόγραμμα σε κάποια γλώσσα. Το παιρνάς από κάποιον compiler και παίρνεις το πρόγραμμα σε γλώσσα μηχανής. Τώρα πια δεν χρειάζεται να το ξαναπεράσεις από compiler για να τρέξει, το εκτελέσιμο το αναγνωρίζει ο υπολογιστής όπως είναι.
desolatorXT Δημοσ. 30 Απριλίου 2007 Μέλος Δημοσ. 30 Απριλίου 2007 Πρέπει να υπάρχει λειτουργικό σύστημα για να μπορείς να "μιλάς" στο pc. Αν θες να υλοποιήσεις τόσο χαμηλού επιπέδου λειτουργίες δεν χρειάζεται να γράψεις σε 0 και 1, αρκεί να γράψεις ένα κομμάτι του κώδικα σε assembly. Οι εντολές έχουν συγκεκριμένη σύνταξη όπως σε όλες τις γλώσσες προφανώς. Μπορεις να γράψεις και σε notepad και όπου θες, όπως σε κάθε γλωσσα. Έχεις μπερδέψει το εξής. Φτιάχνεις ένα πρόγραμμα σε κάποια γλώσσα. Το παιρνάς από κάποιον compiler και παίρνεις το πρόγραμμα σε γλώσσα μηχανής. Τώρα πια δεν χρειάζεται να το ξαναπεράσεις από compiler για να τρέξει, το εκτελέσιμο το αναγνωρίζει ο υπολογιστής όπως είναι. δλδ, άλλη ερώτηση ( ) εάν εγώ πάρω ένα αρχείο .txt και γράψω μέσα ένα πρόγραμμα σε 0 και 1, και αποθηκεύσω το αρχείο ώς .exe ο υπολογιστής θα το εκτελέσει?
citizen Δημοσ. 30 Απριλίου 2007 Δημοσ. 30 Απριλίου 2007 Οχι βεβαια. Οταν εσυ γράφεις "0" ή "1" στη πραγματικότητα γράφεις τον ASCSI χαρακτήρα 48 ή 49 (HEX 30 ή 31) δηλαδή τα bit 00110000 ή 00110001.
Bspus Δημοσ. 30 Απριλίου 2007 Δημοσ. 30 Απριλίου 2007 Για τη δευτερη ερωτηση, δες αυτα http://www.pcguide.com/ref/hdd/file/struct_Boot.htm http://www.compphix.com/xpbootprocess.html Αν και αυτο που ρωτησες για το 0 και 1 σου απαντησαν οτι δεν γίνεται, μπορεις να το πλησιασεις καπως γραφοντας σε εναν hex editor. Γραφεις χαρακτηρες σε δεκαεξαδικο, που η αντιστοιχιση τους με το δυαδικο ειναι πολυ βολικη. Πχ, το 7 ειναι το 0111, το 8 το 1000, το Α το 1010, το F το 1111 κλπ.
alkisg Δημοσ. 30 Απριλίου 2007 Δημοσ. 30 Απριλίου 2007 > δλδ, άλλη ερώτηση ( ) εάν εγώ πάρω ένα αρχείο .txt και γράψω μέσα ένα πρόγραμμα σε 0 και 1, και αποθηκεύσω το αρχείο ώς .exe ο υπολογιστής θα το εκτελέσει? Να μερικές εντολές assembly: > 1440:0100 B424 MOV AH,24 1440:0102 D0EC SHR AH,1 1440:0104 89C2 MOV DX,AX 1440:0106 86F2 XCHG DH,DL 1440:0108 D0EC SHR AH,1 1440:010A 30F6 XOR DH,DH 1440:010C FEC6 INC DH 1440:010E CD21 INT 21 1440:0110 C3 RET 1440:0111 2E DB '.' 1440:0112 48 DB 'H' 1440:0113 65 DB 'e' 1440:0114 6C DB 'l' 1440:0115 6C DB 'l' 1440:0116 6F DB 'o' 1440:0117 21 DB '!' 1440:0117 24 DB '$' Αυτές οι εντολές γράφουν το μήνυμα 'Hello!'. Αριστερά τους είναι τα νούμερα των εντολών, όχι σε δυαδικό, αλλά σε δεκαεξαδικό σύστημα, που είναι περίπου το ίδιο. Αν θες πας στην αριθμομηχανή των windows και τα μετατρέπεις στο δυαδικό. Όμως κάθε byte εκτός από δυαδικό νούμερο μπορεί να είναι και χαρακτήρας. Αν πας έναρξη » εκτέλεση » charmap, βλέπεις τους κωδικούς (ASCII ή Unicode) των χαρακτήρων. Π.χ. το γράμμα που αντιστοιχεί στον δεκαεξαδικό κωδικό 30 είναι ... το «0». Έτσι τα αντίστοιχα γράμματα για το παραπάνω πρόγραμμα assembly είναι τα εξής: > ΄$Πμ‰Β†ςΠμ0φώΖΝ!Γ.Hello!$ Το συμπέρασμα είναι ότι ΜΠΟΡΕΙΣ να γράψεις ένα πρόγραμμα από το σημειωματάριο, π.χ.: 1) αν πας στο notepad, 2) και επικολλήσεις το παραπάνω κείμενο, 3) και το αποθηκεύσεις ως test.com (όχι .txt) 4) και εκτελέσεις το test.com, 5) θα σου εμφανίσει Hello! Φυσικά διαβάζοντας τις εντολές του προγράμματος είτε σαν χαρακτήρες, είτε σε δεκαεξαδικό είτε σε δυαδικό σύστημα είναι αδύνατον να τις καταλάβεις. Χρειάζεσαι έναν disassembler για να σου δείξει το πρόγραμμα με την αρχική του μορφή, όπως φαίνεται παραπάνω.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.