换行符很重要
本课属于 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 | 效果 |
|---|---|---|
0x0a | 10 | 将光标移到下一行的开头 |
常见的换行错误:
| 错误 | 结果 |
|---|---|
| 完全没有换行 | 文本连在一起,显示在同一行 |
| 只在最后一个字符串末尾换行 | 所有字符串连在一起,显示在同一行,然后光标移到下一行 |
| 在字符串中间换行 | 在意想不到的位置换行 |
安全规则:
每次想让字符串单独占一行时,都要在末尾添加 0x0a。
挑战
给你三个不带换行符的字符串。你的任务是打印它们,让它们分别显示在三行中。
这些字符串是:
| 字符串 | 值 |
|---|---|
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: 正常退出
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
基础知识中的所有课
自己练习: Assembly 在线编辑器