Mikroinformatyka Koprocesory arytmetyczne 8087, 80187, 80287, i387
Koprocesor arytmetyczny 100 razy szybsze obliczenia numeryczne na liczbach zmiennoprzecinkowych. Obliczenia prowadzone równolegle z procesorem głównym. Rodzina koprocesorów: - 8087 dla 8086-80187 dla 80186-80287 dla 80286 - i387 dla i386 Operacje: - arytmetyczne ( +, -, /, * ) - porównywanie - funkcje trygonometryczne - funkcje wykładnicze - funkcje logarytmiczne
Liczby zmiennoprzecinkowe x = M * B E gdzie: M mantysa (significand, mantissa) B podstawa systemu liczbowego (base) E cecha (exponent) W reprezentacji komputerowej B = 2. Na mantysę i cechę jest przeznaczona ograniczona liczba bitów: skończona dokładność, pewien policzalny zbiór wartości. Mantysa jest znormalizowana, należy do przedziału [1,B). Cecha jest przesunięta (BIAS) i jest zawsze dodatnia. Dodatkowy bit S określa znak liczby. X = (-1) S * M * B E-BIAS
Liczby zmiennoprzecinkowe Typy danych rzeczywistych obsługiwane przez koprocesor: Pojedynczej precyzji 32 bity 31 23 22 0 S E M Podwójnej precyzji 64 bity 63 52 51 0 S E M Rozszerzonej precyzji 80 bitów 79 64 63 62 0 S E I M I część całkowita mantysy
Słowo 16 bitów Podwójne słowo 32 bity Poczwórne słowo 64 bity Spakowana liczba BCD Liczby całkowite Typy danych całkowitych obsługiwanych przez koprocesor: 79 0 D17 D16 D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0
Liczby zmiennoprzecinkowe Wartości specjalne S E M NaN Not a Number SNaN Znaczący QNaN Cichy x 11111111 x 11111111 x 11111111 xxxxx...1...xxxxx 0xxxx...1...xxxxx 1xxxxxxxxxxxxx + 0,0 0 0000000 00000000000000-0,0 1 0000000 00000000000000 Nieskończoność x 11111111 00000000000000
Schemat blokowy 80187
Współpraca 8087 z procesorem
Współpraca 8087 z procesorem Koprocesor jest podłączony do magistral procesora. Oba układy tworzą system wieloprocesorowy. Podział systemów wieloprocesorowych: - systemy ze wspólną pamięcią układ ściśle (silnie) powiązany (tightly coupled) - systemy z przesyłaniem komunikatów układ luźno (słabo) powiązany (loosely coupled), lub z pamięcią rozproszoną (distributed memory) Koprocesor 8087 z procesorem 8086 tworzy układ ściśle powiązany.
Współpraca 8087 z procesorem 8087 śledzi synchronicznie wykonywany przez procesor program. Określa stan procesora na podstawie linii S0, S1, QS0, QS1. Pobiera wszystkie rozkazy wychwytuje rozkazy ESCAPE. Po napotkaniu rozkazu ESCAPE generuje sygnał BUSY. Procesor może kontynuować wykonywanie programu jeśli nie ma kolejnych rozkazów dla 8087. Jeśli program przewiduje oczekiwanie na wynik obliczeń należy użyć rozkazu WAIT. Rozkazy ESCAPE mogą mieć argumenty w pamięci. 8087 nie oblicza adresu adres jest obliczany przez procesor. Przy odczycie pierwszego bajtu 8087 odczytuje również z magistrali adres wygenerowany przez procesor. Jeśli są kolejne bajty koprocesor przejmuje magistrale i generuje adres inkrementując zapamiętaną wartość. W trybie zapisu pierwszy odczytany bajt jest ignorowany.
Współpraca i387 z i386
Współpraca i387 z i386 i387 pracuje jednakowo niezależnie od trybu pracy i386. Wyprowadzenia do synchronizacji z procesorem: PEREQ informacja dla procesora o gotowości transmisji danych. BUSY informacja dla procesora o trwaniu obliczeń. ERROR informacja dla procesora o wyjątku. i387 nie śledzi magistral i386 wysyła do niego rozkazy i dane. i387 współpracuje z i386 jak specjalne urządzenie peryferyjne. Po wykryciu przez i386 instrukcji ESCAPE jest ona wysyłana do 387 Odebranie rozkazu jest sygnalizowane sygnałem PEREQ. Zakończenie wykonania rozkazu jest sygnalizowane sygnałem BUSY
Rozkazy ESCAPE Z odwołaniami do pamięci Bez odwołań do pamięci
Rejestry koprocesora 80-bitowe rejestry ułożone w 8-poziomowy stos. Z każdym rejestrem jest związane 2-bitowe pole w rejestrze TAG. 00 wartość poprawna 01 zero 10 nieskończoność, NaN, wartość zdenormalizowana, błąd 11 rejestr pusty
Rejestry koprocesora Rejestr sterujący (Control Word). Zaokrąglenia (RC): 00 najbliższa wartość 01 w dół 10 w górę 11 obcięcie Precyzja (PC): 00 24 bity (Single Precision) 01 rereserved 10 53 bity (Double Precision) 11 64 bity (Extended Precision)
Rejestr stanu (Status Word). Rejestry koprocesora Przykładowo wynik porównania: (bity C3, C2, C0) 0 0 0 TOP > argument 0 0 1 TOP < argument 1 0 0 TOP = agrument 1 1 1 nie określone