Menu
Coddy logo textTech

Sekcja .data

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

W rozdziale 2 wczytywałeś wartości z pamięci i zapisywałeś wartości w pamięci. Ale skąd wzięła się ta pamięć? Kto utworzył num1, num2 i result?

Odpowiedź to sekcja .data. To tutaj tworzysz własne dane w pamięci.

Czym jest sekcja .data?

Sekcja .data jest częścią programu w asemblerze, w której definiujesz dane, które zostaną zapisane w pamięci przed uruchomieniem programu.

Składnia:

section .data
    ; Tutaj umieść definicje danych

Dlaczego tego potrzebujesz:

Bez sekcji .dataZ sekcją .data
Nie masz danych, na których możesz pracowaćMożesz tworzyć liczby, ciągi znaków i zmienne
Adresy pamięci są nieznaneMożesz używać etykiet takich jak myNumber lub message
Nie możesz testować swojego koduMożesz wczytywać i zapisywać utworzone przez siebie dane

Prosty przykład:

section .data
    age db 25           ; Utwórz bajt o nazwie "age" z wartością 25
    price dw 1000       ; Utwórz słowo o nazwie "price" z wartością 1000
    name db 'Bob'       ; Utwórz ciąg znaków o nazwie "name" z literami B, o, b

Gdzie umieścić to w plikach:

Pamiętaj o wzorcu dwóch plików z rozdziału 0:

PlikZawartość
data.asmsection .data z definicjami danych
main.asm%include "data.asm", a następnie section .text z kodem

Co dzieje się podczas uruchamiania programu:

  1. System operacyjny ładuje program do pamięci
  2. Odczytuje sekcję .data i umieszcza dane pod określonymi adresami pamięci
  1. Twoje etykiety (age, price, name) stają się adresami
  2. Twój kod może teraz uzyskiwać dostęp do tych adresów za pomocą [age], [price], [name]

Ważne zasady:

ZasadaWyjaśnienie
Jedna sekcja .data na programUmieść wszystkie dane w jednym miejscu
Etykiety muszą być unikatoweNie możesz mieć dwóch etykiet age
Dane są tworzone przed uruchomieniem koduSą gotowe do użycia, gdy rozpoczyna się _start

W następnych lekcjach dowiesz się, jak definiować różne typy danych za pomocą db, dw, dd i dq

challenge icon

Wyzwanie

Napisz kod w pliku data.asm, aby:

  1. Utworzyć sekcję .data
  2. Utworzyć bajt o nazwie count z wartością 5

Spróbuj swoich sił

%include "data.asm"

section .text
    global _start

_start:
    ; Wczytaj wartość z count do al
    mov al, [count]
    
    ; Zachowaj ją do wyświetlenia
    mov r12, rax
    
    ; Przekształć na ASCII i wyświetl (tylko 0-9)
    add al, 48
    mov [digit], al
    
    mov rax, 1
    mov rdi, 1
    mov rsi, digit
    mov rdx, 1
    syscall
    
    ; Zakończ program
    mov rax, 60
    mov rdi, 0
    syscall

section .bss
    digit resb 1
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