المكونات الأساسية للغة التجميع وبنية التعليمات. تنسيق البيانات وهيكل أوامر لغة التجميع. في تخصص "برمجة النظام"

مقدمة.

تسمى اللغة التي كتب بها البرنامج المصدر مدخلاللغة، واللغة التي يتم ترجمتها للتنفيذ بواسطة المعالج هي في أيام العطلةلسان. تسمى عملية تحويل لغة الإدخال إلى لغة الإخراج إذاعة.وبما أن المعالجات قادرة على تنفيذ البرامج بلغة الآلة الثنائية، والتي لا تستخدم في البرمجة، فإن ترجمة جميع البرامج المصدرية ضرورية. معروف بطريقتينالبث: التجميع والتفسير.

في التحويل البرمجيتتم أولاً ترجمة البرنامج المصدر بالكامل إلى برنامج مكافئ في لغة الإخراج يسمى هدفالبرنامج ومن ثم تنفيذه يتم تنفيذ هذه العملية باستخدام خاص برامج,مُسَمًّى مترجم.يُطلق على المترجم الذي تكون لغة الإدخال فيه شكلًا رمزيًا لتمثيل لغة الآلة (الإخراج) للرموز الثنائية المجمع.

في تفسيراتيتم تحليل (تفسير) كل سطر من النص في البرنامج المصدر وتنفيذ الأمر المحدد فيه على الفور. ويعهد بتنفيذ هذه الطريقة إلى برنامج مترجم.التفسير يستغرق وقتا طويلا. ولزيادة كفاءته، بدلاً من معالجة كل سطر، يقوم المترجم أولاً بتحويل الكل فريقسلاسل إلى أحرف (

). يتم استخدام تسلسل الرموز الناتج لأداء الوظائف المخصصة للبرنامج الأصلي.

يتم تنفيذ لغة التجميع التي تمت مناقشتها أدناه باستخدام التحويل البرمجي.

مميزات اللغة.

الملامح الرئيسية للمجمع:

● بدلاً من الرموز الثنائية، تستخدم اللغة أسماء رمزية - فن الإستذكار.على سبيل المثال، بالنسبة لأمر الإضافة (

) يتم استخدام فن الإستذكار

الطرح (

عمليه الضرب (

الأقسام (

إلخ. وتستخدم الأسماء الرمزية أيضًا لعنونة خلايا الذاكرة. للبرمجة بلغة التجميع، بدلاً من الرموز والعناوين الثنائية، تحتاج إلى معرفة الأسماء الرمزية فقط التي يترجمها المجمع إلى رموز ثنائية؛

كل بيان يتوافق أمر آلة واحدة(الكود)، أي أن هناك مراسلات فردية بين أوامر الآلة والمشغلين في برنامج لغة التجميع؛

● اللغة توفر الوصول لجميع الكائناتوالفرق. اللغات عالية المستوى لا تملك هذه القدرة. على سبيل المثال، تسمح لك لغة التجميع بالتحقق من أجزاء تسجيل العلم واللغة عالية المستوى (على سبيل المثال،

) ليس لديه هذه القدرة. لاحظ أن لغات برمجة الأنظمة (على سبيل المثال، C) غالبا ما تحتل موقعا متوسطا. من حيث إمكانية الوصول، فهي أقرب إلى لغة التجميع، ولكن لديها بناء جملة لغة عالية المستوى؛

● لغة التجميع ليست لغة عالمية.كل مجموعة محددة من المعالجات الدقيقة لها مجمعها الخاص. اللغات عالية المستوى ليس لديها هذا العيب.

على عكس اللغات عالية المستوى، تستغرق كتابة البرنامج وتصحيح أخطاءه بلغة التجميع الكثير من الوقت. على الرغم من هذا، تلقت لغة التجميع استخدام واسعبسبب الظروف التالية:

● البرنامج المكتوب بلغة التجميع أصغر حجمًا بشكل ملحوظ ويعمل بشكل أسرع بكثير من البرنامج المكتوب بلغة عالية المستوى. بالنسبة لبعض التطبيقات، تلعب هذه المؤشرات دورًا أساسيًا، على سبيل المثال، العديد من برامج النظام (بما في ذلك المترجمات)، وبرامج بطاقات الائتمان، هاتف خليويوبرامج تشغيل الأجهزة، وما إلى ذلك؛

● تتطلب بعض الإجراءات الوصول الكاملإلى الأجهزة، وهو أمر عادةً ما يكون من المستحيل القيام به بلغة عالية المستوى. تتضمن هذه الحالة المقاطعات ومعالجات المقاطعة في أنظمة التشغيل، بالإضافة إلى وحدات التحكم في الأجهزة في أنظمة الوقت الفعلي المضمنة.

في معظم البرامج، تكون نسبة صغيرة فقط من إجمالي التعليمات البرمجية مسؤولة عن نسبة كبيرة من وقت تنفيذ البرنامج. عادةً ما يكون 1% من البرنامج مسؤولاً عن 50% من وقت التنفيذ، و10% من البرنامج مسؤولاً عن 90% من وقت التنفيذ. لذلك، لكتابة برنامج معين في الظروف الحقيقية، يتم استخدام كل من لغة التجميع وإحدى اللغات عالية المستوى.

تنسيق المشغل بلغة التجميع.

برنامج لغة التجميع عبارة عن قائمة من الأوامر (العبارات، الجمل)، يشغل كل منها سطرًا منفصلاً ويحتوي على أربعة حقول: حقل التسمية، وحقل العملية، وحقل المعامل، وحقل التعليق. يحتوي كل حقل على عمود منفصل.

حقل التسمية.

تم تخصيص العمود 1 لحقل التسمية، التسمية هي اسم رمزي، أو معرف، عناوينذاكرة. من الضروري حتى تتمكن من:

● إجراء انتقال مشروط أو غير مشروط إلى الأمر؛

● الوصول إلى الموقع حيث يتم تخزين البيانات.

يتم توفير مثل هذه البيانات مع التسمية. للإشارة إلى الاسم، يتم استخدام الحروف (الكبيرة) من الأبجدية الإنجليزية والأرقام. يجب أن يحتوي الاسم على حرف في البداية وفاصل نقطتين في النهاية. يمكن كتابة علامة النقطتين على سطر منفصل، ويمكن كتابة كود التشغيل في السطر التالي في العمود 2، مما يبسط عمل المترجم. لا يسمح غياب النقطتين بتمييز الملصق عن رمز التشغيل إذا كانا موجودين في أسطر منفصلة.

في بعض إصدارات لغة التجميع، يتم وضع النقطتين فقط بعد تسميات التعليمات، وليس بعد تسميات البيانات، وقد يقتصر طول التسمية على 6 أو 8 أحرف.

يجب ألا تكون هناك أسماء متطابقة في حقل التسمية، حيث أن التسمية مرتبطة بعناوين الأوامر. إذا لم تكن هناك حاجة أثناء تنفيذ البرنامج لاستدعاء أمر أو بيانات من الذاكرة، فسيظل حقل التسمية فارغًا.

حقل كود التشغيل

يحتوي هذا الحقل على الكود التذكيري لأمر أو أمر زائف (انظر أدناه). يتم اختيار رمز تذكير الأمر من قبل مطوري اللغة. بلغة التجميع

تم تحديد ذاكري لتحميل السجل من الذاكرة

)، ولحفظ محتويات السجل في الذاكرة - وسيلة تذكيرية

). في لغات التجميع

لكلا العمليتين يمكنك استخدام نفس الاسم، على التوالي

إذا كان اختيار الأسماء التذكيرية يمكن أن يكون تعسفيًا، فسيتم تحديد الحاجة إلى استخدام تعليمات الجهاز من خلال بنية المعالج

تعتمد أساليب تقوية السجلات أيضًا على إصدار المجمع (الجدول 5.2.1).

حقل المعامل.

هنا يقع معلومات إضافية، اللازمة لإجراء العملية. في حقل المعامل لأوامر الانتقال، تتم الإشارة إلى العنوان الذي يجب الانتقال إليه، بالإضافة إلى العناوين والسجلات التي تمثل معاملات لأمر الجهاز. على سبيل المثال، نعطي المعاملات التي يمكن استخدامها لمعالجات 8 بت

● البيانات الرقمية،

يتم تقديمها في أنظمة أرقام مختلفة. للإشارة إلى نظام الأرقام المستخدم، يتبع الثابت أحد الحروف اللاتينية: B،

وبناء على ذلك، فإن أنظمة الأعداد الثنائية والثمانية والست عشرية والعشرية (

ليس عليك أن تكتبه). إذا كان الرقم الأول من الرقم السداسي العشري هو A، B، C،

ثم تتم إضافة 0 (صفر) ضئيل في المقدمة؛

● رموز سجلات المعالجات الدقيقة الداخلية وخلايا الذاكرة

م (مصادر أو متلقي المعلومات) على شكل الحروف A، B، C،

M أو عناوينهم في أي نظام أرقام (على سبيل المثال، 10B - عنوان التسجيل

في النظام الثنائي)؛

● المعرفات،

لتسجيل أزواج الطائرات،

الحروف الأولى هي ب،

ن؛ لزوج من المجمع وسجل الميزات -

; لعداد البرنامج -

؛ لمؤشر المكدس -

● تسميات تشير إلى عناوين المعاملات أو التعليمات التالية في الشرط

(إذا تحقق الشرط) و التحولات غير المشروطةعلى سبيل المثال، المعامل M1 في الأمر

يعني الحاجة إلى انتقال غير مشروط إلى الأمر، الذي تم تمييز عنوانه في حقل التسمية بالمعرف M1؛

● التعبيرات،

والتي يتم إنشاؤها من خلال ربط البيانات التي تمت مناقشتها أعلاه باستخدام العوامل الحسابية والمنطقية. لاحظ أن طريقة حجز مساحة البيانات تعتمد على إصدار اللغة. مطورو لغة التجميع لـ

تحديد الكلمة)، وأدخلت في وقت لاحق الخيار البديل.

والتي كانت لغة المعالجات منذ البداية

في نسخة اللغة

مستخدم

تحديد ثابت).

تعالج المعالجات معاملات ذات أطوال مختلفة. لتعريفه، اتخذ مطورو المجمع قرارات مختلفة، على سبيل المثال:

