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)بعد هذه التعليمات:
| السجل | القيمة |
|---|---|
| rax | 7 |
| rcx | 3 |
| rdx | 3 |
| rbx | 7 |
لماذا هذا مهم:
- يمكنك حفظ قيمة عن طريق نسخها إلى سجل آخر قبل تغيير القيمة الأصلية
- يمكنك إعادة استخدام values دون التحميل من الذاكرة مرة أخرى
- هذا هو أساس معظم عمليات لغة التجميع
التحدي
اكتب كود التجميع لتنفيذ المهام التالية:
- ضع الرقم 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تدرّب بنفسك: Playground لـ Assembly