Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- void p1(...) {
- /*
- Observatii na :
- daca se fac adunari/scaderi pe stiva deja inseamna ca trebuie sa pun rezultatul in FLOAT!!! cu fst
- daca pun din intreg -> fild, altfel fld
- la floaturi se face lea, la inturi nu!
- */
- _asm {
- mov ebx, [ebp + 8]
- mov ecx, [ebp + 12]
- mov esi, 0
- fldz
- bucla :
- cmp esi, ecx
- je end_bucla
- fild dword ptr [ebx + esi * 4]
- fabs
- faddp st(1), st(0)
- inc esi
- jmp bucla
- end_bucla :
- mov ebx, [ebp + 16]
- fstp [ebx]
- }
- }
- void p2(...) {
- _asm {
- mov ebx, [ebp + 8]
- mov ecx, [ebp + 12]
- mov esi, 0
- fldz
- bucla :
- cmp esi, ecx
- je end_bucla
- fild dword ptr[ebx + esi * 4]
- fchs
- faddp st(1), st(0)
- inc esi
- jmp bucla
- end_bucla :
- mov ebx, [ebp + 16]
- fstp[ebx]
- }
- }
- void p3(...) {
- _asm {
- mov ebx, [ebp + 8]
- mov ecx, [ebp + 12]
- mov esi, 0
- fldz
- bucla :
- cmp esi, ecx
- je end_bucla
- mov eax, [ebx + esi * 4]
- cmp eax, 0
- jle nu
- fild dword ptr[ebx + esi * 4]
- fsqrt
- faddp st(1), st(0)
- nu :
- inc esi
- jmp bucla
- end_bucla :
- mov ebx, [ebp + 16]
- fstp[ebx]
- }
- }
- void p4(...) {
- _asm {
- mov ebx, [ebp + 20] // punem 2 pe stiva
- fild dword ptr [ebx]
- fldz // punem 0 pe stiva
- mov ebx, [ebp + 8] // v
- mov ecx, [ebp + 12] // n
- mov esi, 0
- bucla :
- cmp esi, ecx
- je end_bucla
- fild dword ptr [ebx + esi * 4]
- fdiv st(0), st(2)
- faddp st(1), st(0)
- inc esi
- jmp bucla
- end_bucla :
- mov ebx, [ebp + 16]
- fstp[ebx]
- }
- }
- int main()
- {
- int v[9] = { -1, 2, -3, -4, 5, 6, 7, 0, -9 };
- int n = 9;
- float sum;
- _asm {
- lea ebx, v
- lea esi, sum
- push esi
- push n
- push ebx
- call p1
- add esp, 12
- }
- cout << sum << '\n';
- _asm {
- lea ebx, v
- lea esi, sum
- push esi
- push n
- push ebx
- call p2
- add esp, 12
- }
- cout << sum << '\n';
- _asm {
- lea ebx, v
- lea esi, sum
- push esi
- push n
- push ebx
- call p3
- add esp, 12
- }
- cout << sum << '\n';
- int doi = 2;
- _asm {
- lea edi, doi
- lea ebx, v
- lea esi, sum
- push edi
- push esi
- push n
- push ebx
- call p4
- add esp, 16
- }
- cout << sum << '\n';
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment