Menu
Coddy logo textTech

Symbol $

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

Gdy wyświetlasz ciąg znaków za pomocą wywołania systemowego write (rozdział 5), musisz poinformować procesor, ile bajtów ma wyświetlić.

Możesz policzyć znaki ręcznie:

message db 'Hello', 0x0a    ; 6 bajtów (H e l l o znak nowej linii)
mov rdx, 6                  ; Ręczne zliczanie

Jednak ręczne liczenie jest powolne i podatne na błędy. Jeśli zmienisz ciąg znaków, musisz ponownie policzyć i zaktualizować liczbę.

Rozwiązanie: automatyczne obliczanie długości za pomocą $

$ to licznik lokalizacji. Reprezentuje bieżący adres pamięci, pod którym zostanie umieszczony następny bajt.

Przykład 1: Prosty ciąg znaków

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

Jak to działa:

  • message to adres początkowy (na przykład: 1000)
  • Po zapisaniu 6 bajtów $ staje się równy 1006
  • $ - message = 1006 − 1000 = 6 (długość)

Uwaga: equ to skrót od equate. Tworzy stałą: nazwę reprezentującą wartość.

Przykład 2: Wiele ciągów znaków

section .data
    first db 'Hi', 0x0a
    len1 equ $ - first      ; len1 = 3 ('H','i', znak nowej linii)
    second db 'Hello', 0x0a
    len2 equ $ - second     ; len2 = 6 ('H','e','l','l','o', znak nowej linii)

Długość każdego ciągu znaków jest obliczana automatycznie. $ jest resetowane przy każdym obliczeniu, ponieważ zawsze odnosi się do bieżącej pozycji zaraz za każdym ciągiem znaków.

challenge icon

Wyzwanie

Łatwy

Utwórz ciąg znaków o nazwie city z wartością 'Paris', po której następuje znak nowej linii (0x0a). Następnie utwórz stałą o nazwie cityLen, która automatycznie oblicza długość przy użyciu $ - city.

Spróbuj swoich sił

%include "data.asm"

section .text
    global _start

_start:
    mov rax, 1
    mov rdi, 1
    mov rsi, city
    mov rdx, cityLen
    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