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

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

## خانات الإستخدام العام

* خانات الاستخدام العام الثمانية هي :
* EAX :Accumulator ، أي المجمع أو المراكم
* EDX:Data Register، يستخدم في عمليات الحساب وعمليات الإدخال والإخراج
* ECX:Counter Register، يستخدم كعداد
* EBX: Base Register يستخدم للتأشير على البيانات(الموجودة في الDS عند الاستخدام بتهيئة المناطق.)
* ESP:Stack Pointer، مؤشر المكدّس
* EBP:Stack Base Pointer، مؤشر قاعدة المكدّس
* ESI:Source Register، مؤشر يستخدم للإشارة إلى "المصدر" في بعض العمليات.
* 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. مؤشر على المكدس.
معظم البرامج في أنظمة التشغيل الحديثة (كلينوكس ومايكروسوفت ويندوز) تستخدم شكل للتعامل مع الذاكرة تشير فيه كل خانات عناوين المناطق إلى ذات المكان في الذاكرة، وبالتالي مؤدية إلى عدم استخدامها، ولكن 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) أو منطقة ذاكرة أو قيمة ثابتة إلى مكان تخزين آخر.
يمكنه نقل من وحدة تخزين في المعالج إلى وحدة تخزين أخرى ، مثال:
أو
كما يمكنه وضع قيمة ثابتة (عدد صحيح) في وحدة تخزين المعالج. مثال:
أو
ووضع الحرف 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