سجلات II ذات أطوال مختلفة لها أسماء مختلفة: EAX - لوضع معاملات 32 بت (النوع

); AX - للإصدار 16 بت (النوع

و AN - لـ 8 بت (النوع

● للمعالجات

تتم إضافة اللواحق إلى كل رمز عملية: suffix

للنوع

; اللاحقة ".B" للنوع

يتم استخدام رموز تشغيل مختلفة لمعاملات ذات أطوال مختلفة، على سبيل المثال، لتحميل بايت، نصف كلمة (

) والكلمات في سجل 64 بت باستخدام أكواد التشغيل

على التوالى.

حقل التعليقات.

يقدم هذا الحقل شرحًا حول إجراءات البرنامج. التعليقات لا تؤثر على تشغيل البرنامج وهي مخصصة للبشر. قد تكون هناك حاجة إليها لتعديل البرنامج، والذي بدون هذه التعليقات قد يكون غير مفهوم تمامًا حتى للمبرمجين ذوي الخبرة. يبدأ التعليق برمز ويستخدم لشرح البرامج وتوثيقها. يمكن أن يكون الحرف الأول للتعليق هو:

● الفاصلة المنقوطة (؛) في اللغات الخاصة بمعالجات الشركة

علامة تعجب(!) باللغات

يسبق كل سطر تعليق منفصل حرف رئيسي.

الأوامر الزائفة (التوجيهات).

يوجد في لغة التجميع نوعان رئيسيان من الأوامر:

أساسيالتعليمات التي تعادل رمز جهاز المعالج. تقوم هذه الأوامر بتنفيذ كافة العمليات التي يقصدها البرنامج؛

أوامر زائفةأو توجيهات,مصممة لخدمة عملية ترجمة البرنامج إلى لغة مجموعة التعليمات البرمجية. كمثال في الجدول. 5.2.2 يوضح بعض الأوامر الزائفة من المجمع

لأجل العائلة

.

عند البرمجة، هناك مواقف يجب فيها تكرار نفس سلسلة الأوامر عدة مرات، وفقًا للخوارزمية. وللخروج من هذه الحالة يمكنك:

● كتابة التسلسل المطلوب للأوامر كلما ظهر. ويؤدي هذا النهج إلى زيادة حجم البرنامج؛

● قم بترتيب هذا التسلسل في إجراء (إجراء فرعي) واستدعائه إذا لزم الأمر. هذا الإخراج له عيوبه: في كل مرة يتعين عليك تنفيذ أمر استدعاء إجراء خاص وأمر إرجاع، والذي، إذا كان التسلسل قصيرًا ومستخدمًا بشكل متكرر، يمكن أن يقلل بشكل كبير من سرعة البرنامج.

أبسط و طريقة فعالةالتكرار المتكرر لسلسلة الأوامر يتكون من الاستخدام دقيق،والتي يمكن تمثيلها كأمر زائف مصمم لإعادة ترجمة مجموعة من الأوامر الموجودة غالبًا في البرنامج.

يتميز الماكرو، أو الأمر الكلي، بثلاثة جوانب: التعريف الكلي، والانعكاس الكلي، والامتداد الكلي.

تعريف الماكرو

هذه تسمية لتسلسل متكرر لأوامر البرنامج، وتستخدم للمراجع في نص البرنامج.

يحتوي تعريف الماكرو على البنية التالية:

قائمة التعبيرات؛ تعريف الماكرو

في البنية المحددة للتعريف الكلي، يمكن التمييز بين ثلاثة أجزاء:

● العنوان

الماكرو، بما في ذلك الاسم

أمر زائف

ومجموعة من المعلمات.

● مميزة بالنقاط جسمدقيق؛

● الفريق

تخرُّج

تعريفات الماكرو.

تحتوي مجموعة معلمات تعريف الماكرو على قائمة بجميع المعلمات الواردة في حقل المعامل لمجموعة التعليمات المحددة. إذا تم تقديم هذه المعلمات مسبقًا في البرنامج، فلن يلزم الإشارة إليها في رأس تعريف الماكرو.

لإعادة تجميع مجموعة الأوامر المحددة، يتم استخدام نداء يتكون من الاسم

أوامر الماكرو وقائمة المعلمات مع القيم الأخرى.

عندما يواجه المجمع تعريف ماكرو أثناء عملية الترجمة، فإنه يخزنه في جدول تعريف الماكرو. وفي الظهورات اللاحقة في برنامج الاسم (

) من الماكرو، يستبدله المجمّع بنص الماكرو.

يُطلق على استخدام اسم ماكرو كرمز تشغيل الانعكاس الكلي(استدعاء الماكرو)، واستبداله بنص الماكرو - التوسع الكلي.

إذا تم تمثيل البرنامج كسلسلة من الأحرف (الأحرف والأرقام والمسافات وعلامات الترقيم وإرجاع السطر للانتقال إلى سطر جديد)، فإن التوسع الكلي يتكون من استبدال بعض السلاسل من هذا التسلسل بسلاسل أخرى.

يحدث توسيع الماكرو أثناء عملية التجميع، وليس أثناء تنفيذ البرنامج. تم تعيين طرق لمعالجة سلاسل الأحرف لـ وسائل الماكرو.

تتم عملية التجميع في تمريرتين:

● في المرة الأولى، يتم الاحتفاظ بجميع تعريفات الماكرو، ويتم توسيع استدعاءات الماكرو. في هذه الحالة، تتم قراءة البرنامج الأصلي وتحويله إلى برنامج تتم فيه إزالة كافة تعريفات الماكرو، ويتم استبدال كل استدعاء ماكرو بنص الماكرو؛

● يقوم الممر الثاني بمعالجة البرنامج الناتج بدون وحدات ماكرو.

وحدات الماكرو مع المعلمات.

للعمل مع تسلسلات متكررة من الأوامر، والتي يمكن أن تأخذ معلماتها قيمًا مختلفة، يتم توفير تعريفات الماكرو:

● مع فِعليالمعلمات التي يتم وضعها في حقل المعامل لاستدعاء الماكرو؛

● مع رَسمِيّحدود. أثناء توسيع الماكرو، يتم استبدال كل معلمة رسمية تظهر في نص الماكرو بالمعلمة الفعلية المقابلة.

باستخدام وحدات الماكرو مع المعلمات.

يحتوي البرنامج 1 على تسلسلين متشابهين من الأوامر، ويختلفان في أن الأول يقوم بتبديل P و

والثانية

يتضمن البرنامج 2 ماكرو بمعلمتين رسميتين P1 وP2. أثناء توسيع الماكرو، يتم استبدال كل حرف P1 داخل نص الماكرو بالمعلمة الفعلية الأولى (P،

)، ويتم استبدال الرمز P2 بالمعلمة الفعلية الثانية (

) من البرنامج رقم 1. في مكالمة الماكرو

تم وضع علامة على البرنامج 2: P،

المعلمة الفعلية الأولى

المعلمة الفعلية الثانية

البرنامج 1

البرنامج 2

MOV EBX، Q، MOV EAX، Pl

موف س، إياكس موف إبكس، P2

موف بي، إي بي إكس موف بي 2، إي إكس

قدرات موسعة.

دعونا نلقي نظرة على بعض ميزات اللغة المتقدمة

إذا تم استدعاء ماكرو يحتوي على أمر انتقال مشروط وتسمية سيتم الانتقال إليها مرتين أو أكثر، فسيتم تكرار التسمية (مشكلة التسمية المكررة)، مما سيؤدي إلى حدوث خطأ. لذلك، تقوم كل مكالمة بتعيين تسمية منفصلة كمعلمة (بواسطة المبرمج). في اللغة

تم إعلان التسمية محليًا (

) وبفضل الإمكانات المتقدمة، يقوم المجمّع تلقائيًا بإنشاء تسمية مختلفة في كل مرة يتم فيها توسيع الماكرو.

يسمح لك بتحديد وحدات الماكرو داخل وحدات الماكرو الأخرى. هذه الميزة المتقدمة مفيدة جدًا عند دمجها مع الارتباط الشرطي للبرنامج. دعونا نفكر

إذا كان حجم الكلمة GT 16 M2 ماكرو

يمكن تعريف الماكرو M2 في كلا جزأين البيان

ومع ذلك، يعتمد التعريف على المعالج الذي تم تجميع البرنامج عليه: 16 بت أو 32 بت. إذا لم يتم استدعاء M1، فلن يتم تعريف الماكرو M2 على الإطلاق.

ميزة متقدمة أخرى هي أن وحدات الماكرو يمكنها الاتصال بوحدات ماكرو أخرى، بما في ذلك وحدات الماكرو نفسها - العوديةيتصل. في الحالة الأخيرة، لتجنب حلقة لا نهاية لها، يجب على الماكرو تمرير معلمة إلى نفسه والتي تتغير مع كل توسيع، وكذلك يفحصهذه المعلمة وإنهاء العودية عندما تصل المعلمة إلى قيمة معينة.

حول استخدام وسائل الماكرو في المجمع.

عند استخدام وحدات الماكرو، يجب أن يكون المجمع قادرًا على أداء وظيفتين: حفظ تعريفات الماكروو توسيع التحديات الكلية.

حفظ تعريفات الماكرو.

يتم تخزين كافة أسماء الماكرو في جدول. يكون كل اسم مصحوبًا بمؤشر إلى الماكرو المقابل بحيث يمكن استدعاؤه إذا لزم الأمر. تحتوي بعض المجمعات على جدول منفصل لأسماء الماكرو، والبعض الآخر لديه جدول عام، حيث توجد جميع تعليمات الجهاز وتوجيهاته، بالإضافة إلى أسماء الماكرو.

عند مواجهة ماكرو أثناء التجميع أنشئ:

عنصر الجدول الجديدمع اسم الماكرو وعدد المعلمات ومؤشر إلى جدول تعريف ماكرو آخر حيث سيتم تخزين نص الماكرو؛

● القائمة رَسمِيّحدود.

تتم بعد ذلك قراءة نص الماكرو، الذي هو مجرد سلسلة من الأحرف، وتخزينه في جدول تعريف الماكرو. يتم وضع علامة على المعلمات الرسمية التي تحدث في جسم الحلقة حرف خاص.

التمثيل الداخلي للماكرو

من المثال أعلاه للبرنامج 2 (ص 244) هو:

موف إياكس، موف إبكس، موف موف &

حيث يتم استخدام الفاصلة المنقوطة كحرف إرجاع، ويتم استخدام علامة الضم & كحرف المعلمة الرسمي.

توسيع مكالمات الماكرو.

كلما تمت مواجهة تعريف ماكرو أثناء التجميع، يتم تخزينه في جدول الماكرو. عند استدعاء ماكرو، يتوقف المجمع مؤقتًا عن قراءة بيانات الإدخال من جهاز الإدخال ويبدأ في قراءة نص الماكرو المخزن. يتم استبدال المعلمات الرسمية المستخرجة من الجسم الكلي بمعلمات فعلية ويتم توفيرها بواسطة الاستدعاء. تتيح معلمات علامة العطف & قبل للمجمّع التعرف عليها.

على الرغم من وجود العديد من إصدارات المجمع، فإن عمليات التجميع لها ميزات مشتركة ومتشابهة في العديد من النواحي. تتم مناقشة تشغيل المجمّع ثنائي المسار أدناه.

مجمع ثنائي المسار.

يتكون البرنامج من عدد من البيانات. لذلك، يبدو أنه عند التجميع، يمكنك استخدام التسلسل التالي من الإجراءات:

● ترجمتها إلى لغة الآلة.

● نقل رمز الجهاز الناتج إلى ملف، والجزء المقابل من القائمة إلى ملف آخر؛

● كرر الإجراءات المذكورة حتى تتم ترجمة البرنامج بأكمله.

ومع ذلك، فإن هذا النهج غير فعال. مثال على ذلك ما يسمى بالمشكلة الرابط إلى الأمام.إذا كانت العبارة الأولى عبارة عن انتقال إلى العبارة P، الموجودة في نهاية البرنامج، فلن يتمكن المجمع من ترجمتها. يجب عليه أولا تحديد عنوان المشغل P، وللقيام بذلك يجب عليه قراءة البرنامج بأكمله. تسمى كل قراءة كاملة للبرنامج المصدر ممر.دعنا نوضح كيف يمكنك حل مشكلة رابط البحث الأمامي باستخدام تمريرتين:

في التمريرة الأولى يجب عليك يجمعوقم بتخزين كافة تعريفات الرموز (بما في ذلك التسميات) في الجدول، وفي المرور الثاني، قم بقراءة وتجميع كل عامل. هذه الطريقة بسيطة نسبيًا، لكن المرور الثاني عبر البرنامج الأصلي يتطلب وقتًا إضافيًا يقضيه في عمليات الإدخال/الإخراج؛

● على التمريرة الأولى يجب عليك يتحولتحويل البرنامج إلى شكل متوسط ​​وحفظه في جدول، وإجراء المرور الثاني ليس وفقًا للبرنامج الأصلي، ولكن وفقًا للجدول. توفر طريقة التجميع هذه الوقت، حيث أن المرور الثاني لا يقوم بعمليات الإدخال/الإخراج.

أول إجتياز.

الهدف التمريري الأول- بناء جدول الرموز. كما هو مذكور أعلاه، هناك هدف آخر للتمرير الأول وهو الحفاظ على كافة تعريفات الماكرو وتوسيع المكالمات عند ظهورها. وبالتالي، يحدث كل من تعريف الرمز وتوسيع الماكرو في مسار واحد. يمكن أن يكون الرمز أيضًا ملصق،أو معنى،الذي تم تعيين اسم محدد له باستخدام التوجيه -you :

؛ القيمة - حجم المخزن المؤقت

من خلال تعيين معنى للأسماء الرمزية في حقل تسمية الأمر، يحدد المجمع بشكل أساسي العناوين التي سيكون لها كل أمر أثناء تنفيذ البرنامج. ولهذا الغرض، يقوم المجمّع بتخزينه أثناء عملية التجميع عداد عنوان التعليمات(

) كمتغير خاص. في بداية المرور الأول، يتم تعيين قيمة المتغير الخاص على 0 وتزداد بعد معالجة كل أمر بطول ذلك الأمر. كمثال في الجدول. 5.2.3 يُظهر جزءًا من البرنامج يشير إلى طول الأوامر وقيم العداد. في التمريرة الأولى، يتم إنشاء الجداول الأسماء الرمزية والتوجيهاتو رموز التشغيل,وإذا لزم الأمر حرفيطاولة. الحرفي هو ثابت يقوم المجمّع بحجز الذاكرة له تلقائيًا. دعونا نلاحظ على الفور أن المعالجات الحديثة تحتوي على تعليمات ذات عناوين فورية، وبالتالي فإن مجمعاتها لا تدعم القيم الحرفية.

جدول أسماء الرموز

يحتوي على عنصر واحد لكل اسم (الجدول 5.2.4). يحتوي كل عنصر من عناصر جدول الأسماء الرمزية على الاسم نفسه (أو مؤشر إليه)، وقيمته الرقمية، وفي بعض الأحيان بعض المعلومات الإضافية، والتي قد تشمل:

● طول حقل البيانات المرتبط بالرمز؛

● بتات إعادة تخصيص الذاكرة (التي تشير إلى ما إذا كانت قيمة الرمز تتغير إذا تم تحميل البرنامج على عنوان مختلف عن العنوان الذي قصده المجمّع)؛

● معلومات حول ما إذا كان يمكن الوصول إلى الرمز من خارج الإجراء.

الأسماء الرمزية هي تسميات. ويمكن تحديدها باستخدام عوامل التشغيل (على سبيل المثال،

جدول التوجيه.

يسرد هذا الجدول جميع التوجيهات، أو الأوامر الزائفة، التي تتم مواجهتها عند تجميع البرنامج.

جدول رموز التشغيل

لكل رمز عملية، يحتوي الجدول على أعمدة منفصلة: تعيين رمز التشغيل، المعامل 1، المعامل 2، القيمة السداسية العشرية لرمز العملية، طول الأمر ونوع الأمر (الجدول 5.2.5). يتم تقسيم رموز التشغيل إلى مجموعات حسب عدد المعاملات ونوعها. يحدد نوع الأمر رقم المجموعة ويحدد الإجراء الذي يتم استدعاؤه لمعالجة كافة الأوامر في تلك المجموعة.

التمريرة الثانية.

هدف التمريرة الثانية- إنشاء برنامج كائن وطباعة بروتوكول التجميع، إذا لزم الأمر؛ معلومات الإخراج اللازمة للرابط لربط الإجراءات التي تم تجميعها في أوقات مختلفة في ملف واحد قابل للتنفيذ.

في المسار الثاني (كما في الأول)، تتم قراءة الأسطر التي تحتوي على البيانات ومعالجتها واحدًا تلو الآخر. العامل الأصلي ومشغل الإخراج مشتق منه بالنظام الست عشري هدفيمكن طباعة الرمز أو وضعه في مخزن مؤقت للطباعة لاحقًا. بعد إعادة تعيين عداد عنوان الأمر، يتم استدعاء الأمر البيان القادم.

قد يحتوي البرنامج المصدر على أخطاء، على سبيل المثال:

لم يتم تعريف الرمز المحدد أو تم تعريفه أكثر من مرة؛

● تم تمثيل كود التشغيل باسم غير صالح (بسبب خطأ مطبعي)، أو لا يحتوي على معاملات كافية، أو يحتوي على عدد كبير جدًا من المعاملات؛

● لا يوجد مشغل

يمكن لبعض المجمعات اكتشاف رمز غير محدد واستبداله. ومع ذلك، في معظم الحالات، عندما يواجه المجمّع بيان خطأ، يعرض المجمّع رسالة خطأ على الشاشة ويحاول متابعة عملية التجميع.

مقالات مخصصة للغة التجميع.

الجامعة الوطنية في أوزبكستان التي تحمل اسم ميرزو أولوغبيك

كلية تكنولوجيا الحاسوب

حول الموضوع: التحليل الدلالي لملف EXE.

مكتمل:

طشقند 2003.

مقدمة.

لغة التجميع وهيكل الأوامر.

بنية ملف EXE (التحليل الدلالي).

هيكل ملف COM.

مبدأ العمل وانتشار الفيروس.

المفكك.

البرامج.

مقدمة

مهنة المبرمج مذهلة وفريدة من نوعها. في الوقت الحاضر، من المستحيل تخيل العلم والحياة بدون أحدث التقنيات. كل ما يتعلق بالنشاط البشري لا يمكن القيام به بدونه تكنولوجيا الكمبيوتر. وهذا يساهم في تطورها العالي وكمالها. على الرغم من أن تطوير أجهزة الكمبيوتر الشخصية بدأ منذ وقت ليس ببعيد، إلا أنه خلال هذا الوقت تم اتخاذ خطوات هائلة في منتجات البرمجيات وسيتم استخدام هذه المنتجات على نطاق واسع لفترة طويلة. لقد شهد مجال المعرفة المتعلقة بالكمبيوتر انفجارًا، كما حدث مع التكنولوجيا المقابلة. إذا لم نأخذ الجانب التجاري بعين الاعتبار، فيمكننا القول أنه لا يوجد غرباء في هذا المجال من النشاط المهني. كثير من الناس يطورون برامج ليس من أجل الربح أو الدخل، ولكن بإرادتهم الحرة، بدافع العاطفة. بالطبع، لا ينبغي أن يؤثر ذلك على جودة البرنامج، وفي هذا العمل، إذا جاز التعبير، هناك منافسة وطلب على التنفيذ الجيد والعمل المستقر وتلبية جميع المتطلبات الحديثة. ومن الجدير بالذكر هنا أيضًا ظهور المعالجات الدقيقة في الستينيات، والتي جاءت لتحل محل عدد كبير من مجموعات المصابيح. هناك بعض أنواع المعالجات الدقيقة التي تختلف كثيرًا عن بعضها البعض. تختلف هذه المعالجات الدقيقة عن بعضها البعض في عمق البت وأوامر النظام المضمنة. وأكثرها شيوعًا هي: Intel، وIBM، وCeleron، وAMD، وما إلى ذلك. ترتبط جميع هذه المعالجات بالبنية المتقدمة لمعالجات Intel. أدى انتشار الحواسيب الصغيرة إلى إعادة النظر في المواقف تجاه لغة التجميع لسببين رئيسيين. أولاً، تتطلب البرامج المكتوبة بلغة التجميع ذاكرة ووقت تنفيذ أقل بكثير. ثانيًا، توفر معرفة لغة التجميع ورمز الآلة الناتج فهمًا لبنية الآلة، وهو أمر من غير المرجح أن يتم توفيره عند العمل بلغة عالية المستوى. على الرغم من أن معظم محترفي البرمجيات يتطورون بلغات عالية المستوى مثل Pascal أو C أو Delphi، وهي أسهل عند كتابة البرامج، إلا أن أقوىها وأكثرها فعالية برمجةمكتوبة كليًا أو جزئيًا بلغة التجميع. تم تصميم اللغات عالية المستوى لتجنب اللغات الخاصة ميزات تقنيةأجهزة كمبيوتر محددة. ولغة التجميع بدورها مصممة للخصائص المحددة للمعالج. لذلك، لكي تكتب برنامج لغة التجميع لجهاز كمبيوتر معين، يجب أن تعرف بنيته المعمارية. في هذه الأيام، وجهة النظر الرئيسية منتج برمجيهو ملف EXE. مع مراعاة الجوانب الإيجابيةهذا يعني أن مؤلف البرنامج يمكن أن يكون واثقًا من نزاهته. ولكن في كثير من الأحيان هذا ليس هو الحال. هناك أيضا مفكك. باستخدام مفكك، يمكنك معرفة الانقطاعات ورموز البرنامج. لن يكون من الصعب على أي شخص على دراية جيدة بالمجمع إعادة صياغة البرنامج بأكمله حسب ذوقه. ربما هذا هو المكان الذي تنشأ فيه المشكلة الأكثر استعصاء على الحل - الفيروس. لماذا يكتب الناس الفيروس؟ يطرح البعض هذا السؤال بدهشة، والبعض الآخر بغضب، ولكن مع ذلك لا يزال هناك أشخاص مهتمون بهذه المهمة ليس من وجهة نظر التسبب في أي ضرر، ولكن كاهتمام ببرمجة النظام. الفيروسات مكتوبة بواسطة أسباب مختلفة. بعض الناس يحبون مكالمات النظام، والبعض الآخر يحسن معرفتهم بالمجمع. سأحاول شرح كل هذا في بلدي العمل بالطبع. كما أنه لا يتحدث فقط عن بنية ملف EXE ولكن أيضًا عن لغة التجميع.

^ لغة التجميع.

ومن المثير للاهتمام أن نتابع، منذ ظهور أجهزة الكمبيوتر الأولى وحتى يومنا هذا، التحول في أفكار المبرمجين حول لغة التجميع.

في يوم من الأيام، كانت لغة التجميع هي اللغة التي بدونها لا يمكنك جعل الكمبيوتر يقوم بأي شيء مفيد. تدريجيا تغير الوضع. ظهرت وسائل أكثر ملاءمة للتواصل مع الكمبيوتر. ولكن، على عكس اللغات الأخرى، لم يمت المجمع، علاوة على ذلك، لم يتمكن من القيام بذلك من حيث المبدأ. لماذا؟ بحثا عن إجابة، دعونا نحاول فهم لغة التجميع بشكل عام.

باختصار، لغة التجميع هي تمثيل رمزي للغة الآلة. يتم تشغيل جميع العمليات في الجهاز عند أدنى مستوى من الأجهزة فقط عن طريق أوامر لغة الآلة (التعليمات). ومن هذا يتضح أنه على الرغم من الاسم الشائع، فإن لغة التجميع تختلف من نوع لآخر من نوع كمبيوتر. وهذا ينطبق أيضا مظهرالبرامج المكتوبة بلغة التجميع والأفكار التي تعتبر هذه اللغة انعكاسًا لها.

من المستحيل حل المشكلات المتعلقة بالأجهزة (أو حتى، علاوة على ذلك، التي تعتمد على الأجهزة، مثل زيادة سرعة البرنامج)، دون معرفة المجمع.

يمكن للمبرمج أو أي مستخدم آخر استخدام أي أدوات عالية المستوى، حتى برامج بناء عوالم افتراضية، وربما لا يشك حتى في أن الكمبيوتر في الواقع لا ينفذ أوامر اللغة التي كتب بها برنامجه، ولكن تمثيلها المتحول في شكل تسلسلات مملة ومملة من الأوامر من لغة مختلفة تمامًا - لغة الآلة. لنتخيل الآن أن مثل هذا المستخدم يواجه مشكلة غير قياسية أو أن شيئًا ما لا يعمل. على سبيل المثال، يجب أن يعمل برنامجه مع جهاز غير عادي أو يقوم بإجراءات أخرى تتطلب معرفة مبادئ تشغيل أجهزة الكمبيوتر. فمهما كان المبرمج ذكيا، ومهما كانت اللغة التي كتب بها برنامجه الرائع جيدة، فإنه لا يمكنه الاستغناء عن معرفة المجمع. وليس من قبيل الصدفة أن يحتوي جميع مترجمي اللغات عالية المستوى تقريبًا على وسائل لربط وحداتهم بوحدات المجمع أو دعم الوصول إلى مستوى التجميع للبرمجة.

بالطبع، لقد مر بالفعل زمن عموميي الكمبيوتر. كما يقولون، لا يمكنك احتضان الضخامة. ولكن هناك شيء مشترك، وهو نوع من الأساس الذي يقوم عليه أي تعليم جاد للكمبيوتر. هذه هي المعرفة بمبادئ تشغيل الكمبيوتر وبنيته ولغة التجميع كانعكاس وتجسيد لهذه المعرفة.

يتكون الكمبيوتر الحديث النموذجي (i486 أو Pentium) من المكونات التالية (الشكل 1).

أرز. 1. الكمبيوتر و الأجهزة الطرفية

أرز. 2. مخطط الكتلة كمبيوتر شخصي

ومن الشكل (الشكل 1) يتضح أن الكمبيوتر يتكون من عدة أجهزة مادية، كل منها متصل بوحدة واحدة تسمى وحدة النظام. إذا فكرنا بشكل منطقي، فمن الواضح أنه يلعب دور نوع ما من أجهزة التنسيق. دعونا ننظر داخل وحدة النظام (ليست هناك حاجة لمحاولة الدخول إلى الشاشة - لا يوجد شيء مثير للاهتمام هناك، بالإضافة إلى أنه خطير): افتح العلبة وشاهد بعض اللوحات والكتل وأسلاك التوصيل. لفهم الغرض الوظيفي منها، دعونا نلقي نظرة على المخطط التفصيلي لجهاز كمبيوتر نموذجي (الشكل 2). إنه لا يدعي الدقة المطلقة ويهدف فقط إلى إظهار الغرض والترابط والتكوين النموذجي لعناصر الكمبيوتر الشخصي الحديث.

دعونا نناقش الرسم البياني في الشكل. 2 بأسلوب غير تقليدي إلى حد ما.
من الشائع أن يبحث الإنسان، عند مواجهة شيء جديد، عن بعض الارتباطات التي يمكن أن تساعده على فهم المجهول. ما هي الجمعيات التي يثيرها الكمبيوتر؟ على سبيل المثال، كثيرًا ما أقوم بربط الكمبيوتر بالشخص نفسه. لماذا؟

عندما قام شخص ما بإنشاء جهاز كمبيوتر، كان يعتقد في مكان ما في أعماقه أنه كان يصنع شيئًا مشابهًا لنفسه. يحتوي الكمبيوتر على أجهزة لتلقي المعلومات من العالم الخارجي - لوحة المفاتيح والماوس ومحركات الأقراص المغناطيسية. في التين. 2 تقع هذه الأجهزة على يمين حافلات النظام. يحتوي الكمبيوتر على أعضاء "تهضم" المعلومات الواردة - وهذه هي وحدة المعالجة المركزيةوذاكرة الوصول العشوائي. وأخيرا، يحتوي الكمبيوتر على أعضاء الكلام التي تنتج نتائج المعالجة. هذه أيضًا بعض الأجهزة الموجودة على اليمين.

أجهزة الكمبيوتر الحديثةبالطبع بعيد كل البعد عن الإنسان. يمكن مقارنتها بالمخلوقات التي تتفاعل مع العالم الخارجي على مستوى مجموعة كبيرة ولكن محدودة من ردود الفعل غير المشروطة.
تشكل هذه المجموعة من ردود الفعل نظامًا لأوامر الآلة. بغض النظر عن مدى ارتفاع مستوى تواصلك مع الكمبيوتر، فإن الأمر في النهاية يعود إلى تسلسل ممل ورتيب من أوامر الجهاز.
كل أمر آلي هو نوع من التحفيز لإثارة منعكس غير مشروط أو آخر. إن رد الفعل على هذا التحفيز يكون دائمًا لا لبس فيه و"مثبت" في كتلة الأوامر الدقيقة في شكل برنامج صغير. ينفذ هذا البرنامج المصغر إجراءات لتنفيذ أمر الآلة، ولكن على مستوى الإشارات المقدمة إلى بعض منطقالكمبيوتر، وبالتالي التحكم في الأنظمة الفرعية المختلفة للكمبيوتر. هذا هو ما يسمى بمبدأ التحكم في البرامج الدقيقة.

بمواصلة التشبيه بالشخص، نلاحظ: لكي يتمكن الكمبيوتر من تناول الطعام بشكل صحيح، تم اختراع العديد من أنظمة التشغيل، والمترجمين لمئات لغات البرمجة، وما إلى ذلك، ولكن جميعها، في الواقع، مجرد طبق يتم تقديمه عليه يتم تسليم الطعام (البرامج) وفق قواعد معينة للمعدة (الكمبيوتر). فقط معدة الكمبيوتر هي التي تحب النظام الغذائي والطعام الرتيب - امنحها معلومات منظمة، في شكل تسلسلات منظمة بدقة من الأصفار والواحدات، والتي تشكل مجموعاتها لغة الآلة.

وهكذا، على الرغم من أنه متعدد اللغات ظاهريًا، فإن الكمبيوتر يفهم لغة واحدة فقط - لغة تعليمات الآلة. بالطبع، للتواصل والعمل مع جهاز كمبيوتر، ليس من الضروري معرفة هذه اللغة، ولكن تقريبا أي مبرمج محترف عاجلا أم آجلا يواجه الحاجة إلى دراستها. لحسن الحظ، لا يتعين على المبرمج أن يحاول فهم معنى مجموعات مختلفة من الأرقام الثنائية، منذ الخمسينيات، بدأ المبرمجون في استخدام التناظرية الرمزية للغة الآلة للبرمجة، والتي كانت تسمى لغة التجميع. تعكس هذه اللغة بدقة جميع ميزات لغة الآلة. ولهذا السبب، على عكس اللغات عالية المستوى، تختلف لغة التجميع لكل نوع من أجهزة الكمبيوتر.

من كل ما سبق، يمكننا أن نستنتج أنه بما أن لغة التجميع هي لغة "أصلية" للكمبيوتر، فلا يمكن كتابة البرنامج الأكثر فعالية إلا فيها (شريطة أن يكتبها مبرمج مؤهل). هناك واحد صغير "لكن" هنا: هذه عملية كثيفة العمالة للغاية وتتطلب الكثير من الاهتمام والخبرة العملية. لذلك، في الواقع، يكتبون بشكل أساسي البرامج التي يجب أن توفرها عمل فعالمع الأجهزة. في بعض الأحيان تتم كتابة أقسام البرنامج المهمة من حيث وقت التنفيذ أو استهلاك الذاكرة في المجمع. وبعد ذلك، يتم إضفاء الطابع الرسمي عليها في شكل إجراءات فرعية ودمجها مع التعليمات البرمجية بلغة عالية المستوى.

من المنطقي البدء في تعلم لغة التجميع لأي جهاز كمبيوتر فقط بعد معرفة أي جزء من الكمبيوتر بقي مرئيًا ويمكن الوصول إليه للبرمجة بهذه اللغة. وهذا ما يسمى بنموذج برنامج الحاسوب، وجزء منه هو نموذج برنامج المعالج الدقيق، الذي يحتوي على 32 سجلا، بدرجة أو بأخرى، متاحة للاستخدام من قبل المبرمج.

ويمكن تقسيم هذه السجلات إلى مجموعتين كبيرتين:

^ 16 تسجيل مستخدم؛

16 سجلات النظام.

تستخدم برامج لغة التجميع السجلات بشكل مكثف للغاية. معظم السجلات لها غرض وظيفي محدد.

كما يوحي الاسم، تسمى سجلات المستخدم سجلات المستخدم لأن المبرمج يمكنه استخدامها عند كتابة برامجه. وتشمل هذه السجلات (الشكل 3):

ثمانية سجلات 32 بت يمكن للمبرمجين استخدامها لتخزين البيانات والعناوين (وتسمى أيضًا سجلات الأغراض العامة (GPR)):

ستة سجلات مقطعية: cs، ds، ss، es، fs، gs؛

سجلات الحالة والتحكم:

الأعلام تسجل الأعلام/الأعلام؛

سجل مؤشر الأمر eip/ip.

أرز. 3. تسجيلات المستخدم للمعالجات الدقيقة i486 وPentium

لماذا تظهر العديد من هذه السجلات بخطوط مائلة؟ لا، هذه ليست سجلات مختلفة - فهي أجزاء من سجل واحد كبير 32 بت. ويمكن استخدامها في البرنامج ككائنات منفصلة. وقد تم ذلك لضمان عمل البرامج المكتوبة للنماذج الأحدث ذات 16 بت من معالجات Intel الدقيقة، بدءًا من i8086. تحتوي المعالجات الدقيقة i486 وPentium في الغالب على سجلات 32 بت. عددها، باستثناء سجلات المقاطع، هو نفس عدد i8086، ولكن البعد أكبر، وهو ما ينعكس في تسمياتها - فهي تحتوي على
البادئة e (ممتدة).

^ سجلات الأغراض العامة
تتيح لك جميع السجلات في هذه المجموعة الوصول إلى أجزائها "السفلية" (انظر الشكل 3). وبالنظر إلى هذا الشكل، لاحظ أنه يمكن استخدام الأجزاء السفلية المكونة من 16 و8 بت فقط من هذه السجلات للعنونة الذاتية. البتات الـ 16 العليا من هذه السجلات غير متاحة ككائنات مستقلة. وقد تم ذلك، كما ذكرنا أعلاه، من أجل التوافق مع نماذج 16 بت الأحدث من معالجات Intel الدقيقة.

دعونا ندرج السجلات التي تنتمي إلى مجموعة سجلات الأغراض العامة. وبما أن هذه السجلات موجودة فعليًا في المعالج الدقيق داخل وحدة المنطق الحسابي (ALU)، فإنها تسمى أيضًا سجلات ALU:

eax/ax/ah/al (سجل المجمع) - البطارية.
تستخدم لتخزين البيانات المتوسطة. تتطلب بعض الأوامر استخدام هذا السجل؛

ebx/bx/bh/bl (التسجيل الأساسي) - السجل الأساسي.
يستخدم لتخزين العنوان الأساسي لبعض الكائنات في الذاكرة؛

ecx/cx/ch/cl (سجل العد) - سجل العداد.
تستخدم في الفرق التي تقوم ببعض الإجراءات المتكررة. غالبًا ما يكون استخدامه ضمنيًا ومخفيًا في خوارزمية الأمر المقابل.
على سبيل المثال، يقوم أمر تنظيم حلقة حلقة، بالإضافة إلى نقل التحكم إلى أمر موجود في عنوان معين، بتحليل وتقليل قيمة سجل ecx/cx بمقدار واحد؛

edx/dx/dh/dl (تسجيل البيانات) - تسجيل البيانات.
تمامًا مثل سجل eax/ax/ah/al، فهو يقوم بتخزين البيانات المتوسطة. في بعض الأوامر، يكون استخدامه إلزاميًا؛ بالنسبة لبعض الأوامر يحدث هذا ضمنيًا.

يتم استخدام السجلين التاليين لدعم ما يسمى بالعمليات المتسلسلة، أي العمليات التي تعالج سلاسل العناصر بشكل تسلسلي، والتي يمكن أن يصل طول كل منها إلى 32 أو 16 أو 8 بت:

esi/si (تسجيل فهرس المصدر) - فهرس المصدر.
يحتوي هذا السجل في العمليات المتسلسلة على العنوان الحالي للعنصر في السلسلة المصدر؛

edi/di (سجل فهرس الوجهة) - فهرس المتلقي (المستلم).
يحتوي هذا السجل في العمليات المتسلسلة على العنوان الحالي في سلسلة الوجهة.

في بنية المعالجات الدقيقة، يتم دعم بنية البيانات مثل المكدس على مستوى الأجهزة والبرامج. للعمل مع المكدس، توجد أوامر خاصة في نظام تعليمات المعالجات الدقيقة، وفي نموذج برنامج المعالجات الدقيقة توجد سجلات خاصة لهذا:

esp/sp (تسجيل مؤشر المكدس) - تسجيل مؤشر المكدس.
يحتوي على مؤشر إلى أعلى المكدس في مقطع المكدس الحالي.

ebp/bp (سجل المؤشر الأساسي) - سجل المؤشر الأساسي لإطار المكدس.
مصممة لتنظيم الوصول العشوائي إلى البيانات داخل المكدس.

المكدس عبارة عن منطقة برنامج للتخزين المؤقت للبيانات التعسفية. بالطبع، يمكن أيضًا تخزين البيانات في مقطع بيانات، ولكن في هذه الحالة، لكل بيانات مخزنة مؤقتًا، يجب إنشاء خلية ذاكرة مسماة منفصلة، ​​مما يزيد من حجم البرنامج وعدد الأسماء المستخدمة. تكمن راحة المكدس في حقيقة أن منطقته قابلة لإعادة الاستخدام، ويتم تخزين البيانات على المكدس واسترجاعها من هناك باستخدام أوامر الدفع والبوب ​​الفعالة دون تحديد أي أسماء.
يتم استخدام المكدس بشكل تقليدي، على سبيل المثال، لحفظ محتويات السجلات التي يستخدمها البرنامج قبل استدعاء روتين فرعي، والذي بدوره سيستخدم سجلات المعالج "لأغراضه الخاصة". يتم إخراج المحتويات الأصلية للسجلات من المكدس بعد عودة الروتين الفرعي. أسلوب شائع آخر هو تمرير المعلمات التي يتطلبها إلى روتين فرعي عبر المكدس. يمكن للروتين الفرعي، الذي يعرف ترتيب وضع المعلمات على المكدس، أن يأخذها من هناك ويستخدمها أثناء تنفيذها. سمة مميزةالمكدس هو ترتيب فريد يتم من خلاله استرداد البيانات الموجودة فيه: في أي وقت، يتوفر العنصر العلوي فقط في المكدس، أي. تم دفع العنصر مؤخرًا إلى المكدس. يؤدي ظهور العنصر العلوي من المكدس إلى إتاحة العنصر التالي. توجد عناصر المكدس في منطقة الذاكرة المخصصة للمكدس، بدءًا من أسفل المكدس (أي من الحد الأقصى لعنوانه) عند العناوين المتناقصة بالتسلسل. يتم تخزين عنوان العنصر العلوي الذي يمكن الوصول إليه في سجل مؤشر المكدس SP. مثل أي منطقة أخرى من ذاكرة البرنامج، يجب أن تكون المكدس جزءًا من مقطع ما أو تشكل مقطعًا منفصلاً. في كلتا الحالتين، يتم وضع عنوان المقطع لهذا المقطع في سجل مكدس المقطع SS. وبالتالي، يصف زوج السجلات SS:SP عنوان خلية المكدس التي يمكن الوصول إليها: يقوم SS بتخزين عنوان مقطع المكدس، ويقوم SP بتخزين إزاحة آخر البيانات المخزنة على المكدس (الشكل 4، أ). لاحظ أنه في الحالة الأولية، يشير مؤشر المكدس SP إلى خلية تقع أسفل المكدس ولم يتم تضمينها فيه.

الشكل 4. تنظيم المكدس: أ - الحالة الأولية، ب - بعد تحميل عنصر واحد (في هذا المثال، محتويات سجل AX)، ج - بعد تحميل العنصر الثاني (محتويات سجل DS)، د - بعد تفريغ عنصر العنصر e - بعد تفريغ العنصرين وإعادتهما إلى حالتهما الأصلية.

يتم التحميل في المكدس بواسطة أمر خاص للعمل مع المكدس (الدفع). تقوم هذه التعليمات أولاً بإنقاص محتويات مؤشر المكدس بمقدار 2 ثم تضع المعامل على العنوان في SP. على سبيل المثال، إذا أردنا تخزين محتويات سجل AX على المكدس مؤقتًا، فيجب علينا تشغيل الأمر

يذهب المكدس إلى الحالة الموضحة في الشكل. 1.10، ب. يمكن ملاحظة أن مؤشر المكدس قد تم إزاحته لأعلى بمقدار بايتين (باتجاه العناوين السفلية) وتم كتابة المعامل المحدد في أمر الدفع على هذا العنوان. أمر تحميل المكدس التالي على سبيل المثال.

سوف يضع المكدس في الحالة الموضحة في الشكل. 1.10، ج. ستقوم المكدس الآن بتخزين عنصرين، وسيكون الوصول إلى العنصر العلوي فقط، المشار إليه بواسطة مؤشر المكدس SP، متاحًا. إذا أردنا بعد مرور بعض الوقت استعادة المحتويات الأصلية للسجلات المخزنة على المكدس، فيجب علينا تنفيذ أوامر البوب ​​(الدفع) لإلغاء التحميل من المكدس:

البوب ​​دي إس
البوب ​​الفأس

ما الحجم الذي يجب أن تكون عليه المكدس؟ يعتمد ذلك على مدى كثافة استخدامه في البرنامج. على سبيل المثال، إذا كنت تخطط لتخزين مصفوفة مكونة من 10000 بايت على المكدس، فيجب أن يكون المكدس بهذا الحجم على الأقل. يجب أن يؤخذ في الاعتبار أنه في بعض الحالات، يتم استخدام المكدس تلقائيًا بواسطة النظام، على وجه الخصوص، عند تنفيذ أمر المقاطعة int 21h. باستخدام هذا الأمر، يقوم المعالج أولاً بدفع عنوان الإرجاع إلى المكدس، ثم يقوم DOS بدفع محتويات السجلات والمعلومات الأخرى المتعلقة بالبرنامج الذي تمت مقاطعته إلى المكدس. لذلك، حتى لو كان البرنامج لا يستخدم المكدس على الإطلاق، فيجب أن يظل موجودًا في البرنامج وأن يكون حجمه على الأقل عدة عشرات من الكلمات. في المثال الأول، خصصنا 128 كلمة للمكدس، وهو ما يكفي بالتأكيد.

^ هيكل برنامج المجمع

برنامج لغة التجميع عبارة عن مجموعة من كتل الذاكرة تسمى قطاعات الذاكرة. قد يتكون البرنامج من قطعة واحدة أو أكثر من هذه المقاطع. ويحتوي كل مقطع على مجموعة من الجمل اللغوية، يشغل كل منها سطرًا منفصلاً من كود البرنامج.

هناك أربعة أنواع من بيانات المجمع:

الأوامر أو التعليمات التي تعتبر نظائر رمزية لأوامر الآلة. أثناء عملية الترجمة، يتم تحويل تعليمات المجمع إلى الأوامر المقابلة لمجموعة تعليمات المعالجات الدقيقة؛

أوامر الماكرو - جمل من نص البرنامج المنسق بطريقة معينة، يتم استبدالها أثناء البث بجمل أخرى؛

التوجيهات، وهي تعليمات لمترجم المجمع لتنفيذ إجراءات معينة. التوجيهات ليس لها نظير في التمثيل الآلي؛

أسطر التعليق التي تحتوي على أي أحرف، بما في ذلك حروف الأبجدية الروسية. يتم تجاهل التعليقات من قبل المترجم.

^ بناء جملة التجميع

يمكن أن تكون الجمل التي يتكون منها البرنامج عبارة عن بناء نحوي يتوافق مع أمر أو ماكرو أو توجيه أو تعليق. ولكي يتعرف عليها مترجم المجمع، يجب أن يتم تشكيلها وفقًا لقواعد نحوية معينة. للقيام بذلك، من الأفضل استخدام وصف رسمي لبناء جملة اللغة، مثل قواعد النحو. الطرق الأكثر شيوعًا لوصف لغة البرمجة بهذه الطريقة هي المخططات النحوية ونماذج Backus-Naur الموسعة. ل الاستخدام العمليتعتبر المخططات النحوية أكثر ملاءمة. على سبيل المثال، يمكن وصف بناء جملة عبارات لغة التجميع باستخدام مخططات بناء الجملة الموضحة في الأشكال التالية.

أرز. 5. تنسيق الجملة التجميعية

أرز. 6. تنسيق التوجيه

أرز. 7. تنسيق الأوامر ووحدات الماكرو

في هذه الصور:

اسم التسمية - معرف تكون قيمته عنوان البايت الأول من الجملة في الكود المصدري للبرنامج الذي يعينه؛

الاسم - المعرف الذي يميز هذا التوجيه عن التوجيهات الأخرى التي تحمل الاسم نفسه. نتيجة لمعالجة المجمع لتوجيه معين، قد يتم تعيين خصائص معينة لهذا الاسم؛

رمز التشغيل (OPC) والتوجيه عبارة عن رموز تذكيرية لتعليمات الآلة المقابلة أو تعليمات الماكرو أو توجيهات المترجم؛

المعاملات هي أجزاء من أمر أو ماكرو أو توجيه المجمع الذي يحدد الكائنات التي يتم تنفيذ الإجراءات عليها. يتم وصف معاملات لغة التجميع من خلال تعبيرات ذات ثوابت رقمية ونصية، وتسميات ومعرفات متغيرة باستخدام علامات التشغيل وبعض الكلمات المحجوزة.

^ كيفية استخدام المخططات النحوية؟ الأمر بسيط للغاية: كل ما عليك فعله هو العثور على المسار من مدخلات الرسم التخطيطي (على اليسار) إلى مخرجاته (على اليمين) ثم اتباعه. إذا كان هذا المسار موجودا، فإن الجملة أو البناء صحيح من الناحية النحوية. إذا لم يكن هناك مثل هذا المسار، فلن يقبل المترجم هذا البناء. عند العمل مع المخططات النحوية، انتبه إلى اتجاه الاجتياز المشار إليه بواسطة الأسهم، حيث قد يكون هناك بعض المسارات التي يمكن اتباعها من اليمين إلى اليسار. في جوهرها، تعكس المخططات النحوية منطق عمل المترجم عند تحليل جمل الإدخال الخاصة بالبرنامج.

الأحرف المقبولة عند كتابة نص البرنامج هي:

الجميع حروف: من الألف إلى الياء، من الألف إلى الياء. في هذه الحالة، تعتبر الأحرف الكبيرة والصغيرة متساوية؛

الأرقام من 0 إلى 9؛

العلامات ?، @، $، _، &؛

الفواصل، . ()< > { } + / * % ! " " ? \ = # ^.

يتم تشكيل جمل لغة التجميع من المعجمات، وهي تسلسلات غير قابلة للفصل من الناحية النحوية لرموز اللغة الصحيحة التي تكون منطقية للمترجم.

المفردات هي:

المعرفات عبارة عن تسلسلات من الأحرف الصالحة المستخدمة لتعيين كائنات البرنامج مثل رموز التشغيل وأسماء المتغيرات وأسماء الملصقات. قاعدة كتابة المعرفات هي كما يلي: يمكن أن يتكون المعرف من حرف واحد أو أكثر. كرموز، يمكنك استخدام حروف الأبجدية اللاتينية والأرقام وبعض الأحرف الخاصة - _، ?، $، @. لا يمكن أن يبدأ المعرف بحرف رقمي. يمكن أن يصل طول المعرف إلى 255 حرفًا، على الرغم من أن المترجم يقبل أول 32 حرفًا فقط ويتجاهل الباقي. يمكنك ضبط طول المعرفات المحتملة باستخدام الخيار سطر الأوامرإم في. بالإضافة إلى ذلك، من الممكن توجيه المترجم للتمييز بين الحروف الكبيرة والصغيرة أو تجاهل الفرق بينهما (وهو ما يتم بشكل افتراضي).

^ أوامر المجمع.

تكشف أوامر المجمع عن القدرة على نقل متطلباتك إلى الكمبيوتر، وآلية نقل التحكم في البرنامج (الدورات والانتقالات) للمقارنات المنطقية وتنظيم البرنامج. ومع ذلك، نادرًا ما تكون المهام القابلة للبرمجة بهذه البساطة. تحتوي معظم البرامج على سلسلة من الحلقات يتم فيها تكرار عدة أوامر حتى يتم تحقيق متطلبات معينة، بالإضافة إلى عمليات فحص مختلفة تحدد أي من الإجراءات العديدة يجب تنفيذها. يمكن لبعض التعليمات نقل التحكم عن طريق تغيير التسلسل الطبيعي للخطوات عن طريق تعديل قيمة الإزاحة مباشرة في مؤشر التعليمات. كما ذكرنا سابقًا، هناك أوامر مختلفة لمعالجات مختلفة، لكننا سنلقي نظرة على عدد من بعض الأوامر الخاصة بالمعالجات 80186 و80286 و80386.

لوصف حالة الأعلام بعد تنفيذ أمر معين، سنستخدم تحديدًا من جدول يعكس بنية سجل أعلام الأعلام:

يوضح الصف السفلي من هذا الجدول قيم العلامات بعد تنفيذ الأمر. يتم استخدام الرموز التالية:

1 - بعد تنفيذ الأمر، يتم تعيين العلم (يساوي 1)؛

0 - بعد تنفيذ الأمر، تتم إعادة تعيين العلامة (تساوي 0)؛

ص - تعتمد قيمة العلامة على نتيجة الأمر؛

بعد تنفيذ الأمر، لم يتم تعريف العلامة؛

مسافة - بعد تنفيذ الأمر، لا تتغير العلامة؛

يتم استخدام الترميز التالي لتمثيل المعاملات في المخططات النحوية:

r8، r16، r32 - مُعامل في أحد السجلات بحجم البايت أو الكلمة أو الكلمة المزدوجة؛

m8، m16، m32، m48 - حجم معامل الذاكرة بايت، كلمة، كلمة مزدوجة أو 48 بت؛

i8، i16، i32 - بايت حجم المعامل الفوري، كلمة أو كلمة مزدوجة؛

a8، a16، a32 - العنوان النسبي (الإزاحة) في مقطع الكود.

الأوامر (حسب الترتيب الأبجدي):

* تم وصف هذه الأوامر بالتفصيل.

يضيف
(إضافة)

إضافة

^ مخطط الأمر:

إضافة الوجهة، المصدر

الغرض: إضافة معاملين للمصدر والوجهة بحجم البايت أو الكلمة أو الكلمة المزدوجة.

خوارزمية العمل:

إضافة معاملات المصدر والوجهة؛

كتابة نتيجة الإضافة إلى المتلقي؛

وضع الأعلام.

حالة الأعلام بعد تنفيذ الأمر:

طلب:
يتم استخدام أمر الإضافة لإضافة معاملين صحيحين. يتم وضع نتيجة الإضافة على عنوان المعامل الأول. إذا كانت نتيجة الإضافة تتجاوز حدود معامل الاستقبال (يحدث تجاوز)، فيجب أن يؤخذ هذا الموقف في الاعتبار من خلال تحليل علامة cf والاستخدام المحتمل اللاحق لأمر adc. على سبيل المثال، لنقم بإضافة القيم الموجودة في سجل الفأس ومنطقة ذاكرة ch. عند الإضافة، تأخذ في الاعتبار إمكانية التجاوز.

سجل بالإضافة إلى التسجيل أو الذاكرة:

|000000dw|modregr/rm|

سجل AX (AL) بالإضافة إلى القيمة الفورية:

|0000010w|--بيانات--|بيانات إذا w=1|

سجل أو ذاكرة بالإضافة إلى القيمة الفورية:

|100000sw|mod000r/m|--data--|data if BW=01|

يتصل
(يتصل)

استدعاء إجراء أو مهمة

^ مخطط الأمر:

غاية:

نقل التحكم إلى إجراء قريب أو بعيد مع تخزين عنوان نقطة الإرجاع على المكدس؛

تبديل المهام.

خوارزمية العمل:
يتحدد حسب نوع المعامل:

بالقرب من التسمية - يتم دفع محتويات مؤشر أمر eip/ip إلى المكدس ويتم تحميل قيمة العنوان الجديدة المطابقة للملصق في نفس السجل؛

التسمية البعيدة - يتم دفع محتويات مؤشر الأمر eip/ip وcs إلى المكدس. ثم يتم تحميل قيم العناوين الجديدة المقابلة للتسمية البعيدة في نفس السجلات؛

R16، 32 أو m16، 32 - تحديد سجل أو خلية ذاكرة تحتوي على إزاحات في مقطع التعليمات الحالي الذي يتم نقل التحكم إليه. عند نقل التحكم، يتم دفع محتويات مؤشر الأمر eip/ip إلى المكدس؛

مؤشر الذاكرة - يحدد موقع الذاكرة الذي يحتوي على مؤشر 4 أو 6 بايت للإجراء المطلوب. هيكل هذا المؤشر هو 2 + 2 أو 2 + 4 بايت. يعتمد تفسير هذا المؤشر على وضع تشغيل المعالج الدقيق:

^ حالة الأعلام بعد تنفيذ الأمر (باستثناء تبديل المهام):

تنفيذ الأمر لا يؤثر على الأعلام

عند تبديل مهمة ما، يتم تغيير قيم العلامة وفقًا للمعلومات المتعلقة بتسجيل العلامات في مقطع حالة TSS للمهمة التي يتم التبديل إليها.
طلب:
يتيح لك أمر الاتصال تنظيم نقل مرن ومتعدد المتغيرات للتحكم إلى روتين فرعي مع الحفاظ على عنوان نقطة الإرجاع.

رمز الكائن (أربعة تنسيقات):

العنونة المباشرة في المقطع:

|11101000|التشتت المنخفض|العمق العالي|

العنونة غير المباشرة في المقطع:

|11111111|mod010r/m|

العنونة غير المباشرة بين القطاعات:

|11111111|mod011r/m|

العنونة المباشرة بين القطاعات:

|10011010|إزاحة منخفضة|إزاحة عالية|منخفضة|منخفضة|منخفضة|

CMP
(معاملات المقارنة)

مقارنة المعامل

^ مخطط الأمر:

المعامل cmp1، المعامل2

الغرض: المقارنة بين معاملين.

خوارزمية العمل:

إجراء الطرح (المعامل 1-المعامل 2)؛

اعتمادًا على النتيجة، قم بتعيين العلامات، ولا تقم بتغيير المعامل 1 والمعامل 2 (أي لا تتذكر النتيجة).

طلب:
هذا الأمرتستخدم للمقارنة بين معاملين عن طريق الطرح دون تغيير المعاملات. بناء على نتائج الأمر، يتم تعيين الأعلام. يتم استخدام الأمر cmp مع أوامر الانتقال الشرطي والأمر set byte by value setcc.

رمز الكائن (ثلاثة تنسيقات):

سجل أو الذاكرة مع التسجيل:

|001110dw|modregr/m|

القيمة الفورية مع سجل AX (AL):

|0011110w|--data--|البيانات إذا w=1|

القيمة الفورية مع السجل أو الذاكرة:

|100000sw|mod111r/m|--data--|data if sw=0|

ديسمبر
(معامل DECrement بمقدار 1)

تقليل المعامل بمقدار واحد

^ مخطط الأمر:

معامل ديسمبر

الغرض: تقليل قيمة المعامل في الذاكرة أو تسجيله بمقدار 1.

خوارزمية العمل:
الأمر يطرح 1 من المعامل. حالة الأعلام بعد تنفيذ الأمر:

طلب:
يتم استخدام التعليمة dec لتقليل قيمة البايت أو الكلمة أو الكلمة المزدوجة في الذاكرة أو التسجيل بمقدار واحد. ومع ذلك، لاحظ أن الأمر لا يؤثر على علامة cf.

التسجيل: |01001reg|

^ التسجيل أو الذاكرة: |1111111w|mod001r/m|

DIV
(تقسيم غير موقع)

تقسيم غير موقعة

الخطوط العريضة للفريق:

مقسم القسم

الغرض: إجراء عملية تقسيم بين قيمتين ثنائيتين غير موقعتين.

^ خوارزمية التشغيل:
يتطلب الأمر معاملين - المقسوم والمقسوم عليه. يتم تحديد المقسوم ضمنيًا ويعتمد حجمه على حجم المقسوم عليه المحدد في الأمر:

إذا كان حجم المقسوم عليه بايت، فيجب أن يكون المقسوم موجودًا في سجل الفأس. بعد العملية، يتم وضع الناتج في آل والباقي في آه؛

إذا كان المقسوم عليه كلمة في الحجم، فيجب أن يكون المقسوم موجودًا في زوج التسجيل dx:ax، مع وجود الجزء ذو الترتيب المنخفض من المقسوم في الفأس. بعد العملية، يتم وضع الحاصل في الفأس والباقي في dx؛

إذا كان المقسوم عليه عبارة عن كلمة مزدوجة في الحجم، فيجب وضع المقسوم في زوج التسجيل edx:eax، مع وجود الجزء ذو الترتيب المنخفض من المقسوم في eax. بعد العملية، يتم وضع الناتج في eax والباقي في edx.

^ حالة الأعلام بعد تنفيذ الأمر:

طلب:
ينفذ الأمر تقسيمًا صحيحًا للمعاملات، وينتج نتيجة القسمة كحاصل القسمة وبقية القسمة. عند إجراء عملية القسمة، قد يحدث استثناء: 0 - خطأ في القسمة. يحدث هذا الموقف في إحدى الحالتين: المقسوم عليه 0 أو أن حاصل القسمة كبير جدًا بحيث لا يتناسب مع سجل eax/ax/al.

رمز التعليمة:

|1111011w|mod110r/m|

إنت
(المقاطعة)

استدعاء روتين خدمة المقاطعة

^ مخطط الأمر:

كثافة العمليات_رقم_المقاطعة

الغرض: استدعاء روتين خدمة المقاطعة برقم المقاطعة المحدد بواسطة معامل الأمر.

^ خوارزمية التشغيل:

ادفع الأعلام التي تسجل الأعلام/الأعلام وعنوان المرسل إلى المكدس. عند كتابة عنوان المرسل، تتم كتابة محتويات سجل المقطع cs أولاً، ثم محتويات مؤشر الأمر eip/ip؛

إعادة ضبط علامتي if وtf على الصفر؛

نقل التحكم إلى برنامج خدمة المقاطعة بالرقم المحدد. تعتمد آلية نقل التحكم على وضع تشغيل المعالج الدقيق.

^ حالة الأعلام بعد تنفيذ الأمر:

طلب:
كما ترون من بناء الجملة، هناك نوعان من هذا الأمر:

int 3 - له رمز التشغيل الفردي الخاص به 0cch ويشغل بايت واحد. هذا الظرف يجعل من السهل جدًا استخدامه في مصححات البرامج المختلفة لتعيين نقاط التوقف عن طريق استبدال البايت الأول لأي أمر. المعالج الدقيق، الذي يواجه أمرًا برمز التشغيل 0cch في تسلسل الأوامر، يستدعي برنامج معالجة المقاطعة مع المتجه رقم 3، والذي يعمل على التواصل مع مصحح أخطاء البرنامج.

يحتل النموذج الثاني من الأمر بايتين، ويحتوي على كود تشغيل يبلغ 0cdh ويسمح لك ببدء استدعاء إلى روتين خدمة المقاطعة برقم متجه في النطاق من 0 إلى 255. ميزات نقل التحكم، كما ذكرنا، تعتمد على وضع تشغيل المعالج الدقيق.

رمز الكائن (تنسيقان):

التسجيل: |01000reg|

^ التسجيل أو الذاكرة: |1111111w|mod000r/m|

جي سي سي.
جككسز/جيككسز
(اقفز إذا كانت الحالة)

(اقفز إذا كانت CX=صفر/اقفز إذا كانت ECX=صفر)

القفز إذا تم استيفاء الشرط

انتقل إذا كانت قيمة CX/ECX تساوي صفرًا

^ مخطط الأمر:

تسمية جي سي سي
تسمية jcxz
تسمية jecxz

الغرض: الانتقال داخل مقطع القيادة الحالي اعتمادًا على بعض الشروط.

^ خوارزمية الأمر (باستثناء jcxz/jecxz):
التحقق من حالة الأعلام اعتمادًا على كود التشغيل (يعكس الحالة التي يتم التحقق منها):

إذا كان الشرط الذي يتم اختباره صحيحا، فانتقل إلى الخلية المشار إليها بواسطة المعامل؛

إذا كان الشرط الذي يتم التحقق منه غير صحيح، فقم بنقل التحكم إلى الأمر التالي.

خوارزمية الأمر jcxz/jecxz:
التحقق من شرط أن محتويات سجل ecx/cx تساوي الصفر:

إذا تم التحقق من الحالة

هيكل الأوامر في لغة التجميع البرمجة على مستوى أوامر الآلة هي الحد الأدنى الذي يمكن عنده برمجة الكمبيوتر. يجب أن يكون نظام قيادة الآلة كافياً لتنفيذ الإجراءات المطلوبة من خلال إصدار التعليمات لمعدات الآلة. تتكون كل تعليمات للآلة من جزأين: جزء تشغيلي، يحدد "ما يجب القيام به"، ومعامل، يحدد كائنات المعالجة، أي "ما يجب القيام به". تعليمات آلة المعالج الدقيق، المكتوبة بلغة التجميع، هي سطر واحد يحتوي على النموذج التالي: أمر التسمية/معامل (معاملات) التوجيه؛ التعليقات يتم فصل التسمية والأمر/التوجيه والمعامل بمسافة أو حرف علامة تبويب واحد على الأقل. يتم فصل معاملات الأمر بفواصل.

هيكل أمر لغة التجميع: يخبر أمر المجمع المترجم بالإجراء الذي يجب أن يقوم به المعالج الدقيق. توجيهات التجميع هي معلمات محددة في نص البرنامج والتي تؤثر على عملية التجميع أو خصائص ملف الإخراج. يحدد المعامل القيمة الأولية للبيانات (في مقطع البيانات) أو العناصر التي يتم تنفيذ إجراء الأمر عليها (في مقطع التعليمات البرمجية). قد تحتوي التعليمات على معامل واحد أو اثنين، أو قد لا تحتوي على معاملات. يتم تحديد عدد المعاملات ضمنيًا بواسطة رمز التعليمات. إذا كان الأمر أو التوجيه يحتاج إلى الاستمرار في السطر التالي، فسيتم استخدام حرف الخط المائل العكسي: "" . بشكل افتراضي، لا يميز المجمّع بين الأحرف الكبيرة والصغيرة عند كتابة الأوامر والتوجيهات. أمثلة على التوجيهات والأوامر Count db 1 ; الاسم، التوجيه، معامل واحد mov eax، 0 ؛ الأمر، معاملان

المعرفات هي تسلسلات من الأحرف الصالحة المستخدمة للإشارة إلى أسماء المتغيرات وأسماء التصنيفات. قد يتكون المعرف من واحد أو أكثر من الأحرف التالية: جميع حروف الأبجدية اللاتينية؛ الأرقام من 0 إلى 9؛ الأحرف الخاصة: _، @، $، ؟ . يمكن استخدام النقطة كحرف أول في التسمية. لا يمكن استخدام أسماء المجمعات المحجوزة (التوجيهات وعوامل التشغيل وأسماء الأوامر) كمعرفات. يجب أن يكون الحرف الأول للمعرف حرفًا أو حرفًا خاصًا. الحد الأقصى لطوليحتوي المعرف على 255 حرفًا، لكن المترجم يقبل أول 32 حرفًا ويتجاهل الباقي. يجب أن تنتهي كافة التسميات المكتوبة على سطر لا يحتوي على توجيه المجمّع بنقطتين: ". ليس من الضروري أن تبدأ التسمية والأمر (التوجيه) والمعامل في أي موضع معين في السطر. يوصى بكتابتها في عمود لتسهيل قراءة البرنامج.

التسميات يجب أن تنتهي كافة التسميات المكتوبة على سطر لا يحتوي على توجيه المجمّع بنقطتين: ". ليس من الضروري أن تبدأ التسمية والأمر (التوجيه) والمعامل في أي موضع معين في السطر. يوصى بكتابتها في عمود لتسهيل قراءة البرنامج.

التعليقات يؤدي استخدام التعليقات في البرنامج إلى تحسين وضوحه، خاصة عندما يكون الغرض من مجموعة الأوامر غير واضح. تبدأ التعليقات على أي سطر في الوحدة المصدر بفاصلة منقوطة (؛). جميع الأحرف الموجودة على يمين "؛ "في نهاية السطر هناك تعليق. يمكن أن يحتوي التعليق على أي أحرف قابلة للطباعة، بما في ذلك المسافة. يمكن أن يمتد التعليق على السطر بأكمله أو يتبع أمرًا على نفس السطر.

هيكل برنامج لغة التجميع يمكن أن يتكون البرنامج المكتوب بلغة التجميع من عدة أجزاء تسمى الوحدات النمطية، يمكن لكل منها تعريف واحد أو أكثر من البيانات والمكدس وقطاعات التعليمات البرمجية. يجب أن يشتمل أي برنامج كامل بلغة التجميع على وحدة رئيسية واحدة يبدأ منها تنفيذه. قد تحتوي الوحدة على قطاعات البرنامجوالبيانات وقطاعات المكدس التي تم الإعلان عنها باستخدام التوجيهات المناسبة.

نماذج الذاكرة قبل الإعلان عن المقاطع، تحتاج إلى تحديد نموذج الذاكرة باستخدام التوجيه. MODEL modifier Memory_model، communication_convention، OS_type، stack_parameter نماذج الذاكرة الأساسية للغة التجميع: نموذج الذاكرة معالجة التعليمات البرمجية معالجة البيانات نظام التشغيلتشذير التعليمات البرمجية والبيانات، TINY NEAR MS-DOS مقبول، SMALL NEAR MS-DOS، Windows لا MEDIUM FAR NEAR MS-DOS، Windows لا COMPACT NEAR FAR MS-DOS، Windows لا LARGE FAR MS-DOS، Windows لا HUGE FAR MS-DOS، Windows لا بالقرب من Windows 2000، Windows XP، Windows مقبول FLAT NEAR NT،

نماذج الذاكرة يعمل الطراز الصغير فقط في تطبيقات MS-DOS ذات 16 بت. في هذا النموذج، توجد جميع البيانات والتعليمات البرمجية في مقطع فعلي واحد. حجم ملف البرنامج في هذه الحالة لا يتجاوز 64 كيلو بايت. يدعم النموذج الصغير مقطعًا برمجيًا واحدًا وجزء بيانات واحدًا. تتم معالجة البيانات والتعليمات البرمجية على أنها قريبة عند استخدام هذا النموذج. يدعم النموذج المتوسط ​​مقاطع تعليمات برمجية متعددة ومقطع بيانات واحد، مع اعتبار كافة المراجع في مقاطع التعليمات البرمجية بعيدة بشكل افتراضي، ويتم اعتبار المراجع الموجودة في مقطع بيانات قريبة. يدعم النموذج المضغوط العديد من مقاطع البيانات التي تستخدم عنونة البيانات البعيدة (بعيدة)، ومقطع رمز واحد يستخدم العنونة القريبة (قريب). يدعم النموذج الكبير مقاطع تعليمات برمجية متعددة ومقاطع بيانات متعددة. بشكل افتراضي، يتم اعتبار كافة المراجع إلى التعليمات البرمجية والبيانات بعيدة. النموذج الضخم يعادل تقريبًا نموذج الذاكرة الكبيرة.

نماذج الذاكرة يفترض النموذج المسطح تكوين برنامج غير مجزأ ويستخدم فقط في أنظمة التشغيل 32 بت. يشبه هذا النموذج النموذج الصغير من حيث أن البيانات والتعليمات البرمجية موجودة في مقطع واحد، ولكنه 32 بت. تطوير برنامج للنموذج المسطح قبل التوجيه. نموذج مسطح يجب أن يضع أحد التوجيهات : . 386،. 486،. 586 أو. 686. يحدد اختيار توجيه اختيار المعالج مجموعة التعليمات المتاحة عند كتابة البرامج. الحرف p بعد توجيه اختيار المعالج يعني وضع التشغيل المحمي. أصبحت معالجة البيانات والتعليمات البرمجية قريبة، حيث تكون جميع العناوين والمؤشرات 32 بت.

نماذج الذاكرة. MODEL modifier Memory_model، communication_convention، OS_type، stack_parameter يتم استخدام معلمة التعديل لتحديد أنواع المقاطع ويمكن أن تأخذ القيم التالية: استخدم 16 (يتم استخدام مقاطع النموذج المحدد كـ 16 بت) استخدم 32 (يتم استخدام مقاطع النموذج المحدد مثل 32 بت). يتم استخدام المعلمة call_convention لتحديد طريقة تمرير المعلمات عند استدعاء إجراء من لغات أخرى، بما في ذلك اللغات عالية المستوى (C++، Pascal). يمكن أن تأخذ المعلمة القيم التالية: C، BASIC، FORTRAN، PASCAL، SYSCALL، STDCALL.

نماذج الذاكرة. MODEL modifier Memory_model، communication_convention، OS_type، stack_parameter المعلمة OS_type هي OS_DOS بشكل افتراضي، وهي قيد التشغيل هذه اللحظةهذه هي القيمة الوحيدة المدعومة لهذه المعلمة. تم تعيين المعلمة stack_parameter على: NEARSTACK (سجل SS يساوي DS، ويتم تخصيص مناطق البيانات والمكدس في نفس المقطع الفعلي) FARSTACK (سجل SS لا يساوي DS، ويتم تخصيص مناطق البيانات والمكدس في مقاطع فعلية مختلفة). القيمة الافتراضية هي NEARSTACK.

مثال على برنامج لا يفعل شيئا. 686 ص. نموذج مسطح، STDCALL. بيانات. بدء الكود: RET END START RET - أمر المعالج الدقيق. يضمن إنهاء البرنامج بشكل صحيح. ويتعلق باقي البرنامج بتشغيل المترجم. . 686 ف - مسموح بأوامر الوضع المحمي Pentium 6 (Pentium II). يحدد هذا التوجيه مجموعة تعليمات المجمع المدعومة، مما يشير إلى طراز المعالج. . MODEL FLAT، stdcall - نموذج ذاكرة مسطح. يتم استخدام نموذج الذاكرة هذا في نظام التشغيل Windows. stdcall - اصطلاح استدعاء الإجراء المستخدم.

مثال على برنامج لا يفعل شيئا. 686 ص. نموذج مسطح، STDCALL. بيانات. بداية الكود: إعادة نهاية البداية. البيانات هي جزء برنامج يحتوي على البيانات. هذا البرنامجلا يستخدم المكدس، وبالتالي فإن الجزء. المكدس مفقود. . CODE هو جزء من البرنامج يحتوي على التعليمات البرمجية. ابدأ - التسمية. END START - نهاية البرنامج ورسالة إلى المترجم مفادها أن تنفيذ البرنامج يجب أن يبدأ بملصق START. يجب أن يحتوي كل برنامج على توجيه END لتحديد النهاية مصدر الرمزالبرامج. يتم تجاهل كافة الأسطر التي تتبع توجيه END، وتخبر التسمية المحددة بعد توجيه END المترجم باسم الوحدة الرئيسية التي يبدأ منها تنفيذ البرنامج. إذا كان البرنامج يحتوي على وحدة واحدة، فيمكن حذف التسمية الموجودة بعد التوجيه END.

مترجمو لغة التجميع مترجم - برنامج أو الوسائل التقنية، والذي يقوم بتحويل برنامج ممثل بإحدى لغات البرمجة إلى برنامج باللغة الهدف ويسمى كود الكائن. بالإضافة إلى دعم أساليب تقوية تعليمات الآلة، فإن كل مترجم لديه مجموعته الخاصة من التوجيهات وأدوات الماكرو، والتي غالبًا ما تكون غير متوافقة مع أي شيء آخر. الأنواع الرئيسية لمترجمي لغة التجميع: MASM (Microsoft Assembler)، TASM (Borland Turbo Assembler)، FASM (Flat Assembler) - مجمع متعدد التمريرات يتم توزيعه مجانًا من تأليف Tomasz Gryshtar (بولندي)، NASM (Netwide Assembler) - مجاني تم إنشاء المجمع لـ Intel x architecture 86 بواسطة Simon Tatham مع Julian Hall ويتم تطويره حاليًا بواسطة فريق صغير من المطورين في Source. تشكيل. شبكة.

Src="https://present5.com/presentation/-29367016_63610977/image-15.jpg" alt="ترجمة برنامج في Microsoft Visual Studio 2005 1) قم بإنشاء مشروع عن طريق تحديد ملف->جديد- > قائمة المشروع و"> Трансляция программы в Microsoft Visual Studio 2005 1) Создать проект, выбрав меню File->New->Project и указав имя проекта (hello. prj) и тип проекта: Win 32 Project. В дополнительных опциях мастера проекта указать “Empty Project”.!}

Src="https://present5.com/presentation/-29367016_63610977/image-16.jpg" alt="ترجمة البرنامج في Microsoft Visual Studio 2005 2) في شجرة المشروع (عرض->مستكشف الحلول) يضيف"> Трансляция программы в Microsoft Visual Studio 2005 2) В дереве проекта (View->Solution Explorer) добавить файл, в котором будет содержаться текст программы: Source. Files->Add->New. Item.!}

