/
lab5Asm.asm
162 lines (128 loc) · 2.59 KB
/
lab5Asm.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
.686
.XMM
.model flat
.data
tablica dd 1.0, 1.0, 1.0, 1.0
aux dd 0.0
ALIGN 16
tabl_A dd 1.0, 2.0, 3.0, 4.0
tabl_B dd 2.0, 3.0, 4.0, 5.0
liczba db 1
tabl_C dd 3.0, 4.0, 5.0, 6.0
.code
_dodawanie_SSE PROC
push ebp
mov ebp, esp
mov eax, [ebp+8]
movaps xmm2, tabl_A
movaps xmm3, tabl_B
movups xmm4, tabl_C
addps xmm2, xmm3
addps xmm2, xmm4
movups [eax], xmm2
pop ebp
ret
_dodawanie_SSE ENDP
END
_pm_jeden PROC
mov edi, [esp+4]
movups xmm5, [edi]
movups xmm6, tablica
addsubps xmm5, xmm6
movups [edi], xmm5
ret
_pm_jeden ENDP
_int2float PROC
push ebp
mov ebp, esp
push esi
push edi
mov esi, [ebp+8] ; adres pierwszej tablicy
mov edi, [ebp+12] ; adres drugiej tablicy
movups xmm5, [edi]
cvtpi2ps xmm5, qword PTR [esi]
movups [edi], xmm5
pop edi
pop esi
pop ebp
ret
_int2float ENDP
_dodaj_SSE_char PROC
push ebp
mov ebp, esp
push ebx
push esi
push edi
mov esi, [ebp+8] ; adres pierwszej tablicy
mov edi, [ebp+12] ; adres drugiej tablicy
mov ebx, [ebp+16] ; adres tablicy wynikowej
movups xmm5, [esi]
movups xmm6, [edi]
paddsb xmm5, xmm6
movups [ebx], xmm5
pop edi
pop esi
pop ebx
pop ebp
ret
_dodaj_SSE_char ENDP
_nowy_exp PROC
push ebp
mov ebp, esp
mov edx, [ebp + 8]
mov ebx, 0
mov ecx, 20
finit
fldz; jezeli dodam niezaladowany element stosu to wali #IND
fldz
fldz
main_loop:
mov eax, 1
mov ebx, 21
sub ebx, ecx
fld1
single_loop:
; mianownik
push edx
mul ebx
pop edx
mov aux, edx
fld aux
fmulp
dec ebx
cmp ebx, 0
ja single_loop
mov aux, eax
fild aux
fdiv
fadd
loop main_loop
mov esp, ebp
pop ebp
ret
_nowy_exp ENDP
_srednia_harm PROC
push ebp
mov ebp, esp
mov ecx, [ebp+12] ; wielkosc
mov ebx, [ebp + 8]
finit
fldz
et:
mov edx, [ebx + ecx * 4 - 4]
mov aux, edx
fld aux
fld1
fdiv
faddp
loop et
finish:
mov ecx, [ebp+12]
mov aux, ecx
fild aux
fdivp
mov esp,ebp
pop ebp
ret
_srednia_harm ENDP
END