İki String Yazdırma
Coddy'nin Assembly Journey'sinin Temeller bölümünün bir parçası. Ders 40 / 45.
Bir dizeyi nasıl yazdıracağını zaten biliyorsun. Peki ya iki ayrı dizeyi yazdırmak istersen? Örneğin, "Hello " ve ardından "World!"?
write syscall'ını her 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!
Neden tek bir dize yerine iki dize yazdırmalı?
| Neden | Örnek |
|---|---|
| Yeniden kullanılabilirlik | Aynı selamlamayı farklı adlarla yazdırma |
| Esneklik | Koşullara göre farklı iletiler yazdırma |
| Organizasyon | Farklı iletileri bellekte ayrı tutma |
İstediğiniz kadar dize yazdırabilirsiniz:
Her dize için write sistem çağrısını tekrarlamanız yeterlidir.
Görev
Size iki dize veriliyor: partOne ve değeri 'Good', partTwo ve değeri 'bye'. Her ikisinin de sonunda zaten bir yeni satır var.
Çıktının şöyle görünmesi için partOne ve ardından partTwo değerlerini yazdıracak kodu yazın:
Good
bye
data bölümü ve çıkış syscall'ı zaten sağlanmıştır. Yalnızca iki write syscall'ını yazmanız 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 syscall kullanarak yazdır
; TODO: partTwo'yu write syscall 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.
Temeller bölümündeki tüm dersler
Kendi başına pratik yap: Assembly playground