Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: Leyer en 12 Enero 2012, 02:49 am



Título: FASM numeros primos
Publicado por: Leyer en 12 Enero 2012, 02:49 am
Bien practicando ASM se me ocurrio hacer un prorama para determinar los numeros primos menores al 900
Código
  1. format PE console
  2. include 'win32ax.inc'
  3. entry start
  4. .data
  5.        sqrt dd 0  ;raiz
  6.        msg db "%d primo",13,10,0
  7.        count dd 10b;
  8. .code
  9.     start:
  10.          bucle:
  11.                stdcall isPrime,[count]
  12.                 .if edx <> 0 |  eax= 1
  13.                     push [count]
  14.                     push msg
  15.                     call [printf]
  16.                     add esp,8
  17.                 .endif
  18.              inc [count]
  19.              cmp [count],1110000100b
  20.              je _wait
  21.              jne bucle
  22.     proc _sqrt,firshValue,secondValue
  23.           mov edx,0     ;EDX = 0
  24.           mov eax,[firshValue]  ;valor A
  25.           mov ebx,[secondValue] ;valor B
  26.           div ebx ;EAX=A/B
  27.           ret
  28.     endp
  29.     proc isPrime,value
  30.           stdcall _sqrt,[value],2 ;div
  31.           mov [sqrt],eax ;sqrt = EAX
  32.           mov ecx,2 ; index
  33.           _loop:
  34.                stdcall _sqrt,[value],ecx ;div
  35.                inc ecx ;index++
  36.                .if edx = 0 ;resto == 0
  37.                    mov edx,0
  38.                    ret
  39.                .endif
  40.                cmp ecx,[sqrt];
  41.                jne _loop
  42.                ret
  43.       endp
  44. _wait:
  45.       invoke Sleep,-1 ;pause
  46. section ".idata" import data readable writable
  47.   library msvcrt,"msvcrt.dll",kernel32,"kernel32.dll"
  48.   import kernel32,Sleep,"Sleep"
  49.   import msvcrt,printf,"printf"

la pregunta es como se puede mejorar?

un saludo.