Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly x86汇编如何使用DIV指令和循环检查整数是否为素数_Assembly_X86_Intel_Irvine32 - Fatal编程技术网

Assembly x86汇编如何使用DIV指令和循环检查整数是否为素数

Assembly x86汇编如何使用DIV指令和循环检查整数是否为素数,assembly,x86,intel,irvine32,Assembly,X86,Intel,Irvine32,我创建了一个程序,它将打印用户输入的所有素数。但是,有些输出值不是素数,如15、21等。如果我以15开始程序,它将不会以素数输出,因此它必须是我的DIV段或循环。非常感谢您的帮助 .code main proc mov ecx, 18 ;ecx is the loop counter mov eax, 2 ;assume 2 is prime L1: inc eax ;start with value 3

我创建了一个程序,它将打印用户输入的所有素数。但是,有些输出值不是素数,如15、21等。如果我以15开始程序,它将不会以素数输出,因此它必须是我的DIV段或循环。非常感谢您的帮助

.code
main proc



mov ecx, 18             ;ecx is the loop counter
mov eax, 2              ;assume 2 is prime
L1:
    inc eax             ;start with value 3
    call isPrime
    loop L1


invoke ExitProcess,0
main endp

isPrime PROC          ;Procedure
push eax
push ecx
mov valEntered, eax
mov ogCounter, ecx


mov edx, 0            ;check if 
                      ;value divisible by 2
mov eax, eax
div divisor0          ;divisor0 = 2
mov eax, edx
cmp eax, 0
jz no   


mov ecx, valEntered         ;ecx loop 
                            ;counter

L2:              ;check if 
                 ;value divisible by >= 3
mov eax, iStart  ;iStart = 3
mul iStart
cmp valEntered, eax
jl yes

mov edx, 0
mov eax, valEntered
div iStart      ;iStart = 3
mov eax, edx
cmp eax, 0
jz no       
add iStart, 2   ;iStart += 2
loop L2
jmp no


yes:                ;output prime number
mov eax, valEntered
call WriteInt
call Crlf
mov ecx, ogCounter
pop ecx
pop eax
ret

no:                ;continue to next int
mov ecx, ogCounter
pop ecx
pop eax
ret

isPrime ENDP
end main

检查素数时更改
iStart
,但下次检查时不会将其重置回3。

检查素数时更改
iStart
,但下次检查时不会将其重置回3。

相关:风格和效率。当你知道除数是2的幂时,千万不要使用div。你肯定不需要在内存中保留除数;使用登记册;这就是他们的目的。相关:风格和效率。当你知道除数是2的幂时,千万不要使用div。你肯定不需要在内存中保留除数;使用登记册;这就是他们的目的。