MOV المباشرة
جزء من قسم الأساسيات في رحلة Assembly على Coddy — الدرس 15 من 45.
أبسط أشكال MOV هو MOV الفوري. "الفوري" تعني أن القيمة مكتوبة مباشرة في التعليمة نفسها.
الصيغة:
mov register, valueتُنسخ القيمة إلى السجل.
أمثلة:
| التعليمة | ماذا تفعل |
|---|---|
mov rax, 5 | نسخ الرقم 5 إلى rax |
mov rbx, 100 | نسخ الرقم 100 إلى rbx |
mov rcx, 0 | نسخ الرقم 0 إلى rcx |
هذا الكود لا يقوم بأي شيء مرئي (لا توجد مخرجات بعد)، ولكنه يضع الأرقام بنجاح في السجلات (registers).
ملاحظة: سترى تأثير تعليمات MOV هذه في دروس لاحقة عندما تتعلم الطباعة أو تصحيح الأخطاء (debug). في الوقت الحالي، يكفي أن تعرف أن الأرقام مخزنة في السجلات.
قواعد هامة:
| القاعدة | الشرح |
|---|---|
| يجب أن تتناسب القيمة مع السجل (register) | rax يمكنه استيعاب أرقام كبيرة جداً (حتى 2⁶⁴-1) |
| يتم نسخ القيمة، وليس نقلها | الرقم الأصلي لا يزال موجوداً (إنه مجرد رقم) |
| السجلات على اليسار | mov rax, 5 صحيح. mov 5, rax خاطئ |
التحدي
اكتب سطرًا واحدًا من كود التجميع (assembly) لكل مهمة:
- ضع الرقم 5 في المسجل
rax. - ضع الرقم 7 في المسجل
rbx. - ضع الرقم 3 في المسجل
rcx.
جرّب بنفسك
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)