ترجمة البرنامج إلى Microsoft Visual Studio 2005 3) حدد نوع الملف Code C++، ولكن حدد الاسم بالامتداد. أسم:

ترجمة البرنامج إلى Microsoft Visual Studio 2005 5) تعيين معلمات المترجم. انقر بزر الماوس الأيمن فوق قائمة Custom Build Rules في ملف المشروع...

قم بترجمة البرنامج إلى Microsoft Visual Studio 2005 وحدد Microsoft Macro Assembler في النافذة التي تظهر.

ترجمة البرنامج إلى Microsoft Visual Studio 2005 تحقق من الزر الأيمن في الملف hello. asm من قائمة الخصائص وقم بتثبيت عام->الأداة: Microsoft Macro Assembler.

Src="https://present5.com/presentation/-29367016_63610977/image-22.jpg" alt="ترجمة البرنامج في Microsoft Visual Studio 2005 6) قم بتجميع الملف عن طريق تحديد Build->Build hello. prj."> Трансляция программы в Microsoft Visual Studio 2005 6) Откомпилировать файл, выбрав Build->Build hello. prj. 7) Запустить программу, нажав F 5 или выбрав меню Debug->Start Debugging.!}

البرمجة في نظام التشغيل Windows تعتمد البرمجة في نظام التشغيل Windows على استخدام وظائف واجهة برمجة التطبيقات (واجهة برنامج التطبيق، أي واجهة تطبيق البرنامج). يصل عددهم إلى 2000. يتكون برنامج Windows إلى حد كبير من مثل هذه المكالمات. جميع التفاعلات مع الأجهزة الخارجيةوتحدث موارد نظام التشغيل، كقاعدة عامة، من خلال هذه الوظائف. غرفة العمليات نظام ويندوزيستخدم نموذج الذاكرة المسطحة. سيتم تحديد عنوان أي خلية ذاكرة من خلال محتويات سجل واحد 32 بت. هناك 3 أنواع من هياكل البرامج لنظام التشغيل Windows: مربع الحوار (النافذة الرئيسية هي مربع الحوار)، أو وحدة التحكم أو البنية بدون نوافذ، أو البنية الكلاسيكية (نافذة، إطار).

