Menu
CoddyTech

Phần .data

Thuộc phần Kiến thức nền tảng trong hành trình Assembly của Coddy. Bài học 23 trên 45.

Trong chương 2, bạn đã tải các giá trị từ bộ nhớ và lưu các giá trị vào bộ nhớ. Nhưng bộ nhớ đó đến từ đâu? Ai đã tạo ra num1, num2 và result?

Đáp án là phần .data. Đây là nơi bạn tạo dữ liệu của riêng mình trong bộ nhớ.

Phần .data là gì?

Phần .data là một phần trong chương trình assembly, nơi bạn định nghĩa dữ liệu sẽ được lưu trong bộ nhớ trước khi chương trình chạy.

Cú pháp:

section .data
    ; Đặt các định nghĩa dữ liệu ở đây

Lý do bạn cần phần này:

Không có phần .dataCó phần .data
Bạn không có dữ liệu để xử lýBạn có thể tạo số, chuỗi và biến
Không biết địa chỉ bộ nhớBạn có thể dùng các nhãn như myNumber hoặc message
Bạn không thể kiểm tra code của mìnhBạn có thể tải và lưu dữ liệu do mình tạo

Một ví dụ đơn giản:

section .data
    age db 25           ; Tạo một byte tên là "age" có giá trị 25
    price dw 1000       ; Tạo một word tên là "price" có giá trị 1000
    name db 'Bob'       ; Tạo một chuỗi tên là "name" gồm các ký tự B, o, b

Vị trí của chúng trong các tệp:

Hãy nhớ lại mẫu hai tệp trong chương 0:

TệpNội dung
data.asmsection .data cùng các định nghĩa dữ liệu của bạn
main.asm%include "data.asm" theo sau là section .text cùng code của bạn

Điều gì xảy ra khi chương trình chạy:

  1. Hệ điều hành tải chương trình vào bộ nhớ
  2. Hệ điều hành đọc phần .data và đặt dữ liệu tại các địa chỉ bộ nhớ cụ thể
  1. Các nhãn của bạn (age, price, name) trở thành địa chỉ
  2. Giờ đây, code của bạn có thể truy cập các địa chỉ này bằng [age], [price], [name]

Quy tắc quan trọng:

Quy tắcGiải thích
Giữ dữ liệu cùng nhauBạn có thể mở section .data nhiều lần (trình hợp dịch sẽ ghép các phần lại), nhưng chỉ dùng một phần trong data.asm sẽ dễ đọc hơn
Các nhãn phải là duy nhấtBạn không thể có hai nhãn age
Dữ liệu được tạo trước khi code chạyDữ liệu sẵn sàng để sử dụng khi _start bắt đầu

Trong các bài học tiếp theo, bạn sẽ học cách định nghĩa những kiểu dữ liệu khác nhau bằng db, dw, dd và dq

challenge icon

Thử thách

Viết code trong tệp data.asm để:

  1. Tạo phần .data
  2. Tạo một byte có tên count với giá trị 5

Tự làm thử

%include "data.asm"

section .text
    global _start

_start:
    ; Nạp giá trị từ count vào al
    mov al, [count]
    
    ; Lưu giá trị đó để in ra
    mov r12, rax
    
    ; Chuyển sang ASCII và in ra (chỉ từ 0 đến 9)
    add al, 48
    mov [digit], al
    
    mov rax, 1
    mov rdi, 1
    mov rsi, digit
    mov rdx, 1
    syscall
    
    ; Thoát
    mov rax, 60
    mov rdi, 0
    syscall

section .bss
    digit resb 1
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Kiến thức nền tảng

Tự luyện tập: Playground Assembly