我正在进行一项任务,以获取用户提供的整数并确定它是否为素数。我编写的程序运行正常我只是不完全理解为什么我需要在每个循环中将edx设置为0。
;--------------------------------------------------------------------------
IsPrime PROC
;
; This determines if the integer is a prime
;--------------------------------------------------------------------------
mov ebx,eax ;Copying eax -> ebx
sar eax,1 ;Arithmetic shift right to make eax = eax/2
mov esi,eax ;Setting esi = half of our number
mov ecx,1
isPrimeLoop:
add ecx, 1 ;increments ecx, starts at 2
cmp ecx,esi
ja itsPrime
mov edx,0
mov eax,ebx
div ecx ;dividing to see if it has a remainder or not
cmp edx,0
jz itsNotPrime
jmp isPrimeLoop
itsNotPrime: ;displays results for numbers that are not prime
mov eax,ebx
call WriteDec
mWrite " is not a prime number it is divisible by "
mov eax,ecx
call WriteDec
call Crlf
jmp endPrime
itsPrime: ;displays results for numbers that are prime
mov eax,ebx
call WriteDec
mWrite " is a prime number."
call Crlf
jmp endPrime
endPrime:
ret
IsPrime ENDP
答案 0 :(得分:2)
因为div除了edx:eax。结果落在eax中,其余部分落在edx中。如果结果不适合eax(可能是edx包含垃圾),则会引发中断,操作系统将转换为SIGFPE。