Assembly Help <.<

Discussion in 'Programming General' started by Ezluz, Jul 5, 2009.

Assembly Help <.<
  1. Unread #1 - Jul 5, 2009 at 2:03 PM
  2. Ezluz
    Joined:
    Jan 2, 2009
    Posts:
    192
    Referrals:
    0
    Sythe Gold:
    0

    Ezluz Active Member

    Assembly Help <.<

    So, I'm trying to learn the basics of Assembly. I'm trying to create a program that finds all of the prime numbers from 1-20. I have most of the code done, but I have no idea what to do next. Please help; Thank you in advance.

    Code:
    include 'emu8086.inc'
    org  100h ; set location counter to 100h
    jmp CodeStart
    DataStart:
       max dw 20
       space db " ", 0
    CodeStart:
       mov bx, 1
       
       
       call IsPrime  
       cmp dx, 0
       
       LoopStart:   
       
           ; must be a prime
           mov ax, bx
           call print_num
           
           ; print a space
           mov si, offset space
           call print_string
           
           add bx, 1
           cmp bx, max
       jle LoopStart
       
       ret
           
        
       IsPrime PROC
           ; uses a loop to determine if number in bx is prime
           ; upon return if bx not prime dx will be 0, otherwise dx > 0
           ; we only have to test divisors from 2 to bx/2
           
           ; prepare to divide dx:ax / 2
           mov ax, bx         
           mov dx, 0 
           mov cx, 2  
           div cx
           
           ; move result into si for loop
           mov si, ax
           
           ; assume the value is prime
           mov dx, 1
           
           ; start loop at 2
           mov cx, 2
           
           PrimeLoop:
           
               ; compare loop count(in cx) and max loop value (in si)
               cmp cx, si
               
               ; jump out of loop if count(cx) > si
               ja StopLabel
           
               ; divide test value (in bx) by loop count (in cx)
               mov ax, bx
               mov dx, 0            
               div cx
               
               ; check remainder (in dx), if zero then we found a divisor
               ; and the number cannot be prime
               cmp dx, 0
               
               ; if dx = 0 then we found a divisor and can stop looking
               je StopLabel
               
               ; increment count
               add cx, 1
           
           jmp PrimeLoop
           
           StopLabel:
           
           ret
       IsPrime ENDP
       
    DEFINE_PRINT_STRING
    DEFINE_SCAN_NUM
    DEFINE_PRINT_NUM
    DEFINE_PRINT_NUM_UNS
     
< Stress Game [autoit] | missing component >

Users viewing this thread
1 guest


 
 
Adblock breaks this site