Assembly 执行NVER div命令时,程序停止工作

Assembly 执行NVER div命令时,程序停止工作,assembly,masm32,Assembly,Masm32,我看不到在尝试除以ebx之前,在任何地方都实际设置了ebx 如果ebx在该点设置为零,则不太可能有好的结局,因为这表明针对该情况引发了异常: lea ecx,wtavg push ecx call StdOut xor eax,eax lea eax,wtsum ; I have values stored in these variables(integer data) mov eax,[eax] lea ecx,sumwts mov ecx,[ecx] d

我看不到在尝试除以ebx之前,在任何地方都实际设置了ebx

如果ebx在该点设置为零,则不太可能有好的结局,因为这表明针对该情况引发了异常:

lea   ecx,wtavg
push  ecx
call  StdOut
xor   eax,eax
lea   eax,wtsum     ; I have values stored in these variables(integer data)
mov   eax,[eax]
lea   ecx,sumwts
mov   ecx,[ecx]
div   ebx           ; The problem lies here, "Windows Stopped working" 
lea   edi,temp1
mov   [edi],ebx
lea   edi,rem
mov   [edi],edx
print ustr$(eax),0,0
lea   eax,pt
push  eax
call  StdOut
lea   eax,rem
mov   eax,[eax]
mov   edx,100
mul   edx
lea   ebx,temp1
mov   ebx,[ebx]
div   ebx
xchg  ebx,eax
print ustr$(ebx),13,10
lea   eax, prompt
push  eax
call  StdOut
mov   eax,100
push  eax
lea   eax,temp1
push  eax
call  StdIn
call  ExitProcess
如果您试图用SUMWT划分某些内容,您可能应该将其加载到ebx或使用ecx作为div指令的一部分:

if (Source == 0) Exception (DE); // divide error
您可能还希望确保在div之前的某个地方将edx设置为零,因为在div中也会使用该设置。对于div ebx,操作有效地包括:

lea  ecx,sumwts
mov  ebx,[ecx]        ; Or leave as mov ecx,[ecx]
div  ebx              ;   then use div ecx.

可能需要更详细地了解您期望的结果以及您看到的确切错误。请确保:0
tmp <- edx:eax
eax <- tmp / ebx, exception if eax would overflow
edx <- tmp % ebx