Yeni Satırın Önemi
Coddy'nin Assembly Journey'sinin Temeller bölümünün bir parçası. Ders 41 / 45.
Dizilerinizin sonuna 0x0a (newline) ekliyordunuz. Peki ya bunu eklemeyi unutursanız ne olur?
Yeni satır olmadan (Without newline):
Metin yazdırılır, ancak imleç aynı satırda kalır. Gelecekteki herhangi bir çıktı hemen yanında görünecektir.
Yeni satır olmadan ö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 (newline) 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 string kendi satırında yazdırılır.
Satır sonu (newline) karakterinin yaptığı iş:
| Karakter | ASCII | Etki |
|---|---|---|
0x0a | 10 | Imleci bir sonraki satırın başına taşır |
Sık yapılan yeni satır (newline) hataları:
| Hata | Sonuç |
|---|---|
| Hiç yeni satır yok | Metinler tek bir satırda birbirine yapışır |
| Yalnızca son dizenin (string) sonunda yeni satır var | Önceki dizeler birbirine yapışır, sonuncusu alt satıra geçer |
| Bir dizenin ortasında yeni satır var | Satır beklenmedik yerlerde bölünür |
Güvenli kural:
Kendi satırında olmasını istediğiniz her dizenin sonuna her zaman 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 sonunda bir yeni satır (
0x0a) olacak şekilde tanımlayın - Her dizenin uzunluğunu otomatik olarak hesaplayın
- write syscall kullanarak üç dizeyi de yazdırın
- 0 koduyla sorunsuz bir şekilde çıkış yapın
Kendin dene
section .data
; TODO: word1'i talimatlarda listelenen 1. metin ve yeni satır ile tanımla
; TODO: word2'yi talimatlarda listelenen 2. metin ve yeni satır ile tanımla
; TODO: word3'ü talimatlarda listelenen 3. metin ve yeni satır ile tanımla
; TODO: Her string için uzunlukları hesapla
section .text
global _start
_start:
; TODO: word1'i yazdır
; TODO: word2'yi yazdır
; TODO: word3'ü yazdır
; TODO: Temiz bir şekilde çıksection .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.
Temeller bölümündeki tüm dersler
Kendi başına pratik yap: Assembly playground