Menu
CoddyTech

换行符很重要

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

你一直在字符串末尾添加 0x0a(换行符)。但如果忘了呢?

不换行:

文本会打印出来,但光标会停留在同一行。之后的任何输出都会紧挨着它显示。

不换行的示例:

section .data
    first db 'Hello'
    firstLen equ $ - first
    second db 'World'
    secondLen equ $ - second

section .text
    mov rax, 1
    mov rdi, 1
    mov rsi, first
    mov rdx, firstLen
    syscall

    mov rax, 1
    mov rdi, 1
    mov rsi, second
    mov rdx, secondLen
    syscall

输出:

HelloWorld

没有空格,也没有换行。所有内容都连在了一起。

带换行符:

section .data
    first db 'Hello', 0x0a
    firstLen equ $ - first
    second db 'World', 0x0a
    secondLen equ $ - second

输出:

Hello
World

每个字符串都会单独打印在一行上。

换行符的作用:

字符ASCII效果
0x0a10将光标移到下一行的开头

常见的换行错误:

错误结果
完全没有换行文本连在一起,显示在同一行
只在最后一个字符串末尾换行所有字符串连在一起,显示在同一行,然后光标移到下一行
在字符串中间换行在意想不到的位置换行

安全规则:

每次想让字符串单独占一行时,都要在末尾添加 0x0a。

challenge icon

挑战

给你三个不带换行符的字符串。你的任务是打印它们,让它们分别显示在三行中。

这些字符串是:

字符串值
word1'Apple'
word2'Banana'
word3'Cherry'

要求:

  • 定义每个字符串,并在末尾添加换行符(0x0a)
  • 自动计算每个字符串的长度
  • 使用 write 系统调用打印全部三个字符串
  • 以代码 0 正常退出

亲手试试

section .data
    ; TODO: 用说明中列出的第 1 段文本和换行符定义 word1
    ; TODO: 用说明中列出的第 2 段文本和换行符定义 word2
    ; TODO: 用说明中列出的第 3 段文本和换行符定义 word3
    ; TODO: 计算每个字符串的长度

section .text
    global _start

_start:
    ; TODO: 输出 word1
    ; TODO: 输出 word2
    ; TODO: 输出 word3

    ; TODO: 正常退出
quiz icon自我测试

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

基础知识中的所有课

自己练习: Assembly 在线编辑器