У меня есть следующий код, который печатает количество параметров, переданных ./main
. Обратите внимание на fmt
в разделе rodata
. Я включил новую линию \n
, так же, как в C, но вместо того, чтобы печатать новую строку, она печатает:Сборка: printf not printing new line
Количество параметров: 1 \ п
Мой код:
;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
Я знаю, что в том числе 10 до 0, и после того, как «Количество ...» в fmt
будет печатать, но я хочу printf
, чтобы сделать это. Я собираю код с NASM, а затем свяжу его через GCC, чтобы создать свой исполняемый файл.
Вы не компилируете такой код ассемблера, а используете _assembler_. И вы не «компилируете» результирующий объектный файл, а _link_ it. Во всяком случае, это не связано с gcc и, наконец, не с C-языком. Не добавляйте несвязанные теги. – Olaf