Menu
CoddyTech

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ś je w pamięci. Ale skąd wzięła się ta pamięć? Kto utworzył num1, num2 i result?

Odpowiedzią jest sekcja .data. To tutaj tworzysz własne dane w pamięci.

Czym jest sekcja .data?

Sekcja .data jest częścią programu asemblerowego, w której definiujesz dane przechowywane 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 swoich 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 się dzieje 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
Trzymaj dane razemMożesz otworzyć section .data więcej niż raz (asembler łączy te fragmenty), ale jedna sekcja w data.asm jest łatwiejsza do odczytania
Etykiety muszą być unikalneNie możesz mieć dwóch etykiet age
Dane są tworzone przed uruchomieniem koduSą gotowe do użycia, gdy rozpoczyna się _start

W kolejnych 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:
    ; Załaduj wartość z count do al
    mov al, [count]
    
    ; Zapisz ją do późniejszego wypisania
    mov r12, rax
    
    ; Przekonwertuj na ASCII i wypisz (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