只要执行div命令,程序就会停止工作

时间:2014-12-05 07:42:51

标签: assembly masm32

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

1 个答案:

答案 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}}