2015-03-21 4 views
6

Я пишу программу «Hello world», используя Assembler. Я объявил 2 строковых константы с символом новой строки \n в конце каждой строки:Новая строка, записанная в константе строки, не распознается nasm

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?

ответ

7

Вы должны использовать 'обратные кавычки' вокруг строки для поддержки управляющих последовательностей:

str1: db `abcd\n` 
str2: db `efgh\n` 

Ссылка: http://www.nasm.us/doc/nasmdoc3.html

3.4.2 Строки символов:

«Строки, заключенные в обратные кавычки поддержка стилей C-стиля для специальных символов . "

5

Другой подход заключается поместить ASCII код 0xA для новой линии:

section .data 
    str1: db "abcd", 0xA 
    str2: db "efgh", 0xA 
Смежные вопросы