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 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 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 dzieje się 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 |
|---|---|
Jedna sekcja .data na program | Umieść wszystkie dane w jednym miejscu |
| Etykiety muszą być unikatowe | Nie możesz mieć dwóch etykiet age |
| Dane są tworzone przed uruchomieniem kodu | Są 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
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:
; 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 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