MOV من الذاكرة إلى السجل
جزء من قسم الأساسيات في رحلة Assembly على Coddy. الدرس 17 من 45.
حتى الآن، نقلتَ أرقامًا مباشرةً إلى السجلات (فوريًا) ونسختَ القيم بين السجلات. الآن ستتعلّم كيفية تحميل البيانات من memory إلى سجل.
لماذا هذا مهم:
تذكّر من الفصل 0: لا يمكن لوحدة المعالجة المركزية العمل مباشرةً مع الذاكرة. يجب تحميل data في السجلات أولًا. هكذا تفعل ذلك.
البنية النحوية:
mov register, [address]تعني الأقواس [ ]: «انتقل إلى عنوان الذاكرة هذا واحصل على القيمة المخزنة هناك.»
فكّر في الأمر بهذه الطريقة:
تخيّل أنه يوجد صندوق في عنوان الذاكرة number. داخل ذلك الصندوق توجد قيمة، مثلًا الرقم 5. عندما تكتب:
mov al, [number] ; حمّل القيمة من عنوان الذاكرة "number" إلى alأنت تخبر وحدة المعالجة المركزية: «اذهب إلى الصندوق المسمى number، وخذ أي قيمة موجودة بداخله (وهي في هذه الحالة 5)، وانسخها إلى السجل al.»
بعد تنفيذ هذه التعليمة، تصبح القيمة 5 مخزنة الآن في al. وتبقى القيمة الأصلية الموجودة داخل الصندوق في العنوان number هناك. ولا تتم إزالتها.
قواعد مهمة:
| القاعدة | الشرح |
|---|---|
| يجب أن يكون المصدر عنوان memory | [label] أو [address] |
| الأقواس مطلوبة | mov al, myNumber يحمّل address، وليس القيمة |
| يجب أن يتطابق الحجم | إذا كانت memory تخزّن بايتًا، فاستخدم al (وليس rax) |
خطأ شائع:
; خطأ: يحمّل عنوان myNumber، وليس القيمة
mov al, myNumber
; صحيح: يحمّل القيمة المخزّنة عند 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تدرّب بنفسك: Playground لـ Assembly