MOV من الذاكرة إلى السجل
جزء من قسم الأساسيات في رحلة Assembly على Coddy — الدرس 17 من 45.
حتى الآن، قمت بنقل الأرقام مباشرة إلى السجلات (فوري) ونسخ القيم بين السجلات. الآن ستتعلم كيفية تحميل البيانات من الذاكرة إلى سجل.
لماذا هذا مهم:
تذكر من الفصل 0: لا يمكن لـ CPU العمل مباشرة مع الذاكرة. يجب تحميل البيانات في registers أولاً. هذه هي الطريقة التي تفعل بها ذلك.
الصيغة:
mov register, [address]الأقواس [ ] تعني: "اذهب إلى عنوان الذاكرة هذا واحصل على القيمة المخزنة هناك."
فكر في الأمر على هذا النحو:
تخيل أنه عند عنوان الذاكرة number يوجد صندوق. داخل هذا الصندوق توجد قيمة، على سبيل المثال الرقم 5. عندما تكتب:
mov al, [number] ; تحميل القيمة من عنوان الذاكرة "number" إلى alأنت تخبر وحدة المعالجة المركزية (CPU): "اذهب إلى الصندوق المسمى number، وخذ أي قيمة موجودة بداخله (في هذه الحالة 5)، وانسخها إلى السجل al."
بعد تنفيذ هذه التعليمة، يتم الآن تخزين القيمة 5 في al. القيمة الأصلية داخل الصندوق في العنوان number تبقى هناك — لا يتم حذفها.
قواعد هامة:
| القاعدة | الشرح |
|---|---|
| يجب أن يكون المصدر عنوان ذاكرة | [label] أو [address] |
| الأقواس مطلوبة | mov al, myNumber يحمل الـ عنوان، وليس القيمة |
| يجب أن يتطابق الحجم | إذا كانت الذاكرة تخزن بايت، استخدم al (وليس rax) |
خطأ شائع:
; خطأ: يحمل عنوان (ADDRESS) myNumber، وليس القيمة
mov al, myNumber
; صحيح: يحمل القيمة (VALUE) المخزنة في myNumber
mov al, [myNumber]التحدي
اكتب سطرًا واحدًا من لغة التجميع لتحميل القيمة من عنوان الذاكرة value إلى المسجل al.
جرّب بنفسك
section .data
msg db 'al = '
msg_len equ $ - msg
section .bss
digit resb 1
section .text
global _start
_start:
; كود الطالب يعمل أولاً (يُحمّل القيمة في al)
%include "solution.asm"
; حفظ القيمة من al
mov r12, rax
; طباعة "al = "
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, msg_len
syscall
; طباعة القيمة الموجودة في al
mov rax, r12
add rax, 48
mov [digit], al
mov rax, 1
mov rdi, 1
mov rsi, digit
mov rdx, 1
syscall
; خروج
mov rax, 60
mov rdi, 0
syscallيتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
2أنظمة العد
لماذا النظام الثنائي؟الأعداد الثنائيةمن العشري إلى الثنائيلماذا النظام الست عشري؟من الست عشري إلى العشريمن العشري إلى الست عشريASCII والست عشري5استدعاء النظام Exit Syscall
ما هو الـ Syscall؟استدعاء النظام Exit Syscall (60)رموز الخروج (Exit Codes)ملخص: الخروج النظيف (Clean Exit)3التعليمة الأولى - MOV
ما هي MOV؟MOV المباشرةMOV من سجل إلى سجلMOV من الذاكرة إلى السجلMOV من السجل إلى الذاكرةLEA - تحميل العنوانMOV بأحجام مختلفةتدريب: تبديل السجلاتملخص: تحدي MOV