Menu
CoddyTech

Chuỗi với db

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 28 trên 45.

Bạn đã biết db định nghĩa một byte đơn. Nhưng db cũng có thể định nghĩa một chuỗi: nhiều byte liên tiếp.

Cú pháp:

label db 'text here'

Ví dụ:

section .data
    message db 'Hello'

Lệnh này tạo 5 byte trong bộ nhớ: 'H', 'e', 'l', 'l', 'o'

Điều gì xảy ra trong bộ nhớ:

Địa chỉByteGiá trị ASCII
message'H'72
message+1'e'101
message+2'l'108
message+3'l'108
message+4'o'111

Thêm ký tự xuống dòng:

Để in một chuỗi rồi chuyển sang dòng tiếp theo, hãy thêm 0x0a (ký tự xuống dòng):

section .data
    message db 'Hello', 0x0a

Giờ chuỗi có 6 byte: 'H','e','l','l','o', ký tự xuống dòng

Nhiều chuỗi:

section .data
    hello db 'Hello', 0x0a
    goodbye db 'Goodbye', 0x0a

Vì sao điều này quan trọng:

Chuỗi (string) là loại dữ liệu phổ biến nhất mà bạn sẽ dùng trong assembly. Lệnh gọi hệ thống write (bạn sẽ học trong Chương 5) in chuỗi ra bằng cách đọc từng byte trong bộ nhớ cho đến khi đạt đến độ dài bạn cung cấp.

Lưu ý quan trọng:

Chuỗi chỉ là các byte. CPU không biết và cũng không quan tâm rằng 'H' là một chữ cái. Đó chỉ là số 72. Lời gọi hệ thống write diễn giải các số đó thành ký tự khi in ra.

challenge icon

Thử thách

Dễ

Tạo một chuỗi có tên greeting với giá trị 'Hi' theo sau là ký tự xuống dòng (0x0a) trong phần .data.

Tự làm thử

%include "data.asm"

section .text
    global _start

_start:
    ; In chuỗi bằng lệnh gọi hệ thống write
    mov rax, 1
    mov rdi, 1
    mov rsi, greeting
    mov rdx, 3           ; 'H', 'i', ký tự xuống dòng = 3 byte
    syscall
    
    ; Thoát
    mov rax, 60
    mov rdi, 0
    syscall
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

Tra mã của ký tự bất kỳ: Công cụ chuyển đổi ASCII