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 danychDlaczego tego potrzebujesz:
| Bez sekcji .data | Z 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ą nieznane | Możesz używać etykiet, takich jak myNumber lub message |
| Nie możesz testować swojego kodu | Moż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, bGdzie umieścić to w swoich plikach:
Pamiętaj o wzorcu dwóch plików z rozdziału 0:
| Plik | Zawartość |
|---|---|
data.asm | section .data z definicjami danych |
main.asm | %include "data.asm", a następnie section .text z kodem |
Co się dzieje podczas uruchamiania programu:
- System operacyjny ładuje program do pamięci
- Odczytuje sekcję
.datai umieszcza dane pod określonymi adresami pamięci
- Twoje etykiety (
age,price,name) stają się adresami - Twój kod może teraz uzyskiwać dostęp do tych adresów za pomocą
[age],[price],[name]
Ważne zasady:
| Zasada | Wyjaśnienie |
|---|---|
| Trzymaj dane razem | Moż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ć unikalne | Nie możesz mieć dwóch etykiet age |
| Dane są tworzone przed uruchomieniem kodu | Są 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
Wyzwanie
Napisz kod w pliku data.asm, aby:
- Utworzyć sekcję
.data - Utworzyć bajt o nazwie
countz 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 1Ta 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