1 00:00:07,200 --> 00:00:09,100 [Powered by Google Translate] రాబ్ బౌడెన్: లెట్స్ కంపైలర్సును గురించి మాట్లాడండి. 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 >> Well, అత్యంత సాధారణ అర్థంలో అది అర్థం 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 రెండు; ఈ ఒక, ప్రాసెసర్ చేసిన preprocessing ఉంటాయి 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 >> మొదటి దశ preprocessing ఉంది. 38 00:01:40,330 --> 00:01:42,520 ప్రాసెసర్ ఏమి చేస్తుంది? 39 00:01:42,520 --> 00:01:45,560 మీరు చదివిన లేదా వ్రాయలేదు చాలా చక్కని ప్రతి సి ప్రోగ్రాం లో, 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 యొక్క ఒక # మా hello world ఉదాహరణగా నిర్వచించే జోడించడానికి అనుమతిస్తుంది. 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 ఇప్పుడు మా ప్రాసెస్ ఫైలు పరిశీలించి అనుమతిస్తుంది. 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 # Define పారిపోయిన ఆ నోటీసు పేరు యొక్క అన్ని సందర్భాలలో 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 కాబట్టి ఈ typedefs మరియు ఫంక్షన్ ప్రకటనలు ఏవి 63 00:02:56,530 --> 00:02:58,140 ఫైలు ఎగువన? 64 00:02:58,140 --> 00:03:00,820 # Define మాత్రమే ప్రాసెసర్ కాదని గమనించండి 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 >> ఇప్పుడు మేము preprocessing పూర్తి చేసిన ఆ, మేము పై తరలించడానికి 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 గణగణమని ద్వని చేయు వాస్తవానికి దాని సి నుండి కంపైల్ చేసే దశ 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 ఫైలు ఆ outputted జరిగినది. 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 కానీ మీరు ఎప్పుడూ వ్రాయండి ప్రతి సి ప్రోగ్రాం డౌన్ రూపాంతరం అవుతుంది 91 00:04:06,490 --> 00:04:07,940 అసెంబ్లీ లో. 92 00:04:07,940 --> 00:04:11,440 మళ్లీ, మేము అసెంబ్లీగా సి కంపైల్ ఈ దశను కాల్ 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 >> ఏ సి కంటే అసెంబ్లీ తక్కువ స్థాయి చేస్తుంది? 96 00:04:17,880 --> 00:04:21,660 Well, అసెంబ్లీ లో, మేము చాలా మేము ఏమి లో పరిమితం. 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 సమీకరించేఉద్దేశంతో output అసెంబ్లీ కాదు అని గుర్తుంచుకోండి; 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 మేము ఇంకా పని ఒక చిన్న bit కలిగి ఉన్నప్పటికీ, అర్థం 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 లింకింగ్ ఒక పెద్ద ఫైల్లోకి object ఫైళ్లను కొంత కలిపి 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 ఆబ్జెక్ట్ లింక్ గణగణమని ద్వని చేయు పొందడానికి కాబట్టి సులభమైన మార్గం 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 వాస్తవానికి ప్రధాన విధి పేర్కొనండి లేదా else 154 00:06:57,790 --> 00:06:59,930 ఫలితంగా executable ఎక్కడ ప్రారంభించాలో తెలిసిన కాదు 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 నా పేరు రాబ్ బౌడెన్, మరియు ఈ CS50 ఉంది.