Menu
Coddy logo textTech

$ Sembolü

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

Bir dizeyi write sistem çağrısını (Bölüm 5) kullanarak yazdırdığınızda, CPU'ya kaç bayt yazdıracağını söylemeniz gerekir.

Karakterleri manuel olarak sayabilirdin:

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

Ancak manuel sayım yavaştır ve hataya açıktır. Dizeyi değiştirirsen sayımı yeniden yapman ve sayıyı güncellemen gerekir.

Çözüm: $ kullanarak otomatik uzunluk hesaplama

$, konum sayacıdır. Bir sonraki baytın yerleştirileceği geçerli 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 bayt depolandıktan sonra $ 1006 olur
  • $ - message = 1006 − 1000 = 6 (uzunluk)

Not: equ, eşitlemek anlamına gelir. 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 dizgenin kendi uzunluğu otomatik olarak hesaplanır. $ her hesaplama için sıfırlanır; çünkü her dizgeden hemen sonraki geçerli konumu ifade eder.

challenge icon

Görev

Kolay

city adında, ardından bir yeni satır (0x0a) gelen 'Paris' değerine sahip bir dize oluşturun. Ardından, uzunluğu $ - city kullanarak otomatik olarak hesaplayan cityLen adında 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.

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

Kendi başına pratik yap: Assembly playground