يتصل وظائف ويندوز API في ملف المساعدة، يتم تقديم أي وظيفة API كنوع function_name (FA 1، FA 2، FA 3) النوع - نوع قيمة الإرجاع؛ FAx – قائمة الوسائط الرسمية بالترتيب الذي تظهر به، على سبيل المثال، int message. Box(HWND h.Wnd, LPCTSTR lp.Text, LPCTSTR lp.Caption, UINT u.Type); هذه الوظيفةيعرض نافذة بها رسالة وزر (أو أزرار) خروج. معنى المعلمات: ح. Wnd هو واصف للنافذة التي ستظهر فيها نافذة الرسالة، lp. النص - النص الذي سيظهر في النافذة، LP. تسمية توضيحية - نص في عنوان النافذة، u. النوع - نوع النافذة، على وجه الخصوص، يمكنك تحديد عدد أزرار الخروج.

استدعاء وظائف الرسائل الخاصة بـ Windows API int. Box(HWND h.Wnd, LPCTSTR lp.Text, LPCTSTR lp.Caption, UINT u.Type); جميع معلمات دالة API تقريبًا هي في الواقع أعداد صحيحة 32 بت: HWND هو عدد صحيح 32 بت، LPCTSTR هو مؤشر 32 بت إلى سلسلة، UINT هو عدد صحيح 32 بت. غالبًا ما تتم إضافة اللاحقة "A" إلى اسم الوظيفة للانتقال إلى الإصدارات الأحدث من الوظيفة.

