Ham Giai Phuong Trinh Bac 2

6,422 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
6,422
On SlideShare
0
From Embeds
0
Number of Embeds
86
Actions
Shares
0
Downloads
23
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Ham Giai Phuong Trinh Bac 2

  1. 1. ; Ham giai phuong trinh bac 2 ; a*x^2 + b*x + c = 0 ; duoc goi trong C: ; int quadratic( double a, double b, double c, ; double * root1, double *root2 ) ; Cac tham so: ; a, b, c – cac tham so cua phuong trinh bac 2 mot an so ; root1 – Con tro toi vi tri luu tru thu nhat ; root2 - Con tro toi vi tri luu tru thu nhat ; Gia tri tra ve: ; 1 neu phuong trin co nghiem, 0 neu phuong trinh vo nghiem %define a qword [ebp+8] %define b qword [ebp+16] %define c qword [ebp+24] %define root1 dword [ebp+32] %define root2 dword [ebp+36] %define disc qword [ebp-8] %define one_over_2a qword [ebp-16] segment .data MinusFour dw -4 segment .text global _quadratic _quadratic: push ebp mov ebp, esp sub esp, 16 ; allocate 2 doubles (disc & one_over_2a) push ebx ; must save original ebx fild word [MinusFour] ; Khoi tao gia tri -4 cho ngan xep fld a ; Ngan xep: a, -4 fld c ; Ngan xep: c, a, -4
  2. 2. fmulp st1 ; Ngan xep: a*c, -4 fmulp st1 ; Ngan xep: -4*a*c fld b ; Ngan xep: b, -4*a*c fld b ; Ngan xep: b, b, -4*a*c fmulp st1 ; Ngan xep: b*b, -4*a*c faddp st1 ; Ngan xep: b*b - 4*a*c ftst ; Kiem tra voi 0 fstsw ax sahf jb no_real_solutions ; Neu < 0, Phuong trinh vo nghiem fsqrt ; Ngan xep: sqrt(b*b - 4*a*c) fstp disc ; Lay ra cho bien disc fld1 ; Ngan xep: 1.0 fld a ; Ngan xep: a, 1.0 fscale ; Ngan xep: a * 2^(1.0) = 2*a, 1 fdivp st1 ; Ngan xep: 1/(2*a) fst one_over_2a ; Ngan xep: 1/(2*a) fld b ; Ngan xep: b, 1/(2*a) fld disc ; Ngan xep: disc, b, 1/(2*a) fsubrp st1 ; Ngan xep: disc - b, 1/(2*a) fmulp st1 ; Ngan xep: (-b + disc)/(2*a) mov ebx, root1 fstp qword [ebx] ; Lay ra cho bien *root1 fld b ; Ngan xep: b fld disc ; Ngan xep: disc, b fchs ; Ngan xep: -disc, b fsubrp st1 ; Ngan xep: -disc - b fmul one_over_2a ; Ngan xep: (-b - disc)/(2*a) mov ebx, root2 fstp qword [ebx] ; Lay ra cho *root2 mov eax, 1 ; eax=1 jmp short quit ;Tra ve gia tri 1 (xac dinh phuong trinh co nghiem)
  3. 3. no_real_solutions: ;Nguoc lai, mov eax, 0 ; tra ve gia tri 0 (phuong trinh vo nghiem) quit: pop ebx mov esp, ebp pop ebp ret

×