2015-03-21 7 views
6

Piszę program "Witaj świecie" za pomocą asemblera. Mam ogłoszony 2 stałe ciągów znaków z nowej linii charakteru \n na końcu każdego łańcucha:Nowa linia characted w stałej łańcuchowej nie jest rozpoznawana przez 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 

Po I zbudował i wykonywany ten kod i mam następujący wynik:

$ nasm -f elf64 -o first.o first.asm 
$ ld -o first first.o 
$ ./first 
abcd\nefgh\n$ 

Dlaczego znak nowej linii \n jest wydrukowany?

Odpowiedz

7

Trzeba użyć 'odwrotnego cudzysłowiu' wokół napisu wspierać sekwencje ucieczki:

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

referencyjne: http://www.nasm.us/doc/nasmdoc3.html

3.4.2 ciągów znaków:

„Strings zamknięte w małe cudzysłowy obsługa stylów w stylu C dla specjalnych znaków . "

5

Innym podejściem jest umieszczenie 0xA kod ASCII dla nowej linii:

section .data 
    str1: db "abcd", 0xA 
    str2: db "efgh", 0xA