استدعاء وظائف الرسائل الخاصة بـ Windows API int. Box(HWND h.Wnd, LPCTSTR lp.Text, LPCTSTR lp.Caption, UINT u.Type); عند استخدام MASM، يجب عليك إضافة @N N إلى نهاية الاسم - عدد البايتات التي تشغلها الوسائط التي تم تمريرها على المكدس. بالنسبة لوظائف Win 32 API، يمكن تعريف هذا الرقم على أنه عدد الوسائط n مضروبًا في 4 (البايت في كل وسيطة): N=4*n. لاستدعاء دالة، استخدم تعليمة CALL للمجمّع. في هذه الحالة، يتم تمرير جميع وسائط الدالة إليها عبر المكدس (أمر PUSH). اتجاه تمرير الوسائط: من اليسار إلى اليمين - من الأسفل إلى الأعلى. سيتم دفع الوسيطة u إلى المكدس أولاً. يكتب. سيبدو استدعاء الوظيفة المحددة كما يلي: رسالة الاتصال. صندوق. أ@16

استدعاء وظائف الرسائل الخاصة بـ Windows API int. Box(HWND h.Wnd, LPCTSTR lp.Text, LPCTSTR lp.Caption, UINT u.Type); عادةً ما تكون نتيجة تنفيذ أي وظيفة API عددًا صحيحًا يتم إرجاعه في سجل EAX. يمثل توجيه OFFSET "إزاحة في مقطع"، أو، مترجمًا إلى مصطلحات لغة عالية المستوى، "مؤشر" إلى بداية السطر. يحدد توجيه EQU، مثل #define في SI، ثابتًا. يخبر التوجيه EXTERN المترجم أن الوظيفة أو المعرف خارجي لهذه الوحدة.

