Assembly 执行NVER div命令时,程序停止工作
我看不到在尝试除以ebx之前,在任何地方都实际设置了ebx 如果ebx在该点设置为零,则不太可能有好的结局,因为这表明针对该情况引发了异常: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
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