Menu
Coddy logo textTech

$ Sembolü

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

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

Karakterleri manuel olarak sayabilirsiniz:

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 hata yapmaya müsaittir. Dizeyi değiştirirseniz, yeniden saymanız ve sayıyı güncellemeniz gerekir.

Çözüm: <strong>$lt;/strong> kullanarak otomatik uzunluk hesaplama

$, konum sayacıdır — bir sonraki baytı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 bayt depoladıktan sonra, $ 1006 olur
  • $ - message = 1006 − 1000 = 6 (uzunluk)

Not: equ, equate anlamına gelir. Bir sabit oluşturur — bir değeri temsil eden bir isim.

Örnek 2: Birden fazla 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 dizenin kendi uzunluğu otomatik olarak hesaplanır. $ her hesaplama için sıfırlanır çünkü her zaman her dizenin hemen sonrasındaki mevcut konumu ifade eder.

challenge icon

Görev

Kolay

Değeri 'Paris' olan ve ardından bir yeni satır (0x0a) gelen city adında bir dize oluşturun. Ardından, $ - city kullanarak uzunluğu 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.

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