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:
| Adres | Bajt | Wartość 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', 0x0aTeraz 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', 0x0aDlaczego 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.
Wyzwanie
ŁatwyUtwó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
syscallTa lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Podstawy
1Maszyna
Czym jest CPUPamięćRejestry a pamięćJak działają instrukcjeWzorzec dwóch plikówArchitektura x86-642Systemy liczbowe
Dlaczego system binarny?Liczby binarneZamiana z systemu dziesiętnego na binarnyDlaczego system szesnastkowy?Zamiana z systemu szesnastkowego na dziesiętnyZamiana z systemu dziesiętnego na szesnastkowyASCII i system szesnastkowy5Wywołanie systemowe zakończenia
Czym jest syscall?Wywołanie systemowe zakończenia (60)Kody zakończeniaPodsumowanie: prawidłowe zakończeniePoćwicz samodzielnie: Edytor online Assembly