Menu
Coddy logo textTech

$ Sembolü

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

write syscall'ını (Bölüm 5) kullanarak bir string yazdırdığında, CPU'ya kaç bytes yazdıracağını söylemen gerekir.

Karakterleri elle sayabilirsin:

message db 'Hello', 0x0a    ; 6 bayt (H e l l o newline)
mov rdx, 6                  ; Manuel sayım

Ancak Manual sayma yavaştır ve hataya açıktır. string değerini değiştirirsen yeniden saymalı ve sayıyı güncellemelisin.

Çözüm: <strong>$</strong> kullanarak otomatik length hesaplama

$, konum sayacıdır. Bir sonraki byte'ın yerleştirileceği mevcut bellek adresini temsil eder.

Örnek 1: Basit dize

section .data
    message db 'Hello', 0x0a
    msgLen equ $ - message

Nasıl çalışır:

  • message başlangıç adresidir (örnek: 1000)
  • 6 bytes depolandıktan sonra $ 1006 olur
  • $ - message = 1006 − 1000 = 6 (length)

Not: equ, equate ifadesinin kısaltmasıdır. Bir sabit oluşturur: bir değeri temsil eden bir ad.

Örnek 2: Birden çok dize

section .data
    first db 'Hi', 0x0a
    len1 equ $ - first      ; len1 = 3 ('H','i', yeni satır)
    
    second db 'Hello', 0x0a
    len2 equ $ - second     ; len2 = 6 ('H','e','l','l','o', yeni satır)

Her string'in kendi length değeri otomatik olarak hesaplanır. $, her hesaplama için sıfırlanır çünkü her zaman her string'in hemen sonrasındaki geçerli konumu ifade eder.

challenge icon

Görev

Kolay

Sonunda yeni satır (0x0a) bulunan 'Paris' değerine sahip city adlı bir dize oluşturun. Ardından, $ - city kullanarak uzunluğu otomatik olarak hesaplayan cityLen adlı bir sabit oluşturun.

Kendin dene

%include "data.asm"

section .text
    global _start

_start:
    mov rax, 1
    mov rdi, 1
    mov rsi, city
    mov rdx, cityLen
    syscall
    
    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.

Temeller bölümündeki tüm dersler

Kendi başına pratik yap: Assembly playground