Menu
Coddy logo textTech

LEA - Adres Yükleme

Coddy'nin Assembly Journey'sinin Temel Bilgiler bölümünün bir parçası. Ders 19 / 45.

Şimdiye kadar bellekteki değerleri yazmaçlara yüklemek için mov kullandın. Ancak bazen değeri istemezsin. Doğrudan adresi istersin.

LEA, Load Effective Address ifadesinin kısaltmasıdır. Bir bellek adresini hesaplar ve belleğe erişmeden bu adresi bir yazmaç içine yerleştirir.

Sözdizimi:

lea register, [address]

MOV ve LEA:

TalimatNe yapar
mov al, [number]Belleğe gider, içindeki değeri alır ve al içine koyar
lea rsi, [number]Belleğe GİTMEZ. number değerinin adresini hesaplar ve bunu rsi içine koyar

Bunu şöyle düşünebilirsin:

  • mov = kutuyu aç ve içindekini al
  • lea = kutu numarasını (adresi) bir kâğıda yaz

Örnek:

number db 42        ; 42 değeri bir adreste saklanır

mov al, [number]    ; al = 42 (değer)
lea rsi, [number]   ; rsi = number'ın adresi (örn., 0x402000)

LEA'ya neden ihtiyacınız var?

Assembly'de bir dizeyi yazdırmak veya bir işlevle bir bellek konumunu paylaşmak istediğinizde, değere değil adrese ihtiyacınız vardır. write sistem çağrısı (Bölüm 5'te öğreneceğiniz) rsi içinde bir adres bekler.

LEA'nın yapabilecekleri (basit adreslerin ötesinde):

LEA, adreslerle temel matematik işlemleri de yapabilir. Örneğin:

lea rsi, [number + 5]   ; rsi = number + 5 baytın adresi

Bu, diziler ve veri yapılarıyla çalışmak için kullanışlıdır.

challenge icon

Görev

message adresini rsi yazmacına yüklemek için bir satır assembly kodu yazın.

Kendin dene

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

section .text
    global _start

_start:
    ; Öğrencinin lea komutu önce çalışır
    ; rsi artık message adresini içermelidir
    
    ; Öneki yazdır
    mov rax, 1
    mov rdi, 1
    mov rsi, msg_prefix
    mov rdx, prefix_len
    syscall
    
    %include "solution.asm"
    
    ; Öğrencinin yüklediği adresi kullanarak dizeyi yazdır
    mov rax, 1
    mov rdi, 1
    ; rsi zaten adrese sahip (öğrencinin kodundan)
    mov rdx, 6                    ; "Hello" + newline = 6 bayt
    syscall
    
    ; Çıkış
    mov rax, 60
    mov rdi, 0
    syscall
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Temel Bilgiler bölümündeki tüm dersler

Kendi başına pratik yap: Assembly playground