MOV من السجل إلى الذاكرة
جزء من قسم الأساسيات في رحلة Assembly على Coddy — الدرس 18 من 45.
الآن بعد أن عرفت كيفية تحميل البيانات من الذاكرة إلى السجل، ستتعلم العكس: تخزين البيانات من السجل إلى الذاكرة.
الصيغة:
mov [address], registerالأقواس [ ] تعني: "تخزين القيمة من السجل في عنوان الذاكرة هذا."
فكر في الأمر على هذا النحو:
تخيل أنه في عنوان الذاكرة destination يوجد صندوق فارغ. لديك قيمة موجودة في سجل (على سبيل المثال، al يحتوي على الرقم 7).
عندما تكتب:
mov [destination], alأنت تخبر المعالج (CPU): "خذ القيمة من السجل al (7) وضعها في الصندوق المسمى destination."
بعد تنفيذ هذه التعليمة، يحتوي عنوان الذاكرة destination الآن على القيمة 7. القيمة الموجودة في al تبقى هناك — ولا يتم إزالتها.
مثال:
mov al, 7 ; ضع القيمة 7 في السجل al
mov [destination], al ; قم بتخزين القيمة من al في عنوان الذاكرة "destination"ملاحظة: في هذا التمرين، البيانات في الذاكرة هي 1 بايت (8 بت). لهذا السبب نستخدم al — فهو السجل ذو الـ 8 بت الذي يطابق الحجم. ستتعلم المزيد عن أحجام السجلات لاحقاً.
قواعد هامة:
| القاعدة | الشرح |
|---|---|
| الأقواس مطلوبة | mov destination, al سيكون خاطئاً |
| يجب أن تكون الوجهة عنوان ذاكرة | استخدم تسمية مثل [destination] |
| يجب أن يتطابق الحجم | لهذا التمرين، استخدم al (8 بت) |
خطأ شائع:
; خطأ: الأقواس مفقودة
mov destination, al
; صحيح: يخزن القيمة في الذاكرة
mov [destination], alفي التحدي أدناه، تم إنشاء عنوان الذاكرة destination بالفعل لك. ستتعلم كيفية إنشاء بياناتك الخاصة في الفصل الثالث. في الوقت الحالي، ركز فقط على تعليمة MOV.
التحدي
اكتب سطرين من لغة التجميع (assembly) للقيام بما يلي:
- ضع الرقم 9 في السجل
al - قم بتخزين القيمة من
alفي عنوان الذاكرةdestination
(عنوان الذاكرة destination تم إنشاؤه بالفعل من أجلك.)
جرّب بنفسك
section .data
msg db 'destination = '
msg_len equ $ - msg
section .bss
digit resb 1
section .text
global _start
_start:
; يتم تضمين solution.asm هنا
; يحدد الوجهة (destination) وتعليمات MOV الخاصة بالطالب
%include "solution.asm"
; تحميل القيمة المخزنة من الذاكرة إلى al للطباعة
mov al, [destination]
; حفظها
mov r12, rax
; طباعة "destination = "
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, msg_len
syscall
; طباعة القيمة
mov rax, r12
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