2014-12-05 70 views
-1
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

也許您對期望的結果和您看到的確切錯誤有更詳細的瞭解。 – ouflak 2014-12-05 08:50:12

+0

確保:'0 <= edx 2014-12-05 11:13:10

回答

2

我沒有看到任何地方,你實際上已經設置ebx的東西試圖通過它來劃分了。

這是不太好下場的,如果ebx在該點設置爲零,因爲Documentation for the div instruction表示將引發異常對於這種情況:

if (Source == 0) Exception (DE); // divide error 

如果你想通過sumwts,你應該分什麼可能加載到ebx或使用ecx作爲div指令的一部分:

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