我正在为一个项目上课,教授希望我们使用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,但它仍然在崩溃所有浮点上。
答案 0 :(得分:0)
我想通了......有点儿。我的浮点指令不正确。 fsubp应该是fsub,fmulp应该是fmul等等。为什么崩溃编译器,我不知道,但改变修复了问题。