为什么MASM会在装配时崩溃?

时间:2012-11-04 16:04:22

标签: assembly compilation linker masm ml

我正在为一个项目上课,教授希望我们使用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,但它仍然在崩溃所有浮点上。

1 个答案:

答案 0 :(得分:0)

我想通了......有点儿。我的浮点指令不正确。 fsubp应该是fsub,fmulp应该是fmul等等。为什么崩溃编译器,我不知道,但改变修复了问题。