1

私はクラスのプロジェクトに取り組んでいますが、教授は他のアセンブラーの代わりにMASMを使用することを望んでいます。(私はそれが愚かであることを知っています、私ではなく彼に話しかけてください。)ML.exeを実行してコードをコンパイルすると、クラッシュします。私が書いているプログラムではなく、アセンブラ自体です。何が原因でしょうか?実行される前に非常に長い時間実行されているので、ある種の無限ループである可能性があります。

これが私のコードです:

.386
.MODEL FLAT

PUBLIC  compute_b_proc

points          EQU     [ebp + 16]
bs              EQU     [ebp + 12]
n               EQU     [ebp + 10]
m               EQU     [ebp + 8]

.CODE
compute_b_proc  PROC NEAR32

    push    ebpi
    mov     ebp, esp

    mov     ax, n
    cmp     ax, m
    je      base_case

    mov     ax, m
    inc     ax
    pushd   points
    push    n
    push    m
    call    compute_b_proc
    push    eax
    fld     DWORD PTR [esp + 8]
    pop     eax

    mov     ax, n
    dec     ax
    pushd   points
    push    n
    push    m
    call    compute_b_proc
    push    eax
    fld     DWORD PTR [esp + 4]
    pop     eax

    fsubp

    lea     eax, points
    mov     ebx, n
    shr     ebx, 3
    add     eax, ebx
    fild    REAL4 PTR [eax + 4]

    lea     eax, points
    mov     ebx, m
    shr     ebx, 3
    add     ebx, 4
    add     eax, ebx
    fild    REAL4 PTR [eax]

    fsubp
    fdivp
    pushd   0
    fstp    DWORD PTR [eax + 4]
    pop     eax

    mov     esp, ebp
    pop     ebp
    ret     12

    lea     eax, points
    mov     ebx, n
    shl     ebx, 3
    add     eax, ebx
    mov     eax, DWORD PTR[eax]

    mov     esp, ebp
    pop     ebp
    ret     12

compute_b_proc  ENDP
END

MASMは他のファイルを正常にコンパイルします。エラーメッセージは「ML.exeが動作を停止しました」だけです。MASMバージョン6.11を使用していることに注意してください。それは教授が提供したものです。

クラッシュさせるのは浮動小数点命令のようです。MASMを再インストールしましたが、それでもすべての浮動小数点でクラッシュします。

4

1 に答える 1

0

私はそれを理解しました...ある種。浮動小数点の指示が正しくありませんでした。fsubpはfsubである必要があり、fmulpはfmulである必要があります。なぜコンパイラがクラッシュしたのか、私にはわかりませんが、変更すると問題が修正されました。

于 2012-11-05T00:07:06.290 に答える