nasm 无法识别字符串常量中的换行符
The new line characted in the string constant isn't being recognized by nasm
我正在使用汇编程序编写 'Hello world' 程序。我在每个字符串的末尾用换行符 \n
声明了 2 个字符串常量:
section .data
str1: db "abcd\n"
str2: db "efgh\n"
section .text
global _start
_start:
mov rax, 1
mov rdi, 1
mov rsi, str1
mov rdx, 6
syscall
mov rax, 1
mov rdi, 1
mov rsi, str2
mov rdx, 6
syscall
mov rax, 60
mov rdi, 0
syscall
在我构建并执行这段代码后,我得到了以下结果:
$ nasm -f elf64 -o first.o first.asm
$ ld -o first first.o
$ ./first
abcd\nefgh\n$
为什么打印出换行符\n
?
您需要在字符串周围使用 'backquotes' 以支持转义序列:
str1: db `abcd\n`
str2: db `efgh\n`
参考:http://www.nasm.us/doc/nasmdoc3.html
3.4.2 字符串:
"Strings enclosed in backquotes support C-style -escapes for special
characters."
另一种方法是将 ASCII 码 0xA 换行:
section .data
str1: db "abcd", 0xA
str2: db "efgh", 0xA
我正在使用汇编程序编写 'Hello world' 程序。我在每个字符串的末尾用换行符 \n
声明了 2 个字符串常量:
section .data
str1: db "abcd\n"
str2: db "efgh\n"
section .text
global _start
_start:
mov rax, 1
mov rdi, 1
mov rsi, str1
mov rdx, 6
syscall
mov rax, 1
mov rdi, 1
mov rsi, str2
mov rdx, 6
syscall
mov rax, 60
mov rdi, 0
syscall
在我构建并执行这段代码后,我得到了以下结果:
$ nasm -f elf64 -o first.o first.asm
$ ld -o first first.o
$ ./first
abcd\nefgh\n$
为什么打印出换行符\n
?
您需要在字符串周围使用 'backquotes' 以支持转义序列:
str1: db `abcd\n`
str2: db `efgh\n`
参考:http://www.nasm.us/doc/nasmdoc3.html
3.4.2 字符串:
"Strings enclosed in backquotes support C-style -escapes for special characters."
另一种方法是将 ASCII 码 0xA 换行:
section .data
str1: db "abcd", 0xA
str2: db "efgh", 0xA