;;Przykład 8.16. Obliczenie 2.51.5
.MODEL small
STACK 100h
.DATA
a  DD 2.5
b  DD 1.5
y  DT (?)
.CODE
Start:
  mov AX,@DATA
  mov DS,AX
;;sprawdzanie, czy jest koprocesor
mov AL,14h ; adres komórki CMOS
out 70h,AL ; zapisywanie adresu komórki do portu 70h
in AL,71h ; odczyt bajta 
and AL,00000010b ;;sprawdzanie bitu 1 
jnz koproc ; skok do gałęzi „koprocesor istnieje”  
jmp  koniec    ; gałąź „koprocesor nie istnieje”
koproc: 
;;obliczenie x = log2ab
fld  b ; b ładujemy pierwszą, aby b znalazła się w st(1) 
fld a ; st = a
fyl2x ; st = log2(st)**st1 ; x znajduje się w st
fld  st ; przesuwanie x w st(1)
frndint  ; w st znajduje się cała część x zaokrąglona 
; z rozszerzoną precyzją (64 bity)
fsub st(1), st ; w st(1) ułamek x
fxch st(1)  ; w st ułamek u, w st(1) część całkowita
f2xm1 ; podniesienie 2 do potęgi u i odejmowanie 1
fld1 ; załadowanie 1 na stos
faddp st(1), st ; w st 2 podniesiona do potęgi ułamka x
fscale ; ostatnie obliczenie
fst y ; przesyłanie wyniku
koniec:
mov AX, 4C00h
int   21h 
END Start
