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