Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- _float_razy_float proc
- push ebp
- mov ebp, esp
- pusha
- mov esi, [ebp+8] ; float a
- mov edi, [ebp+12] ; float b
- ; dodawanie wykladnikow
- mov eax, esi
- shl eax, 1 ; usuniecie bitu znaku
- shr eax, 24 ; wyodrebnij sam wykladnik
- sub eax, 127 ; konwersja na nkb
- ; to samo nizej
- mov ebx, edi
- shl ebx, 1
- shr ebx, 24
- sub ebx, 127
- add ebx, eax ; wykladnik wynikowy w ebx
- ; mnozenie mantys
- mov eax, edi
- shl eax, 9 ; przesuniecie mantysy na najstarszy bit
- stc ; ustawienie cf = 1
- rcr eax, 1 ; wrzucenie cf = 1 na najstarszy bit
- shr eax, 8 ; powrot mantysy do stanu pierwotnego
- ; to samo nizej
- mov ecx, esi
- shl ecx, 9
- stc
- rcr ecx, 1
- shr ecx, 8
- mov edx, 0
- mul ecx ; mantysa w edx:eax
- ; konwersja mantysy 46bitowej z edx:eax na 23bit w eax
- mov ecx, edx ; temp
- shl ecx, 9 ; z eax musimy wziac tylko 9 bitow, bo 46-32=14, 23-14 = 9
- shr eax, 18 ; usuniecie z eax 18 najmlodszych bitow bo ich nie potrzebujemy
- or ecx, eax ; zlaczenie ecx i eax do ecx
- mov eax, ecx ; eax = ecx
- ; normalizacja
- shr edx, 14 ; usuniecie ze starego edx wszystkich bitow ktore nas interesuja
- mov ecx, 0 ; licznik przesuniec
- loop1:
- cmp edx, 0 ; jesli jest 0 to nie ma juz co przesuwac i wychodzimy, else zliczamy o ile trzeba zwiekszyc wykladnik
- je loop1_end
- shr edx, 1
- inc ecx
- jmp loop1
- loop1_end:
- dec ecx ; zmniejszamy cl ze wzgledu na dopisana jedynke
- shr eax, cl ; przesuwamy eax o zliczona ilosc przesuniec
- and eax, 11111111011111111111111111111111b ; usuwamy dopisana jedynke
- ; ogarnianie wykladnika
- add ebx, ecx ; dodajemy do wykladnika z normalizacji
- add ebx, 127 ; exponent bias
- shl ebx, 23 ; przesuwamy na pozycje odpowiednia we floacie
- ;znak
- xor esi, edi ; uzyskujemy znak cyfry
- shr esi, 31 ; wywalamy wszystko poza znakiem
- shl esi, 31 ; wracamy na stara pozycje
- or ebx, esi ; laczymy znak z wykladnikiem
- or ebx, eax ; laczymy mantyse z wykladnikiem
- ; wrzucamy na stos koprocesora i koniec
- mov dword ptr [float], ebx
- finit
- fld dword ptr [float]
- popa
- pop ebp
- ret
- _float_razy_float endp
Advertisement
Add Comment
Please, Sign In to add comment