Hepsini Bir Araya Getirme
Coddy'nin Assembly Journey'sinin Temel Bilgiler bölümünün bir parçası. Ders 39 / 45.
write sistem çağrısının dört parçasını da öğrendin:
| Kayıt | İçerdiği şey | Ekran çıktısı için değer |
|---|---|---|
rax | Sistem çağrısı numarası | 1 (write) |
rdi | Dosya tanımlayıcısı | 1 (stdout) |
rsi | Tampon adresi | Dizgenizin adresi |
rdx | Bayt sayısı | Dizgenizin uzunluğu |
Şimdi hepsini bir araya getirmenin zamanı geldi.
Tam write sistem çağrısı kalıbı:
mov rax, 1 ; write için syscall numarası
mov rdi, 1 ; dosya tanımlayıcısı (stdout)
mov rsi, msg ; dizenin adresi
mov rdx, msgLen ; yazdırılacak bayt sayısı
syscall ; işletim sisteminden yazdırmasını isteTamamlanmış, çalışan bir program:
section .data
msg db 'Hello, World!', 0x0a
msgLen equ $ - msg
section .text
global _start
_start:
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, msgLen
syscall
mov rax, 60
mov rdi, 0
syscallBu program ne yapar:
| Adım | Ne olur |
|---|---|
| 1 | Ekrana "Hello, World!" yazdırır |
| 2 | Yeni bir satıra geçer |
| 3 | 0 koduyla temiz bir şekilde çıkar |
Sıralama önemlidir:
syscall komutunu çalıştırmadan önce yazmaçları (registers) ayarlamalısınız. Dördü de syscall komutundan önce ayarlandığı sürece mov komutlarının sırası önemli değildir.
Görev
"Assembly is fun" mesajını ve ardından bir yeni satır yazdıran, ardından temiz bir şekilde çıkan tam bir program yazın.
Dize ve uzunluğu zaten tanımlanmıştır. Sadece _start: içindeki kodu yazmanız gerekiyor.
Kendin dene
section .data
msg db 'Assembly is fun', 0x0a
msgLen equ $ - msg
section .text
global _start
_start:
; YAPILACAK: write sistem çağrısını ayarla ve çağır
; rax=1, rdi=1, rsi=msg, rdx=msgLen kullanın
; YAPILACAK: 0 koduyla temiz bir şekilde çıkış yap
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
3İlk komut - MOV
MOV nedir?MOV Anlık DeğerMOV Yazmaçtan YazmacaMOV Bellekten YazmacaMOV Yazmaçtan BelleğeLEA - Adres YüklemeFarklı Boyutlarla MOVPratik: Yazmaçları Takas EtmeÖzet: MOV Meydan Okuması6Write Syscall
Write Syscall (1)Dosya Tanımlayıcı (rdi)Buffer Adresi (rsi)Bayt Sayısı (rdx)Hepsini Bir Araya Getirmeİki String YazdırmaYeni Satırın ÖnemiÖzet: Write HazırlığıKendi başına pratik yap: Assembly playground