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

LEA - تحميل العنوان

جزء من قسم الأساسيات في رحلة Assembly على Coddy. الدرس 19 من 45.

حتى الآن، استخدمت mov لتحميل القيم من الذاكرة إلى السجلات. لكن في بعض الأحيان لا تريد القيمة. بل تريد address نفسها.

تشير LEA إلى Load العنوان الفعّال. فهي تحسب عنوانًا في الذاكرة وتضع ذلك العنوان في register، من دون الوصول إلى الذاكرة.

البنية النحوية:

lea register, [address]

MOV مقابل LEA:

التعليمةما الذي تفعله
mov al, [number]تذهب إلى الذاكرة، وتحصل على القيمة الموجودة بداخلها، وتضعها في al
lea rsi, [number]لا تذهب إلى الذاكرة. تحسب العنوان الخاص بـ number وتضعه في rsi

فكّر فيها بهذه الطريقة:

  • mov = افتح الصندوق وخذ ما بداخله
  • lea = دوّن رقم الصندوق (address) على قطعة من الورق

مثال:

number db 42        ; القيمة 42 مخزّنة في عنوان ما

mov al, [number]    ; al = 42 (القيمة)
lea rsi, [number]   ; rsi = عنوان number (مثلاً، 0x402000)

لماذا تحتاج إلى LEA؟

في لغة التجميع، عندما تريد طباعة سلسلة نصية أو تمرير موقع في الذاكرة إلى دالة، فأنت تحتاج إلى address، وليس القيمة. يتوقع استدعاء النظام write (الذي ستتعلّمه في الفصل 5) وجود address في rsi.

ما الذي يمكن لـ LEA فعله (بالإضافة إلى العناوين البسيطة):

يمكن لـ LEA أيضًا إجراء عمليات حسابية أساسية باستخدام العناوين. على سبيل المثال:

lea rsi, [number + 5]   ; rsi = عنوان number + 5 بايت

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

challenge icon

التحدي

اكتب سطرًا واحدًا من لغة التجميع لتحميل عنوان message في السجل rsi.

جرّب بنفسك

section .data
    msg_prefix db 'message = '
    prefix_len equ $ - msg_prefix

section .text
    global _start

_start:
    ; تعليمة lea الخاصة بالطالب تُنفَّذ أولاً
    ; يجب أن يحتوي rsi الآن على عنوان message
    
    ; طباعة البادئة
    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اختبر نفسك

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

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

تدرّب بنفسك: Playground لـ Assembly