Programowanie Niskopoziomowe - Ćwiczenia: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Akokno (dyskusja | edycje)
Nie podano opisu zmian
Akokno (dyskusja | edycje)
Nie podano opisu zmian
Linia 26: Linia 26:


Ćwiczenie 2 - realizacja programu złożonego z modułu w języku C i modułu asemblerowego, ze zwróceniem uwagi na długość i wydajność kodu. W niektórych projektach można użyć jednostki wektorowej.
Ćwiczenie 2 - realizacja programu złożonego z modułu w języku C i modułu asemblerowego, ze zwróceniem uwagi na długość i wydajność kodu. W niektórych projektach można użyć jednostki wektorowej.
#double *add(double *d, double *s);
#double *add(double *d, double *s); - dodawanie zmiennopozycyjne podwójnej precyzji bez użycia instrukcji zmiennopozycyjnych
dodawanie zmiennopozycyjne podwójnej precyzji bez użycia instrukcji zmiennopozycyjnych
#double *sub(double *d, double *s); - odejmowanie zmiennopozycyjne podwójnej precyzji bez użycia instrukcji zmiennopozycyjnych
#double *sub(double *d, double *s);
#float *rcp(float *d, float *s); - odwrotność liczby zmiennopozycyjnej przy użyciu alg. Newtona-Raphsona bez użycia instrukcji zmiennopozycyjnych
odejmowanie zmiennopozycyjne podwójnej precyzji bez użycia instrukcji zmiennopozycyjnych
#void *my_memcpy(void *, void *, unsigned) - Odpowiednik funkcji memcpy działający niezależnie od nakładania adresów buforów. Optymalizacja!!!
#float *rcp(float *d, float *s);
#unsigned sqrt(unsigned) - pierwiastek kwadratowy liczby 32-bitowej
odwrotność liczby zmiennopozycyjnej przy użyciu alg. Newtona-Raphsona bez użycia instrukcji zmiennopozycyjnych
#void *my_memcpy(void *, void *, unsigned)
Odpowiednik funkcji memcpy działający niezależnie od nakładania adresów buforów. Optymalizacja!!!
#unsigned sqrt(unsigned)
Pierwiastek kwadratowy liczby 32-bitowej.
#funkcja obliczająca kwadrat liczby zespolonej w reprezentacji IEEE double, z użyciem jednostki SSE2
#funkcja obliczająca kwadrat liczby zespolonej w reprezentacji IEEE double, z użyciem jednostki SSE2

Wersja z 13:03, 12 paź 2006

Przykładowe tematy ćwiczeń w środowisku symulatora SPIM:

  1. Program sortujący ciąg liczb całkowitych
  2. Mnożenie nieujemnych liczb mieszanych (część całkowita i ułamek zwykły). Wynik poprawnie skrócony.
  3. Mnożenie zmiennopozycyjne w formacie IEEE Single bez użycia jednostki zmiennopozycyjnej (czytanie i pisanie przy użyciu funkcji systemowych, wartość przekazywana przez rejestry jednostki zmiennopozycyjnej).
  4. Dodawanie zmiennopozycyjne w formacie IEEE Single bez użycia jednostki zmiennopozycyjnej (czytanie i pisanie przy użyciu funkcji systemowych, wartość przekazywana przez rejestry jednostki zmiennopozycyjnej).

Przykładowe tematy ćwiczeń z programowania hybrydowego. Środowisko realizacji: - Linux: kompilator GCC, asembler NASM lub YASM - Windows: kompilator Microsoft C uruchamiany z wiersza poleceń (CL), asembler NASM lub MASM

Ćwiczenie 1 - realizacja prostego programu, złożonego z moduu w języku C zawierającego funkcję main, zapewniającą wejście i wyjście oraz z modułu asemblerowego, zawierającego procedurę wołaną z języka C o następującej deklaracji nagłówka w C:

  1. int counthexdigits(char *) - zliczanie znaków będących cyframi szesnastkowymi w łańcuchu
  2. int countuppercase(char *) - zliczanie wielkich liter w łańcuchu
  3. int countlowercase(char *) - zliczanie wielkich liter w łańcuchu
  4. int oct2int(char *) – konwersja liczby z zapisu ósemkowego
  5. int hex2int(char *) – konwersja liczby z zapisu szesnastkowego
  6. char *tohex(char *, unsigned) - konwersja liczby do reprezentacji znakowej w zapisie szesnastkowym; funkcja zwraca wartość pierwszego argumentu - wskaźnik na łańcuch wyjściowy, prealokowany przez program główny
  7. char *todec(char *, unsigned)
  8. int index(char *, char) – pozycja znaku w łańcuchu
  9. unsigned revbits(unsigned) – odwrócenie kolejności bitów w słowie
  10. unsigned countones(unsigned) – zliczanie bitów o wartości 1 w słowie wejóciowym
  11. char *chgcase(char *) - zamiana liter małych na wielkie i wielkich na małe, bez zmiany innych znaków w łańcuchu
  12. char *remove(char *, char) - usunięcie wszystkich wystąpień zadanego znaku z łańucha, ze "zsunięciem" łańcucha
  13. char *replace(char *, char, char)

Ćwiczenie 2 - realizacja programu złożonego z modułu w języku C i modułu asemblerowego, ze zwróceniem uwagi na długość i wydajność kodu. W niektórych projektach można użyć jednostki wektorowej.

  1. double *add(double *d, double *s); - dodawanie zmiennopozycyjne podwójnej precyzji bez użycia instrukcji zmiennopozycyjnych
  2. double *sub(double *d, double *s); - odejmowanie zmiennopozycyjne podwójnej precyzji bez użycia instrukcji zmiennopozycyjnych
  3. float *rcp(float *d, float *s); - odwrotność liczby zmiennopozycyjnej przy użyciu alg. Newtona-Raphsona bez użycia instrukcji zmiennopozycyjnych
  4. void *my_memcpy(void *, void *, unsigned) - Odpowiednik funkcji memcpy działający niezależnie od nakładania adresów buforów. Optymalizacja!!!
  5. unsigned sqrt(unsigned) - pierwiastek kwadratowy liczby 32-bitowej
  6. funkcja obliczająca kwadrat liczby zespolonej w reprezentacji IEEE double, z użyciem jednostki SSE2