Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

MOV من السجل إلى الذاكرة

جزء من قسم الأساسيات في رحلة Assembly على Coddy. الدرس 18 من 45.

الآن بعد أن عرفت كيفية تحميل البيانات من memory إلى register، ستتعلّم العملية العكسية: تخزين البيانات من register في memory.

البنية النحوية:

mov [address], register

تعني الأقواس [ ]: "خزّن القيمة من register في عنوان الذاكرة هذا."

فكّر في الأمر بهذه الطريقة:

تخيّل أن هناك صندوقًا فارغًا عند عنوان الذاكرة destination. لديك قيمة موجودة في سجل (على سبيل المثال، يحتوي al على الرقم 7).

عندما تكتب:

mov [destination], al

فأنت تخبر وحدة المعالجة المركزية: "خذ القيمة من السجل al (7) وضعها في الصندوق المسمى destination."

بعد تنفيذ هذه التعليمة، يحتوي عنوان الذاكرة destination الآن على القيمة 7. وتبقى القيمة الموجودة في al هناك. ولا تتم إزالتها.

مثال:

mov al, 7            ; ضع 7 في سجل al
mov [destination], al ; خزّن القيمة من al في عنوان الذاكرة "destination"

ملاحظة: في هذا التمرين، تكون data في memory بحجم 1 بايت (8 بت). ولهذا نستخدم al. إنه register بحجم 8 بت يطابق الحجم. ستتعلّم المزيد عن أحجام register لاحقًا.

قواعد مهمة:

القاعدةالشرح
إن brackets مطلوبةmov destination, al سيكون Wrong
يجب أن يكون destination عنوان address في الذاكرةاستخدم تسمية مثل [destination]
يجب أن يتطابق الحجمفي هذا التمرين، استخدم al (8 بت)

خطأ شائع:

; خطأ: أقواس مفقودة
mov destination, al

; صحيح: يخزن القيمة في الذاكرة
mov [destination], al

في التحدي أدناه، عنوان الذاكرة destination مُنشأ لك بالفعل. ستتعلّم كيفية إنشاء data الخاصة بك في الفصل 3. في الوقت الحالي، ركّز فقط على تعليمة MOV.

challenge icon

التحدي

اكتب سطرين من لغة التجميع من أجل:

  1. وضع الرقم 9 في السجل al
  2. تخزين القيمة من al في عنوان الذاكرة destination

(عنوان الذاكرة destination مُنشأ بالفعل من أجلك.)

جرّب بنفسك

section .data
    msg db 'destination = '
    msg_len equ $ - msg

section .bss
    digit resb 1

section .text
    global _start

_start:
    ; يتم تضمين solution.asm هنا
    ; يعرّف destination وتعليمات MOV الخاصة بالطالب
    
    %include "solution.asm"
    
    ; حمّل القيمة المخزنة من الذاكرة إلى al للطباعة
    mov al, [destination]
    
    ; احفظها
    mov r12, rax
    
    ; اطبع "destination = "
    mov rax, 1
    mov rdi, 1
    mov rsi, msg
    mov rdx, msg_len
    syscall
    
    ; اطبع القيمة
    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
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس الأساسيات

تدرّب بنفسك: Playground لـ Assembly