Friday, 20 December 2013

LC3 Assembly Code to check for a Prime Number.

    .ORIG x3000

    LD R2,N              ; load N in R2
    AND R4,R4,#0    ; set 0 to R4
    ADD R4,R2,#0    ; add 0 to R2 and store in R4 i.e Temp-N

    LD R5,Divisor     ; load Divisor value in R5
    LD R1,Flag         ; load Flag value in R1
    LD R3,I               ; load I in R3
   
Here1:
    ADD R4,R4,#0
    BRnz There1

    NOT R0,R5
    ADD R0,R0,#1
    ADD R4,R4,R0
    ADD R3,R3,#1
    BRnzp Here1
There1:
    BRzp Here
    ADD R3,R3,#-1
Here:
    AND R5,R5,#0
    ADD R5,R3,#0
    AND R0,R0,#0
    ADD R0,R3,#-2
    BRn There
    AND R6,R6,#0    ; use R6 as Sum
Here2:
    AND R0,R0,#0
    ADD R0,R6,#0
    NOT R0,R0
    ADD R0,R0,#1
    ADD R0,R2,R0
    BRnz There2
    ADD R6,R6,R5
    BRnzp Here2
There2:
    AND R0,R0,#0
    ADD R0,R2,#0
    NOT R0,R0
    ADD R0,R0,#1
    ADD R0,R6,R0
    BRz LABEL
    AND R0,R0,#0
    ADD R0,R5,#0
    NOT R0,R0
    ADD R0,R0,#1
    ADD R6,R6,R0
LABEL:
    AND R7,R7,#0
    NOT R0,R6
    ADD R0,R0,#1
    ADD R7,R2,R0
    BRnp LABEL2
    AND R1,R1,#0
    ADD R1,R1,#1
    BRnzp There
LABEL2
    ADD R3,R3,#-1
    BRnzp Here
There:
    ADD R1,R1,#0
    BRp One
    AND R2,R2,#0    ; R2=0 means N is Prime
    BRnzp End
One:
    AND R2,R2,#0
    ADD R2,R2,#10    ; R2=10 means N is not Prime
End:
    HALT

N             .FILL #170
I               .FILL #0
Flag         .FILL #0
Divisor    .FILL #2
    .END

No comments:

Post a Comment