Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

prime # assembly language program

Name: Anonymous 2007-08-06 0:52 ID:bXqn4xmn

I am learning assembly language and need some help in figureing out how to get this program to display only prime numbers from 2 to 19. please help /prog/

; prime.asm
; sample program to demonstrate procedures
; calulates and prints prime numbers from 1 to 20

include 'emu8086.inc'

org  100h ; set location counter to 100h

jmp CodeStart

DataStart:
   max dw 19
   space db " ", 0

CodeStart:
   mov bx, 2
  
   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

Name: Anonymous 2007-08-07 3:32 ID:nD2HJvqG

>>9
It's 6502.  The designers of the ARM instruction set were fans of the 6502 and borrowed a lot of syntax conventions from it.

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List