Menu
Coddy logo textTech

Bayt Sayısı (rdx)

Coddy'nin Assembly Journey'sinin Temel Bilgiler bölümünün bir parçası. Ders 38 / 45.

OS'ye nereye yazdıracağını (rdi) ve ne yazdıracağını (rsi) söyledin. Şimdi ona yazdıracağı byte sayısını söylemen gerekiyor.

Byte sayısı için kullanılan register rdx'dir.

İşletim sistemi neden uzunluğa ihtiyaç duyar?

İşletim sistemi dizenizin nerede bittiğini bilmez. Uzunluk olmadan belleği sonsuza kadar okumaya devam ederdi. Uzunluk, işletim sistemine tam olarak ne zaman duracağını söyler.

Örnek:

section .data
    msg db 'Hello', 0x0a
    msgLen equ $ - msg

section .text
    mov rdx, msgLen      ; rdx = yazdırılacak bayt sayısı

Uzunluk yanlışsa ne olur?

AyarlarsanızSonuç
Çok kısaDizenin yalnızca bir kısmı yazdırılır
Çok uzunİşletim sistemi dizenizi aşarak çöp belleği okumaya devam eder: rastgele karakterler yazdırabilir veya çökebilir
SıfırHiçbir şey yazdırılmaz

Uzunluğu otomatik olarak hesaplama:

Bölüm 3'te $ - label kalıbını zaten öğrendin:

section .data
    msg db 'Hello', 0x0a
    msgLen equ $ - msg    ; msgLen = 6 (Hello + yeni satır)

Bu, dizeyi değiştirseniz bile uzunluğun her zaman doğru olmasını sağlar.

Tam örnek:

section .data
    msg db 'Hello', 0x0a
    msgLen equ $ - msg

section .text
    mov rax, 1           ; write sistem çağrısı
    mov rdi, 1           ; standart çıktı
    mov rsi, msg         ; dizenin adresi
    mov rdx, msgLen      ; bayt sayısı
    syscall
challenge icon

Görev

Bir satır sonunun ardından 'Red' değerine sahip color adlı bir dize verilmiştir. $ - color kullanılarak colorLen adlı bir sabit zaten tanımlanmıştır.

colorLen sabitini kullanarak rdx değerini dizenin uzunluğuna ayarlayan kod satırını yazın.

Yalnızca rdx için mov yönergesini yazın.

Kendin dene

section .text
    global _start

_start:
    ; Öğrencinin kodu önce çalışır (rdx'i ayarlar)
    %include "solution.asm"
    
    mov rax, 1
    mov rdi, 1
    mov rsi, color
    ; rdx zaten uzunluğa sahip (öğrencinin kodundan)
    syscall

    mov rax, 60
    mov rdi, 0
    syscall
quiz iconKendini test et

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