Menu
CoddyTech

用 db 定义字符串

本课属于 Coddy Assembly 学习旅程的“基础知识”单元。第 28 课,共 45 课。

你已经知道 db 用来定义单个字节。但 db 也可以定义字符串:连续的多个字节。

语法:

label db 'text here'

示例:

section .data
    message db 'Hello'

这会在内存中创建 5 个字节:“H”、“e”、“l”、“l”、“o”

内存中的情况:

地址字节ASCII 值
message'H'72
message+1'e'101
message+2'l'108
message+3'l'108
message+4'o'111

添加换行符:

要打印字符串并移到下一行,请添加 0x0a(换行符):

section .data
    message db 'Hello', 0x0a

现在这个字符串有 6 个字节:'H','e','l','l','o',换行符

多个字符串:

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

为什么这很重要:

字符串是你在汇编中最常用的数据。write 系统调用(你将在第 5 章学习)会从内存中读取字节来打印字符串,直到读取到你指定的长度为止。

重要说明:

字符串只是字节。CPU 不知道也不关心 'H' 是一个字母。它只是数字 72。打印时,write 系统调用会将这些数字解释为字符。

challenge icon

挑战

简单

在 .data 段中创建一个名为 greeting 的字符串,其值为 'Hi',后跟一个换行符(0x0a)。

亲手试试

%include "data.asm"

section .text
    global _start

_start:
    ; 使用 write 系统调用打印字符串
    mov rax, 1
    mov rdi, 1
    mov rsi, greeting
    mov rdx, 3           ; 'H'、'i' 和换行符,共 3 字节
    syscall
    
    ; 退出
    mov rax, 60
    mov rdi, 0
    syscall
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

基础知识中的所有课

自己练习: Assembly 在线编辑器

查询任意字符的编码: ASCII 转换器