5

1 つのコースでアーム アセンブリ言語を学習しています。始めるのに少し問題があります。私は簡単なCコードを書きました:

int main()
{
    int a = 10;
    int b = 20;
    int c = a+b;
}

次に、次のコマンドを使用して、gnu arm を使用してアセンブリ コードに変換しました。

arm-elf-gcc -S first.c

これにより、アセンブリ コードを含むファイル first.s が生成されました。

    .file   "first.c"
    .text
    .align  2
    .global main
    .type   main, %function
main:
    @ args = 0, pretend = 0, frame = 12
    @ frame_needed = 1, uses_anonymous_args = 0
    mov ip, sp
    stmfd   sp!, {fp, ip, lr, pc}
    sub fp, ip, #4
    sub sp, sp, #12
    mov r3, #10
    str r3, [fp, #-16]
    mov r3, #20
    str r3, [fp, #-20]
    ldr r2, [fp, #-16]
    ldr r3, [fp, #-20]
    add r3, r2, r3
    str r3, [fp, #-24]
    mov r0, r3
    sub sp, fp, #12
    ldmfd   sp, {fp, sp, pc}
    .size   main, .-main
    .ident  "GCC: (GNU) 3.4.3"

次に、次のコマンドを使用してアセンブリ コードをコンパイルしました。

arm-elf-gcc -g first.s

これにより、.out バイナリ ファイルが生成されました。次に、コマンドを使用してqemuでa.outを実行しようとしました:

qemu-arm a.out

しかし、これは出力を生成します

Segmentation fault

間違いが見つからないのですが、何が間違っているのでしょうか?

4

1 に答える 1

5

ユーザーモードで qemu を実行しようとしています。また、arm に対応するライブラリをリンクする必要があります。

以下の pkg 内のスクリプト ファイルを見てください。

http://wiki.qemu.org/download/linux-user-test-0.3.tar.gz

qemu -L library_PATH_ARM ./a.outを実行する必要があります

于 2012-08-10T04:39:33.567 に答える