İki String Yazdırma
Coddy'nin Assembly Journey'sinin Temel Bilgiler bölümünün bir parçası. Ders 40 / 45.
Bir dizgeyi yazdırmayı zaten biliyorsun. Peki iki ayrı dizgeyi yazdırmak istersen ne olacak? Örneğin, önce "Hello ", sonra da "World!"?
write sistem çağrısını, her bir dize için bir kez olmak üzere, iki kez çağırmanız yeterlidir.
Nasıl çalışır:
; İlk yazdırma
mov rax, 1
mov rdi, 1
mov rsi, firstMsg
mov rdx, firstLen
syscall
; İkinci yazdırma
mov rax, 1
mov rdi, 1
mov rsi, secondMsg
mov rdx, secondLen
syscallÖrnek:
section .data
first db 'Hello ', 0x0a
firstLen equ $-first
second db 'World!', 0x0a
secondLen equ $-second
section .text
global _start
_start:
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
mov rax, 60
mov rdi, 0
syscallÇıktı:
Hello
World!
Her dizge 0x0a (yeni satır) ile biter, bu yüzden iki dizge ayrı satırlara yazdırılır.
Neden tek bir dize yerine iki dize yazdırılır?
| Gerekçe | Örnek |
|---|---|
| Yeniden kullanılabilirlik | Aynı selamlamayı farklı adlarla yazdırma |
| Esneklik | Koşullara göre farklı mesajlar yazdırma |
| Düzen | Farklı mesajları bellekte ayrı tutma |
İstediğin kadar dize yazdırabilirsin:
Her dize için write sistem çağrısını tekrarlaman yeterli.
Görev
Sana iki dize verilmiştir: değeri 'Good' olan partOne ve değeri 'bye' olan partTwo. Her ikisinin de sonunda zaten bir yeni satır vardır.
Çıktı şu şekilde görünecek biçimde önce partOne'ı, ardından partTwo'yu yazdıracak kodu yaz:
Good
bye
Veri bölümü ve çıkış sistem çağrısı zaten sağlanmıştır. Yalnızca iki yazma sistem çağrısını yazman gerekiyor.
Kendin dene
section .data
partOne db 'Good', 0x0a
partOneLen equ $-partOne
partTwo db 'bye', 0x0a
partTwoLen equ $-partTwo
section .text
global _start
_start:
; TODO: partOne'ı write sistem çağrısını kullanarak yazdır
; TODO: partTwo'yu write sistem çağrısını kullanarak yazdır
mov rax, 60
mov rdi, 0
syscall
Bu 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