Bien practicando ASM se me ocurrio hacer un prorama para determinar los numeros primos menores al 900
format PE console
include 'win32ax.inc'
entry start
.data
sqrt dd 0 ;raiz
msg db "%d primo",13,10,0
count dd 10b;
.code
start:
bucle:
stdcall isPrime,[count]
.if edx <> 0 | eax= 1
push [count]
push msg
call [printf]
add esp,8
.endif
inc [count]
cmp [count],1110000100b
je _wait
jne bucle
proc _sqrt,firshValue,secondValue
mov edx,0 ;EDX = 0
mov eax,[firshValue] ;valor A
mov ebx,[secondValue] ;valor B
div ebx ;EAX=A/B
ret
endp
proc isPrime,value
stdcall _sqrt,[value],2 ;div
mov [sqrt],eax ;sqrt = EAX
mov ecx,2 ; index
_loop:
stdcall _sqrt,[value],ecx ;div
inc ecx ;index++
.if edx = 0 ;resto == 0
mov edx,0
ret
.endif
cmp ecx,[sqrt];
jne _loop
ret
endp
_wait:
invoke Sleep,-1 ;pause
section ".idata" import data readable writable
library msvcrt,"msvcrt.dll",kernel32,"kernel32.dll"
import kernel32,Sleep,"Sleep"
import msvcrt,printf,"printf"
la pregunta es como se puede mejorar?
un saludo.