0

アセンブリを挿入した C プログラムがあります。コードは次のとおりです: main.c:

#include <stdio.h>

int f() {
    int a = 0, b;
    __asm__ (".intel_syntax noprefix\n\t"
             "mov edx, 1\n\t"
             :"=r"(b)
             :"r"(a)
             :"eax"
            );
    return b;
}

int  main() {
    printf("%d", f());
}

このコードをコンパイルする方法 ( gcc -std=c11 -S main.c -o main ) を見つけましたが、それを実行すると ( ./main )、ターミナルで問題が発生します: bash: ./main: Permission拒否された。

-S フラグなしでコンパイルしようとすると、多くの不合理な間違いが発生します。

/tmp/ccw3H0Mb.s: Assembler messages:
/tmp/ccw3H0Mb.s:23: Error: Instruction does not exist: «movl%edx,-4(%rbp)»
/tmp/ccw3H0Mb.s:24: Error: Instruction does not exist: «movl4(%rbp),%eax»
/tmp/ccw3H0Mb.s:46: Error: Instruction does not exist: «movl$0,%eax»
/tmp/ccw3H0Mb.s:48: Error: Instruction does not exist: «movl%eax,%esi»
/tmp/ccw3H0Mb.s:49: Error: Garbage «(%rip)» after expression
/tmp/ccw3H0Mb.s:50: Error: Instruction does not exist: «movl$0,%eax»
/tmp/ccw3H0Mb.s:52: Error: Instruction does not exist: «movl$0,%eax»

エラーの内容と、コードを正しく実行するために修正するにはどうすればよいですか? ありがとう!:)

4

1 に答える 1