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