Menu
Coddy logo textTech

db ile Stringler

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

db komutunun tek bir bayt tanımladığını zaten biliyorsun. Ancak db bir dize de tanımlayabilir: arka arkaya gelen birden çok bayt.

Sözdizimi:

label db 'text here'

Örnek:

section .data
    message db 'Hello'

Bu, bellekte 5 bytes oluşturur: 'H', 'e', 'l', 'l', 'o'

Bellekte ne olur:

AdresBaytASCII değeri
message'H'72
message+1'e'101
message+2'l'108
message+3'l'108
message+4'o'111

Yeni satır ekleme:

Bir string yazdırmak ve sonraki satıra geçmek için 0x0a (newline karakteri) ekleyin:

section .data
    message db 'Hello', 0x0a

Şimdi string 6 bytes: 'H','e','l','l','o', newline

Birden fazla dize:

section .data
    hello db 'Hello', 0x0a
    goodbye db 'Goodbye', 0x0a

Bu neden önemli:

string değerleri, assembly'de kullanacağın en yaygın veridir. write syscall'ı (Bölüm 5'te öğreneceksin), verdiğin uzunluğa ulaşana kadar bellekten bytes okuyarak string değerlerini yazdırır.

Önemli not:

Dizeler yalnızca bytes’tır. CPU, 'H' karakterinin bir harf olduğunu bilmez ve umursamaz. Bu yalnızca 72 sayısıdır. write syscall’ı, yazdırırken bu sayıları karakter olarak yorumlar.

challenge icon

Görev

Kolay

.data bölümünde, değeri 'Hi' olan ve ardından bir newline (0x0a) gelen greeting adlı bir dize oluşturun.

Kendin dene

%include "data.asm"

section .text
    global _start

_start:
    ; write syscall kullanarak dizeyi yazdır
    mov rax, 1
    mov rdi, 1
    mov rsi, greeting
    mov rdx, 3           ; 'H', 'i', newline = 3 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.

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

Kendi başına pratik yap: Assembly playground