سجل الأعلام

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

يتم تضمين علامات الحمل والتكافؤ والحمل المساعد (أو الحمل النصفي ) والصفر والإشارة في العديد من البنى (العديد من البنى الحديثة (RISC) لا تحتوي على علامات، مثل الحمل، وحتى إذا كانت تستخدم علامات، فإن الحمل النصفي نادر، لأن عمليات BCD الحسابية لم تعد شائعة، وحتى أنها تتمتع بدعم محدود في الوضع الطويل على x86-64 ).

في معالج إنتل 8086 ، يبلغ عرض المسجل 16  بت . أما المسجلان اللذان خلفاه، وهما EFLAGS و RFLAGS (في معالجات x86-64 الحديثة )، فيبلغ عرضهما 32  بت و 64  بت على التوالي. وتحافظ المسجلات الأوسع على التوافق مع سابقاتها الأصغر.

الأعلام

سجل علامات Intel x86 [ 1 ]
قليل #قناعاختصاروصففئة=1=0
الأعلام
00x0001التليف الكيسيحمل العلمحالةCY (حمل)كارولاينا الشمالية (ممنوع حمل السلاح)
10x0002BRKIمصيدة الإدخال/الإخراج ( NEC V25 /V35/V55 فقط)، [ 2 ] محجوزة ودائمًا 1 في EFLAGS على جميع معالجات x86 الأخرى [ 3 ] [ 4 ]يتحكم(خاص بـ NEC فقط) يُسمح بالإدخال/الإخراج(خاص بشركة NEC فقط) تم احتجاز الإدخال/الإخراج
20x0004PFعلم التكافؤحالةPE (تكافؤ متساوٍ)PO (التكافؤ الفردي)
30x0008محجوز [ 4 ]
40x0010AFعلم حمل مساعد [ 5 ]حالةAC (حمل إضافي)غير متاح (ممنوع حمل سلاح إضافي)
50x0020محجوز [ 4 ]
60x0040ZFعلم الصفرحالةZR (صفر)نيوزيلندا (ليست صفرًا)
70x0080سان فرانسيسكوعلم اللافتةحالةNG (سلبي)PL (إيجابي)
80x0100تي إفعلم الفخ (خطوة واحدة)يتحكم
90x0200لوعلامة تمكين المقاطعةيتحكمEI (تمكين المقاطعة)DI (تعطيل المقاطعة)
100x0400دي إفعلم الاتجاهيتحكمDN (أسفل)أعلى (أعلى)
110x0800لعلم الفائضحالةOV (الفيضان)NV (ليس في حالة تجاوز)
12-130x3000IOPLمستوى امتياز الإدخال/الإخراج (286+ فقط)، دائمًا جميع القيم 1 على 8086 و186نظام
140x4000العهد الجديدعلامة المهمة المتداخلة (286+ فقط)، دائمًا 1 على 8086 و186نظام
150x8000طبيبعلامة الوضع ( خاصة بسلسلة NEC V فقط)، [ 6 ] محجوزة في جميع معالجات Intel. قيمتها دائمًا 1 في معالجات 8086/186، و0 في معالجات 286 وما بعدها.يتحكم(خاص بشركة NEC فقط) الوضع الأصلي ( متوافق مع 186 )(خاص بشركة NEC فقط) وضع المحاكاة ( متوافق مع 8080 )
أعلام إلكترونية
160x0001  0000الترددات اللاسلكيةاستئناف العلم (إصدار 386+ فقط)نظام
170x0002  0000آلة افتراضيةعلامة وضع 8086 الافتراضي (386+ فقط)نظام
180x0004  0000مكيف هواءفحص المحاذاة (486+، الحلقة 3)، فحص الوصول إلى SMAP ( Broadwell +، الحلقة 0-2)نظام
190x0008  0000VIFعلامة المقاطعة الافتراضية (بنتيوم+)نظام
200x0010  0000كبار الشخصياتمقاطعة افتراضية معلقة (بنتيوم+)نظام
210x0020  0000بطاقة تعريفقادر على استخدام تعليمات CPUID (Pentium+)نظام
22-290x3FC0  0000محجوز
300x4000  0000(لا أحد)تم تحميل علامة جدولة مفتاح AES [ 7 ] ( وحدات المعالجة المركزية VIA C3 / C7 المزودة بـ VIA PadLock فقط) [ أ ]نظام
310x8000  0000الذكاء الاصطناعيتم تمكين مجموعة التعليمات البديلة ( معالجات VIA C5XL فقط) [ 9 ]نظام
RX32"REX32" (بديل لوضع التوافق يسمح بالوصول إلى 16 GPRs) [ 10 ]
أعلام RF
32-630xFFFF  FFFF… …0000  0000محجوز
  1. لم تعد معالجات VIA Nano والمعالجات اللاحقة من VIA/Zhaoxin التي تدعم PadLock تستخدم البت 30 من EFLAGS. [ 8 ]

ملاحظة: عمود القناع في الجدول هو قناع البت AND ( كقيمة سداسية عشرية ) للاستعلام عن العلامة (العلامات) داخل قيمة سجل FLAGS.

