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
答案 0 :(得分:2)
在尝试除以某些内容之前,我无法在任何地方看到设置 ebx
。
如果ebx
在此时设置为零,则不太可能结束,因为Documentation for the div
instruction表示针对该情况引发了异常:
if (Source == 0) Exception (DE); // divide error
如果您尝试按sumwts
划分某些内容,则应该将其加载到ebx
或使用ecx
作为div
指令的一部分:< / p>
lea ecx,sumwts
mov ebx,[ecx] ; Or leave as mov ecx,[ecx]
div ebx ; then use div ecx.
您可能还希望确保在edx
之前的div
某处设置为div ebx
,因为该部门也使用了tmp <- edx:eax
eax <- tmp / ebx, exception if eax would overflow
edx <- tmp % ebx
。对于{{1}},行动是有效的:
{{1}}