db ile Stringler
Coddy'nin Assembly Journey'sinin Temel Bilgiler 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 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 sonraki satıra geçmek için 0x0a (yeni satır karakteri) ekleyin:
section .data
message db 'Hello', 0x0aŞimdi dize 6 bayt uzunluğunda: 'H','e','l','l','o', yeni satır
Birden fazla dize:
section .data
hello db 'Hello', 0x0a
goodbye db 'Goodbye', 0x0aBu neden önemli:
Dizeler, assembly'de kullanacağınız en yaygın verilerdir. write sistem çağrısı (5. Bölüm'de öğreneceksiniz), ona verdiğiniz uzunluğa ulaşana kadar bellekteki baytları okuyarak dizeleri yazdırır.
Önemli not:
Dizeler yalnızca baytlardır. CPU, 'H' karakterinin bir harf olduğunu bilmez ve bunu önemsemez. Bu yalnızca 72 sayısıdır. Yazdırma sırasında write sistem çağrısı 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 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.
Temel Bilgiler bölümündeki tüm dersler
Kendi başına pratik yap: Assembly playground