-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathprime.asm
170 lines (167 loc) · 1.97 KB
/
prime.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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
code segment
call myread
mov vi,cx
push offset vaprev
push 7
pop ax
pop bp
mov [bp],ax
push offset vn
push 1
pop ax
pop bp
mov [bp],ax
LABL1:
push vi w
pop ax
cmp ax,0
if z jmp LABL2
push offset vn
push vn w
push 1
mov dx,0
pop cx
pop ax
add ax,cx
push ax
pop ax
pop bp
mov [bp],ax
push offset vk
push vn w
pop ax
pop bp
mov [bp],ax
push offset vm
push vaprev w
pop ax
pop bp
mov [bp],ax
LABL3:
push vm w
pop ax
cmp ax,0
if z jmp LABL4
push offset vt
push vm w
pop ax
pop bp
mov [bp],ax
push offset vm
push vk w
push vm w
xor dx,dx
pop cx
pop ax
div cx
push dx
pop ax
pop bp
mov [bp],ax
push offset vk
push vt w
pop ax
pop bp
mov [bp],ax
jmp LABL3
LABL4:
push offset vanew
push vaprev w
push vk w
mov dx,0
pop cx
pop ax
add ax,cx
push ax
pop ax
pop bp
mov [bp],ax
push offset vi
push vi w
push 1
pop cx
pop ax
sub ax,cx
push ax
pop ax
pop bp
mov [bp],ax
push vanew w
push vaprev w
pop cx
pop ax
sub ax,cx
push ax
push 1
pop cx
pop ax
sub ax,cx
push ax
pop ax
cmp ax,0
if z jmp LABL5
push vanew w
push vaprev w
pop cx
pop ax
sub ax,cx
push ax
pop ax
call myprint
LABL5 :
push offset vaprev
push vanew w
pop ax
pop bp
mov [bp],ax
jmp LABL1
LABL2:
int 20h ; exit to dos
myread:
MOV CX,0
morechar:
mov ah,01h
int 21H
mov dx,0
mov dl,al
mov ax,cx
cmp dl,0D
je myret
sub dx,48d
mov bp,dx
mov ax,cx
mov cx,10d
mul cx
add ax,bp
mov cx,ax
jmp morechar
myret:
ret
myprint:
mov si,10d
xor dx,dx
push 0Ah ; push newline
mov cx,1d
nonzero:
div si
add dx,48d
push dx
inc cx
xor dx,dx
cmp ax,0h
jne nonzero
writeloop:
pop dx
mov ah,02h
int 21h
dec cx
jnz writeloop
ret
vanew dw (?)
vaprev dw (?)
vi dw (?)
vk dw (?)
vm dw (?)
vn dw (?)
vt dw (?)
code ends