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

MOV من سجل إلى سجل

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

الآن بعد أن عرفت كيفية وضع رقم مباشرة في سجل (MOV immediate)، يمكنك أيضاً نسخ القيم بين السجلات.

الصيغة:

mov destination_register, source_register

يتم نسخ القيمة من سجل المصدر إلى سجل الوجهة. يبقى سجل المصدر دون تغيير.

مثال:

mov rax, 5      ; rax = 5
mov rbx, rax    ; rbx = 5 (تم نسخه من rax)

بعد هاتين التعليمتين، كل من rax و rbx يحتويان على 5.

هام: لا يزال سجل المصدر (rax) يحتفظ بقيمته. تقوم MOV بالنسخ — فهي لا تقوم بالقص أو النقل.

مثال آخر:

mov rax, 7      ; rax = 7
mov rcx, 3      ; rcx = 3
mov rdx, rcx    ; rdx = 3 (تم نسخه من rcx)
mov rbx, rax    ; rbx = 7 (تم نسخه من rax)

بعد هذه التعليمات:

السجلالقيمة
rax7
rcx3
rdx3
rbx7

لماذا هذا مهم:

  • يمكنك حفظ قيمة عن طريق نسخها إلى سجل (register) آخر قبل تغيير القيمة الأصلية
  • يمكنك إعادة استخدام القيم دون تحميلها من الذاكرة مرة أخرى
  • هذا هو الأساس لمعظم عمليات لغة التجميع (assembly)
challenge icon

التحدي

اكتب كود التجميع (assembly) للمهام التالية:

  1. ضع الرقم 4 في rax
  2. انسخ القيمة من rax إلى rbx
  3. انسخ القيمة من rbx إلى rcx

بعد تنفيذ الكود الخاص بك، يجب أن تحتوي جميع السجلات الثلاثة على الرقم 4.

جرّب بنفسك

section .data
    msg_rax db 'rax = '
    msg_rax_len equ $ - msg_rax
    msg_rbx db 'rbx = '
    msg_rbx_len equ $ - msg_rbx
    msg_rcx db 'rcx = '
    msg_rcx_len equ $ - msg_rcx

section .bss
    digit resb 1

section .text
    global _start

_start:
    %include "solution.asm"
    
    ; حفظ القيم
    mov r12, rax
    mov r13, rbx
    mov r14, rcx
    
    ; طباعة "rax = "
    mov rax, 1
    mov rdi, 1
    mov rsi, msg_rax
    mov rdx, msg_rax_len
    syscall
    
    ; طباعة قيمة rax
    mov rax, r12
    add rax, 48
    mov [digit], al
    mov rax, 1
    mov rdi, 1
    mov rsi, digit
    mov rdx, 1
    syscall
    
    ; طباعة "rbx = "
    mov rax, 1
    mov rdi, 1
    mov rsi, msg_rbx
    mov rdx, msg_rbx_len
    syscall
    
    ; طباعة قيمة rbx
    mov rax, r13
    add rax, 48
    mov [digit], al
    mov rax, 1
    mov rdi, 1
    mov rsi, digit
    mov rdx, 1
    syscall
    
    ; طباعة "rcx = "
    mov rax, 1
    mov rdi, 1
    mov rsi, msg_rcx
    mov rdx, msg_rcx_len
    syscall
    
    ; طباعة قيمة rcx
    mov rax, r14
    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اختبر نفسك

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

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