Po przesunięciu wagi kolejnych bitów za przecinkiem to:
1 1 1.. J ltd.
2 4 8
Obliczenia n wykonaj z niedomiarem ograniczając się do kilku pierwszych liczb po przecinku.
3. Wyznacz wartości zmiennoprzecinkowe liczb 1 i 2 (dokładność 32-bitowa). Otrzymane wartości wpisz odpowiednio do lokacji 5 lOOh i 5200h.
4.
Wyznacz zmiennoprzecinkową wartość liczby „e”
Wśród instrukcji koprocesora nie ma ładowania takiej stałej do rejestru wierzchołka stosu. Wykorzystaj więc ładowanie stałej log2 e (instrukcja FLD2E) a następnie wykorzystaj tożsamość
2logje =e
Nie można z niej skorzystać od razu, gdyż odnośna instrukcja (F2XH1) wymaga wykładnika w: |w|<l. Należy więc wartość na wierzchołku stosu podzielić wpierw przez 2 (przez zawartość lokacji 5200h). Ponieważ rozkaz F2XH1 odejmuje jeszcze od wyniku 1, tj.
2^El'-l
trzeba do rezultatu na wierzchołku dodać zawartość lokacji 5 lOOh. Otrzymana wartość wymaga ostatecznie podniesienia do kwadratu.
Realizujemy je przez mnożenie rejestru wierzchołka przez siebie, wynik na tym samym miejscu (pamiętaj że pola tego rozkazu przyjmują wartości: d = 0, ST(i) = 000).
Tak więc cała procedura to ciąg instrukcji:
FINIT |
(inicjalizacja cp) |
FLD2E FD1V |
(ST(0) „by real”, 32 argument) mod = 00, r/m =110, s-i-b nieobecny, adres 5200h |
F2XM1 FADD |
- j.w., adres 5100h |
FMUL |
(ST(d) ◄- ST(0) x ST(i)) |
FST |
zapisz pod lokację 5300h |
JMP (EB, FE) |
Zakoduj, wpisz od adresu 4000h, przekrokuj obserwując czynności gp (kolejka), otrzymany wynik przelicz udowadniając poprawność podanej liczby e = 2,708281828...
2 (zmp) = 40000000 1 (zmp) = 3F800000
1