Мой код сборки NASM (в Linux) выглядит следующим образом:
%macro write_string 2
push %1
call printf
pop eax
add esp, %2
%endmacro
section .text
global main ;must be declared for using gcc
extern printf
main:
push ebp
mov ebp, esp
write_string msg1, len1
write_string msg2, len2
write_string msg3, len3
mov esp, ebp
pop ebp
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel
section .data
msg1 db 'Hello, programmers!',0xA,0xD
len1 equ $ - msg1
msg2 db 'Welcome to the world of,', 0xA,0xD
len2 equ $- msg2
msg3 db 'Linux assembly programming! '
len3 equ $- msg3
Когда это выполняется (после nasm -f elf -o writeStrings.o writeStrings.asm && gcc -o writeStrings writeStrings.o), Я получаю следующий вывод:
Hello, programmers! Welcome to the world of, Linux assembly
programming! Welcome to the world of,
Может кто-нибудь сказать мне, почему «Добро пожаловать в мир» дублируется?
Любая помощь будетБудьте благодарны!
Обновление: После добавления 0x00 после каждого сообщения, теперь вывод: Привет, программисты!Добро пожаловать в мир,
Третий отпечаток не выводится сейчас.
Обновление: Мне удалось заставить его работать.Большое спасибо за вашу помощь!