[Powered by Google Translate] ROB Bowden: Beszéljünk összeállítói.
Amíg ezen a ponton, épp most adta fel a forráskódot
fájlokat, elküldte őket a nagy fekete doboz, amely
Csenget, és ki jön a végrehajtható fájl, amely nem
pontosan mit írt a forráskódot.
A varázslatos, mint volt, megyünk, hogy közelebbről
nézd meg, mi történik valójában
amikor egy dossziét állítanak össze.
Szóval, mit is jelent fordítani valamit?
>> Nos, a legáltalánosabb értelemben, ez csak azt jelenti,
transzformáló kódot írt egy
programozási nyelvről a másikra.
De általában, amikor az emberek azt mondják, hogy fordítani valamit,
jelenti azt, hogy figyelembe azt egy magasabb szintű programozási
nyelv egy alacsonyabb szintű programozási nyelv.
Ezek tűnhet nagyon szubjektív szempontból.
Például, akkor valószínűleg nem hiszem, C, mint egy nagy
szintű programozási nyelv, de még összeállításhoz.
De minden relatív.
Mint látni fogjuk, az assembly kódot, és végül gép
kódot, amit fordítani le vitathatatlanul alacsonyabb szintű
mint C.
Bár mi fog használni csenget a mai bemutató, a
Sok az ötletek itt átvitt más fordítókkal.
>> A csengés, négy jelentős lépést a teljes
összeállítása.
Ezek egy, előfeldolgozás által végzett előfeldolgozó, két,
összeállítása által végzett a fordító, három, szerelés
által végzett assembler, és négy,
összekapcsolása által végzett linker.
Azt zavaró lehet, hogy az egyik a allépést a teljes
Zengés fordítóprogramok hívják a fordító, de a
mi lesz erre.
Mi lesz egy egyszerű hello world program a példa
egészében ezt a videót.
Vessünk egy pillantást.
>> Az első lépés a előrefutás.
Mit tesz az előfeldolgozó csinálni?
Az elég sok minden C program, amit valaha olvasott vagy írt,
már használt sornyi kódot, hogy kezdődik a hash.
Majd hívni hash, de akkor is hívni kiló, szám
jelentkezzen be, vagy éles.
Minden ilyen vonal egy előfeldolgozó irányelv.
Valószínűleg már látott # define és # include előtt, de
még néhány, hogy az előfeldolgozó felismeri.
Adjunk hozzá egy # define a mi hello world példa.
Most fut csak a előfeldolgozó az ezt a fájlt.
Átadásával clage a-E zászló, akkor utasítja, hogy fuss
csak az előfeldolgozó.
Lássuk, mi történik.
Úgy néz ki, csak csenget kiköpi mindent
a parancssorban.
Annak érdekében, hogy mentse az összes e kibocsátás egy új nevű fájlt
hello2.c, akkor fűzze> hello2.c a mi parancsot.
Most vessünk egy pillantást a előfeldolgozott fájl.
>> Hé, mi történt a mi rövid kis program?
Ha elmegyünk egészen a végére ezt a fájlt, majd meglátjuk
néhány kódot, hogy mi valójában írt.
Figyeljük meg, hogy a # define eltűnt, és minden esetben a név
váltotta fel pontosan, amit meghatározott
A # define sort.
Tehát mik ezek typedefs és funkció nyilatkozatok
tetején a fájlt?
Figyeljük meg, hogy a # define volt az egyetlen előfeldolgozó
irányelv, hogy mi megadva.
Mi is # include stdio.h.
Tehát az összes őrült vonalak valójában csak stdio.h másolt
és beilleszthetők a tetején ezt a fájlt.
Ezért fejlécfájlokat olyan hasznos funkció
nyilatkozatok.
Ahelyett szüksége, hogy másolja be az összes funkció
nyilatkozatok azt tervezi, használatával a tetején a fájl, az
előfeldolgozó másolja át őket a fejléc
fájlt.
>> Most, hogy készen vagyunk előfeldolgozás, mozgunk rá
összeállítása.
Az ok, nevezzük ezt a lépést, összeállítás, mert ez
a lépést, ha csenget azt valóban annak összeállítása a C a
assembly kóddal.
Annak érdekében, hogy csenget egy dossziét állítanak össze le a gyülekezési, hanem
folytatja tovább, add a-S flag
a parancssorban.
Vessünk egy pillantást a szerelvény
fájl, amely kimeneten.
Úgy néz ki, teljesen más nyelvet.
Assembly kód nagyon processzor egyedi.
Ebben az esetben, mivel a készülék CS50 fut
virtuális x86 processzor, ez az x86 assembly kódot.
Nagyon kevés ember levelet közvetlenül assembly kódot ezekben a napokban,
de minden C program, amit valaha levelet kap transzformált le
a szerelvény.
Ismét hívjuk ezt a lépést összeállításáért C a szerelvény
mert megyünk a magasabb szintről alacsonyabb szintre
programozási nyelv.
>> Mitől gyülekezési alacsonyabb szinten C?
Nos, összeszerelés, mi nagyon korlátozott, hogy mit tehetünk.
Nincsenek, ha a, míg van, az van, vagy hurok bármilyen.
De lehet elérni ugyanazt a dolgot, hogy ezek az ellenőrzési
struktúrákat kínálnak a korlátozott műveleteket
összeállítás nem nyújt.
De ahhoz, hogy lásd, milyen alacsony szinten összeszerelés tényleg, menjünk
egy lépéssel tovább a válogatás, összeszerelés.
Ez az assembler feladata, hogy átalakítsa a kódban
a tárgy vagy gépi kódban.
Ne feledje, hogy az assembler nem ad szerelvény;
inkább tart a gyülekezési és kimenetek gépi kódot.
Gépi kód a tényleges 1 és 0-nak, hogy a CPU képes
érthető, bár még mindig van egy apró kis munka vár ránk
mielőtt tudjuk futtatni a programot.
Tegyük össze a kódban átadásával
Csengés-c zászló.
Most nézzük meg, mi van az összeszerelt fájlban.
>> Nos, ez nem segít sokat.
Ne feledje, hogy a gépi kódot az egyesek és nullák, hogy a
a számítógép képes megérteni.
Ez nem jelenti azt, hogy könnyű megérteni.
Szóval, milyen alacsony szinten van szerelvény?
Ez közel azonos a tárgykód.
Haladva a gyülekezés tárgykód sokkal inkább egy
fordítás mint átalakulása, amely ezért
lehetne nem tekinti az assembler
végezze el a tényleges összeállítást.
Tény, hogy elég könnyű kézzel fordítson
szerelvényt gépi kódot.
Keresi a szerelvény fő funkciója, hogy az első sorban
történik, hogy az megfelel hexadecimális 0x55.
A bináris, ez 1.010.101.
A második sorban történik, hogy az megfelel hexadecimális 0x895.
És a következő, 0x56.
Mivel egy viszonylag egyszerű asztal, akkor lefordítani
szerelvényt a kódot, hogy a gépek érthető is.
>> Szóval van egy megmaradt szakaszát
összeállítása, amely összeköti.
Összekapcsolása ötvözi egy csomó tárgy fájlokat egy nagy fájlba
hogy ténylegesen végrehajtani.
Összekapcsolása nagyon rendszer függő.
Tehát a legegyszerűbb módja, hogy csenget, hogy csak csatolni objektum
fájlok együttesen felhívni csenget az összes fájlt, amely
csatolni kívánt együtt.
Ha megadja. O fájlokat, akkor nem kell újra feldolgozni,
összeállításához, és össze az összes forráskód.
Dobjunk egy matematikai függvényt a fájl, így már
valamit összekapcsolni be
Most fordítsd vissza le tárgykód és
hívják csenget rajta.
Hoppá.
Mivel benne egy matematikai függvény, meg kell összekapcsolni
a matematikai könyvtár-lm.
>> Ha volna összekapcsolni össze rakás. O fájlokat, hogy mi
írta saját, mi lenne most meg őket a
parancssorban.
A korlátozás, hogy csak egy ilyen fájlt kell
ténylegesen meg egy fő funkciója, vagy pedig a
eredő végrehajtható nem tudja, hol kezdje
fut a kódot.
Mi a különbség a meghatározó egy fájlt csatolni az
a-l és csak megad egy fájlt közvetlenül?
Semmi.
Ez csak csengés történik, pontosan tudja, mit fájl
Valami hasonló történik lm hivatkozni.
Ha tudnád, hogy a fájl magad, akkor adja meg azt
kifejezetten.
Ne feledd, hogy minden l zászlókat kell jönni a végén
a kliens kereslet.
>> És ez minden van rá.
Ha csak fuss csenget néhány kép, ez az, amit ez az
ténylegesen csinál.
A nevem Rob Bowden, és ez CS50.