Yeni Satırın Önemi
Coddy'nin Assembly Journey'sinin Temeller bölümünün bir parçası — ders 41 / 45.
Dizelerinizin sonuna 0x0a (yeni satır) ekliyordunuz. Peki ya unutursanız ne olur?
Yeni satır olmadan:
Metin yazdırılır, ancak imleç aynı satırda kalır. Gelecekteki herhangi bir çıktı hemen yanına gelecektir.
Yeni satır içermeyen örnek:
section .data
first db 'Hello'
firstLen equ $ - first
second db 'World'
secondLen equ $ - second
section .text
mov rax, 1
mov rdi, 1
mov rsi, first
mov rdx, firstLen
syscall
mov rax, 1
mov rdi, 1
mov rsi, second
mov rdx, secondLen
syscallÇıktı:
HelloWorld
Boşluk yok. Yeni satır yok. Her şey birbirine yapışık.
Yeni satır ile:
section .data
first db 'Hello', 0x0a
firstLen equ $ - first
second db 'World', 0x0a
secondLen equ $ - secondÇıktı:
Hello
World
Her dize kendi satırına yazdırılır.
Yeni satırın yaptığı:
| Karakter | ASCII | Etki |
|---|---|---|
0x0a | 10 | İmleci bir sonraki satırın başına taşır |
Yaygın yeni satır hataları:
| Hata | Sonuç |
|---|---|
| Hiç yeni satır yok | Metin tek bir satırda birleşir |
| Yalnızca son dizginin sonunda yeni satır | Önceki dizgiler birleşir, sonuncusu bir sonraki satıra geçer |
| Bir dizginin ortasında yeni satır | Beklenmedik yerlerde satır sonları |
Güvenli kural:
Kendi satırında olmasını istediğiniz her dizenin sonuna daima 0x0a ekleyin.
Görev
Size yeni satır karakteri içermeyen üç dize verilmiştir. Göreviniz, bunları üç ayrı satırda görünecek şekilde yazdırmaktır.
Dizeler şunlardır:
| Dize | Değer |
|---|---|
word1 | 'Apple' |
word2 | 'Banana' |
word3 | 'Cherry' |
Gereksinimler:
- Her dizeyi sonuna bir yeni satır (
0x0a) ekleyerek tanımlayın - Her dizenin uzunluğunu otomatik olarak hesaplayın
- Üç dizeyi de write syscall kullanarak yazdırın
- 0 kodu ile temiz bir şekilde çıkış yapın
Kendin dene
section .data
; YAPILACAK: word1'i 'Apple' ve yeni satır ile tanımlayın
; YAPILACAK: word2'yi 'Banana' ve yeni satır ile tanımlayın
; YAPILACAK: word3'ü 'Cherry' ve yeni satır ile tanımlayın
; YAPILACAK: Her dize için uzunlukları hesaplayın
section .text
global _start
_start:
; YAPILACAK: word1'i yazdırın
; YAPILACAK: word2'yi yazdırın
; YAPILACAK: word3'ü yazdırın
; YAPILACAK: Temiz bir şekilde çıkış yapınsection .data
word1 db 'Apple', 0x0a
word1Len equ $ - word1
word2 db 'Banana', 0x0a
word2Len equ $ - word2
word3 db 'Cherry', 0x0a
word3Len equ $ - word3
section .text
global _start
_start:
mov rax, 1
mov rdi, 1
mov rsi, word1
mov rdx, word1Len
syscall
mov rax, 1
mov rdi, 1
mov rsi, word2
mov rdx, word2Len
syscall
mov rax, 1
mov rdi, 1
mov rsi, word3
mov rdx, word3Len
syscall
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.