Menu
Coddy logo textTech

Ciągi znaków z db

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

Wiesz już, że db definiuje pojedynczy bajt. Ale db może też definiować ciąg znaków: wiele bajtów z rzędu.

Składnia:

label db 'text here'

Przykład:

section .data
    message db 'Hello'

Tworzy to 5 bajtów w pamięci: 'H', 'e', 'l', 'l', 'o'

Co dzieje się w pamięci:

AdresBajtWartość ASCII
message'H'72
message+1'e'101
message+2'l'108
message+3'l'108
message+4'o'111

Dodawanie nowej linii:

Aby wyświetlić ciąg znaków i przejść do następnej linii, dodaj 0x0a (znak nowej linii):

section .data
    message db 'Hello', 0x0a

Teraz ciąg ma 6 bajtów: 'H','e','l','l','o', znak nowej linii

Wiele ciągów znaków:

section .data
    hello db 'Hello', 0x0a
    goodbye db 'Goodbye', 0x0a

Dlaczego to ważne:

Ciągi znaków to najczęściej używane przez Ciebie dane w asemblerze. Wywołanie systemowe write (którego nauczysz się w rozdziale 5) wypisuje ciągi znaków, odczytując bajty z pamięci, aż osiągnie podaną przez Ciebie długość.

Ważna uwaga:

Łańcuchy znaków to po prostu bajty. CPU nie wie ani nie obchodzi go, że 'H' jest literą. To po prostu liczba 72. Wywołanie systemowe write interpretuje te liczby jako znaki podczas wyświetlania.

challenge icon

Wyzwanie

Łatwy

Utwórz ciąg znaków o nazwie greeting z wartością 'Hi', po której następuje znak nowej linii (0x0a), w sekcji .data.

Spróbuj swoich sił

%include "data.asm"

section .text
    global _start

_start:
    ; Wypisz ciąg znaków za pomocą wywołania systemowego write
    mov rax, 1
    mov rdi, 1
    mov rsi, greeting
    mov rdx, 3           ; 'H', 'i', znak nowej linii = 3 bajty
    syscall
    
    ; Zakończ program
    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