db:定义字节
本课属于 Coddy Assembly 学习旅程的“基础知识”单元。第 24 课,共 45 课。
在内存中创建数据的最基本方式是 db:定义字节。它会创建一个字节(8 位)的数据。
语法:
label db valuelabel:你为这个内存地址指定的名称db:定义字节指令value:要存储的数字或字符(0 到 255)
示例:
section .data
age db 25 ; 创建一个名为 "age" 的字节,值为 25
grade db 'A' ; 创建一个名为 "grade" 的字节,值为 65('A' 的 ASCII 编码)
zero db 0 ; 创建一个名为 "zero" 的字节,值为 0一个字节可以存储的内容:
| 类型 | 范围 | 示例 |
|---|---|---|
| 小数字 | 0 到 255 | db 100 |
| 字符 | 'A' 到 'z' | db 'X' |
| ASCII 码 | 0 到 255 | db 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)挑战
简单在 .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这节课包含一个小测验。开始学习即可作答,并记录你的进度。
基础知识中的所有课
自己练习: Assembly 在线编辑器