المسجلات مقابل الذاكرة
جزء من قسم الأساسيات في رحلة Assembly على Coddy — الدرس 3 من 45.
لقد تعلمت الآن عن مكانين يمكن أن تتواجد فيهما البيانات داخل الكمبيوتر:
- المسجلات (Registers) — صناديق تخزين صغيرة داخل وحدة المعالجة المركزية (CPU)
- الذاكرة (RAM) — شبكة عملاقة من الفتحات المرقمة خارج وحدة المعالجة المركزية (CPU)
ولكن لماذا يوجد مكانان؟ ولماذا لا تستطيع وحدة المعالجة المركزية (CPU) العمل مباشرة مع الذاكرة؟
الإجابة هي السرعة. السجلات (Registers) سريعة للغاية لأنها موجودة داخل وحدة المعالجة المركزية (CPU). الذاكرة أبطأ لأنها موجودة في الخارج. يمكن لوحدة المعالجة المركزية (CPU) الوصول إلى السجل في دورة واحدة، لكن الوصول إلى الذاكرة يستغرق وقتًا أطول بكثير.
مقارنة جنباً إلى جنب:
| الميزة | المسجلات (Registers) | الذاكرة (RAM) |
|---|---|---|
| الموقع | داخل وحدة المعالجة المركزية (CPU) | خارج وحدة المعالجة المركزية (CPU) |
| السرعة | سريعة للغاية (دورة واحدة) | أبطأ (دورات عديدة) |
| عدد فتحات التخزين | قليلة جداً (16-32 على x86-64) | الملايين أو المليارات |
| حجم كل فتحة | 8 بايت (64 بت) | 1 بايت |
| كيفية الوصول إليها | بالاسم (rax، rbx، rcx...) | بالعنوان (1000، msg، buffer) |
| متطايرة؟ | نعم (تختفي عند انقطاع التيار الكهربائي) | نعم (تختفي عند انقطاع التيار الكهربائي) |
القاعدة الأكثر أهمية في لغة التجميع (Assembly):
لا يمكن لوحدة المعالجة المركزية (CPU) العمل مباشرة مع البيانات الموجودة في الذاكرة. يجب تحميل البيانات في السجلات (registers) أولاً.
هذا ليس اختيارياً. هكذا تم تصميم وحدة المعالجة المركزية (CPU). كل عملية جمع، وكل مقارنة، وكل نقل للبيانات يجب أن يمر عبر سجل (register).
النمط المكون من ثلاث خطوات الذي ستستخدمه باستمرار:
| الخطوة | ماذا يحدث | مثال |
|---|---|---|
| 1. LOAD (تحميل) | نسخ البيانات من الذاكرة إلى السجل (register) | mov rax, [count] |
| 2. WORK (عمل) | القيام بشيء ما باستخدام السجل | add rax, 5 |
| 3. STORE (تخزين) | نسخ النتيجة مرة أخرى إلى الذاكرة (إذا لزم الأمر) | mov [result], rax |
ماذا يحدث إذا نسيت هذه القاعدة؟
إذا حاولت جمع رقمين كلاهما في الذاكرة، فسيعطيك المجمّع (assembler) خطأً. ببساطة، لا تستطيع وحدة المعالجة المركزية (CPU) القيام بذلك. يجب عليك تحميلهما في السجلات (registers) أولاً.
جرّب بنفسك
لا يتضمّن هذا الدرس تحدّيًا برمجيًا.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
2أنظمة العد
لماذا النظام الثنائي؟الأعداد الثنائيةمن العشري إلى الثنائيلماذا النظام الست عشري؟من الست عشري إلى العشريمن العشري إلى الست عشريASCII والست عشري5استدعاء النظام Exit Syscall
ما هو الـ Syscall؟استدعاء النظام Exit Syscall (60)رموز الخروج (Exit Codes)ملخص: الخروج النظيف (Clean Exit)