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

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

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

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

الصياغة:

mov destination_register, source_register

تُنسخ القيمة من السجل source إلى السجل destination. يظل سجل المصدر دون تغيير.

مثال:

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

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

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

التحدي

اكتب كود التجميع لتنفيذ المهام التالية:

  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اختبر نفسك

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

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

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