在字符串常量中追踪的新行未被nasm识别

Igo*_*gor 11 linux assembly nasm

我正在使用Assembler编写一个'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
Run Code Online (Sandbox Code Playgroud)

在构建并执行此代码之后,我得到了以下结果:

$ nasm -f elf64 -o first.o first.asm 
$ ld -o first first.o 
$ ./first 
abcd\nefgh\n$ 
Run Code Online (Sandbox Code Playgroud)

为什么\n打印出新行字符?

Guf*_*ffa 14

您需要在字符串周围使用"反引号"来支持转义序列:

str1: db `abcd\n`
str2: db `efgh\n`
Run Code Online (Sandbox Code Playgroud)

参考:http://www.nasm.us/doc/nasmdoc3.html

3.4.2字符串:

"反引号中的字符串支持特殊字符的C风格."


tal*_*zin 9

另一种方法是将ASCII码0xA用于新行:

section .data
    str1: db "abcd", 0xA
    str2: db "efgh", 0xA
Run Code Online (Sandbox Code Playgroud)