مثال على برنامج "مرحبا بالجميع!" . 686 ص. نموذج مسطح، STDCALL. STACK 4096.DATA MB_OK EQU 0 STR 1 DB "برنامجي الأول"، 0 STR 2 DB "مرحبًا بالجميع!"، 0 HW DD ؟ رسالة خارجية. صندوق. أ@16: قريب. بدء الكود: PUSH MB_OK PUSH OFFSET STR 1 PUSH OFFSET STR 2 PUSH HW CALL رسالة. صندوق. A@16 بداية النهاية الخلفية

توجيه INVOKE يتيح لك مترجم لغة MASM أيضًا تبسيط استدعاءات الوظائف باستخدام أداة ماكرو - توجيه INVOKE: دالة INVOKE، المعلمة 1، المعلمة 2، ... ليست هناك حاجة لإضافة @16 إلى استدعاء الوظيفة؛ تتم كتابة المعلمات بالضبط بالترتيب الوارد به في وصف الوظيفة. عن طريق وسائل الماكرو للمترجم، يتم وضع المعلمات على المكدس. لاستخدام توجيه INVOKE، يجب أن يكون لديك وصف للنموذج الأولي للوظيفة باستخدام توجيه PROTO في النموذج: رسالة. صندوق. PROTO: DWORD، : DWORD إذا كان البرنامج يستخدم العديد من وظائف Win 32 API، فمن المستحسن استخدام توجيه التضمين C: masm 32includeuser 32.inc

