[Powered by Google Translate] ROB Bowden: Se pou la pale sou konpilateur.
Jis pwen sa a, ou te jis tape moute kòd sous ou a nan
kèk dosye, voye yo nan bwat sa a gwo nwa ki se
Rezone, epi soti vini dosye ègzèkutabl ou a, ki fè sa ki
ekzakteman ki sa ou te ekri nan kòd sous ou a.
Kòm majik kòm ki te gen, nou pwal pran yon pi pre
gade a sa ki la aktyèlman pase
lè nou konpile yon dosye.
Se konsa, sa sa vle di konpile yon bagay?
>> Oke, nan sans ki pi jeneral, li jis vle di
transfòme kòd ekri nan yon sèl
pwogramasyon lang a yon lòt.
Men, anjeneral lè moun yo di yo konpile yon bagay yo, yo
vle di yo ap pran li soti nan yon pwogram nivo ki pi wo
lang nan yon lang programmation pi ba nivo.
Sa yo ka parèt tankou yon tèm trè subjectif.
Pou egzanp, pwobableman ou pa panse a C kòm yon wo
nivo pwogramasyon lang, men ou konpile li.
Men, li la tout manm fanmi.
Kòm nou pral wè, asanble kòd la ak machin evantyèlman
kòd ki nou konpile desann nan se definitivman yon pi ba nivo
pase C.
Malgre ke nou pral lè l sèvi avèk sonnen nan demonstrasyon jodi a, yon
anpil nan ide sa yo isit la pote sou nan konpilateur lòt.
>> Pou rezone, gen kat etap nan pi gwo nan an jeneral nan
konpilasyon.
Sa yo se youn, pretretman fè pa preproseseur a; de,
konpilasyon fè pa du a; twa, asanble
fè pa asanble a; ak kat,
ki lye ak fè pa Linkshere la.
Li kapab bay konfizyon wè yon sèl nan substeps yo nan an jeneral nan
Konpilateur rezone yo rele du a, men
nou pral jwenn yo sa.
Nou pral lè l sèvi avèk yon senp pwogram alo mond kòm egzanp nou an
nan tout videyo sa a.
Se pou nou pran yon gade.
>> Premye etap la se pretretman.
Ki sa ki preproseseur la fè?
Nan bèl anpil pwogram chak C ou janm li oswa ekri,
ou te itilize liy nan kòd ki kòmanse ak yon regle.
Mwen pral rele li regle, men ou ka rele tou nan li liv, nimewo
siyen, oswa byen file.
Nenpòt liy sa yo se yon direktiv preproseseur.
Ou te pwobableman wè # defini ak # enkli anvan, men gen
yo se plizyè plis ke preproseseur an rekonèt.
Se pou nou ajoute yon # defini egzanp alo mond nou an.
Koulye a, kite a kouri jis preproseseur a sou sa a dosye.
Si yo pase clage E-drapo, w ap anseye l 'bay kouri
jis preproseseur la.
Ann gade pou wè sa k ap pase.
Li sanble ke sonnen jis krache soti tout bagay
nan liy lan lòd.
Nan lòd pou konsève pou tout bagay sa yo pwodiksyon nan yon dosye nouvo rele
hello2.c, nou pral ajoute> hello2.c li te komande nou an.
Koulye a, kite a pran yon gade nan dosye preprocessed nou an.
>> Ola, sa ki te pase nan pwogram kout nou an ti kras?
Si nou ale tout wout la nan fon sa a ranpli, nou pral wè
kèk nan kòd la ke nou aktyèlman te ekri.
Remake defini nan # la ale ansanm ak tout chans pou yo non
yo te ranplase ak ekzakteman ki sa nou espesifye nan
# defini nan liy.
Se konsa, sa yo se tout bagay sa yo typedefs ak deklarasyon fonksyon
nan tèt la nan dosye a?
Remake defini nan # pa t 'preproseseur a sèlman
direktiv ke nou espesifye.
Nou menm tou nou te gen ladan yo # stdio.h.
Se konsa, tout liy yo fou yo se aktyèlman jis stdio.h kopye
ak kole nan tèt la nan sa a dosye.
Se poutèt sa dosye header yo, se pou itil pou fonksyon
deklarasyon.
Olye pou yo ki bezwen fè kopi ak keratin nan tout fonksyon an
deklarasyon yo ou fè plan sou lè l sèvi avèk nan tèt la nan dosye ou a,
preproseseur pral kopi ak keratin yo soti nan header a
pote pou ou.
>> Kounye a ke nou ap fè pretretman, nou deplase sou
konpilasyon.
Rezon ki fè nou rele sa a konpilasyon etap se paske sa a se
etap la kote rezone aktyèlman konpile li yo soti nan C rive nan
kòd asanble.
Yo nan lòd yo gen rezone konpile yon dosye desann nan asanble a, men
kontinye pa plis, pase l S la-drapo
nan liy lan lòd.
Se pou nou pran yon gade nan tout pèp la
dosye ki te outputted.
Li sanble ke byen yon lang diferan.
Asanble kòd se trè processeur espesifik.
Nan ka sa a, depi aparèy la CS50 ap kouri sou yon
processeur vityèl x86, sa a se kòd x86 asanble.
Trè kèk moun ekri dirèkteman nan kòd asanble jou sa yo,
men vin chak pwogram C ou te janm ekri transfòme desann
antre nan asanble.
Yon fwa ankò, nou rele etap sa a konpile C a antre nan asanble
depi nou pral soti nan yon pi wo nivo nan yon pi ba nivo
pwogramasyon lang.
>> Ki sa ki fè nivo asanble pi ba pase C?
Oke, nan mitan tout pèp, nou yo trè limite nan sa nou kapab fè.
Pa gen okenn si la, pandan y ap nan, pou la, oswa pasan nan nenpòt kalite.
Men, ou kapab akonpli menm bagay yo ke sa yo kontwòl
estrikti ofri lè l sèvi avèk operasyon yo limite ki
asanble fè sa ki bay.
Men, yo wè jis ki jan tout pèp ki ba nivo vrèman se, kite yo ale
yon sèl etap plis nan konpilasyon nou an, rasanble.
Li nan travay asanble a transfòme kòd la asanble
nan objè oswa kòd machin.
Sonje ke asanble a pa asanble pwodiksyon;
olye, li pran nan mitan tout pèp ak sorti kòd machin.
Kòd Machine se aktyèl 1 a la ak nan 0 ke yon CPU kapab
konprann, malgre ke nou toujou gen yon ti jan ti nan travay kite
anvan nou ka kouri pwogram nou an.
Se pou nou rasanble kòd asanble nou nan pase
Rezone c la-drapo.
Koulye a, kite a wè sa ki nan dosye a reyini.
>> Oke, ki pa kapab ede nou anpil.
Sonje ke kòd machin lan se yo menm ki ak zewo ki
òdinatè w lan ka konprann.
Sa pa vle di li fasil pou nou pou n konprann.
Se konsa, egzakteman kouman ba nivo a se tout pèp?
Li nan prèske ki idantik ak kòd objè.
Pral soti nan pèp kòd objè se pi plis nan yon
tradiksyon pase yon transfòmasyon, ki se poukisa
yon sèl pa ta ka konsidere asanble a
fè nenpòt élaboration vrè.
An reyalite, li nan trè fasil a manuelman tradui soti nan
asanble nan kòd machin.
Gade nan tout pèp la pou yon fonksyon prensipal yo, ki premye liy
k ap pase nan koresponn ak 0x55 ekzadesimal.
Nan binè, ki nan 1010101.
Liy nan dezyèm k ap pase nan koresponn ekzadesimal 0x895.
Ak pwochen, 0x56 la.
Bay yon tab relativman senp, ou ta ka tradui
asanble nan kòd la ki machin ka konprann tou.
>> Se konsa, gen nan yon sèl etap ki rete nan
konpilasyon, ki se ki lye ak.
Ki lye ak konbine yon pakèt moun sou dosye objè nan yon sèl dosye gwo
ke ou ka aktyèlman egzekite.
Ki lye ak se trè sistèm depandan.
Se konsa, fason ki pi fasil yo ka resevwa sonnen jis konekte objè
dosye yo ansanm se yo rele rezone sou tout nan dosye yo ke
ou vle konekte ansanm.
Si ou presize. O dosye, lè sa a li pa pral bezwen fè rtrete,
konpile, epi rasanble tout nan kòd sous ou a.
Se pou nou voye jete yon fonksyon matematik nan dosye nou an, konsa nou gen
yon bagay yo konekte pous
Koulye a, kite nan konpile l 'tounen desann nan kòd objè ak
rele rezone sou li.
Wouch.
Depi nou gen ladan yo yon fonksyon matematik, nou bezwen lyen an nan
matematik bibliyotèk la ak-LM.
>> Si nou te vle konekte ansanm pakèt moun sou. O dosye ke nou
te ekri sou pwòp nou an, nou ta jis presize yo tout nan a
liy lòd.
Restriksyon a se ke youn sèlman nan sa yo dosye dwe
aktyèlman presize nan yon fonksyon prensipal yo, oswa lòt moun
ki kapab lakòz ègzèkutabl pa t 'vle konnen ki kote kòmanse
kouri kòd ou a.
Ki sa ki nan diferans ki genyen ant di egzakteman kisa yon fichie nan yon lyen an nan
ak-l ak jis di egzakteman kisa yon dosye dirèkteman?
Pa gen anyen.
Se jis ke rezone k ap pase nan konnen ekzakteman ki sa dosye
yon bagay tankou-LM k ap pase nan gade nan.
Si ou te konnen ke dosye tèt ou, ou ta ka presize li
ouvètman.
Jis sonje ke nan tout-l drapo oblije vini nan fen a
de demand kliyan ou yo.
>> Epi sa a, tout gen ak li.
Lè ou jis kouri rezone sou kèk dosye, sa a se ki sa li
aktyèlman fè.
Non mwen se Rob Bowden, ak sa a se CS50.