Menu
Coddy logo textTech

Liczba bajtów (rdx)

Część sekcji Podstawy ścieżki Assembly w Coddy. Lekcja 38 z 45.

Powiedziano systemowi operacyjnemu, gdzie wypisać (rdi) i co wypisać (rsi). Teraz musisz powiedzieć mu, ile bajtów wypisać.

Rejestrem przechowującym liczbę bajtów jest rdx.

Dlaczego system operacyjny potrzebuje długości?

System operacyjny nie wie, gdzie kończy się Twój ciąg znaków. Bez podania długości czytałby pamięć w nieskończoność. Długość dokładnie wskazuje systemowi operacyjnemu, kiedy ma przestać.

Przykład:

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

section .text
    mov rdx, msgLen      ; rdx = liczba bajtów do wypisania

Co się stanie, jeśli długość jest nieprawidłowa?

Jeśli ustawiszWynik
Za małą wartośćWypisze się tylko część ciągu znaków
Za dużą wartośćSystem operacyjny odczytuje dane poza ciągiem znaków, z nieużywanej pamięci: może wypisać losowe znaki lub ulec awarii
ZeroNic się nie wypisze

Automatyczne obliczanie długości:

W rozdziale 3 poznano już wzorzec $ - label:

section .data
    msg db 'Hello', 0x0a
    msgLen equ $ - msg    ; msgLen = 6 (Hello + znak nowej linii)

Dzięki temu długość jest zawsze prawidłowa, nawet jeśli zmienisz ciąg znaków.

Kompletny przykład:

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

section .text
    mov rax, 1           ; wywołanie systemowe write
    mov rdi, 1           ; stdout
    mov rsi, msg         ; adres ciągu znaków
    mov rdx, msgLen      ; liczba bajtów
    syscall
challenge icon

Wyzwanie

Dany jest ciąg znaków o nazwie color z wartością 'Red', po której następuje znak nowej linii. Stała o nazwie colorLen została już zdefiniowana za pomocą $ - color.

Napisz linię kodu, która ustawia rdx na długość ciągu znaków, używając stałej colorLen.

Napisz tylko instrukcję mov dla rdx.

Spróbuj swoich sił

section .text
    global _start

_start:
    ; Kod ucznia wykonuje się jako pierwszy (ustawia rdx)
    %include "solution.asm"
    
    mov rax, 1
    mov rdi, 1
    mov rsi, color
    ; rdx zawiera już długość (ustaloną przez kod ucznia)
    syscall

    mov rax, 60
    mov rdi, 0
    syscall
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Podstawy

Poćwicz samodzielnie: Edytor online Assembly