السلام عليكم و رحمة الله تعالى و بركاته
أقدم لكم في هذا الموضوع تعريف شامل و مختصر عن الـ Assembleur ( اللغة الأقرب إلى الآلة منها إلى الأنسان ) و هي تعتبر البوابة الأولى لمعرفة كيفية عمل لغات البرمجة لأن هذه اللغة البسيطة جدا هي التي بنيت منها أوامر لغة الباسكال و السي و الفيجوال باسيك ... إلخ
----------
نبدأ على بركة الله
--------------------
لاحظ الصورة جيدا ..............
هذه الصورة هي المخطط الهندسي للمعالج 8088 كمثال مبسط من أجل فهم عمل المعالجات عموما
تكبير الصورةتصغير الصورة تم تعديل ابعاد هذه الصورة. انقر هنا لمعاينتها بأبعادها الأصلية.
-السجل 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 )
الموضوع من إنشائي الشخصي ، أتمنى أن ينال إعجابكم
تحياتي الأخوية