Architektura Komputerów 2 – Laboratorium nr 6 – Jednostka zmiennoprzecinkowa (FPU)

Rejestry jednostki zmiennoprzecinkowej

Koprocesor dysponuje ośmioma 80-bitowymi rejestrami zmiennoprzecinkowymi i trzema 16-bitowymi rejestrami kontrolnymi (control word, status word i tag word). Rejestry zmiennoprzecinkowe połączone są w stos. Możemy wczytywać do nich wartości rozkazami fld (Fpu LoaD) oraz pobierać z nich wartości – fstp (FPU STore and Pop). Mamy do nich dostęp poprzez nazwę ST i numer rejestru – ST(n). Wartości zawsze wstawiane są do rejestru ST(0), a wszystkie pozostałe rejestry zmieniają wtedy swoją numerację – 0 przechodzi na 1, 1 na 2 itd. Analogicznie podczas pobierania wartości z tego “stosu”, pobierana jest wartość z rejestru ST(0), a pozostałe zmieniają numerację w przeciwnym kierunku.

Czytaj dalej Architektura Komputerów 2 – Laboratorium nr 6 – Jednostka zmiennoprzecinkowa (FPU)

Architektura Komputerów 2 – Laboratorium nr 5 – Łączenie kodu C i Asemblera

1. Dostęp do funkcji języka C z poziomu Asemblera

Aby wywołać funkcję napisaną w C z kodu Asemblerowego należy umieścić jej argumenty całkowite (liczby lub wskaźniki na adresy w pamięci) kolejno w rejestrach RDI, RSI, RDX, RCX, R8, R9, argumenty zmiennoprzecinkowe w rejestrach XMM0-XMM7 i wywołać tą funkcję korzystając z rozkazu call. Jeśli przekazujemy argumenty zmiennoprzecinkowe, wtedy do rejestru RAX musimy również wpisać ich ilość.

Przykład wywołania funkcji:

Czytaj dalej Architektura Komputerów 2 – Laboratorium nr 5 – Łączenie kodu C i Asemblera