5 F_TEXT SEGMENT WORD USE16 PUBLIC 'CODE'
7 _DATA SEGMENT WORD USE16 PUBLIC 'DATA'
9 _CONST SEGMENT WORD USE16 PUBLIC 'CONST'
11 _BSS SEGMENT WORD USE16 PUBLIC 'BSS'
13 DGROUP GROUP _CONST, _BSS, _DATA
14 ASSUME DS: DGROUP, SS: DGROUP
17 PUBLIC _bn_mul_add_words
18 _bn_mul_add_words PROC FAR
32 mov di,WORD PTR [bp+18] ; load r
33 mov ds,WORD PTR [bp+20] ; load r
34 mov bx,WORD PTR [bp+22] ; load a
35 mov es,WORD PTR [bp+24] ; load a
36 mov ecx,DWORD PTR [bp+28] ; load w
37 mov bp,WORD PTR [bp+26] ; load num
38 shr bp,1 ; div count by 4 and do groups of 4
44 mul DWORD PTR es:[bx] ; w* *a
45 add eax,DWORD PTR ds:[di] ; + *r
49 mov DWORD PTR ds:[di],eax
53 mul DWORD PTR es:[bx+4] ; w* *a
54 add eax,DWORD PTR ds:[di+4] ; + *r
58 mov DWORD PTR ds:[di+4],eax
62 mul DWORD PTR es:[bx+8] ; w* *a
63 add eax,DWORD PTR ds:[di+8] ; + *r
67 mov DWORD PTR ds:[di+8],eax
71 mul DWORD PTR es:[bx+12] ; w* *a
72 add eax,DWORD PTR ds:[di+12] ; + *r
76 mov DWORD PTR ds:[di+12],eax
89 mov bp,WORD PTR [bp+26] ; load num
95 mul DWORD PTR es:[bx] ; w* *a
96 add eax,DWORD PTR ds:[di] ; + *r
100 mov DWORD PTR ds:[di],eax
103 js $L547m ; Note that we are now testing for -1
106 mul DWORD PTR es:[bx+4] ; w* *a
107 add eax,DWORD PTR ds:[di+4] ; + *r
111 mov DWORD PTR ds:[di+4],eax
117 mul DWORD PTR es:[bx+8] ; w* *a
118 add eax,DWORD PTR ds:[di+8] ; + *r
122 mov DWORD PTR ds:[di+8],eax
136 _bn_mul_add_words ENDP
139 _bn_mul_words PROC FAR
149 mov di,WORD PTR [bp+18] ; r
150 mov ds,WORD PTR [bp+20]
151 mov bx,WORD PTR [bp+22] ; a
152 mov es,WORD PTR [bp+24]
153 mov ecx,DWORD PTR [bp+28] ; w
154 mov bp,WORD PTR [bp+26] ; num
158 mul DWORD PTR es:[bx]
161 mov DWORD PTR ds:[di],eax
167 mul DWORD PTR es:[bx+4]
170 mov DWORD PTR ds:[di+4],eax
176 mul DWORD PTR es:[bx+8]
179 mov DWORD PTR ds:[di+8],eax
185 mul DWORD PTR es:[bx+12]
188 mov DWORD PTR ds:[di+12],eax
211 _bn_sqr_words PROC FAR
220 mov si,WORD PTR [bp+16]
221 mov ds,WORD PTR [bp+18]
222 mov di,WORD PTR [bp+20]
223 mov es,WORD PTR [bp+22]
224 mov bx,WORD PTR [bp+24]
226 mov bp,bx ; save a memory lookup later
227 shr bx,1 ; div count by 4 and do groups of 4
232 mov eax,DWORD PTR es:[di]
234 mov DWORD PTR ds:[si],eax
235 mov DWORD PTR ds:[si+4],edx
237 mov eax,DWORD PTR es:[di+4]
239 mov DWORD PTR ds:[si+8],eax
240 mov DWORD PTR ds:[si+12],edx
242 mov eax,DWORD PTR es:[di+8]
244 mov DWORD PTR ds:[si+16],eax
245 mov DWORD PTR ds:[si+20],edx
247 mov eax,DWORD PTR es:[di+12]
249 mov DWORD PTR ds:[si+24],eax
250 mov DWORD PTR ds:[si+28],edx
259 dec bp ; The copied value of bx (num)
262 mov eax,DWORD PTR es:[di]
264 mov DWORD PTR ds:[si],eax
265 mov DWORD PTR ds:[si+4],edx
269 mov eax,DWORD PTR es:[di+4]
271 mov DWORD PTR ds:[si+8],eax
272 mov DWORD PTR ds:[si+12],edx
276 mov eax,DWORD PTR es:[di+8]
278 mov DWORD PTR ds:[si+16],eax
279 mov DWORD PTR ds:[si+20],edx
294 mov edx, DWORD PTR [bp+6]
295 mov eax, DWORD PTR [bp+10]
296 div DWORD PTR [bp+14]
304 _bn_add_words PROC FAR
318 mov bx,WORD PTR [bp+18] ; load low r
319 mov si,WORD PTR [bp+22] ; load a
320 mov es,WORD PTR [bp+24] ; load a
321 mov di,WORD PTR [bp+26] ; load b
322 mov ds,WORD PTR [bp+28] ; load b
324 mov dx,WORD PTR [bp+30] ; load num
330 mov eax,DWORD PTR es:[si] ; *a
335 add eax,DWORD PTR ds:[di] ; + *b
337 mov ds,WORD PTR [bp+20]
339 mov DWORD PTR ds:[bx],eax
340 mov ds,WORD PTR [bp+28]
343 js $L547a ; Note that we are now testing for -1