الموضوع 2.5 أساسيات برمجة المعالجات

مع زيادة طول البرنامج، يصبح من الصعب بشكل متزايد تذكر رموز العمليات المختلفة. فن الإستذكار يقدم بعض المساعدة في هذا الصدد.

تسمى لغة ترميز الأوامر الرمزية المجمع.

لغة التجميعهي لغة يتوافق فيها كل كلام مع أمر آلة واحد بالضبط.

حَشديسمى تحويل برنامج من لغة التجميع، أي إعداد برنامج بلغة الآلة عن طريق استبدال الأسماء الرمزية للعمليات بأكواد الآلة، والعناوين الرمزية بأرقام مطلقة أو نسبية، وكذلك دمج برامج المكتبة وتوليد تسلسلات من التعليمات الرمزية عن طريق تحديد معلمات محددة في فرق صغيرة. يوجد هذا البرنامج عادة في ذاكرة القراءة فقط (ROM) أو يتم إدخاله في ذاكرة الوصول العشوائي (RAM) من بعض الوسائط الخارجية.

تتميز لغة التجميع بعدة مميزات تميزها عن اللغات عالية المستوى:

1. هذه مراسلات فردية بين عبارات لغة التجميع وتعليمات الآلة.

2. يتمتع مبرمج لغة التجميع بإمكانية الوصول إلى جميع الكائنات والتعليمات الموجودة على الجهاز المستهدف.

