5 F_TEXT SEGMENT WORD PUBLIC 'CODE'
7 _DATA SEGMENT WORD PUBLIC 'DATA'
9 _CONST SEGMENT WORD PUBLIC 'CONST'
11 _BSS SEGMENT WORD 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+16] ; load r
33 mov ds,WORD PTR [bp+18] ; load r
34 mov bx,WORD PTR [bp+20] ; load a
35 mov es,WORD PTR [bp+22] ; load a
36 mov cx,WORD PTR [bp+26] ; load w
37 mov bp,WORD PTR [bp+24] ; load num
39 shr bp,1 ; div count by 4 and do groups of 4
45 mul WORD PTR es:[bx] ; w* *a
46 add ax,WORD PTR ds:[di] ; + *r
50 mov WORD PTR ds:[di],ax
54 mul WORD PTR es:[bx+2] ; w* *a
55 add ax,WORD PTR ds:[di+2] ; + *r
59 mov WORD PTR ds:[di+2],ax
63 mul WORD PTR es:[bx+4] ; w* *a
64 add ax,WORD PTR ds:[di+4] ; + *r
68 mov WORD PTR ds:[di+4],ax
72 mul WORD PTR es:[bx+6] ; w* *a
73 add ax,WORD PTR ds:[di+6] ; + *r
77 mov WORD PTR ds:[di+6],ax
90 mov bp,WORD PTR [bp+24] ; load num
96 mul WORD PTR es:[bx] ; w* *a
97 add ax,WORD PTR ds:[di] ; + *r
101 mov WORD PTR ds:[di],ax
104 js $L547 ; Note that we are now testing for -1
107 mul WORD PTR es:[bx+2] ; w* *a
108 add ax,WORD PTR ds:[di+2] ; + *r
112 mov WORD PTR ds:[di+2],ax
118 mul WORD PTR es:[bx+4] ; w* *a
119 add ax,WORD PTR ds:[di+4] ; + *r
123 mov WORD PTR ds:[di+4],ax
136 _bn_mul_add_words ENDP
138 _bn_mul_words PROC FAR
148 mov di,WORD PTR [bp+16] ; r
149 mov ds,WORD PTR [bp+18]
150 mov bx,WORD PTR [bp+20] ; a
151 mov es,WORD PTR [bp+22]
152 mov cx,WORD PTR [bp+26] ; w
153 mov bp,WORD PTR [bp+24] ; num
159 mov WORD PTR ds:[di],ax
165 mul WORD PTR es:[bx+2]
168 mov WORD PTR ds:[di+2],ax
174 mul WORD PTR es:[bx+4]
177 mov WORD PTR ds:[di+4],ax
183 mul WORD PTR es:[bx+6]
186 mov WORD PTR ds:[di+6],ax
207 _bn_sqr_words PROC FAR
216 mov si,WORD PTR [bp+16]
217 mov ds,WORD PTR [bp+18]
218 mov di,WORD PTR [bp+20]
219 mov es,WORD PTR [bp+22]
220 mov bx,WORD PTR [bp+24]
222 mov bp,bx ; save a memory lookup later
223 shr bx,1 ; div count by 4 and do groups of 4
228 mov ax,WORD PTR es:[di]
230 mov WORD PTR ds:[si],ax
231 mov WORD PTR ds:[si+2],dx
233 mov ax,WORD PTR es:[di+2]
235 mov WORD PTR ds:[si+4],ax
236 mov WORD PTR ds:[si+6],dx
238 mov ax,WORD PTR es:[di+4]
240 mov WORD PTR ds:[si+8],ax
241 mov WORD PTR ds:[si+10],dx
243 mov ax,WORD PTR es:[di+6]
245 mov WORD PTR ds:[si+12],ax
246 mov WORD PTR ds:[si+14],dx
255 dec bp ; The copied value of bx (num)
258 mov ax,WORD PTR es:[di]
260 mov WORD PTR ds:[si],ax
261 mov WORD PTR ds:[si+2],dx
265 mov ax,WORD PTR es:[di+2]
267 mov WORD PTR ds:[si+4],ax
268 mov WORD PTR ds:[si+6],dx
272 mov ax,WORD PTR es:[di+4]
274 mov WORD PTR ds:[si+8],ax
275 mov WORD PTR ds:[si+10],dx
290 mov dx, WORD PTR [bp+6]
291 mov ax, WORD PTR [bp+8]