Menu
CoddyTech

db:定义字节

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

在内存中创建数据的最基本方式是 db:定义字节。它会创建一个字节(8 位)的数据。

语法:

label db value
  • label:你为这个内存地址指定的名称
  • db:定义字节指令
  • value:要存储的数字或字符(0 到 255)

示例:

section .data
    age db 25          ; 创建一个名为 "age" 的字节,值为 25
    grade db 'A'       ; 创建一个名为 "grade" 的字节,值为 65('A' 的 ASCII 编码)
    zero db 0          ; 创建一个名为 "zero" 的字节,值为 0

一个字节可以存储的内容:

类型范围示例
小数字0 到 255db 100
字符'A' 到 'z'db 'X'
ASCII 码0 到 255db 65(与 'A' 相同)

在同一行定义多个字节:

你可以用逗号连续定义多个字节:

section .data
    numbers db 5, 10, 15, 20    ; 创建 4 个字节:5, 10, 15, 20
    letters db 'A', 'B', 'C'    ; 创建 3 个字节:65, 66, 67

如何在代码中使用字节:

section .data
    myByte db 42

section .text
    mov al, [myByte]    ; 将值 42 加载到 al 中
    add al, 1           ; al 变为 43
    mov [myByte], al    ; 将 43 存回 myByte

重要规则:

规则说明
值必须能放入 1 个字节0 到 255(或一个字符)
使用 8 位寄存器(例如 al)进行加载或存储al(与 bl、cl、dl 类似)是一个 8 位寄存器

常见错误:

; 错误:试图用一个字节存储过大的数字
section .data
    error db 300    ; 300 太大了(最大值为 255)
challenge icon

挑战

简单

在 .data 单元中创建一个名为 score、值为 15 的字节。

编写 data.asm 文件,其中包含正确的 .data 单元和 db 指令。

亲手试试

%include "data.asm"

section .text
    global _start

_start:
    mov al, [score]
    
    mov r12, rax
    
    add al, 48
    mov [digit], al
    
    mov rax, 1
    mov rdi, 1
    mov rsi, digit
    mov rdx, 1
    syscall
    
    mov rax, 60
    mov rdi, 0
    syscall

section .bss
    digit resb 1
quiz icon自我测试

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

基础知识中的所有课

自己练习: Assembly 在线编辑器