برمجة:أسمبلي/قائمة بأوامر أسمبلي لتصميم x86

من ويكي الكتب
اذهب إلى: تصفح، ابحث

إن أجهزة الحاسوب المبنية بتصميم x8 6 فيها ثمانية خانات تخزين (Register) للإستخدام العام من قبل البرامج، 6 خانات تخزين لعناوين مناطق في الذاكرة ، وخانة تخزين واحدة للمعلومات (قيم تحمل إما 0 أو 1). وكذلك مؤشر للأوامر واحد.

خانات الإستخدام العام[عدل]

خانات الإستخدام العام الثمانية هي :

  1. EAX :Accumulator ، أي المجمع أو المراكم
  2. EDX:Data Register، يستخدم في عمليات الحساب وعمليات الإدخال والإخراج
  3. ECX:Counter Register، يستخدم كعداد
  4. EBX: Base Register يستخدم للتأشير على البيانات(الموجودة في الDS عند الإستخدام بتهيئة المناطق.)
  5. ESP:Stack Pointer، مؤشر المكدّس
  6. EBP:Stack Base Pointer، مؤشر قاعدة المكدّس
  7. ESI:Source Register، مؤشر يستخدم للإشارة إلى "المصدر" في بعض العمليات.
  8. EDI:Destination Register، يستخدم للإشارة إلى "الوجهة" في بعض العمليات.

كل من خانات التخزين هذه تتكون من 32 بت ، وتسمى بالممتدة (Extended)، وبذلك تحمل حرف E قبلها، وذلك بناء على ان التصميم السابق كان يحمل 16 بت ، وكانت خانات التخزين فيه تحمل ذات الأسماء ولكن بدون حرف E، ولا زالت تلك يمكن إستخدامها ، وتمثل النصف الدوني (أول 16 بت من ال32 بت الممكن إستخدامها) ، وتسمى AX, DX, CX, BX, SP, BP, SI, DI.

وكذلك ، فإن البتتات الثمانية العليا للنصف الدوني للخانات EAX, EDX, ECX, EBX ، والبتتات الثمانية الدنيا للنصف الدوني يمكن الوصول إليها بإسم AH, DH, CH, BH و AL, DL, CL, BL بالترتيب.

خانة التخزين اللتي تسع 8 بتات مثل AL,AH,DL,CL لها قدرة تخزينية تستوعب 8 بتات أي ما يعادل بايت واحد فقط أي أنك تستطيع ادخال رقم ستة عشري يبدأ من 0 وحتى 0FFH. (لاحظ أنه كل عددين ستاعشريين يعادل 1 بايت).
خانة التخزين اللتي تتسع 16 بت مثل AX , BX , CX لها قدرة استيعابية بما يعادل 2 بايت يبدأ من 0 وحتى 0FFFFH.
خانة التخزين الموسعه (32 بت) مثل EAX , EBX , ECX تستوعب حتى 4 بايت يبدأ من 0 وحتى 0FFFFFFFFH.

خانات عناوين المناطق[عدل]

هناك 6 خانات لعناوين المناطق هي:

  • SS : Stack Segment. مؤشر على المكدس.
   * CS : Code Segment. مؤشر على الكود (شيفرة الحاسوب).
   * DS : Data Segment. مؤشر على البيانات.
   * ES : Extra Segment. مؤشر على البيانات الإضافية. ('E' تمثل كلمة "Extra")
   * FS : F Segment. مؤشر على بيانات إضافية أخرى. ('F' comes after 'E')
   * GS : G Segment. مؤشر آخر لبيانات الإضافية . ('G' comes after 'F')

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

خانة تخزين المعلومات[عدل]

خانة تخزين المعلومات أو Flags Register هي خانة من 32 بت تستخدم لتخزين ومراقبة نتائج العمليات وحالة المعالج. يسمى كل بت منها راية بالإنجليزية Flag.

EFLAGS Flags
0 0 0 0 0 0 0 0 0 0 ID VIP VIF AC VM RF 0 NT IOPL OF DF IF TF ZF 0 AF 0 PF 1 CF

البتات رقم 0 ورقم 1 محجوزان ومن المفترض ان لا يتم تغييرهما.

تستخدم الرايات لاغراض هي :

الرمز اسم الراية النوع ملاحظات CF Carry flag : وضع يأخذ 1 اذا اعطت البت الاخيرة عن اليسار 1 الى الخارج او اخذت 1 من الخارج والا يأخذ صفر

PF Parity flag :وضع اذا كان عدد ال 1 في اول 8 بتات من النتيجة زوجي تأخذ هذه الراية 1 والا تأخذ صفر

AF Auxiliary flag: وضع اذا اعطت البت الرابعة البت الخامسه 1 او اخذت البت الرابعة من البت الخامسة 1 تأخذ هذه الراية 1 والا صفر

ZF Zero flag: وضع اذا كانت النتيجة صفر تأخذ هذه الراية 1 والا تأخذ صفر

SF Sign flag: وضع اذا كانت النتيجة سالبة تأخذ هذه الراية القيمة1 والا تأخذ القيمة صفر

TF Trap flag: سيطرة اذا وضع المبرمج بها القيمة 1 يتم تنفيذ امر واحد فقط من الاوامر وبعدها تأخذ القيمة صفر

IF Interrupt flag: سيطرة نضعه 1 للسماح لعمليات interrupt في مدخل interrupt للمعالج

DF Direction Flag: سيطرة لتحديد اتجاه الحركة في حالة قراءة النصوص

OF Overflow flag: وضع. تأخذ 1 اذا كانت النتيجة اكبر من المكان المخصص لحفظها والا تأخذ صفر

MOV[عدل]

الأمر mov يقوم بتقل المعلومات من وحدة تخزين (Register) أو منطقة ذاكرة أو قيمة ثابتة إلى مكان تخزين آخر.

يمكنه نقل من وحدة تخزين في المعالج إلى وحدة تخزين أخرى ، مثال:

mov ax,bx

أو

mov cl,dh 

كما يمكنه وضع قيمة ثابتة (عدد صحيح) في وحدة تخزين المعالج. مثال:

mov al,5

أو

mov cx,3AB5H 

ووضع الحرف H بعد الرقم يعني أن الرقم بنظام العد الست عشري Hexadicimal ، أي أن كل خانة يمكن أن تحتوي على 16 عددا وليس على 10 فقط كما في النظام العشري ، وتستبدل القيم التي تعبر عن 10 و 11 و 12 و13 و 14 و15 في النظام العشري بخانة واحدة لكل منها كالترتيب الآتي A B C D E F ، فيكون العدد FFh على سبيل المثال هو عبارة عن 15 + 15×16 ، تماما كما أن العدد 99 هو عبارة عن 9 + 9×10

أوامر أخرى[عدل]

وتوجد هناك أوامر أخرى عديدة مثل : ADD , SUB , DEC , INC , ROR , ROL , SHL , SHR , XCHNG