السلام عليكم و رحمة الله تعالى و بركاتهأقدم لكم في هذا الموضوع تعريف شامل و مختصر عن الـ Assembleur ( اللغة الأقرب إلى الآلة منها إلى الأنسان ) و هي تعتبر البوابة الأولى لمعرفة كيفية عمل لغات البرمجة لأن هذه اللغة البسيطة جدا هي التي بنيت منها أوامر لغة الباسكال و السي و الفيجوال باسيك ... إلخ----------نبدأ على بركة الله--------------------لاحظ الصورة جيدا .............. -السجل AX " المركم " Accumulat or :
تجرى من خلاله العمليات الحسابية والمنطقية وهو المفضل لذلك
-السجل BX " القاعدة " Base :
يستخدم لعنونة المعطيات الموجودة في ذاكرة ال RAM تجرى من خلاله العمليات الحسابية والمنطقية
-السجل CX " العداد " Count Registe :
يستخدم كعداد مع التعليمات التكرارية تجرى من خلاله العمليات الحسابية والمنطقية .
-سجل DX " البيانات " Data Registe :
يستخدم في تخزين عمليات الإدخال والإخراج تجرى من خلاله العمليات الحسابية والمنطقية .
·سجلات القطع " القطاعات " :
لديها استخدامات خاصة وهو التأشير إلى عناوين قطاعات الذاكرة .
-سجل قطاع التعليمات CS :
يستخدم للاحتفاظ بعنوان بداية مقطع التعليمات " للبرنامج المنفذ حاليا"
-سجل قطاع المعطيات DS :
يستخدم للاحتفاظ بعنوان بداية مقطع المعطيات " المعرف فيه المتغيرات "
-سجل القطاع المكدس SS : Pile
يستخدم للاحتفاظ بعنوان بداية المقطع المكدس " Stack " .
-سجل القطاع الإضافي ES :
يستخدم للاحتفاظ بعنوان المقطع الإضافي " استخدامه يكون على حسب البرنامج "
·السجلات الدالة :
يستخدم في العنونة الغير مباشرة للتعليمات الجارية أو المطلوب تنفيذها للمعالجة حاليا.
-السجل المكدس SP :
هو سجل بطول 16 بت يستخدم في احتواء عنوان الذاكرة المعالجة حاليا من خلال المكدس , يعدل هذا السجل آليا بعد كل إضافة / إزالة من المكدس
-سجل " مؤشر القاعدة " : Base Pointer BP :
يستخدم للوصول إلى البيانات الموجودة في المكدس , يمكن استخدامه مع القطاعات الأخرى
– DS – CS DS –SS
-سجل " مؤشر المصدر " SI Source Index :
يستخدم لعنونة البيانات , يمكنه الإشارة إلى بداية منطقة محددة من الذاكرة تحتوي على نص يطالب التعامل معه , يستخدم لإيجاد العناوين بالتناسب مع السجل DS
-يسجل " مؤشر الاتجاه " DI Destination Index :
يستخدم لعنونة البيانات و إيجاد العناوين بالتناسب مع ES
*-* سجل الأعلام Flag Registe :
طوله 16 بت يحوي أعلام " كل 1 بت = علم " تستخدم لوصف حالة آخر عملية أو للتحكم بعمليات معينة , حيث يستخدم منها 9 بتات فقط .
OF DF IF TF SF ZF .. AF .. PF .. SF
TF
إذا كان 1:التنفيذ خطوة بخطوة
إذا كان 0:التنفيذ مباشرة
IF
إذا كان 1:إجراء مقاطعات
إذا كان0: عدم إجراء المقاطعات
DF
إذا كان 1:النقل في الاتجاه الطبيعي
إذا كان0: النقل في الاتجاه المعاكس
CF
إذا كان 1:نتيجة العملية أكبر من الهدف
إذا كان0: الهدف يتسع للنتيجة
PF
إذا كان 1:مجموع آحاد النتيجة عدد زوجي
إذا كان0: مجموع الآحاد فردي
AF
إذا كان 1:تسبب آخر عملية في انزياح من " 3 " إلى " 4 "
إذا كان0: عدم وجود إنزياح
ZF
إذا كان 1 :نتيجة أخر عملية تساوي الصفر " = 0 "
إذا كان 0:نتيجة آخر عملية ≠ 0
SF
إذا كان 1:نتيجة آ خر عملية سالبة
إذا كان0: نتيجة أخر عملية موجبة
OF
إذا كان 1:نتيجة العملية أكبر من الهدف " ذات الإشارة "
إذا كان0: الهدف يتسع للنتيجة " ذات الإشارة "
كيفية حساب العنوان الفيزيائي :
-العنوان الفيزيائي = المقطع × (16)10+ الإزاحة عن المقطع .
- أشكال التعليمة :
1* 2 op 1 opopiration , 2* 1 opopiration , 3* opirqtion
-أنظمة العنونة :
·Mode immidiat : في هذا النمط يتم التعامل مع القيمة مباشرة .
·Mode registe : في هذا النمط يتم التعامل مع السجل بحيث القيمة المحتواة تكون فيه .
·Mode direct : في هذا النمط يتم ذكر العنوان الذي يحوي القيمة المستهدفة .
·Mode indirect : في هذا النمط نتعامل مع عنوان ذاكرة موجودة في سجل أو عنوان ذاكرة آخر
·Mode indirect index : تكون القيمة المطلوبة في عنوان \اكرة يعرف بجمع عنوان آخر بسجل / ــلين مع ثابت .
- أهم تعليمات assembleur :
1.Add مثال : AX+BXAdd( جمعAXوBXوحفظالنتيجةفيAX )
2.Inc مثال : AXInc( زيادة مقدار واحد ل AX )
3.Sub مثال : AX-BXSub( طرح BX من AX ونحتفظ بالنتيجة في AX(
4.Dec مثال : AXDec( نقصان مقدار واحد من AX(
5.Cmp مثال : AX BXCmp( طرح BX من AX دون تخزين الناتج للتأثير في flag )
6.Neg مثال : AXNeg( لإيجاد المكمل الثاني لقيمة AX(
7.Mul مثال : BXMul( ضرب BX × AX والاحتفاظ بالنتيجة في AX(
8.Div مثال : CXDiv( قسمة AX على CXوالاحتفاظ بالنتيجة في AH/AL , DX/AX )
9.Mov مثال : 10 AXMov ( وضع قيمة 10 في السجل AX(
10.Push مثال :AXPush( وضع AX في SP وصعود SP بدرجة واحدة (
11.Pop مثال : BXPop( نزول SP بخطوة ووضع محتوى SP في BX(
12.Loop مثال : FFLoop( نقصان 1 من CX , 0=CX , 0 ≠CX )
13.Loop z مثال : FFLoop Z(نقصان 1 من CX , 0=CX أو 0=ZF / 0≠CX و 1=ZF )
14.Loop nz مثال : FFLoop NZ(نقصان 1 من CX , 0=CX أو 0=ZF / 0≠CX و 0=ZF )
الموضوع من إنشائي الشخصي ، أتمنى أن ينال إعجابكم
تحياتي الأخوية