الاستخدام

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

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

  • تقوم تعليمات PUSHF و POPF بنقل سجل FLAGS ذي 16 بت.
  • PUSHFD/POPFD (التي تم تقديمها مع بنية i386 ) تنقل سجل EFLAGS المزدوج ذو 32 بت.
  • PUSHFQ/POPFQ (التي تم تقديمها مع بنية x86-64 ) تنقل سجل الكلمات الرباعية 64 بت RFLAGS.

في وضع 64 بت، يتوفر كل من PUSHF/POPF وPUSHFQ/POPFQ، بينما لا يتوفر PUSHFD/POPFD. [ 11 ] : 4-349، 4-432

كما أن البتات الثمانية السفلى من سجل FLAGS مفتوحة أيضًا للتلاعب المباشر بالتحميل/التخزين بواسطة SAHF و LAHF (تحميل/تخزين AH في العلامات).

مثال

تتيح إمكانية إضافة وحذف سجلات FLAGS للبرنامج معالجة المعلومات الموجودة في هذه السجلات بطرق لا توجد لها تعليمات في لغة الآلة. على سبيل المثال، تقوم التعليمات cld` push` و`pop` بمسح وتعيين علامة الاتجاه (DF) على التوالي؛ ولكن لا توجد تعليمات لتكملة DF. يمكن تحقيق ذلك باستخدام كود التجميعstd التالي :

هذا كود 8086، مع سجلات 16 بت تُدفع إلى المكدس، وسجل العلامات هو 16 بت فقط مع هذا المعالج. pushf ؛ استخدم المكدس لنقل FLAGS pop ax ؛ ... إلى سجل AX push ax ؛ وانسخها مرة أخرى إلى المكدس للتخزين xor ax , 400h ؛ قم بتبديل (عكس، "مكمل") DF فقط؛ البتات الأخرى تبقى دون تغيير push ax ؛ استخدم المكدس مرة أخرى لنقل القيمة المعدلة popf ؛ ... إلى سجل FLAGS ؛ أدخل هنا الكود الذي تطلب مكمل علامة DF popf ؛ استعادة القيمة الأصلية لـ FLAGS

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

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

انظر أيضاً

مراجع

  1. دليل مطوري البرامج لبنيتي Intel 64 و IA-32 (ملف PDF) . المجلد  1. مايو 2012. الصفحات 3-21. مؤرشف ( ملف PDF) من الأصل بتاريخ 6 ديسمبر 2013. تاريخ الاطلاع: 11 مارس 2024 . 
  2. NEC، كتاب بيانات المعالج الدقيق من سلسلة V ذو 16 بت ، 1991، الصفحات 429-433.
  3. دليل مطوري البرامج لبنيتي Intel 64 و IA-32 (ملف PDF) . المجلد 1. ديسمبر 2016. صفحة 78. مؤرشف (ملف PDF) من الأصل بتاريخ 25 مايو 2019. تم الاطلاع عليه بتاريخ 7 فبراير 2017 .  
  4. ١ ٢ ٣ "الهندسة العكسية للسيليكون: علامات المعالج 8085 غير الموثقة" . www.righto.com . مؤرشف من الأصل بتاريخ ٢٢ أكتوبر ٢٠١٨. تم الاطلاع عليه بتاريخ ٢١ أكتوبر ٢٠١٨ .
  5. دليل مطوري البرامج لبنيتي Intel 64 و IA-32، المجلد 1. ديسمبر 2022. الصفحات 3-16. مؤرشف من الأصل بتاريخ 2023-06-02 . تم الاطلاع عليه بتاريخ 2023-02-02 . 
  6. دليل مستخدم سلسلة V من NEC ذات 16 بت، مؤرشف بتاريخ 2021-12-02 في Wayback Machine ، رقم الوثيقة U11301E، سبتمبر 2000، صفحة 186
  7. VIA، دليل برمجة PadLock ، الإصدار 1.66، 4 أغسطس 2005، الصفحات 7-8. مؤرشف من الأصل في 26 مايو 2010.
  8. بريلي وو، ردًا على: (تحديث) KVM: إضافة دعم CPUID لمعالجات VIA ، قائمة عناوين KVM، 21 أبريل 2011 - يصف التغيير في استخدام EFLAGS[30] بين VIA C7 وVIA Nano. مؤرشف في 14 مارس 2026.
  9. VIA، VIA C3 Processor Alternate Instruction Set Application Note Archived 2024-01-19 at the Wayback Machine , version 0.24, 2002 - انظر الشكل 2 في الصفحة 12 والفصل 4 في الصفحة 21 للحصول على تفاصيل حول علامة EFLAGS.AI.
  10. "سجل rFLAGS" . sandpile.org . تم الاطلاع عليه بتاريخ 26-02-2026 .
  11. دليل مطوري البرامج لبنيتي Intel 64 و IA-32 (ملف PDF) . المجلد 2B. مايو 2012. مؤرشف (ملف PDF) من الأصل بتاريخ 17 يوليو 2013. تم الاطلاع عليه بتاريخ 11 مارس 2024 .