ÇÁ·Î±×·¡¹Ö

 3198, 1/160 ȸ¿ø°¡ÀÔ  ·Î±×ÀΠ 
   thunder994
   [¾î¼À] nasm Äڵ带 masmÄÚµå·Î ¹Ù²ãÁÖ¼¼¿ä ºÎʵå·Á¿ä

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=3210 [º¹»ç]


;Amount of double words (32 bits each) that we will reserve
%define RESSIZE 10000000        
;Uninitialized data goes in bss segment  
segment .bss      
     ;Reserve plenty of space for primes (38MB)              
     Primes resd RESSIZE    
     ;Reserve space for answer
RetVal resd 1                
;Code goes in the text section
segment .text
;global <procedure name>
global _asm_main lets C program "see" the procedure
      ;procedure start
      _asm_main:    
         ;setup routine            
         enter 0,0    
          ;save register states for when we return to C              
pusha
     ;indexer for prime number array          
mov esi,0  
;ebp-1 points to last found prime                
mov ebp,0                    
;first prime given free
mov [Primes], DWORD 3
  ;set up to hold next prime      
inc ebp                      
;find primes from 3 to X
mov ecx, DWORD 3        
;outer loop
i:
     ;check that we haven't gone past max      
     cmp ecx,10000000        
             ja  end
    ;clear "j" (inner loop)
     mov esi,0              
         j:
             ;if we've gone past our current list of primes, we're prime
cmp esi,ebp
       ja prime              
    ;divide by previous prime
     mov edx, 0              
     mov eax, ecx
     div DWORD [Primes + (esi-1)*4]
       ;if we have no remainder, skip
     cmp edx, 0
     je  next                  
     ;go to next prime
     inc esi                
jmp j
      ;Add new prime to list
     prime:                
          mov [Primes + ebp * 4], ecx
         inc ebp
             next:
         add ecx,2
         jmp i
end:
  mov eax,[Primes + (ebp-1)*4]
         mov [RetVal],eax
          ;Get register states from before we ran procedure        
popa
         ;return back to C
         mov eax, [RetVal]      
         leave
         ret
----------------------------------------------------------------------------
¿©±â±îÁö±¸¿ä. namsÀü¿ëÀ¸·Î ¸¸µå¾îÁø Äڵ絥 masmÀ¸·ÎÁ» ¹Ù²ãÁÖ¼¼¿ä~ºÎʵ右´Ï´Ù ¤Ì
ÁÖ¼®Àº ÇÊ¿ä¾ø¾î¿ä

  Hit : 4634     Date : 2011/11/15 08:23