LEA - تحميل العنوان
جزء من قسم الأساسيات في رحلة Assembly على Coddy — الدرس 19 من 45.
حتى الآن، قمت باستخدام mov لتحميل القيم من الذاكرة إلى السجلات. لكن في بعض الأحيان لا تريد القيمة — بل تريد العنوان نفسه.
يرمز LEA إلى Load Effective Address. فهو يحسب عنوان الذاكرة ويضع ذلك العنوان في سجل (register)، دون الوصول إلى الذاكرة.
الصيغة:
lea register, [address]MOV مقابل LEA:
| التعليمة | ماذا تفعل |
|---|---|
mov al, [number] | تذهب إلى الذاكرة، وتجلب القيمة الموجودة بداخلها، وتضعها في al |
lea rsi, [number] | لا تذهب إلى الذاكرة. تحسب عنوان number وتضعه في rsi |
فكر في الأمر على هذا النحو:
mov= افتح الصندوق وخذ ما بداخلهlea= اكتب رقم الصندوق (العنوان) على ورقة
مثال:
number db 42 ; القيمة 42 مخزنة في عنوان ما
mov al, [number] ; al = 42 (القيمة)
lea rsi, [number] ; rsi = عنوان number (مثلاً، 0x402000)لماذا تحتاج إلى LEA؟
في لغة التجميع (assembly)، عندما تريد طباعة سلسلة نصية أو تمرير موقع في الذاكرة إلى دالة، فأنت بحاجة إلى العنوان، وليس القيمة. استدعاء النظام write (والذي ستتعلمه في الفصل الخامس) يتوقع عنواناً في rsi.
ما يمكن لـ LEA فعله (بما يتجاوز العناوين البسيطة):
يمكن لـ LEA أيضًا إجراء عمليات حسابية أساسية باستخدام العناوين. على سبيل المثال:
lea rsi, [number + 5] ; rsi = عنوان number + 5 بايتهذا مفيد للعمل مع المصفوفات وهياكل البيانات.
التحدي
اكتب سطراً واحداً بلغة التجميع (assembly) لتحميل عنوان message في سجل rsi.
جرّب بنفسك
section .data
msg_prefix db 'message = '
prefix_len equ $ - msg_prefix
section .text
global _start
_start:
; تعليمات lea الخاصة بالطالب تعمل أولاً
; يجب أن يحتوي rsi الآن على عنوان الرسالة
; طباعة البادئة
mov rax, 1
mov rdi, 1
mov rsi, msg_prefix
mov rdx, prefix_len
syscall
%include "solution.asm"
; طباعة السلسلة النصية باستخدام العنوان الذي قام الطالب بتحميله
mov rax, 1
mov rdi, 1
; rsi يحتوي بالفعل على العنوان (من كود الطالب)
mov rdx, 6 ; "Hello" + سطر جديد = 6 بايت
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