db ile Stringler
Coddy'nin Assembly Journey'sinin Temeller bölümünün bir parçası — ders 28 / 45.
Bildiğiniz gibi db tek bir bayt tanımlar. Ancak db bir dizeyi de tanımlayabilir — arka arkaya birden fazla bayt.
Sözdizimi:
label db 'text here'Örnek:
section .data
message db 'Hello'Bu, bellekte 5 bayt oluşturur: 'H', 'e', 'l', 'l', 'o'
Bellekte ne olur:
| Adres | Bayt | ASCII 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 dizeyi yazdırmak ve bir sonraki satıra geçmek için 0x0a (yeni satır karakteri) ekleyin:
section .data
message db 'Hello', 0x0aArtık dize 6 bayta sahip: 'H','e','l','l','o', newline
Birden fazla dize:
section .data
hello db 'Hello', 0x0a
goodbye db 'Goodbye', 0x0aBu neden önemlidir:
Dizeler (Strings), assembly'de kullanacağınız en yaygın veri türüdür. write sistem çağrısı (Bölüm 5'te öğreneceğiniz), verdiğiniz uzunluğa ulaşana kadar bellekten baytları okuyarak dizeleri yazdırır.
Önemli not:
Dizeler sadece baytlardır. CPU, 'H'nin bir harf olduğunu bilmez veya umursamaz. O sadece 72 sayısıdır. write sistem çağrısı, yazdırırken bu sayıları karakter olarak yorumlar.
Görev
Kolay.data bölümünde, değeri 'Hi' ve ardından bir yeni satır (0x0a) olan greeting adında bir dize oluşturun.
Kendin dene
%include "data.asm"
section .text
global _start
_start:
; write sistem çağrısını kullanarak dizeyi yazdır
mov rax, 1
mov rdi, 1
mov rsi, greeting
mov rdx, 3 ; 'H', 'i', yeni satır = 3 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.