程式語言 - MinGW - 解決Junk (%esp) after expression問題



參考資訊:
https://cboard.cprogramming.com/cplusplus-programming/122654-inline-asm-mingw.html

問題如下:

/tmp/ccOFcofP.s: Assembler messages:
/tmp/ccOFcofP.s:18: Error: junk `(%esp)' after expression
/tmp/ccOFcofP.s:19: Error: junk `(%esp)' after expression
/tmp/ccOFcofP.s:20: Error: junk `(%esp)' after expression
/tmp/ccOFcofP.s:21: Error: junk `(%esp)' after expression
/tmp/ccOFcofP.s:22: Error: no such instruction: `movl $LC0,8(%esp)'
/tmp/ccOFcofP.s:23: Error: no such instruction: `imull %edx,%eax'
/tmp/ccOFcofP.s:24: Error: junk `(%esp)' after expression
/tmp/ccOFcofP.s:25: Error: junk `(%esp)' after expression
/tmp/ccOFcofP.s:26: Error: no such instruction: `movl %eax,12(%esp)'
/tmp/ccOFcofP.s:27: Error: no such instruction: `popl %edx'

修改前

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

int _main(int argc, char**argv)
{
    volatile char a, b, c;

    __asm__(
        ".intel_syntax noprefix\n"
        "push ax\n"
    );

    a = 8;
    b = 9;
    c = a * b;
    printf("%d\n", c);
}

修改後

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

int _main(int argc, char**argv)
{
    volatile char a, b, c;

    __asm__(
        ".intel_syntax noprefix\n"
        "push ax\n"
        ".att_syntax\n"
    );

    a = 8;
    b = 9;
    c = a * b;
    printf("%d\n", c);
}