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:
| Talimat | Ne 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 allea= 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 adresiBu, diziler ve veri yapılarıyla çalışmak için kullanışlıdır.
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
syscallBu 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