Code blocks - wstawka asm - wywołanie printf

0

Cześć. Jak wywołać funkcję printf we wstawce asemblera?
Wywołanie:

asm("call printf");

daje:

undefined reference to `printf'

Sprawdzałem, inne instrukcje niewywołujące funkcji działają. Należało dodać do opcji kompilatora -masm=intel.

0

W jaki sposób to kompilujesz? U mnie mam program

#include <stdio.h>
int main() {
    asm("call printf");
}

Kompiluję przez gcc prog.c, bez problemu. (wywala się w trakcie uruchomienia, ale to nic dziwnego, bo argumentów nie ustawiłem na poprawne).

0

dwie wstawki asm

wrzucam tak dla przykładu. Składnia jest AT&T (nie należy do przyjemnych), dla kompilatora MinGW (czy jak to tam się pisze)

int a, b, c;

int main(void)
{
    cin >> a;
    cin >> b;

    asm
    (
    "movl _a, %eax \n"
    "movl _b, %ebx \n"
    "addl %eax, %ebx \n"
    "movl %ebx, _c \n"
    );

    std::cout << c << std::endl;

return 0;
}

Drugi przykład

int main(void)
{
    asm("movl $4, %eax \n"
        "movl $1, %ebx \n"
        "movl $napis, %ecx \n"
        "movl $len, %edx \n"
        "int $0x80 \n"
        "movl $1, %eax \n"
        "movl $0, %ebx \n"
        "int $0x80 \n"
        "napis: \n"
        ".string \"hello world\\n\" \n"
        "len = .-napis \n");

    std::cout << std::endl;

    return 0;
}
0

ten kod już nie skompiluje się na x64 (przynajmniej u mnie)

int a, b, c;

int main(void)
{
    cin >> a;
    cin >> b;

    asm("movl a, %eax \n"
        "movl b, %edx \n"
        "addl %eax, %edx \n"
        "movl %edx, c");

    std::cout << c << std::endl;

    return 0;
}

a teraz niech wprawne oko znajdzie różnice :P

0

W jaki sposób to kompilujesz?

Code blocks pod windows:

C++ compiler:                  mingw32-g++.exe
Linker for dynamics libs:      mingw32-g++.exe
Linker for static libs:        ar.exe
mingw32-g++.exe  -o D:\programowanie\C++\test.exe D:\programowanie\C++\test.o  -m32
1

Sprawa się wyjaśniła. Do wywołań funkcji w windowsie trzeba poprzedzić nazwę funkcji znakiem podkreślenia, czyli w tym przypadku _printf :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0