1 00:00:07,200 --> 00:00:09,100 [Powered by Google Translate] راب BOWDEN: اجازه دهید بحث در مورد کامپایلرها. 2 00:00:09,100 --> 00:00:11,490 تا این مرحله، شما فقط تایپ کد منبع خود را به 3 00:00:11,490 --> 00:00:14,260 بعضی از فایل ها، آنها را از طریق این جعبه بزرگ سیاه و سفید است که فرستاده می شود 4 00:00:14,260 --> 00:00:16,890 صدای جرنگ جرنگ، و از فایل اجرایی خود را که می کند می آید 5 00:00:16,890 --> 00:00:19,430 دقیقا همان چیزی است که شما را در کد منبع خود را نوشت. 6 00:00:19,430 --> 00:00:22,170 به عنوان جادویی که بوده است، ما در حال رفتن به نزدیک تر 7 00:00:22,170 --> 00:00:23,590 نگاهی به آنچه در واقع اتفاق می افتد 8 00:00:23,590 --> 00:00:25,220 هنگامی که یک فایل را کامپایل کنید. 9 00:00:25,220 --> 00:00:28,580 پس چه معنی چیزی به کامپایل؟ 10 00:00:28,580 --> 00:00:31,150 >> خب، در کلی ترین مفهوم، آن را به حالت فقط بدان معناست 11 00:00:31,150 --> 00:00:32,580 تبدیل کد در یک نوشته شده است 12 00:00:32,580 --> 00:00:34,680 زبان های برنامه نویسی خود را به دیگری. 13 00:00:34,680 --> 00:00:37,550 اما معمولا هنگامی که مردم می گویند چیزی که کامپایل، آنها 14 00:00:37,550 --> 00:00:39,660 آنها آن را از یک برنامه نویسی سطح بالاتر 15 00:00:39,660 --> 00:00:42,460 زبان به یک زبان سطح پایین برنامه نویسی. 16 00:00:42,460 --> 00:00:44,960 این ممکن است به را مانند شرایط بسیار ذهنی به نظر می رسد. 17 00:00:44,960 --> 00:00:48,090 به عنوان مثال، شما احتمالا از C فکر می کنم نه به عنوان یک بالا 18 00:00:48,090 --> 00:00:51,440 سطح زبان برنامه نویسی است، اما شما آن را کامپایل. 19 00:00:51,440 --> 00:00:52,730 اما همه اینها نسبی است. 20 00:00:52,730 --> 00:00:55,790 همانطور که خواهیم دید، کد مونتاژ و در نهایت ماشین 21 00:00:55,790 --> 00:00:59,270 کد که ما کامپایل به پایین غیر قابل انکار یک سطح پایین تر است 22 00:00:59,270 --> 00:01:00,700 از C. 23 00:01:00,700 --> 00:01:03,310 اگر چه ما می شود با استفاده از صدای جرنگ جرنگ در تظاهرات امروز 24 00:01:03,310 --> 00:01:06,360 بسیاری از ایده های که در اینجا حمل را به کامپایلر دیگر. 25 00:01:06,360 --> 00:01:09,160 >> برای صدای جرنگ جرنگ، چهار مرحله اصلی در کلی وجود دارد 26 00:01:09,160 --> 00:01:10,200 تلفیقی. 27 00:01:10,200 --> 00:01:15,430 این یکی، پردازش انجام شده توسط پیش پردازنده، دو، 28 00:01:15,430 --> 00:01:19,530 تدوین انجام شده توسط کامپایلر سه، مونتاژ 29 00:01:19,530 --> 00:01:22,010 انجام شده توسط اسمبلر و چهار، 30 00:01:22,010 --> 00:01:24,640 ارتباط با لینکر انجام می شود. 31 00:01:24,640 --> 00:01:27,600 این ممکن است گیج کننده است که یکی از substeps کلی 32 00:01:27,600 --> 00:01:30,980 کامپایلر صدای جرنگ جرنگ کامپایلر نامیده می شود، اما 33 00:01:30,980 --> 00:01:32,530 خواهیم به آن را دریافت کنید. 34 00:01:32,530 --> 00:01:35,050 ما خواهید بود با استفاده از یک برنامه ساده سلام جهان را به عنوان مثال ما 35 00:01:35,050 --> 00:01:36,270 در سراسر این فیلم است. 36 00:01:36,270 --> 00:01:38,380 بیایید نگاهی به. 37 00:01:38,380 --> 00:01:40,330 >> اولین مرحله پردازش است. 38 00:01:40,330 --> 00:01:42,520 پیش پردازنده چه کاری انجام دهید؟ 39 00:01:42,520 --> 00:01:45,560 در تقریبا در هر برنامه C شما تا به حال خوانده ام و یا نوشته شده است، 40 00:01:45,560 --> 00:01:48,310 شما با استفاده از خط از کد را که با مخلوط شروع شده است. 41 00:01:48,310 --> 00:01:51,730 من آن را مخلوط است، اما شما همچنین ممکن است آن را به پوند، شماره 42 00:01:51,730 --> 00:01:53,280 امضاء، و یا تیز. 43 00:01:53,280 --> 00:01:56,840 هر خط از این یک دستور پیش پردازنده است. 44 00:01:56,840 --> 00:02:00,650 شما احتمالا دیده می شود # تعریف و # قبل شامل، اما وجود دارد 45 00:02:00,650 --> 00:02:03,690 چند که پیش پردازنده به رسمیت می شناسد. 46 00:02:03,690 --> 00:02:07,340 اجازه دهید اضافه کردن یک # به عنوان مثال جهان خوش آمدید ما را تعریف کنیم. 47 00:02:07,340 --> 00:02:11,690 در حال حاضر اجرا فقط پیش پردازنده بر روی این فایل بگذارید. 48 00:02:11,690 --> 00:02:16,150 با عبور clage E-پرچم، شما در حال آموزش آن را به اجرا 49 00:02:16,150 --> 00:02:17,880 فقط پیش پردازنده. 50 00:02:17,880 --> 00:02:19,130 بیایید ببینید که چه اتفاقی می افتد. 51 00:02:22,250 --> 00:02:24,020 به نظر می رسد که صدای شیپور فقط تف از همه چیز 52 00:02:24,020 --> 00:02:25,200 در خط فرمان. 53 00:02:25,200 --> 00:02:27,800 به منظور صرفه جویی در تمام این خروجی را در یک فایل جدید به نام 54 00:02:27,800 --> 00:02:33,850 hello2.c، ما می> hello2.c اضافه به فرمان ما. 55 00:02:33,850 --> 00:02:37,800 حال اجازه دهید نگاهی به در فایل preprocessed ما. 56 00:02:37,800 --> 00:02:40,810 >> اوه، چه رخ داده است به ما برنامه کوتاه مدت کمی است؟ 57 00:02:40,810 --> 00:02:43,890 اگر ما به تمام راه را به پایین از این فایل، ما را مشاهده می کنید 58 00:02:43,890 --> 00:02:46,070 برخی از کد است که ما در واقع نوشت. 59 00:02:46,070 --> 00:02:49,800 توجه کنید که تعریف # از بین رفته است و همه موارد نام 60 00:02:49,800 --> 00:02:51,950 دقیقا همان چیزی است که ما در مشخص جایگزین شده اند 61 00:02:51,950 --> 00:02:53,590 # خط را تعریف کنیم. 62 00:02:53,590 --> 00:02:56,530 پس چه هستند این همه تعریف نوعهای و اعلامیه های تابع 63 00:02:56,530 --> 00:02:58,140 در بالای فایل؟ 64 00:02:58,140 --> 00:03:00,820 توجه کنید که تعریف # پیش پردازنده نه تنها 65 00:03:00,820 --> 00:03:02,390 بخشنامه که ما مشخص شده است. 66 00:03:02,390 --> 00:03:05,280 ما همچنین # stdio.h می باشد. 67 00:03:05,280 --> 00:03:09,560 پس همه از خطوط دیوانه در واقع فقط stdio.h کپی 68 00:03:09,560 --> 00:03:11,810 و به بالا از این فایل جا به جا شده است. 69 00:03:11,810 --> 00:03:14,110 به همین دلیل فایل های هدر هستند بسیار مفید برای تابع 70 00:03:14,110 --> 00:03:15,160 آشکار. 71 00:03:15,160 --> 00:03:17,740 به جای نیاز به کپی و چسباندن همه تابع 72 00:03:17,740 --> 00:03:21,050 اظهارات شما را در بالا فایل های خود را با استفاده از برنامه، 73 00:03:21,050 --> 00:03:22,990 پیش پردازنده را کپی کنید و آنها را از هدر 74 00:03:22,990 --> 00:03:24,140 فایل برای شما. 75 00:03:24,140 --> 00:03:26,480 >> اکنون که ما در حال انجام پردازش، ما بر روی حرکت 76 00:03:26,480 --> 00:03:27,680 تلفیقی. 77 00:03:27,680 --> 00:03:30,725 دلیل ما تماس بگیرید این مجموعه گام به گام است به دلیل این است 78 00:03:30,725 --> 00:03:34,130 مرحله که در آن صدای جرنگ جرنگ در واقع تدوین آن از C به 79 00:03:34,130 --> 00:03:35,370 کد اسمبلی. 80 00:03:35,370 --> 00:03:38,280 به منظور داشتن صدای جرنگ جرنگ کامپایل یک فایل را به مونتاژ، اما 81 00:03:38,280 --> 00:03:42,030 ادامه نه بیشتر، از آن عبور S-پرچم 82 00:03:42,030 --> 00:03:43,560 در خط فرمان. 83 00:03:43,560 --> 00:03:44,790 بیایید نگاهی به مجمع 84 00:03:44,790 --> 00:03:47,390 فایل بود که خروجی. 85 00:03:47,390 --> 00:03:49,740 مثل یک زبان کاملا متفاوت به نظر می رسد. 86 00:03:49,740 --> 00:03:52,660 کد اسمبلی بسیار پردازنده خاص است. 87 00:03:52,660 --> 00:03:55,440 در این مورد، از آنجا که دستگاه CS50 در حال اجرا است 88 00:03:55,440 --> 00:04:00,470 پردازنده های مبتنی بر x86 مجازی، این کد را مونتاژ معماری x86 است. 89 00:04:00,470 --> 00:04:03,450 تعداد کمی از مردم ارسال به طور مستقیم در کد اسمبلی این روزها، 90 00:04:03,450 --> 00:04:06,490 اما هر برنامه C شما همیشه نوشتن پایین تبدیل می شود 91 00:04:06,490 --> 00:04:07,940 به مونتاژ. 92 00:04:07,940 --> 00:04:11,440 باز هم، ما به این مرحله کامپایل C به مونتاژ 93 00:04:11,440 --> 00:04:14,170 از آنجایی که ما در حال رفتن از یک سطح بالاتر به سطح پایین تر 94 00:04:14,170 --> 00:04:15,480 زبان های برنامه نویسی. 95 00:04:15,480 --> 00:04:17,880 >> چه چیزی باعث می شود که سطح مونتاژ پایین تر از C؟ 96 00:04:17,880 --> 00:04:21,660 خب، در مجلس، ما در حال در آنچه ما می توانیم انجام دهیم بسیار محدود است. 97 00:04:21,660 --> 00:04:25,120 خیر، در حالی که، برای، و یا حلقه ها از هر نوع وجود دارد. 98 00:04:25,120 --> 00:04:27,560 اما شما می توانید این کارها را به انجام این است که این کنترل 99 00:04:27,560 --> 00:04:30,270 ساختار ارائه می دهیم با استفاده از عملیات های محدود است که 100 00:04:30,270 --> 00:04:32,350 مجلس ارائه دهد. 101 00:04:32,350 --> 00:04:35,960 اما ببینید که چقدر مجلس سطح پایین واقعا، اجازه دهید به 102 00:04:35,960 --> 00:04:39,320 یک گام به جلو در تدوین، مونتاژ. 103 00:04:39,320 --> 00:04:41,890 این کار اسمبلر برای تبدیل کد اسمبلی 104 00:04:41,890 --> 00:04:44,740 به شی یا کد ماشین. 105 00:04:44,740 --> 00:04:47,610 به یاد داشته باشید که اسمبلر مونتاژ خروجی نیست؛ 106 00:04:47,610 --> 00:04:51,080 در عوض، آن را در مونتاژ و خروجی کد ماشین طول می کشد. 107 00:04:51,080 --> 00:04:54,040 کد ماشین واقعی 1 و 0 است که یک CPU می تواند 108 00:04:54,040 --> 00:04:57,290 درک، هر چند که ما هنوز هم کمی از کار باقی مانده است 109 00:04:57,290 --> 00:04:59,380 قبل از ما می توانیم برنامه را اجرا می کنیم. 110 00:04:59,380 --> 00:05:01,400 بیایید مونتاژ مونتاژ کد خود را با عبور 111 00:05:01,400 --> 00:05:04,080 صدای جرنگ جرنگ c-پرچم. 112 00:05:04,080 --> 00:05:06,410 حال اجازه دهید ببینیم که چه چیزی در فایل مونتاژ شده. 113 00:05:06,410 --> 00:05:09,220 >> خوب، که به ما کمک نمی کند بسیار است. 114 00:05:09,220 --> 00:05:11,340 به یاد داشته باشید که کد دستگاه و صفر است که 115 00:05:11,340 --> 00:05:13,240 کامپیوتر شما می تواند درک کند. 116 00:05:13,240 --> 00:05:16,080 این بدان معنی نیست که آن را برای ما آسان به درک. 117 00:05:16,080 --> 00:05:19,160 پس دقیقا چه سطح پایین مونتاژ است؟ 118 00:05:19,160 --> 00:05:21,480 این تقریبا یکسان به کد شیء. 119 00:05:21,480 --> 00:05:24,300 رفتن از مونتاژ به کد شیء، بسیار بیشتر از یک 120 00:05:24,300 --> 00:05:27,540 ترجمه از یک تحول، که به همین دلیل است 121 00:05:27,540 --> 00:05:29,310 ممکن است اسمبلر به نظر نمی 122 00:05:29,310 --> 00:05:31,400 انجام هر گردآوری واقعی است. 123 00:05:31,400 --> 00:05:34,110 در واقع، آن را بسیار آسان به صورت دستی از ترجمه 124 00:05:34,110 --> 00:05:36,050 مونتاژ به کد ماشین. 125 00:05:36,050 --> 00:05:39,040 در حال جستجو در مونتاژ برای یک تابع اصلی، که خط اول 126 00:05:39,040 --> 00:05:42,100 اتفاق می افتد مربوط به 0x55 هگزادسیمال است. 127 00:05:42,100 --> 00:05:45,470 در دودویی، که 1010101 است. 128 00:05:45,470 --> 00:05:49,300 خط دوم اتفاق می افتد، به مطابقت 0x895 هگزادسیمال است. 129 00:05:49,300 --> 00:05:51,290 و بعد، 0x56. 130 00:05:51,290 --> 00:05:53,730 با توجه به جدول نسبتا ساده است، شما می توانید ترجمه 131 00:05:53,730 --> 00:05:57,130 مونتاژ به کد که ماشین بیش از حد می تواند درک. 132 00:05:57,130 --> 00:05:58,810 >> بنابراین یک گام باقی مانده در آن وجود دارد 133 00:05:58,810 --> 00:06:01,150 تلفیقی است که ارتباط. 134 00:06:01,150 --> 00:06:04,530 لینک ترکیبی از یک دسته از فایل های جسم را به یک فایل بزرگ 135 00:06:04,530 --> 00:06:06,380 که شما در واقع می تواند اجرا کند. 136 00:06:06,380 --> 00:06:08,570 لینک بسیار سیستم وابسته است. 137 00:06:08,570 --> 00:06:11,030 بنابراین ساده ترین راه برای به دست آوردن صدای جرنگ جرنگ فقط Object لینک 138 00:06:11,030 --> 00:06:13,920 فایل ها با یکدیگر است، صدای جرنگ جرنگ بر روی تمام فایل هایی که به تماس 139 00:06:13,920 --> 00:06:15,190 شما می خواهید به پیوند با یکدیگر. 140 00:06:15,190 --> 00:06:18,740 اگر شما را مشخص کنید. فایل های O، پس آن را نمی خواهد نیاز به پردازش مجدد، 141 00:06:18,740 --> 00:06:21,680 تدوین و جمع آوری تمام از کد منبع خود را. 142 00:06:21,680 --> 00:06:23,960 بیایید پرتاب یک تابع ریاضی را به فایل ما، بنابراین ما باید 143 00:06:23,960 --> 00:06:25,210 چیزی به لینک شوید. 144 00:06:34,220 --> 00:06:37,010 حالا آن را کامپایل به کد شیء اجازه بدهید و 145 00:06:37,010 --> 00:06:38,260 تماس صدای جرنگ جرنگ بر روی آن است. 146 00:06:40,560 --> 00:06:41,420 متأسفم. 147 00:06:41,420 --> 00:06:43,790 از آنجا که ما یک تابع ریاضی، ما نیاز به پیوند را در 148 00:06:43,790 --> 00:06:46,610 کتابخانه ریاضی با LM. 149 00:06:46,610 --> 00:06:48,990 >> اگر ما می خواستیم به پیوند با یکدیگر دسته از فایل های O که ما 150 00:06:48,990 --> 00:06:51,420 نوشت: در خود ما، ما فقط می خواهم همه آنها را در تعیین 151 00:06:51,420 --> 00:06:52,460 خط فرمان. 152 00:06:52,460 --> 00:06:55,320 محدودیت این است که تنها از این فایل باید 153 00:06:55,320 --> 00:06:57,790 در واقع عملکرد اصلی، مشخص و یا دیگری 154 00:06:57,790 --> 00:06:59,930 در نتیجه اجرایی نمی دانم از کجا شروع 155 00:06:59,930 --> 00:07:00,910 کد خود را در حال اجرا است. 156 00:07:00,910 --> 00:07:03,360 چه تفاوت بین تعیین یک فایل به لینک موجود در 157 00:07:03,360 --> 00:07:06,600 با-L و فقط تعیین یک فایل به طور مستقیم؟ 158 00:07:06,600 --> 00:07:07,440 هیچ چیز. 159 00:07:07,440 --> 00:07:09,850 این فقط اتفاق می افتد که صدای جرنگ جرنگ فایل دقیقا همان چیزی است که می دانم 160 00:07:09,850 --> 00:07:12,560 چیزی شبیه به LM اتفاق می افتد به مراجعه به. 161 00:07:12,560 --> 00:07:14,700 اگر شما می دانستید که فایل خود را، شما می توانید آن را مشخص کنید 162 00:07:14,700 --> 00:07:15,930 به صراحت. 163 00:07:15,930 --> 00:07:18,990 درست است که همه L پرچم در پایان به یاد داشته باشید 164 00:07:18,990 --> 00:07:20,770 از تقاضای مشتری شما. 165 00:07:20,770 --> 00:07:22,300 >> و آن همه به آن وجود دارد. 166 00:07:22,300 --> 00:07:24,940 زمانی که شما فقط در بعضی از فایل ها اجرا صدای جرنگ جرنگ، این همان چیزی است که آن را 167 00:07:24,940 --> 00:07:26,350 در واقع انجام می دهند. 168 00:07:26,350 --> 00:07:29,490 نام من راب Bowden، و این CS50.