MOV من السجل إلى الذاكرة
جزء من قسم الأساسيات في رحلة Assembly على Coddy. الدرس 18 من 45.
الآن بعد أن عرفت كيفية تحميل البيانات من memory إلى register، ستتعلّم العملية العكسية: تخزين البيانات من register في memory.
البنية النحوية:
mov [address], registerتعني الأقواس [ ]: "خزّن القيمة من register في عنوان الذاكرة هذا."
فكّر في الأمر بهذه الطريقة:
تخيّل أن هناك صندوقًا فارغًا عند عنوان الذاكرة destination. لديك قيمة موجودة في سجل (على سبيل المثال، يحتوي al على الرقم 7).
عندما تكتب:
mov [destination], alفأنت تخبر وحدة المعالجة المركزية: "خذ القيمة من السجل al (7) وضعها في الصندوق المسمى destination."
بعد تنفيذ هذه التعليمة، يحتوي عنوان الذاكرة destination الآن على القيمة 7. وتبقى القيمة الموجودة في al هناك. ولا تتم إزالتها.
مثال:
mov al, 7 ; ضع 7 في سجل al
mov [destination], al ; خزّن القيمة من al في عنوان الذاكرة "destination"ملاحظة: في هذا التمرين، تكون data في memory بحجم 1 بايت (8 بت). ولهذا نستخدم al. إنه register بحجم 8 بت يطابق الحجم. ستتعلّم المزيد عن أحجام register لاحقًا.
قواعد مهمة:
| القاعدة | الشرح |
|---|---|
| إن brackets مطلوبة | mov destination, al سيكون Wrong |
| يجب أن يكون destination عنوان address في الذاكرة | استخدم تسمية مثل [destination] |
| يجب أن يتطابق الحجم | في هذا التمرين، استخدم al (8 بت) |
خطأ شائع:
; خطأ: أقواس مفقودة
mov destination, al
; صحيح: يخزن القيمة في الذاكرة
mov [destination], alفي التحدي أدناه، عنوان الذاكرة destination مُنشأ لك بالفعل. ستتعلّم كيفية إنشاء data الخاصة بك في الفصل 3. في الوقت الحالي، ركّز فقط على تعليمة MOV.
التحدي
اكتب سطرين من لغة التجميع من أجل:
- وضع الرقم 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تدرّب بنفسك: Playground لـ Assembly