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:
| 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 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', 0x0aBu 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.
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
syscallBu 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