-
Notifications
You must be signed in to change notification settings - Fork 1
/
6_4_IF_PRIME_OR_NOT.asm
141 lines (114 loc) · 2.12 KB
/
6_4_IF_PRIME_OR_NOT.asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
; DETECT IF PRIME LESS THEN OR EQUAL 255
; summing up the values upto N
.MODEL SMALL
.STACK 100H
.DATA
TWO DB 2
THREE DB 3
FIVE DB 5
SEVEN DB 7
ELEVEN DB 11
THIRTEEN DB 13
NUMBER DW 0
STR DB 5 DUP('$')
NEWLINE DB 0AH,0DH,'$'
PRIME DB "THE NUMBER IS PRIME$"
NOT_PRIME DB "THE NUMBER IS NOT PRIME$"
.CODE
MAIN PROC
MOV AX,@DATA
MOV DS,AX
MOV AH,1
MOV SI,0
SCAN:
INT 21H
CMP AL,0DH
JE END_SCAN
MOV STR[SI],AL
INC SI
JMP SCAN
END_SCAN:
CALL MAKENUMBER
CMP NUMBER,1
JE LAST
MOV AX,NUMBER
CMP AL,TWO
JE IS_PRIME
DIV TWO
CMP AH,0
JE LAST
MOV AX,NUMBER
CMP AL,THREE
JE IS_PRIME
DIV THREE
CMP AH,0
JE LAST
MOV AX,NUMBER
CMP AL,FIVE
JE IS_PRIME
DIV FIVE
CMP AH,0
JE LAST
MOV AX,NUMBER
CMP AL,SEVEN
JE IS_PRIME
DIV SEVEN
CMP AH,0
JE LAST
MOV AX,NUMBER
CMP AL,ELEVEN
JE IS_PRIME
DIV ELEVEN
CMP AH,0
JE LAST
MOV AX,NUMBER
CMP AL,THIRTEEN
JE IS_PRIME
DIV THIRTEEN
CMP AH,0
JE LAST
IS_PRIME:
LEA DX,PRIME
JMP BELOW
LAST:
LEA DX,NOT_PRIME
BELOW:
CALL PRINTLINE
MOV AH,9
INT 21H
MOV AH,4CH
INT 21H
MAIN ENDP
PRINTLINE PROC
PUSH DX
PUSH AX
LEA DX,NEWLINE
MOV AH,09H
INT 21H
POP AX
POP DX
RET
PRINTLINE ENDP
MAKENUMBER PROC
; READS FROM STR STRING AND BUILD NUMBER IN NUMBER VARIABLE
PUSH BX
PUSH AX
MOV AX,0
MOV BL,10
MOV SI,0
ITERATE:
MOV DL,STR[SI]
CMP DL,'$'
JE END_ITERATE
SUB DL,'0'
MUL BL
ADD AL,DL
INC SI
JMP ITERATE
END_ITERATE:
MOV NUMBER,AX
POP AX
POP BX
RET
MAKENUMBER ENDP
END MAIN