إن فهم أساسيات البرمجة باللغات الموجهة للآلة مفيد من أجل:



فهم أفضل لبنية الكمبيوتر الشخصي واستخدام أكثر كفاءة لأجهزة الكمبيوتر؛

تطوير هياكل أكثر عقلانية للخوارزميات لبرامج حل المشكلات التطبيقية؛

القدرة على عرض وتصحيح البرامج القابلة للتنفيذ ذات الامتداد .exe و.com، المجمعة من أي لغة عالية المستوى، في حالة فقدان البرامج المصدر (عن طريق استدعاء البرامج المحددة في مصحح أخطاء برنامج DEBUG وفك عرضها في التجميع لغة)؛

تجميع البرامج لحل المشكلات الأكثر أهمية (البرنامج المكتوب بلغة موجهة نحو الآلة عادة ما يكون أكثر فعالية - أقصر وأسرع بنسبة 30-60 بالمائة من البرامج التي يتم الحصول عليها نتيجة للترجمة من لغات عالية المستوى)

لتنفيذ الإجراءات المضمنة في البرنامج الرئيسي على شكل أجزاء منفصلة في حالة عدم إمكانية تنفيذها سواء باللغة عالية المستوى المستخدمة أو باستخدام إجراءات خدمة نظام التشغيل.

لا يمكن تشغيل البرنامج بلغة التجميع إلا على عائلة واحدة من أجهزة الكمبيوتر، بينما يمكن تشغيل البرنامج المكتوب بلغة عالية المستوى على أجهزة مختلفة.

تتكون أبجدية لغة التجميع من أحرف ASCII.

الأرقام هي أعداد صحيحة فقط. هناك:

الأرقام الثنائية تنتهي بالحرف B؛

الأرقام العشرية التي تنتهي بالحرف D؛

الأرقام السداسية العشرية تنتهي بالحرف H.

كبش، السجلات، عرض البيانات

بالنسبة لسلسلة معينة من النواب، يتم استخدام لغة برمجة فردية - لغة التجميع.

تحتل لغة التجميع موقعًا متوسطًا بين رموز الآلة واللغات عالية المستوى. البرمجة بهذه اللغة أسهل. يستفيد البرنامج بلغة التجميع بشكل أكثر كفاءة من قدرات جهاز معين (بشكل أكثر دقة، MP) من برنامج بلغة عالية المستوى (وهو أبسط بالنسبة للمبرمج من المجمع). دعونا نلقي نظرة على المبادئ الأساسية للبرمجة باللغات الموجهة للآلة باستخدام مثال لغة التجميع لـ MP KR580VM80. يتم استخدام منهجية عامة للبرمجة في اللغة. ترتبط التقنيات الفنية المحددة لتسجيل البرامج بميزات البنية ونظام الأوامر الخاص بـ MP المستهدف.

نموذج البرمجياتنظام المعالجات الدقيقة يعتمد على MP KR580VM80

نموذج برنامج MPS وفقًا للشكل 1

ذاكرة منافذ MP

س ز مكيف الهواء ص ج

الصورة 1

من وجهة نظر المبرمج، يحتوي MP KR580VM80 على السجلات التالية التي يمكن الوصول إليها بالبرنامج.

أ- سجل تراكم 8 بت. هذا هو السجل الرئيسي للنائب. أي عملية يتم إجراؤها في ALU تتضمن وضع أحد المعاملات المراد معالجتها في المجمع. عادةً ما يتم أيضًا تخزين نتيجة العملية في ALU في A.

ب، ج، د، ه، ح، ل- سجلات للأغراض العامة ذات 8 بتات (GPR). الذاكرة الداخليةالنائب. مصممة لتخزين المعلومات المعالجة، وكذلك نتائج العملية. عند معالجة الكلمات ذات 16 بت، تكون السجلات أزواجًا من BC، وDE، وHL، ويسمى السجل المزدوج الحرف الأول - B، D، H. في زوج التسجيل، الأعلى هو السجل الأول. يتمتع السجلان H وL بخاصية خاصة، تُستخدم لتخزين البيانات ولتخزين عناوين 16 بت لخلايا ذاكرة الوصول العشوائي (RAM).

فلوريدا- سجل العلم (تسجيل التوقيع) سجل 8 بت يتم فيه تخزين خمس علامات لنتيجة إجراء العمليات الحسابية والمنطقية في MP. تنسيق FL وفقا للصورة

البت C (CY - حمل) - حمل، يتم ضبطه على 1 إذا كان هناك حمل من الترتيب العالي للبايت عند إجراء العمليات الحسابية.

البت P (التكافؤ) – التكافؤ، يتم ضبطه على 1 إذا كان عدد الآحاد في بتات النتيجة زوجيًا.

رقم AC عبارة عن حمل إضافي، مصمم لتخزين قيمة الحمل من رباعيات الترتيب المنخفض للنتيجة.

البت Z (صفر) - اضبط على 1 إذا كانت نتيجة العملية 0.

البت S (علامة) - يتم ضبطه على 1 إذا كانت النتيجة سلبية، وعلى 0 إذا كانت النتيجة إيجابية.

SP- مؤشر المكدس، وهو سجل مكون من 16 بتة، مصمم لتخزين عنوان خلية الذاكرة حيث تم كتابة البايت الأخير الذي تم إدراجه في المكدس.

روبية- عداد البرامج (Program counter) وهو سجل مكون من 16 بت، مصمم لتخزين عنوان التعليمة التالية التي سيتم تنفيذها. تتم زيادة محتويات عداد البرنامج تلقائيًا بمقدار 1 فور جلب بايت التعليمات التالية.

يوجد في منطقة الذاكرة الأولية للعنوان 0000Н – 07FF برنامج التحكموبرامج العرض التوضيحي. هذه هي منطقة ROM.

0800 – 0AFF – منطقة العنوان لتسجيل البرامج قيد الدراسة. (كبش).

0В00 – 0ВВ0 - منطقة العنوان لكتابة البيانات. (كبش).

0ВВ0 - عنوان البداية للمكدس. (كبش).

المكدس عبارة عن منطقة منظمة خصيصًا من ذاكرة الوصول العشوائي (RAM) مخصصة للتخزين المؤقت للبيانات أو العناوين. يتم ظهور آخر رقم مكتوب على المكدس أولاً. يقوم مؤشر المكدس بتخزين عنوان آخر خلية مكدس يتم فيها كتابة المعلومات. عند استدعاء روتين فرعي، يتم تخزين عنوان الإرجاع إلى البرنامج الرئيسي تلقائيًا على المكدس. كقاعدة عامة، في بداية كل روتين فرعي، يتم حفظ محتويات جميع السجلات المشاركة في تنفيذه على المكدس، وفي نهاية الروتين الفرعي يتم استعادتها من المكدس.

تنسيق البيانات وهيكل الأوامر للغة التجميع

ذاكرة MP KR580VM80 عبارة عن مصفوفة من الكلمات ذات 8 بتات تسمى بايتات، ولكل بايت عنوان خاص به مكون من 16 بت، والذي يحدد موقعه في تسلسل خلايا الذاكرة. يمكن لـ MP معالجة 65536 بايت من الذاكرة، والتي يمكن تضمينها في كل من ROM وRAM.

تنسيق البيانات

يتم تخزين البيانات في الذاكرة ككلمات ذات 8 بت:

د7 د6 د5 د4 د3 د2 د1 د0

البت الأقل أهمية هو البت 0، والبت الأكثر أهمية هو البت 7.

يتميز الأمر بتنسيقه، أي عدد البتات المخصصة له، والتي يتم تقسيمها بايت بايت إلى مجالات وظيفية معينة.

تنسيق الأوامر

تحتوي أوامر MP KR580VM80 على تنسيق بايت واحد أو اثنين أو ثلاثة بايت. يجب وضع أوامر متعددة البايت باللغات المجاورة. يعتمد تنسيق الأمر على تفاصيل العملية التي يتم تنفيذها.

يحتوي البايت الأول من الأمر على رمز العملية، المكتوب في شكل ذاكري.

فهو يحدد تنسيق الأمر والإجراءات التي يجب أن يقوم بها MP على البيانات أثناء تنفيذها، وطريقة العنونة، وقد يحتوي أيضًا على معلومات حول موقع البيانات.

قد تحتوي البايتتان الثانية والثالثة على بيانات يتم تنفيذ العمليات عليها، أو عناوين تشير إلى موقع البيانات. تسمى البيانات التي يتم تنفيذ الإجراءات عليها بالمعاملات.

تنسيق الأمر أحادي البايت وفقًا للشكل 2

الشكل 4

في أوامر لغة التجميع، يحتوي رمز التشغيل على شكل مختصر لكتابة الكلمات الإنجليزية - وهو تدوين ذاكري. فن الإستذكار (من فن التذكر اليوناني - فن الحفظ) يجعل من السهل تذكر الأوامر من خلال غرضها الوظيفي.

قبل التنفيذ، تتم ترجمة البرنامج المصدر باستخدام برنامج ترجمة يسمى المجمع إلى لغة مجموعات التعليمات البرمجية - لغة الآلة، وبهذا الشكل يتم وضعه في ذاكرة MP ثم يتم استخدامه عند تنفيذ الأمر.


أساليب المعالجة

يجب أن تكون جميع رموز المعاملات (الإدخال والإخراج) موجودة في مكان ما. يمكن أن تكون موجودة في السجلات الداخلية لعضو البرلمان (الأكثر ملاءمة و خيار سريع). يمكن أن تكون موجودة في ذاكرة النظام (الخيار الأكثر شيوعًا). وأخيرًا، يمكن وضعها في أجهزة الإدخال/الإخراج (وهي الحالة النادرة). يتم تحديد موقع المعاملات بواسطة رمز التعليمات. يخرج طرق مختلفة، والتي يمكن لرمز التعليمات من خلالها تحديد مكان أخذ معامل الإدخال ومكان وضع معامل الإخراج. تسمى هذه الأساليب طرق العنونة.

بالنسبة لـ MP KR580VM80، توجد طرق العنونة التالية:

مباشر؛

يسجل؛

غير مباشر؛

مرصوصة.

مباشر تفترض المعالجة أن المعامل (الإدخال) موجود في الذاكرة مباشرة بعد رمز التعليمات. عادة ما يكون المعامل ثابتًا يجب إرساله إلى مكان ما، أو إضافته إلى شيء ما، وما إلى ذلك. يتم تضمين البيانات في البايت الثاني أو الثاني والثالث من الأمر، مع وجود البايت المنخفض من البيانات في البايت الثاني من الأمر، والبايت العالي في بايت الأمر الثالث.

مستقيم (المعروف أيضًا باسم المطلق) تفترض المعالجة أن المعامل (الإدخال أو الإخراج) موجود في الذاكرة عند العنوان، الذي يوجد رمزه داخل البرنامج مباشرة بعد رمز التعليمات. تستخدم في أوامر ثلاثية البايت.

يسجل تفترض المعالجة أن المعامل (الإدخال أو الإخراج) موجود في السجل الداخلي لـ MP. تستخدم في الأوامر أحادية البايت

غير مباشر تفترض المعالجة (الضمنية) أن السجل الداخلي لـ MP لا يحتوي على المعامل نفسه، بل عنوانه في الذاكرة.

كومة يفترض العنوان أن الأمر لا يحتوي على عنوان. معالجة خلايا الذاكرة باستخدام محتويات سجل SP 16 بت (مؤشر المكدس).

نظام الأوامر

نظام أوامر MP عبارة عن قائمة كاملة من الإجراءات الأولية التي يستطيع MP القيام بها. يقوم MP الذي يتم التحكم فيه بواسطة هذه الأوامر بإجراءات بسيطة، مثل العمليات الحسابية والمنطقية الأولية، ونقل البيانات، والمقارنة بين قيمتين، وما إلى ذلك. عدد أوامر MP KR580VM80 هو 78 (مع مراعاة التعديلات 244).

يتم تمييز مجموعات الأوامر التالية:

نقل البيانات؛

علم الحساب؛

دعابة الدماغ؛

أوامر القفز؛

أوامر الإدخال/الإخراج والتحكم والمكدس.


الرموز والاختصارات المستخدمة عند وصف الأوامر وتأليف البرامج

رمز تخفيض
ADDR عنوان 16 بت
بيانات بيانات 8 بت
البيانات 16 بيانات 16 بت
ميناء عنوان جهاز الإدخال/الإخراج 8 بت
بايت 2 البايت الثاني من الأمر
بايت 3 البايت الثالث من الأمر
ر، ر1، ر2 أحد السجلات: A، B، C، D، E، H، L
ر.ب. أحد أزواج التسجيل: B - يحدد الزوج BC؛ D - يحدد زوج DE؛ H - يحدد زوج HL
ر.س التسجيل الأول للزوج
ر.ل. التسجيل الثاني للزوج
Λ الضرب المنطقي
الخامس إضافة منطقية
إضافة الوحدة الثانية
م خلية ذاكرة يحدد عنوانها محتويات زوج التسجيل HL، أي M = (HL)



قمة