Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

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 بايت

هذا مفيد للعمل مع المصفوفات وهياكل البيانات.

challenge icon

التحدي

اكتب سطراً واحداً بلغة التجميع (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
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس الأساسيات