سؤال

أين يمكنني العثور على أسماء السجلات الجديدة للتجميع في هذه الهندسة المعمارية؟

أنا أشير إلى السجلات في x86 مثل EAX و ESP و EBX ، إلخ. لكنني أحبها في 64 بت.

لا أعتقد أنهم متماثلون كما عندما أقوم بتفكيك رمز C ، أحصل على R بدلاً من E's.

هل كانت مفيدة؟

المحلول

تم تمديد السجلات القديمة 32 بت إلى 64 بت ، r السجلات (rax, rbx, rsp وهلم جرا).

بالإضافة إلى ذلك ، هناك بعض سجلات الأغراض العامة الإضافية r8 عبر r15 والتي يمكن الوصول إليها أيضًا (على سبيل المثال) r8d, r8w و r8b (الكلمة المزدوجة 32 بت السفلية ، و 16 بت و 8 بت بايت على التوالي). ال b اللاحقة هي تسميات AMD الأصلية ولكن سترى أحيانًا مكتوبة على أنها l (أحرف صغيرة L) لـ "بايت منخفض".

أنا أميل إلى تفضيل b اللاحقة بنفسي (على الرغم من أن السجلات الحالية منخفضة البايت al, bl, وما إلى ذلك) لأنه يطابق d/w = double/word أسماء و l يمكن أن يكون مخطئا ل long. أو الأسوأ من ذلك الرقم 1, ، يقودك إلى السؤال عن رقم سجل Heck 81 هو :-)

لا تزال البايتات العالية للسجلات القديمة 16 بت لا تزال متاحة ، في ظل العديد من الظروف ، مثل ah, bh, وما إلى ذلك (على الرغم من أن هذا لا يكون هو الحال بالنسبة للجديد r8 عبر r15 السجلات). هناك بعض جديد تشفيرات التعليمات ، على وجه التحديد أولئك الذين يستخدمون REX البادئة ، التي لا يمكن الوصول إلى تلك البايتات العالية الأصلية ، لكن البعض الآخر لا يزال حراً في استخدامها.

بالإضافة إلى ذلك ، هناك بعض سجلات SSE الجديدة ، xmm8 على أية حال xmm15.

ال eip و eflags كما تم تمديد السجلات إلى rip و rflags(على الرغم من ارتفاع 32 بت rflags هي ، في الوقت الحالي ، لا تزال غير مستخدمة).

انظر صفحة ويكيبيديا و MSDN لمزيد من التفاصيل.

ما إذا كانت هذه مدعومة في asm الكلمة الرئيسية لمجمول C معين ، لم أستطع أن أقول. ما هو التجميع الصغير الذي أقوم به (وأصبحت حوالي يوم واحد في السنة) يتم في التجميع بدلاً من C.


متعلق ب:

نصائح أخرى

ال وثائق MSDN يتضمن معلومات حول سجلات X64.

يوسع X64 سجلات X64 8 للأغراض العامة لتكون 64 بت ، وتضيف 8 سجلات جديدة 64 بت. تحتوي السجلات 64 بت على أسماء تبدأ بـ "R" ، لذلك على سبيل المثال ، يسمى امتداد 64 بت من EAX Rax. تتم تسمية السجلات الجديدة R8 من خلال R15.

يمكن معالجة 32 بت أقل و 16 بت و 8 بت من كل سجل في المعاملات. ويشمل ذلك السجلات ، مثل ESI ، الذي لم يكن قابلاً للمعالجة من 8 بتات. يحدد الجدول التالي أسماء لغة التجميع للأجزاء السفلية من السجلات 64 بت.

64-bit register | Lower 32 bits | Lower 16 bits | Lower 8 bits
==============================================================
rax             | eax           | ax            | al
rbx             | ebx           | bx            | bl
rcx             | ecx           | cx            | cl
rdx             | edx           | dx            | dl
rsi             | esi           | si            | sil
rdi             | edi           | di            | dil
rbp             | ebp           | bp            | bpl
rsp             | esp           | sp            | spl
r8              | r8d           | r8w           | r8b
r9              | r9d           | r9w           | r9b
r10             | r10d          | r10w          | r10b
r11             | r11d          | r11w          | r11b
r12             | r12d          | r12w          | r12b
r13             | r13d          | r13w          | r13b
r14             | r14d          | r14w          | r14b
r15             | r15d          | r15w          | r15b

يمتد X64 سجلات الغرض العام 32 بت على النحو التالي:

EAX -> RAX
EBX -> RBX
ECX -> RCX
EDX -> RDX
ESI -> RSI
EDI -> RDI
ESP -> RSP
EBP -> RBP

يضيف X64 أيضًا سجلات الأغراض العامة 64 بت التالية:

R8, R9, R10, R11, R12, R13, R14, R15

بالإضافة إلى ذلك ، تعد SSE جزءًا من مواصفات X64 ، وبالتالي فإن سجلات Vector XMM0-XMM15 متوفرة أيضًا

يمكنك العثور على بعض المعلومات الأساسية عن الهندسة المعمارية في ويكيبيديا/x86-64 أو انتقل إلى موقع إنتل.

دعونا نقرأ دليل Intel

أين يمكنني العثور على أسماء السجلات الجديدة للتجميع في هذه الهندسة المعمارية.

في دليل المعالج "Intel 64 و IA-32 Architectures ، المجلد 1 المجلد 1: العمارة الأساسية" ، على سبيل المثال الإصدار 253665-053US:

  • ابحث عن "السجلات"
  • المباراة الأولى هي الفهرس "3.4 سجل تنفيذ البرنامج الأساسي"
  • عنصرين أدناه "3.4.1.1 سجلات للأغراض العامة في وضع 64 بت"

في هذا القسم:

إذا تم تحديد حجم المعامل 64 بت: تتوفر RAX ، RBX ، RCX ، RDX ، RDI ، RSI ، RBP ، RSP ، R8-R15. R8D-R 15D/R8-R15 تمثل ثمانية سجلات جديدة للأغراض العامة.

تذكير: وضع 64 بت هو الوضع "العادي" في x86-64. الوضع الرئيسي الآخر هو "وضع التوافق" الذي يحاكي IA32.

إذا استمرت في البحث عن "تسجيل" على TOC ، فستجد أيضًا أقسامًا على سجلات "Crushing" لـ Floating Point و SIMD المنتشرة في الدليل:

  • 8.1.2 - سجلات بيانات FPU X87 (STX)
  • 9.9.2 - سجلات MMX
  • 10.2.2 - سجلات XMM
  • 14.1.1 - دعم سجل SIMD واسع 256 بت (YMM)

هناك العديد من سجلات التحكم التي لها آثار جانبية مختلفة ولا يمكن كتابتها بشكل عام إلا إذا كنت تريد هذه الآثار (وغالبًا تتطلب الحلقة 0). تم تلخيصها في "دليل برمجة نظام المجلد 3 - 2.1.6 سجلات النظام" ، وهو أمر أكثر لمطوري نظام التشغيل.

النهج التجريبي الجيد هو الجري info all-registers في GDB: كيفية طباعة القيم تسجيل في GDB؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top