Assembly: printf not printing new line -


i have following code prints number of parameters passed ./main. notice fmt in rodata section. i've included new line \n, in c, instead of printing new line, prints:

number of parameters: 1 \n

my code is:

;main.asm global main extern printf  section .rodata: fmt db "number of parameters: %d \n", 0   section .text:  main:      push ebp     mov ebp, esp    ;stackframe      push dword[ebp+8]       ;prepara los parametros para printf     push fmt     call printf     add esp, 2*4      mov eax, 0      ;return value      leave           ;desarmado del stack frame     ret 

i know including 10 before 0 , after "number..." in fmt print it, want printf it. assemble code nasm , link via gcc create executable.

when use quotes or double quotes around string in nasm, doesn't accept c style escape sequences. on linux can encode \n ascii 10 this:

fmt db "number of parameters: %d", 10, 0  

there alternative. nasm supports backquotes (backticks) allow nasm process characters between them c style escape sequences. should work well:

fmt db `number of parameters: %d \n`, 0 

please note: not single quotes, backticks. described in nasm documentation:

3.4.2 character strings

a character string consists of 8 characters enclosed in either single quotes ('...'), double quotes ("...") or backquotes (...). single or double quotes equivalent nasm (except of course surrounding constant single quotes allows double quotes appear within , vice versa); contents of represented verbatim. strings enclosed in backquotes support c-style -escapes special characters.


Comments

Popular posts from this blog

Ansible - ERROR! the field 'hosts' is required but was not set -

customize file_field button ruby on rails -

SoapUI on windows 10 - high DPI/4K scaling issue -