[Powered by Google Translate] ROB BOWDEN: دعونا نتحدث عن المجمعين. حتى هذه النقطة، كتبته للتو التعليمات البرمجية المصدر إلى بعض الملفات، أرسل لهم من خلال هذا المربع الأسود الكبير وهذا هو رنة، ويخرج ملف القابل للتنفيذ الذي لا بالضبط ما كنت كتبت في التعليمات البرمجية المصدر. كما السحرية كما وهذا ما كان، ونحن في طريقنا لاتخاذ أقرب ننظر إلى ما يحدث في الواقع عندما كنا ترجمة ملف. فما معنى أن يقوم بتجميع شيء ما؟ حسنا، في بالمعنى الأكثر عمومية، بل يعني فقط رمز تحويل كتب في واحدة برمجة لغة إلى أخرى. ولكن عندما يقول الناس عادة يقومون بتجميع شيء ما، يعني انهم الاستيلاء عليها من أعلى مستوى البرمجة لغة إلى لغة البرمجة مستوى أقل. قد يبدو مثل هذه الشروط شخصي جدا. على سبيل المثال، وربما كنت لا أعتقد من C كما عالية مستوى لغة البرمجة، ولكنك ترجمة عليه. لكن كل شيء نسبي. كما سنرى، ورمز التجميع وآلة في نهاية المطاف التعليمات البرمجية التي نحن تجميع وصولا الى لا يمكن إنكاره هو مستوى أدنى من C. على الرغم من أننا سوف تستخدم ضجيج في مظاهرة اليوم، على الكثير من الأفكار هنا يرحل إلى المجمعين أخرى. لضجيج، وهناك أربع خطوات رئيسية في العام تجميع. هذه هي واحدة، تجهيزها قبل المعالج الذي قام به، وثانيا، تجميع القيام به من قبل المجمع، وثلاثة، وتجميع الذي قام به المجمع، وأربعة، ربط به رابط. قد يكون مربكا أن واحدا من substeps من العام ويطلق القائمون على رنة المترجم، ولكن سوف نصل الى ذلك. سنكون باستخدام برنامج بسيط مرحبا العالم كما حذونا طوال هذا الفيديو. دعونا نلقي نظرة. الخطوة الأولى هي تجهيزها. ماذا تفعل قبل المعالج؟ في الى حد كبير برنامج C كل من أي وقت مضى كنت قد قرأت أو مكتوبة، كنت قد استخدمت الأسطر من التعليمات البرمجية التي تبدأ التجزئة. سوف أسميها التجزئة، ولكن يمكنك الاتصال أيضا جنيه، عدد التوقيع، أو حادة. أي خط من هذا القبيل هو توجيه المعالج. ربما كنت قد رأيت # تعريف وتشمل # من قبل، ولكن هناك هي عدة أن يعترف قبل المعالج. دعونا نضيف إلى تعريف # مثالنا مرحبا العالم. الآن دعونا فقط تشغيل المعالج على هذا الملف. وذلك بتمرير clage وE-العلم، وكنت تعليمات لتشغيل فقط قبل المعالج. دعونا نرى ما سيحدث. يبدو ضجيج يبصق للتو كل شيء في سطر الأوامر. من أجل إنقاذ كل هذا الإخراج إلى ملف جديد يسمى hello2.c، سنقوم إلحاق> hello2.c لقيادتنا. الآن دعونا نلقي نظرة على لدينا ملف preprocessed. قف، ماذا حدث لبرنامجنا قليلا قصيرة؟ إذا كان لنا أن يذهب كل في طريقه إلى أسفل من هذا الملف، وسنرى بعض التعليمات البرمجية التي كتبنا بالفعل. لاحظت أن هو ذهب # تعريف واسم كافة مثيلات تم استبدال مع بالضبط ما نحن المحدد في # تعريف الخط. فما هي كل هذه typedefs والإعلانات وظيفة في الجزء العلوي من الملف؟ تلاحظ أن تعريف # لم يكن قبل المعالج فقط التوجيه أننا المحدد. لدينا أيضا تضمين # stdio.h. لذلك كل من الخطوط هي في الواقع مجرد مجنون نسخ stdio.h ولصق الى اعلى من هذا الملف. هذا هو السبب في الملفات رأس هي مفيدة جدا من أجل وظيفة الإعلانات. بدلا من الحاجة إلى نسخ ولصق كل وظيفة الإعلانات كنت تخطط لاستخدام في الجزء العلوي من الملف الخاص بك، في وقبل المعالج نسخ ولصق لهم من رأس الملف لك. والآن بعد أن ننتهي تجهيزها، ونحن نتحرك على تجميع. السبب في أننا نسمي هذا التجميع هو الخطوة لأن هذا هو الخطوة حيث ضجيج في الواقع لا في جمع من C إلى الجمعية التعليمات البرمجية. من أجل أن يكون ضجيج ترجمة ملف وصولا الى الجمعية، ولكن لا مزيد من الاستمرار، وتمريرها S-العلم في سطر الأوامر. دعونا نلقي نظرة على الجمعية الملف تم أنتج ذلك. يبدو اللغة مختلف تماما. الجمعية متاحة للغاية معالج معينة. في هذه الحالة، حيث أن الأجهزة CS50 يعمل على معالج x86 الظاهري، وهذا هو X86 رمز التجميع. قلة قليلة من الناس الكتابة مباشرة في التعليمات البرمجية الجمعية في هذه الأيام، ولكن يحصل تحول كل برنامج C تكتب أي وقت مضى إلى أسفل في الجمعية. مرة أخرى، ندعو هذه الخطوة تجميع C إلى الجمعية حيث أننا ذاهبون من مستوى أعلى إلى مستوى أدنى لغة البرمجة. ما يجعل مستوى أقل من الجمعية C؟ حسنا، في الجمعية، محدودة للغاية ونحن في ما يمكننا القيام به. لا توجد حالة، في حين، على سبيل، أو حلقات من أي نوع. ولكن يمكنك إنجاز نفس الأشياء التي تحكم هذه تقدم الهياكل باستخدام عمليات محدودة لا توفر الجمعية. ولكن لنرى كيف انخفاض مستوى الجمعية في الحقيقة، دعونا نذهب خطوة أخرى إلى الأمام في تجميع لدينا، وتجميع. انها وظيفة المجمع لتحويل رمز التجميع في الكائن أو رمز الجهاز. تذكر أن المجمع لا التجميع الإخراج؛ بدلا من ذلك، فإنه يأخذ في التجمع ونواتج رمز الجهاز. رمز الجهاز هو الفعلي 1 و 0 في أن وحدة المعالجة المركزية يمكن فهم، على الرغم من أننا لا تزال لديها القليل من العمل غادر قبل أن نتمكن من تشغيل البرنامج. دعونا تجميع دينا قانون الجمعية وذلك بتمرير رنة سي العلم. الآن دعونا نرى ماذا يوجد في الملف تجميعها. حسنا، هذا لا يساعدنا كثيرا. تذكر أن رمز الجهاز هو الآحاد والأصفار التي يمكن فهم جهاز الكمبيوتر الخاص بك. هذا لا يعني أنه من السهل بالنسبة لنا أن نفهم. ذلك بالضبط كيف هو انخفاض مستوى الجمعية؟ انها متطابقة تقريبا إلى رمز الكائن. الانتقال من التجميع إلى رمز الكائن هو أكثر بكثير من ترجمة من التحول، وهذا هو السبب لا يمكن للمرء أن ينظر إلى المجمع القيام بأي تجميع الفعلية. في الواقع، فإنه من السهل جدا لترجمة يدويا من الجمعية إلى رمز الجهاز. أبحث في الجمعية لوظيفة الرئيسية، أن السطر الأول يحدث لتتوافق مع 0x55 الست عشري. في ثنائي، وهذا 1010101. السطر الثاني لتتوافق يحدث 0x895 الست عشري. وفي اليوم التالي، 0x56. نظرا لجدول بسيط نسبيا، هل يمكن أن تترجم الجمعية في التعليمات البرمجية التي يمكن أن نفهم آلات أيضا. ولذلك لا يوجد في خطوة واحدة المتبقية تجميع، والذي ربط. ربط يجمع بين مجموعة من الملفات الكائن في ملف واحد كبير يمكنك تنفيذ ذلك في الواقع. ربط جدا تعتمد نظام. وبالتالي فإن أسهل طريقة للحصول على ضجيج فقط لربط كائن الملفات معا لاستدعاء ضجيج على كافة الملفات التي تريد الارتباط معا. إذا قمت بتحديد ملفات الإخراج، بعد ذلك سوف لا تحتاج إلى إعادة معالجة، تجميع، وتجميع كل من التعليمات البرمجية المصدر. دعونا رمي وظيفة الرياضيات في ملف لدينا، لذلك نحن لها لربط شيء فيه. الآن دعونا تجميع مرة أخرى إلى أسفل إلى التعليمات البرمجية الهدف و الكلمة ضجيج على ذلك. عفوا. منذ أن تشمل وظيفة الرياضيات، نحن بحاجة إلى ربط في مكتبة الرياضيات مع-LM. إذا كنا نريد لربط معا حفنة من ملفات الإخراج التي نحن كتب لوحدنا، لكنا فقط تحديد كل منهم في سطر الأوامر. تقييد هو أن واحدا فقط من هذه الملفات يجب أن في الواقع تحديد الوظيفة الرئيسية، أو آخر والتنفيذي الناتج لا تعرف من أين تبدأ تشغيل التعليمات البرمجية. ما الفرق بين تحديد ملف لربط في مع لام وتحديد مجرد ملف مباشرة؟ لا شيء. انها مجرد أن يحدث ضجيج الملف لمعرفة بالضبط ما شيء من هذا القبيل يحدث LM-للإشارة إلى. إذا كنت تعرف أن الملف بنفسك، هل يمكن تحديد ذلك صراحة. فقط تذكر أن جميع الأعلام-L يجب أن يأتي في نهاية للطلب العميل. وهذا كل ما في الامر. عند تشغيل فقط ضجيج على بعض الملفات، وهذا هو ما يعنيه القيام بالفعل. اسمي روب بودين، وهذا هو CS50.