1 00:00:07,200 --> 00:00:09,100 [Powered by Google Translate] Rob Bowden: edək derleyiciler haqqında danışmaq. 2 00:00:09,100 --> 00:00:11,490 Bu baxımdan qədər, yalnız mənbə kodu qədər çap etdik 3 00:00:11,490 --> 00:00:14,260 bəzi faylları, ki, bu böyük qara qutu vasitəsilə göndəriləcək 4 00:00:14,260 --> 00:00:16,890 Cingilti, və ki, sizin faylı gəlir 5 00:00:16,890 --> 00:00:19,430 dəqiq nə sizin mənbə kodu yazdı. 6 00:00:19,430 --> 00:00:22,170 Oldu ki, sehrli kimi, biz bir daha almaq olacaq 7 00:00:22,170 --> 00:00:23,590 həqiqətən neler baxmaq 8 00:00:23,590 --> 00:00:25,220 biz bir fayl tərtib edir. 9 00:00:25,220 --> 00:00:28,580 Belə ki, nə bir şey tərtib etmək deməkdir? 10 00:00:28,580 --> 00:00:31,150 >> Yaxşı, ən ümumi mənada, yalnız deməkdir 11 00:00:31,150 --> 00:00:32,580 dəyişdirir kodu biri yazılı 12 00:00:32,580 --> 00:00:34,680 başqa dil proqramlaşdırma. 13 00:00:34,680 --> 00:00:37,550 Lakin demək adətən zaman onlar bir şey tərtib 14 00:00:37,550 --> 00:00:39,660 onlar yüksək səviyyəli proqramlaşdırma onu qəbul edirik deməkdir 15 00:00:39,660 --> 00:00:42,460 aşağı səviyyəli proqramlaşdırma dili dil. 16 00:00:42,460 --> 00:00:44,960 Bu çox subyektiv şərtlər kimi görünə bilər. 17 00:00:44,960 --> 00:00:48,090 Məsələn, yəqin ki, bir yüksək C düşünmürəm 18 00:00:48,090 --> 00:00:51,440 səviyyəli proqramlaşdırma dili, ancaq tərtib yoxdur. 19 00:00:51,440 --> 00:00:52,730 Amma bütün nisbi deyil. 20 00:00:52,730 --> 00:00:55,790 Görəcəyik ki, sərbəst toplaşmaq kodu və nəticədə maşın 21 00:00:55,790 --> 00:00:59,270 biz aşağı tərtib kod şübhəsiz aşağı səviyyədə 22 00:00:59,270 --> 00:01:00,700 C. dən çox 23 00:01:00,700 --> 00:01:03,310 Biz bu gün nümayiş cingilti istifadə edəcəyik baxmayaraq, 24 00:01:03,310 --> 00:01:06,360 burada fikir çox digər derleyiciler üzərində daşıyır. 25 00:01:06,360 --> 00:01:09,160 >> Zınqıltı üçün ümumi dörd böyük addımlar var 26 00:01:09,160 --> 00:01:10,200 tərtibi. 27 00:01:10,200 --> 00:01:15,430 Iki; Bu bir, preprocessor tərəfindən həyata preprocessing var 28 00:01:15,430 --> 00:01:19,530 derleyiciyi tərəfindən həyata tərtibi; üç, montaj 29 00:01:19,530 --> 00:01:22,010 , dörd, bu assembler tərəfindən həyata 30 00:01:22,010 --> 00:01:24,640 birləşdirən Linker tərəfindən aparılır. 31 00:01:24,640 --> 00:01:27,600 Bu çaşdırıcı ola bilər ki, ümumi və substeps biri 32 00:01:27,600 --> 00:01:30,980 Zınqıltı derleyiciler derleyiciyi adlı, lakin 33 00:01:30,980 --> 00:01:32,530 biz almaq lazımdır. 34 00:01:32,530 --> 00:01:35,050 Biz nümunə kimi bir sadə salam dünya proqramı istifadə edərək olacaq 35 00:01:35,050 --> 00:01:36,270 Bu video boyunca. 36 00:01:36,270 --> 00:01:38,380 Bir nəzər salaq. 37 00:01:38,380 --> 00:01:40,330 >> Ilk addım preprocessing edir. 38 00:01:40,330 --> 00:01:42,520 Bu preprocessor nə edir? 39 00:01:42,520 --> 00:01:45,560 Əgər oxumaq və ya yazdıq olduqca çox hər C proqramı, 40 00:01:45,560 --> 00:01:48,310 bir hash ilə başlayan kodu xətləri istifadə etdik. 41 00:01:48,310 --> 00:01:51,730 Mən bu hash zəng olacaq, ancaq siz də kilo nömrəyə zəng edə bilər 42 00:01:51,730 --> 00:01:53,280 imzalamaq və ya kəskin. 43 00:01:53,280 --> 00:01:56,840 Hər hansı belə xətti preprocessor direktiv deyil. 44 00:01:56,840 --> 00:02:00,650 Siz yəqin # əvvəl müəyyən # daxildir görünür, lakin sonra 45 00:02:00,650 --> 00:02:03,690 bu preprocessor tanıyır daha bir neçə var. 46 00:02:03,690 --> 00:02:07,340 Üzrə # bizim salam dünya misal üçün müəyyən əlavə edək. 47 00:02:07,340 --> 00:02:11,690 İndi bu fayl üzərində yalnız preprocessor run bildirin. 48 00:02:11,690 --> 00:02:16,150 Clage the-E bayrağı keçərək, onu idarə etmək üçün göstəriş edirik 49 00:02:16,150 --> 00:02:17,880 yalnız preprocessor. 50 00:02:17,880 --> 00:02:19,130 Nə görmək edək. 51 00:02:22,250 --> 00:02:24,020 Zınqıltı yalnız hər şeyi spits kimi görünür 52 00:02:24,020 --> 00:02:25,200 command line at. 53 00:02:25,200 --> 00:02:27,800 Adlı yeni fayl bu məhsulun bütün saxlamaq üçün 54 00:02:27,800 --> 00:02:33,850 hello2.c, biz komanda> hello2.c əlavə edəcəyik. 55 00:02:33,850 --> 00:02:37,800 İndi bizim preprocessed fayl nəzər salaq. 56 00:02:37,800 --> 00:02:40,810 >> Whoa, nə bizim qısa az proqram oldu? 57 00:02:40,810 --> 00:02:43,890 Biz bu faylı alt bütün yol getmək, biz görəcəksiniz 58 00:02:43,890 --> 00:02:46,070 biz həqiqətən yazdı kodu bəzi. 59 00:02:46,070 --> 00:02:49,800 Saylı müəyyən getdi edək ki, adı və bütün hallarda 60 00:02:49,800 --> 00:02:51,950 biz müəyyən dəqiq nə ilə əvəz edilmişdir 61 00:02:51,950 --> 00:02:53,590 saylı xətt müəyyən edir. 62 00:02:53,590 --> 00:02:56,530 Belə ki, bütün bu typedefs və funksiyası bəyannamələrin nə 63 00:02:56,530 --> 00:02:58,140 fayl üst? 64 00:02:58,140 --> 00:03:00,820 Saylı müəyyən yalnız preprocessor deyil Qeyd edək ki, 65 00:03:00,820 --> 00:03:02,390 biz göstərilən direktiv. 66 00:03:02,390 --> 00:03:05,280 Biz həmçinin # stdio.h daxil etmişik. 67 00:03:05,280 --> 00:03:09,560 Belə ki, crazy xətləri yalnız stdio.h sitemizi əslində 68 00:03:09,560 --> 00:03:11,810 və bu faylı üst yapıştırılabilir. 69 00:03:11,810 --> 00:03:14,110 Mövzu faylları funksiyası üçün çox faydalı Buna görə 70 00:03:14,110 --> 00:03:15,160 bəyannamələrinin. 71 00:03:15,160 --> 00:03:17,740 Əvəzində funksiyası bütün seçin və yapışdırıb ehtiyacı 72 00:03:17,740 --> 00:03:21,050 Əgər fayl üst istifadə planlaşdırırıq bəyannamələrinin ki, 73 00:03:21,050 --> 00:03:22,990 preprocessor başlığı onları seçin və yapışdırıb edəcək 74 00:03:22,990 --> 00:03:24,140 Sizin üçün fayl. 75 00:03:24,140 --> 00:03:26,480 >> İndi preprocessing tamamlayın ki, biz üzərində hərəkət 76 00:03:26,480 --> 00:03:27,680 tərtibi. 77 00:03:27,680 --> 00:03:30,725 Bu, çünki biz bu addımı tərtib zəng səbəbi 78 00:03:30,725 --> 00:03:34,130 zınqıltı həqiqətən onun C-dən tərtib etmir yerləşir addım 79 00:03:34,130 --> 00:03:35,370 toplaşmaq kodu. 80 00:03:35,370 --> 00:03:38,280 Zınqıltı toplaşmaq bir fayl aşağı tərtib var, lakin üçün 81 00:03:38,280 --> 00:03:42,030 heç bundan sonra da davam, bu keçir-S bayrağı 82 00:03:42,030 --> 00:03:43,560 command line at. 83 00:03:43,560 --> 00:03:44,790 Gəlin toplaşmaq nəzər 84 00:03:44,790 --> 00:03:47,390 fayl ki outputted edilib. 85 00:03:47,390 --> 00:03:49,740 Bu olduqca fərqli bir dil kimi görünür. 86 00:03:49,740 --> 00:03:52,660 Məclis kodu çox işlemci xarakterikdir. 87 00:03:52,660 --> 00:03:55,440 Bu halda, ildən CS50 cihaz bir çalışan 88 00:03:55,440 --> 00:04:00,470 virtual x86 prosessor, bu x86 toplaşmaq kodu. 89 00:04:00,470 --> 00:04:03,450 Çox az adam, bu gün toplantı kodu birbaşa yazmaq 90 00:04:03,450 --> 00:04:06,490 lakin heç yazmaq hər C proqram aşağı çevrilmiş olur 91 00:04:06,490 --> 00:04:07,940 toplaşmaq daxil. 92 00:04:07,940 --> 00:04:11,440 Yenə toplaşmaq daxil C tərtib bu addımı zəng 93 00:04:11,440 --> 00:04:14,170 biz daha yüksək səviyyədə bir daha aşağı səviyyədə gedir ildən 94 00:04:14,170 --> 00:04:15,480 dil proqramlaşdırma. 95 00:04:15,480 --> 00:04:17,880 >> Nə C-dən toplaşmaq aşağı edir? 96 00:04:17,880 --> 00:04:21,660 Yaxşı, sərbəst toplaşmaq, biz çox biz nə edə məhduddur. 97 00:04:21,660 --> 00:04:25,120 Heç bir varsa, olsa, var və ya loops var. 98 00:04:25,120 --> 00:04:27,560 Amma eyni şeyi yerinə yetirmək olar ki, bu nəzarət 99 00:04:27,560 --> 00:04:30,270 strukturları məhdud əməliyyatlar istifadə təklif edən 100 00:04:30,270 --> 00:04:32,350 toplaşmaq təmin edir. 101 00:04:32,350 --> 00:04:35,960 Lakin aşağı səviyyədə toplaşmaq həqiqətən yalnız necə, gidelim 102 00:04:35,960 --> 00:04:39,320 bizim tərtibi daha bir addım, montaj. 103 00:04:39,320 --> 00:04:41,890 Bu toplantının kodu çevirmək üçün assembler iş var 104 00:04:41,890 --> 00:04:44,740 obyekt və ya maşın kodu daxil. 105 00:04:44,740 --> 00:04:47,610 Bu assembler çıxış montaj deyil unutmayın; 106 00:04:47,610 --> 00:04:51,080 deyil, bu, sərbəst toplaşmaq və nəticələr maşın kodu edir. 107 00:04:51,080 --> 00:04:54,040 Maşın kodu faktiki 1 və 0-ın bir CPU olduğunu bilər 108 00:04:54,040 --> 00:04:57,290 biz hələ tərk iş kiçik bit var, baxmayaraq ki, başa düşmək 109 00:04:57,290 --> 00:04:59,380 bizim proqram run bilər. 110 00:04:59,380 --> 00:05:01,400 Gəlin keçərək bizim toplaşmaq kodu toplaşmaq 111 00:05:01,400 --> 00:05:04,080 Zınqıltı the-c bayrağı. 112 00:05:04,080 --> 00:05:06,410 İndi yığılmış fayl var nə edək. 113 00:05:06,410 --> 00:05:09,220 >> Yaxşı ki, bizə çox kömək etmir. 114 00:05:09,220 --> 00:05:11,340 Maşın kodu olanları və adet sıfır olduğunu unutmayın 115 00:05:11,340 --> 00:05:13,240 kompüter anlayarlar. 116 00:05:13,240 --> 00:05:16,080 Bu bizə anlamaq üçün asan demək deyil. 117 00:05:16,080 --> 00:05:19,160 Belə ki, sərbəst toplaşmaq dəqiq necə aşağı səviyyədədir? 118 00:05:19,160 --> 00:05:21,480 Bu obyekt kodu təxminən eyni deyil. 119 00:05:21,480 --> 00:05:24,300 Toplaşmaq olan obyekt kodu gedən bir çox daha çox 120 00:05:24,300 --> 00:05:27,540 bir transformasiya daha translation, hansı nə 121 00:05:27,540 --> 00:05:29,310 birinə assembler hesab bilər 122 00:05:29,310 --> 00:05:31,400 faktiki tərtibi yoxdur. 123 00:05:31,400 --> 00:05:34,110 Əslində, bu, əl-dan tərcümə olduqca asan 124 00:05:34,110 --> 00:05:36,050 maşın kodu montaj. 125 00:05:36,050 --> 00:05:39,040 Ilk xətti, əsas funksiyası üçün toplantıda Axtarıram 126 00:05:39,040 --> 00:05:42,100 hexadecimal 0x55 uyğun olur. 127 00:05:42,100 --> 00:05:45,470 Binar ki, 1010101 var. 128 00:05:45,470 --> 00:05:49,300 İkinci xətt hexadecimal 0x895 uyğun olur. 129 00:05:49,300 --> 00:05:51,290 Və növbəti, 0x56. 130 00:05:51,290 --> 00:05:53,730 Nisbətən sadə masa nəzərə alaraq, siz tərcümə bilər 131 00:05:53,730 --> 00:05:57,130 maşın çox anlamaq olar ki, kodu daxil montaj. 132 00:05:57,130 --> 00:05:58,810 >> Belə bir addım qalan var 133 00:05:58,810 --> 00:06:01,150 keçid olan tərtibi. 134 00:06:01,150 --> 00:06:04,530 Əlaqələndirilməsi böyük bir fayla obyekt faylları bir qom birləşdirir 135 00:06:04,530 --> 00:06:06,380 həqiqətən həyata bilər. 136 00:06:06,380 --> 00:06:08,570 Əlaqələndirilməsi çox sistem asılıdır. 137 00:06:08,570 --> 00:06:11,030 Yalnız obyekt keçid cingilti almaq üçün en asan yol 138 00:06:11,030 --> 00:06:13,920 birlikdə faylları faylları bütün cingilti zəng etmək 139 00:06:13,920 --> 00:06:15,190 Siz birlikdə keçid etmək istəyirəm. 140 00:06:15,190 --> 00:06:18,740 Siz qeyd edin. O faylları, o, reprocess ehtiyac yoxdur 141 00:06:18,740 --> 00:06:21,680 tərtib və mənbə kodu bütün toplaşmaq. 142 00:06:21,680 --> 00:06:23,960 Bizim fayla bir riyaziyyat funksiyası atmaq edək, belə ki, biz 143 00:06:23,960 --> 00:06:25,210 Daxil keçid şey 144 00:06:34,220 --> 00:06:37,010 İndi obyekt kodu geri aşağı tərtib etsinlər və 145 00:06:37,010 --> 00:06:38,260 bu cingilti çağırırıq. 146 00:06:40,560 --> 00:06:41,420 Üzr istəyirik. 147 00:06:41,420 --> 00:06:43,790 Biz bir riyaziyyat funksiyası daxil ildən, biz keçid lazımdır 148 00:06:43,790 --> 00:06:46,610 riyaziyyat kitabxana-lm. 149 00:06:46,610 --> 00:06:48,990 >> Biz dəstə birlikdə keçid istəyirdi. O faylları ki, 150 00:06:48,990 --> 00:06:51,420 öz yazıldı, biz yalnız onları bütün bilersiniz istədiyiniz 151 00:06:51,420 --> 00:06:52,460 command line. 152 00:06:52,460 --> 00:06:55,320 Məhdudlaşdırılması bu faylları yalnız bir olmalıdır edir 153 00:06:55,320 --> 00:06:57,790 əslində bir əsas funksiyası daxil və ya başqa 154 00:06:57,790 --> 00:06:59,930 nəticəsində çalıştırılabilir harada başlamaq üçün bilmək deyil 155 00:06:59,930 --> 00:07:00,910 Sizin kodu çalışır. 156 00:07:00,910 --> 00:07:03,360 Link bir fayl ifadə arasında fərq nədir 157 00:07:03,360 --> 00:07:06,600 ilə-l və yalnız birbaşa fayl ifadə? 158 00:07:06,600 --> 00:07:07,440 Heç bir şey. 159 00:07:07,440 --> 00:07:09,850 Bu yalnız cingilti dəqiq nə fayl bilmək olur ki, 160 00:07:09,850 --> 00:07:12,560 bir şey kimi-lm müraciət olur. 161 00:07:12,560 --> 00:07:14,700 Əgər fayl özünüz bilirdi varsa, siz onu müəyyən edə bilər 162 00:07:14,700 --> 00:07:15,930 aydın. 163 00:07:15,930 --> 00:07:18,990 Məhz bütün-l bayraqları sonunda gəlmək var unutmayın ki, 164 00:07:18,990 --> 00:07:20,770 Sizin müştəri tələbatının. 165 00:07:20,770 --> 00:07:22,300 >> Və buna var hamısı. 166 00:07:22,300 --> 00:07:24,940 Yalnız bəzi faylları cingilti çalıştırdığınızda, bu nə edir 167 00:07:24,940 --> 00:07:26,350 həqiqətən edir. 168 00:07:26,350 --> 00:07:29,490 My name Rob Bowden, bu CS50 edir.