[Powered by Google Translate] ROB Bowden: Pakalbėkime apie kompiliatorius.
Iki šio punkto, jūs tiesiog atspausdinti savo kodą į
kai kurie failai, išsiuntinėjo gabalus po šio didžiojo juodąją dėžę, kuri yra
Apsukite metalinis garsas, ir iš ateina savo vykdomąjį failą, kad veikia
, ką rašėte savo kodą.
Kaip magiškas, kaip, kad buvo, mes ketiname imtis arčiau
pažvelgti, kas iš tikrųjų vyksta
kai mes parengia bylą.
Taigi, ką tai reiškia, sudaryti kažką?
>> Na, pačia bendriausia prasme, tai tiesiog reiškia
transformuojant kodas parašytas vienoje
programavimo kalbos į kitą.
Bet paprastai, kai žmonės sako, kad jie sudaryti kažką, jie
reiškia, kad jie iš aukštesnio lygmens programavimui
kalba, kad žemesnio lygio programavimo kalba.
Tai gali atrodyti labai subjektyvus.
Pavyzdžiui, jūs tikriausiai ne galvoti apie C kaip aukštos
lygio programavimo kalba, bet jūs kaupia jį.
Bet visa tai santykinis.
Kaip matysime, surinkimas kodas ir galiausiai mašina
kodas, kad mes sudaryti žemyn neabejotinai yra žemesnio lygio
nei C
Nors mes Apsukite metalinis garsas šiandienos demonstravimo,
daug idėjų čia perkelti į kitus kompiliatorius.
>> Apsukite metalinis garsas, yra keturi pagrindiniai žingsniai bendras
rinkinys.
Tai yra vienas, pirminio apdorojimo atliekama Preprocesorius, du,
kompiliatorių padaryta kompiliacija, trys, montavimas
padaryti surinkėjas ir keturių,
Jungiantis susiejimas padaryti.
Ji gali būti painu, kad vienas bendras substeps
Apsukite metalinis garsas kompiliatorius yra vadinamas kompiliatorių, bet
mes gauti, kad.
Mes naudojant paprastą hello world programa, kaip mūsų pavyzdyje
per šį vaizdo įrašą.
Leiskite pažvelgti.
>> Pirmasis žingsnis yra pirminio apdorojimo.
Ką Preprocesorius daryti?
Beveik kiekvieną C programa jūs kada nors skaityti arba rašyti,
jūs naudojote kodo eilutes, prasidedančias maišos.
Aš kviesiu maišos, bet jūs taip pat gali reikalauti, kad svarų, skaičius
pasirašyti, ar aštrus.
Bet kuri tokia linija yra Preprocesorius direktyva.
Jūs tikriausiai matė, # define # include prieš, bet yra
yra kelios kad Preprocesorius pripažįsta.
Pridėkime # define mūsų hello world pavyzdys.
Dabar galime paleisti tik dėl šio dokumento procesorių.
Išlaikius clage-E vėliava, jūs nurodantysis jį paleisti
tik Preprocesorius.
Leiskite pamatyti, kas atsitiks.
Atrodo, kad Apsukite metalinis garsas tiesiog išspjauna viską,
į komandų eilutę.
, Siekiant išsaugoti šios produkcijos į naują failą pavadinimu
hello2.c, mes pridėti> hello2.c į mūsų komandą.
Dabar galime imtis mūsų apdorotų failo išvaizdą.
>> Ei, kas atsitiko su mūsų trumpą mažai programos?
Jei mes pereiti visą kelią į šį failą apačioje, mes pamatyti
kai kodas, kad mes iš tikrųjų rašė.
Atkreipkite dėmesį, kad # define dingo ir visi vardo atvejai
buvo pakeisti, ką mes nurodyta
# define liniją.
Taigi, kas yra visų šių tikrų tipų ir funkcijos deklaracijos
failo viršuje?
Atkreipkite dėmesį, kad # define buvo ne tik Preprocesorius
direktyvos, kad mes nurodytas.
Mes taip pat turime # include stdio.h.
Taigi, visi crazy linijų iš tikrųjų tik stdio.h kopijuoti
ir įklijuoti į šį failą viršuje.
Štai kodėl header files yra tokios naudingos funkcijos
deklaracijas.
Vietoj būtinybės kopijuoti ir įklijuoti funkcijos
deklaracijos jūs planuojate naudojant failo viršuje
Preprocesorius nukopijuoti ir įklijuoti juos iš antraštės
failą.
>> Dabar, kad mes padaryti išankstinio apdorojimo, mes pereiti į
rinkinys.
Priežastis, kodėl mes vadiname šį žingsnį rengimo, nes tai yra
Apsukite metalinis garsas iš tiesų nėra jo sudarant nuo C žingsnis
surinkimas kodas.
Siekiant turėti Apsukite metalinis garsas parengia bylą surinkimo, bet
tęsti ne toliau, perduoti jį-S vėliava
į komandų eilutę.
Paimkime pažvelgti į susirinkimo
byla, kad buvo išvesti.
Atrodo, kad gana kita kalba.
Asamblėja kodas yra labai procesorius specifinis.
Šiuo atveju, nes CS50 prietaisas veikia
virtualus x86 procesorius, tai x86 surinkimas kodas.
Labai mažai žmonių rašyti tiesiai į surenkant kodą šių dienų,
bet kiekvienas jūs kada nors parašyti C programa bus transformuota
surinkimas.
Vėlgi, mes vadiname šį žingsnį skompilowaniem C į surinkimo
nes mes ketiname iš aukštesnio lygio į žemesnio lygio
programavimo kalba.
>> Ką daro surinkimas mažesnį nei c?
Na, surinkimas, mes labai ribotas, ką mes galime padaryti.
Yra Ne, jei, o ', už tai, ar bet kokios rūšies kilpos.
, Bet jūs galite atlikti tuos pačius dalykus, kad šie kontrolė
struktūros pasiūlyti naudojant ribotus veiksmus, kad
surinkimas iš tiesų suteikia.
Tačiau pamatyti, kaip mažas surinkimas iš tiesų yra, eikime
dar vieną žingsnį mūsų rengimo, montavimas.
Tai surinkėjas darbą paversti surinkimo kodą
į objektą ar kompiuterinio kodo pavidalu.
Atminkite,, kad surinkėjas nėra išėjimo surinkimas;
o, ji užima surenkant ir išėjimai kompiuterinio kodo pavidalu.
Mašina kodas yra faktinis 1 ir 0, kad CPU gali
suprasti, nors mes vis dar liko darbo Odrobineczkę
prieš mes galime paleisti mūsų programą.
Leiskite surinkti mūsų surinkimo kodą artimųjų
Apsukite metalinis garsas-c vėliava.
Dabar pažiūrėkime, kas surinkto byloje.
>> Gerai, kad ne padėti mums labai daug.
Atminkite, kad mašina kodas yra vienetų ir nulių, kad
jūsų kompiuteris gali suprasti.
Tai nereiškia, kad tai lengva mums suprasti.
Taip tiksliai, kaip žemo lygio, surinkimas?
Tai beveik identiškas objekto kodo.
Ėjimas nuo surinkimo iki objekto kodas yra daug daugiau
kaip transformacijos vertimas, kuris yra, kodėl
gali apsvarstyti surinkėjo
padaryti jokios faktinės sudarinėjusiems.
Tiesą sakant, tai gana lengva rankiniu būdu versti iš
surinkimas į mašininiu kodu.
Žiūri pagrindinės funkcijos surinkimo, kad pirmoji eilutė
atsitinka atitinka šešioliktainių 0x55.
Dvejetainiu, kad 1.010.101.
Antroji eilutė atsitinka, kad atitiktų šešioliktainis 0x895.
Ir kitą, 0x56.
Atsižvelgiant į gana paprasta lentelė, galite išversti
surinkimas į kodą, kad mašinos gali suprasti per.
>> Taigi čia vienas likęs žingsnis
rinkinys, kuris yra susieti.
Susiejimas apjungia objektų failų krūva į vieną didelį failą
, kad jūs iš tikrųjų galite atlikti.
Susiejimas yra pati sistema priklauso nuo.
Todėl paprasčiausias būdas gauti Apsukite metalinis garsas tiesiog susieti objektą
failus kartu yra skambinti Apsukite metalinis garsas apie visus failus, kurie
norite susieti kartu.
Jei nurodysite O failus, tada jis nebus būtinybės perdirbti,
kaupti, ir surinkti visus savo kodą.
Leiskite mesti matematinę funkciją į mūsų bylą, todėl mes turime
ką susieti.
Dabar tegul kaupia jį atgal į objekto kodo ir
skambinti Apsukite metalinis garsas apie jį.
Oi.
Kadangi mes matematinę funkciją, turime susieti
matematikos biblioteka-lm.
>> Jei norime sujungti krūva o failai, kad mes
parašė mūsų pačių, mes norime tiesiog nurodyti juos visus
komandų eilutę.
Apribojimas yra tai, kad tik vienas iš šių failų turi
iš tikrųjų nurodyti pagrindinę funkciją, arba kitas
todėl vykdomąjį negalėjo žinoti, kur pradėti
paleisti savo kodą.
Koks yra skirtumas tarp nurodant failą, kurį norite susieti
-l, o tiesiog nurodant failą tiesiogiai?
Nieko.
Tai tiesiog, kad Apsukite metalinis garsas atsitinka, tiksliai žinoti, ką failą
kažkas panašaus-LM atsitinka kreiptis į.
, Jeigu jūs žinojo, kad byla sau, galite nurodyti jos
aiškiai.
Tiesiog neužmirškite, kad visi-l vėliavos turi ateiti pabaigoje
savo klientų paklausą.
>> Ir kad viskas yra į jį.
Kai jūs tiesiog paleisti Apsukite metalinis garsas kai kurių failų, tai yra, ką ji
iš tikrųjų daro.
My name is Rob Bowden, ir tai yra CS50.