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)بعد هذه التعليمات:
| السجل | القيمة |
|---|---|
| rax | 7 |
| rcx | 3 |
| rdx | 3 |
| rbx | 7 |
لماذا هذا مهم:
- يمكنك حفظ قيمة عن طريق نسخها إلى سجل (register) آخر قبل تغيير القيمة الأصلية
- يمكنك إعادة استخدام القيم دون تحميلها من الذاكرة مرة أخرى
- هذا هو الأساس لمعظم عمليات لغة التجميع (assembly)
التحدي
اكتب كود التجميع (assembly) للمهام التالية:
- ضع الرقم 4 في
rax - انسخ القيمة من
raxإلىrbx - انسخ القيمة من
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يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
2أنظمة العد
لماذا النظام الثنائي؟الأعداد الثنائيةمن العشري إلى الثنائيلماذا النظام الست عشري؟من الست عشري إلى العشريمن العشري إلى الست عشريASCII والست عشري5استدعاء النظام Exit Syscall
ما هو الـ Syscall؟استدعاء النظام Exit Syscall (60)رموز الخروج (Exit Codes)ملخص: الخروج النظيف (Clean Exit)3التعليمة الأولى - MOV
ما هي MOV؟MOV المباشرةMOV من سجل إلى سجلMOV من الذاكرة إلى السجلMOV من السجل إلى الذاكرةLEA - تحميل العنوانMOV بأحجام مختلفةتدريب: تبديل السجلاتملخص: تحدي MOV