我正在使用Assembler编写一个"Hello world"程序。我已经声明了两个字符串常量,每个字符串的末尾都有换行符n
:
section .data
str1: db "abcdn"
str2: db "efghn"
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
abcdnefghn$
为什么打印出换行符n
?
您需要在字符串周围使用"后引号"来支持转义序列:
str1: db `abcdn`
str2: db `efghn`
参考:http://www.nasm.us/doc/nasmdoc3.html
3.4.2字符串:
"用后引号括起来的字符串支持C样式-特殊情况下的转义符字符。"
另一种方法是为新行放入ASCII代码0xA:
section .data
str1: db "abcd", 0xA
str2: db "efgh", 0xA