[Powered by Google Translate] Rob Bowden: Le të flasim për hartuesit.
Deri në këtë pikë, ju keni shtypur vetëm deri kodin tuaj burim në
disa fotografi, dërgoi ato përmes këtij kuti e madhe e zezë që është
Tingëllimë, dhe nga vjen dosjen tuaj ekzekutues që e bën
pikërisht ajo që ju ka shkruajtur në kodin tuaj burim.
Si magjike si ai që ka qenë, ne jemi duke shkuar për të marrë një më afër
shikojmë se çfarë po ndodh në të vërtetë
kur përpiloni një skedar.
Pra, çfarë do të thotë për të hartuar diçka?
>> E pra, në kuptimin më të gjerë, ai thjesht do të thotë
Kodi transformuar shkruar në një
programimit gjuhë në një tjetër.
Por zakonisht kur njerëzit thonë se ata hartojnë diçka, ata
thotë se ata janë duke marrë atë nga një nivel më të lartë programimit
gjuhë të një gjuhë programimi nivelit më të ulët.
Këto mund të duket si terma shumë subjektive.
Për shembull, ju ndoshta nuk mendoj se e C si një të lartë
programimit nivel gjuhë, por ju nuk përpiloni atë.
Por kjo është e gjitha relative.
Siç do të shohim, kodi kuvendi dhe përfundimisht makinë
Kodi se ne hartimin e poshtë për të është e pamohueshme një nivel të ulët
se C.
Edhe pse ne do të jetë duke përdorur tingëllimë në demonstratën e sotme, një
Shumë prej ideve këtu kryer mbi hartuesit e tjera.
>> Për tingëllimë, ka katër hapa të mëdha në përgjithësi
hartimi.
Këto janë një, preprocessing bërë nga preprocessor, dy,
hartimi bërë nga përpiluesit, tre, montimi
bërë nga montuesit; dhe katër,
lidh bërë nga linker.
Ajo mund të jetë konfuze se një nga substeps e të përgjithshëm
Hartuesit tingëllimë quhet përpilues, por
ne do të merrni për këtë.
Ne do të jetë duke përdorur një program të thjeshtë Hello World si shembull tonë
në këtë video.
Le të marrin një sy.
>> Hapi i parë është preprocessing.
Çfarë do të bëjë preprocessor?
Në shumë e shumë çdo program C keni lexuar ndonjëherë ose me shkrim,
ju keni përdorur linjat e kodit që fillojnë me një hash.
Unë do të thërrasë atë hash, por ju mund të telefononi edhe atë paund, numri
nënshkruajë ose të mprehtë.
Çdo linjë e tillë është një direktivë preprocessor.
Ju ndoshta keni parë dhe # define # përfshijnë para, por nuk ka
janë disa më shumë se preprocessor njeh.
Le të shtoni një përshëndetje # define për shembullin tonë në botë.
Tani le të kandidojë vetëm preprocessor që ndodhen në këtë dosje.
Duke kaluar clage flamurin e-E, ju jeni udhëzuar atë për të kandiduar
vetëm preprocessor.
Le të shohim se çfarë ndodh.
Ajo duket si tingëllimë vetëm pështyn gjithçka
në rreshtin e komandave.
Në mënyrë për të shpëtuar të gjithë këtë dalje në një skedë të re të quajtur
hello2.c, ne do të append> hello2.c të komandës sonë.
Tani le të marrin një vështrim në dosjen tonë preprocessed.
>> Whoa, çfarë ka ndodhur në të shkurtër programin tonë të vogël?
Nëse ne do të shkojmë të gjithë rrugën në fund të këtij file, ne do të shohim
disa prej kodit që ne fakt ka shkruajtur.
Vini re se # define është zhdukur dhe të gjitha instancat e emrit
janë zëvendësuar me të pikërisht ajo që ne e specifikuar në
# define linjë.
Pra, çfarë janë të gjitha këto typedefs dhe deklaratat funksion
në krye të file?
Vini re se # define nuk ishte vetëm preprocessor
direktiva që ne specifikuar.
Ne gjithashtu kemi # include stdio.h.
Pra, të gjitha linjat e çmendur të vërtetë janë vetëm kopjohen stdio.h
dhe të ngjit në krye të këtij file.
Kjo është arsyeja pse fotografi header janë aq të dobishme për funksion
Deklaratat.
Në vend që të kanë nevojë të kopjoni dhe ngjisni gjitha të funksionit
Deklaratat ju planifikoni të përdorni në krye të dosjes tuaj,
preprocessor do të kopjoni dhe ngjisni ato nga header
paraqesë për ju.
>> Tani që ne jemi duke bërë preprocessing, ne shkojmë në
hartimi.
Arsyeja që ne e quajmë këtë përmbledhje hap është për shkak se kjo është
hapi ku tingëllimë në fakt nuk përpilimin e saj nga C të
Kodi kuvendi.
Në mënyrë që të ketë tingëllimë hartimin e një skedar poshtë të kuvendit, por
vazhdojnë më tej, të kalojë atë-S flamurin
në rreshtin e komandave.
Le të marrin një vështrim në kuvendin
file që u outputted.
Ajo duket si një gjuhë mjaft të ndryshme.
Kodi Kuvendi është shumë procesor specifike.
Në këtë rast, pasi që pajisja është duke CS50 në një
procesor virtual x86, ky është kodi x86 kuvendit.
Shumë pak njerëz shkruani direkt në kodin e kuvendit këto ditë,
por çdo program C ndonjëherë ju shkruani merr transformuar poshtë
në asamble.
Përsëri, ne e quajmë këtë hap hartimin C në asamble
që ne jemi duke shkuar nga një nivel më të lartë në një nivel më të ulët
gjuhë programimi.
>> Çfarë e bën nivel më të ulët se kuvendi C?
E pra, në asamble, ne jemi shumë të kufizuara në atë që ne mund të bëjmë.
Nëse nuk ka, ndërsa, për, ose sythe të çdo lloji.
Por ju mund të arrijnë të njëjtat gjëra që këto kontrolli
Strukturat ofrojnë përdorimin e operacioneve të kufizuara që
Kuvendi nuk japin.
Por për të parë se sa kuvendi i ulët niveli është me të vërtetë, le të shkojë
një hap më tej në hartimin tonë, montimi.
Kjo është puna e assembler për të transformuar kodin kuvendit
në objekt apo kod makine.
Mos harroni se assembler nuk asamblenë e prodhimit;
përkundrazi, ajo merr në asamble dhe rezultatet kod makine.
Kodi makinë është aktuale 1 dhe 0 se një CPU mund të
kuptuar, edhe pse ne ende kemi një grimë të vogël e la punën
para se të mund të drejtuar programin tonë.
Le të mblidhen kodin tonë kuvendit duke kaluar
-C tingëllimë flamur.
Tani le të shohim se çfarë është në dosjen e mbledhur.
>> E pra, kjo nuk do të na ndihmojë shumë.
Mos harroni se kod makine është se ato dhe zero
kompjuteri juaj mund të kuptoni.
Kjo nuk do të thotë se është e lehtë për ne për të kuptuar.
Pra, saktësisht se si të nivelit të ulët është kuvendi?
Kjo është pothuajse identike me kod objekt.
Duke shkuar nga asambleja për të kodit objekt është shumë më e një
Përkthimi se një transformimi, e cila është arsyeja pse
askush nuk mund të marrë në konsideratë për montues
bëni ndonjë hartimin aktuale.
Në fakt, kjo është goxha e lehtë në dorë të përkthyer nga
Kuvendi në kodin e makinës.
Duke kërkuar në asamble për një funksion kryesor, që linja e parë
ndodh që korrespondojnë me 0x55 heksadecimal.
Në binar, kjo është 1.010.101.
Linja e dytë ndodh të korrespondojnë 0x895 hexadecimal.
Dhe tjetri, 0x56.
Duke pasur parasysh një tryezë relativisht e thjeshtë, ju mund të përktheni
Kuvendi në kodin që makina mund të kuptojnë shumë.
>> Pra, nuk është një hap i mbetur në
përpilim, e cila është e lidhur.
Lidhja kombinon një bandë e dosjeve objekt në një skedar të madh
që ju në fakt mund të ekzekutojë.
Lidhja është shumë e varur nga sistemi.
Pra, mënyra më e lehtë për të marrë tingëllimë të vetëm lidhur objekt
fotografi së bashku është për të thirrur tingëllimë në të gjitha dosjet që
doni të lidhni së bashku.
Nëse ju specifikoni. Fotografi o, atëherë ajo nuk do të duhet të reprocess,
përpilojnë, dhe të mblidhen të gjithë kodin tuaj burim.
Le të hedhin një funksion të matematikës në dosjen tonë, kështu që ne kemi
diçka për të link-in
Tani le të hartojnë atë përsëri poshtë për kodin objekt dhe
telefononi tingëllimë në të.
Oops.
Që nga viti ne kemi përfshirë një funksion të matematikës, ne kemi nevojë për të lidhur në
biblioteka matematikë me-LM.
>> Nëse ne të kërkuar për të lidhur së bashku bandë e fotografi. O se ne
shkroi në vetën tonë, ne vetëm do të specifikojë ata të gjithë në
command line.
Kufizimi i vetëm është se një nga këto dosje duhet
fakt të specifikoni një funksion kryesor, ose tjetër
ekzekutueshëm rezultuar nuk do të dinë se ku të fillojë
drejtimin kodin tuaj.
Çfarë është dallimi në mes të specifikuar një skedar të lidhur në
me-l dhe vetëm duke specifikuar një fotografi direkt?
Asgjë.
Është vetëm se tingëllimë ndodh që të dini saktësisht se çfarë fotografi
diçka si-lm ndodh për t'iu referuar.
Nëse ju e dinte se dosja veten, ju mund të specifikoni atë
në mënyrë eksplicite.
Vetëm mos harroni se të gjithë-l flamujt duhet të vijnë në fund
të kërkesës së klientit tuaj.
>> Dhe kjo është e gjitha nuk është për të.
Kur ju drejtuar vetëm tingëllimë në disa fotografi, kjo është ajo që është
vërtetë për ta bërë.
Emri im është Rob Bowden, dhe kjo është CS50.