[Powered by Google Translate] రాబ్ బౌడెన్: లెట్స్ కంపైలర్సును గురించి మాట్లాడండి. ఈ సమయం వరకు, మీరు మీ సోర్స్ కోడ్ విభజించవచ్చు టైప్ చేసిన కొన్ని ఫైళ్లు, అని ఈ పెద్ద బ్లాక్ బాక్స్ ద్వారా వాటిని పంపిన గణగణమని ద్వని చేయు, మరియు అవుట్ చేసే మీ ఎక్జిక్యూటబుల్ ఫైల్ వస్తుంది సరిగ్గా అదే మీ సోర్స్ కోడ్ రాశారు. అయిన వంటి ఇంద్రజాల, మేము ఒక దగ్గరగా తీసుకుని వెళుతున్నాం నిజానికి ఏం చూడండి మేము ఒక ఫైలు కంపైల్ సమయంలో. సో వాట్ అది ఏదో కంపైల్ అంటే ఏమిటి? Well, అత్యంత సాధారణ అర్థంలో అది అర్థం మార్పిడి కోడ్ ఒక వ్రాయబడిన మరొక భాష ప్రోగ్రామింగ్. కానీ ప్రజలు సే సాధారణంగా ఉన్నప్పుడు వారు, ఏదో కంపైల్ వారు ఒక ఉన్నత స్థాయి ప్రోగ్రామింగ్ నుండి వేస్తున్నాము అర్ధం తక్కువ స్థాయి ప్రోగ్రామింగ్ భాష భాష. ఈ విశేషమైనది పదాలు వంటివి కనిపిస్తాయి. ఉదాహరణకు, మీరు బహుశా అధిక వంటి C యొక్క భావించడం లేదు స్థాయి ప్రోగ్రామింగ్ భాష, మీరు కంపైల్ లేదు. కానీ ఇది అన్ని బంధువుల. మేము చూస్తారు వంటి, అసెంబ్లీ కోడ్ మరియు చివరికి యంత్రం మేము డౌన్ కంపైల్ కోడ్ తిరస్కరించుటకు వీలులేని తక్కువ స్థాయి C. కంటే మేము నేటి ప్రదర్శన లో గణగణమని ద్వని చేయు ఉపయోగించి వస్తుంది ఉన్నప్పటికీ, ఒక ఇక్కడ ఆలోచనలు చాలా ఇతర కంపైలర్సును కొనసాగుతుంది. గణగణమని ద్వని చేయు కోసం, మొత్తం నాలుగు ప్రధాన దశలు ఉన్నాయి సంగ్రహం. రెండు; ఈ ఒక, ప్రాసెసర్ చేసిన preprocessing ఉంటాయి కంపైలర్ చేసిన సంకలనం; మూడు, సమీకరించడం , మరియు నాలుగు; సమీకరించేఉద్దేశంతో చేసిన లింక్ లింకర్ సాధించారు. కంగారు కలిగించే మొత్తం యొక్క substeps ఒకటి గణగణమని ద్వని చేయు కంపైలర్సును కంపైలర్ అని, కానీ మేము ఆ చూస్తారు. మేము మా ఉదాహరణగా సాధారణ హలో వరల్డ్ ప్రోగ్రామ్ ఉపయోగించి వస్తుంది ఈ వీడియో అంతటా. యొక్క పరిశీలించి చూద్దాం. మొదటి దశ preprocessing ఉంది. ప్రాసెసర్ ఏమి చేస్తుంది? మీరు చదివిన లేదా వ్రాయలేదు చాలా చక్కని ప్రతి సి ప్రోగ్రాం లో, మీరు ఒక హాష్ ప్రారంభమవుతాయి లైన్స్ ఆఫ్ కోడ్ ఉపయోగించి. నేను హాష్ కాల్ చేస్తాము, కానీ మీరు కూడా పౌండ్ల, సంఖ్య కాల్ ఉండవచ్చు సైన్ లేదా పదునైన. ఏదైనా లైన్ ఒక ప్రాసెసర్ ఆదేశం ఉంది. బహుశా మీరు # ముందు నిర్వచించే మరియు # ఉన్నాయి చూడరు, కానీ అక్కడ చేసిన ప్రాసెసర్ గుర్తించే చాలా ఉన్నాయి. యొక్క ఒక # మా hello world ఉదాహరణగా నిర్వచించే జోడించడానికి అనుమతిస్తుంది. ఇప్పుడు ఈ ఫైలు కేవలం ప్రాసెసర్ అమలు అనుమతిస్తాయి. Clage-E జెండా గుండా, మీరు దీన్ని అమలు అదేశాన్నిస్తాడు చేస్తున్నారు కేవలం ప్రాసెసర్. ఏమి చూద్దాం. గణగణమని ద్వని చేయు కేవలం ప్రతిదీ ఉమ్మి వేస్తారు కనిపిస్తుంది కమాండ్ లైన్ వద్ద. అనే కొత్త ఫైలు ఈ ఉత్పత్తి యొక్క అన్ని కాపాడటానికి hello2.c, మేము మా ఆదేశానికి> hello2.c జోడించు చేస్తాము. ఇప్పుడు మా ప్రాసెస్ ఫైలు పరిశీలించి అనుమతిస్తుంది. అయ్యో, మా చిన్న చిన్న ప్రోగ్రామ్ జరిగింది? మేము ఈ ఫైల్ యొక్క దిగువ అన్ని మార్గం వెళ్ళి ఉంటే, మేము చూస్తారు మేము నిజంగా రాసిన కోడ్ కొన్ని. # Define పారిపోయిన ఆ నోటీసు పేరు యొక్క అన్ని సందర్భాలలో మేము పేర్కొన్న వేటి తో భర్తీ చేయబడ్డాయి # లైన్ వివరిస్తుంది. కాబట్టి ఈ typedefs మరియు ఫంక్షన్ ప్రకటనలు ఏవి ఫైలు ఎగువన? # Define మాత్రమే ప్రాసెసర్ కాదని గమనించండి మేము పేర్కొన్న ఆ డైరెక్టివ్. మేము కూడా # stdio.h కూడా ఉండేవి. కాబట్టి క్రేజీ పంక్తులు అన్ని కేవలం stdio.h కాపీ ఉన్నాయి మరియు ఈ ఫైలు యొక్క పైభాగములో అతికించారు. శీర్షిక ఫైళ్లు ఫంక్షన్ అంత ఉపయోగకరం ఎందుకు ఆ ప్రకటనలు. బదులుగా పనితీరు అన్ని కాపీ మరియు పేస్ట్ అవసరమయ్యే మీరు మీ ఫైల్ ఎగువన ఉపయోగించి ప్లాన్ ప్రకటనలు, ప్రాసెసర్ శీర్షిక నుండి కాపీ చేసి అతికించిన కనిపిస్తుంది మీరు కోసం దాఖలు. ఇప్పుడు మేము preprocessing పూర్తి చేసిన ఆ, మేము పై తరలించడానికి సంగ్రహం. ఈ ఎందుకంటే మేము ఈ దశను సంగ్రహం కాల్ కారణం గణగణమని ద్వని చేయు వాస్తవానికి దాని సి నుండి కంపైల్ చేసే దశ అసెంబ్లీ కోడ్. గణగణమని ద్వని చేయు అసెంబ్లీ ఒక ఫైలు డౌన్ కంపైల్ ఉన్నాయి, కాని చేయడానికి ఎటువంటి కొనసాగుతుంది, ఇది ఉత్తీర్ణత S జెండా కమాండ్ లైన్ వద్ద. లెట్ యొక్క అసెంబ్లీ పరిశీలించి ఫైలు ఆ outputted జరిగినది. ఇది చాలా విభిన్న భాష వలె ఉంది. అసెంబ్లీ కోడ్ చాలా ప్రాసెసర్ పనిచేస్తాయి. ఈ సందర్భంలో, నుండి CS50 ఉపకరణం ఒక నడుస్తుంటే వర్చ్యువల్ x86 ప్రాసెసర్, ఈ x86 అసెంబ్లీ స్మృతి. చాలా తక్కువ మంది, ఈ రోజుల్లో అసెంబ్లీ కోడ్ నేరుగా రాయడానికి కానీ మీరు ఎప్పుడూ వ్రాయండి ప్రతి సి ప్రోగ్రాం డౌన్ రూపాంతరం అవుతుంది అసెంబ్లీ లో. మళ్లీ, మేము అసెంబ్లీగా సి కంపైల్ ఈ దశను కాల్ మేము ఒక అధిక స్థాయి నుంచి తక్కువ స్థాయి వెళ్తున్నారు నుండి భాష ప్రోగ్రామింగ్. ఏ సి కంటే అసెంబ్లీ తక్కువ స్థాయి చేస్తుంది? Well, అసెంబ్లీ లో, మేము చాలా మేము ఏమి లో పరిమితం. ఎటువంటి అయితే, స్, యొక్క కోసం, లేదా ఉచ్చులు ఉన్నాయి. కానీ మీరు ఒకే విషయాలు సాధించడానికి చేసే ఈ నియంత్రణ నిర్మాణాలు పరిమిత కార్యకలాపాలు ఉపయోగించి అందించే అసెంబ్లీ అందిస్తుంది. కానీ తక్కువ స్థాయి అసెంబ్లీ వాస్తవానికి ఎంత చూడటానికి, లెట్స్ గో మా సంకలనంలో మరింత ఒక దశ, సమీకరించడం. ఇది అసెంబ్లీ కోడ్ పిశాచం సమీకరించేఉద్దేశంతో యొక్క పని వస్తువు లేదా యంత్రం కోడ్ లోకి. సమీకరించేఉద్దేశంతో output అసెంబ్లీ కాదు అని గుర్తుంచుకోండి; అయితే, అసెంబ్లీ మరియు ప్రతిఫలాన్ని యంత్రం కోడ్ పడుతుంది. మెషిన్ కోడ్ వాస్తవ 1 మరియు 0 యొక్క ఒక CPU ఉంటుంది మేము ఇంకా పని ఒక చిన్న bit కలిగి ఉన్నప్పటికీ, అర్థం మేము మా ప్రోగ్రామ్ రన్ ముందు. లెట్ యొక్క ప్రసరించటం ద్వారా మా అసెంబ్లీ కోడ్ సిద్ధం గణగణమని ద్వని చేయు-c జెండా. ఇప్పుడు సమావేశమై ఫైలులో ఏది చూద్దాం. అయితే, అది చాలా మాకు సహాయం లేదు. యంత్రం కోడ్ వాటికి మరియు సున్నాలు అని గుర్తుంచుకోండి మీ కంప్యూటర్ అర్ధం చేసుకోగలరు. అది మాకు అర్థం కోసం సులభం కాదు. కాబట్టి అసెంబ్లీ ఎలా తక్కువ స్థాయి? ఇది వస్తువు కోడ్ దాదాపు ఒకేలా ఉంటుంది. అసెంబ్లీ నుండి వస్తువు కోడ్ గోయింగ్ టు ఒక యొక్క ఎక్కువ ఒక పరివర్తన కంటే అనువాదం, ఇది ఎందుకు ఒక సమీకరించేఉద్దేశంతో పరిగణలోకి కాదు ఏదైనా వాస్తవిక సేకరించి చేయండి. నిజానికి, ఇది మాన్యువల్గా నుంచి అనువదించడానికి చాలా సులభం యంత్రం కోడ్ అసెంబ్లీ. మొదటి పంక్తి, ఒక ప్రధాన విధి అసెంబ్లీ వద్ద గురించి హెక్సాడెసిమల్ 0x55 అనుగుణంగా నిర్మాణము. బైనరీ లో, ఆ 1010101 ఉంది. రెండవ పంక్తి హెక్సాడెసిమల్ 0x895 అనుగుణంగా జరుగుతుంది. మరియు తర్వాత, 0x56. ఒక సులభమైన పట్టిక ప్రకారం, మీరు అనువదించు కాలేదు యంత్రాలు చాలా అర్థం చేసుకోవచ్చు కోడ్ లోకి అసెంబ్లీ. కాబట్టి ఒక మిగిలిన దశ లేదు లింక్ ఇది సంగ్రహం. లింకింగ్ ఒక పెద్ద ఫైల్లోకి object ఫైళ్లను కొంత కలిపి మీరు నిజంగా అమలు చేయగల. లింక్ చాలా వ్యవస్థ ఆధారపడి ఉంటుంది. ఆబ్జెక్ట్ లింక్ గణగణమని ద్వని చేయు పొందడానికి కాబట్టి సులభమైన మార్గం కలిసి ఫైళ్లను ఫైళ్ళను అన్ని గణగణమని ద్వని చేయు కాల్ ఉంది మీరు కలిసి లింక్ చెయ్యాలనుకుంటున్న. మీరు పేర్కొన్న ఉంటే. O ఫైళ్లు, అప్పుడు, రీప్రాసెస్ అవసరం లేదు కంపైల్, మరియు మీ సోర్స్ కోడ్ యొక్క అన్ని సిద్ధం. యొక్క మా ఫైలులోనికి గణిత ఫంక్షన్ త్రో తెలియజేయండి, కనుక మనం సైన్ లింక్ ఏదో ఇప్పుడు వస్తువు కోడ్ తిరిగి అది డౌన్ కంపైల్ తెలియజేయండి మరియు దానిపై గణగణమని ద్వని చేయు కాల్. అయ్యో. మేము ఒక గణిత ఫంక్షన్ ఉన్నాయి కాబట్టి, మేము లింక్ అవసరం గణిత లైబ్రరీ తో LM. మేము యొక్క బంచ్ కలిసి లింక్ అనుకుంటే. O ఫైళ్ళను మేము మా స్వంత వ్రాశారు, మేము వాటిని అన్ని పేర్కొనండి భావిస్తున్న కమాండ్ లైన్. పరిమితి ఈ ఫైళ్ళ మాత్రమే మస్ట్ వాస్తవానికి ప్రధాన విధి పేర్కొనండి లేదా else ఫలితంగా executable ఎక్కడ ప్రారంభించాలో తెలిసిన కాదు మీ కోడ్ అమలు. లో లింక్ ఫైలు పేర్కొనడం మధ్య తేడా ఏమిటి తో-l మరియు కేవలం నేరుగా ఫైలు పేర్కొనడం? ఏమీ లేదు. ఇది ఆ గణగణమని ద్వని చేయు సరిగ్గా అదే ఫైల్ తెలిసిన ఏమవుతుంది యొక్క ఏదో వంటి-LM చూడండి నిర్మాణము. మీరు ఫైల్ మీరే తెలుసు, దాని పేర్కొనండి కాలేదు స్పష్టంగా. అన్ని-l జెండాలు చివరిలో వచ్చిన కలిగి గుర్తుంచుకోవాలి మీ క్లయింట్ డిమాండ్. మరియు అది లేదు అంతే. మీరు కొన్ని ఫైళ్ళ న గణగణమని ద్వని చేయు అమలు చేసినప్పుడు, ఇది ఏమి ఉంటుంది వాస్తవానికి చేయడం. నా పేరు రాబ్ బౌడెన్, మరియు ఈ CS50 ఉంది.