Advertisement
Guest User

Untitled

a guest
Apr 27th, 2015
226
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.99 KB | None | 0 0
  1. Zadanie lab3:
  2.  
  3. 1. Wywołać funkcje printf i scanf z poziomu asemblera, podać do każdej funkcji
  4. minimum 3 parametry różnego typu.
  5. 2. Zmierzyć czas wywołania obu funkcji wykorzystując instrukcję RDTSC.
  6. 3. Napisać funkcję w asemblerze dodającą 2 liczby wielokrotnej precyzji (np.
  7. 1024-bajtowe). Wywołać tę funkcję z poziomu programu w języku C, zademonstrować
  8. jej poprawność w trybie krokowym w debugerze.
  9. 4. Program wczytujący 2 liczby wielokrotnej precyzji w formacie 0x0123..CDEF z STDIN,
  10. wykonujący operację (GCD, iloczyn, suma) i wypisujący wynik.
  11. przykładowy zestaw plików: README, Makefile (w tym reguły clean, test), prog.c, dodaj.s, konwertuj.s
  12. szczegóły:
  13. wykorzystać gcc (opcje -S i -v)
  14. (tylko jako pomoc - do wglądu jak wywoływane są funkcje)
  15. Wymagania szczegółowe:
  16. statycznie zadeklarowane bufory w postaci tablic bajtów (np. unsigned char [4096] liczba_a)
  17. w pliku prog.c deklaracje funkcji (np. dodaj i konwertuj)
  18. przykładowo funkcja dodaj - dodaje 2 liczby naturalne lub całkowite rozszerzonej precyzji (np 2 Kb)
  19. funkcja konwertuj - konwertuje liczbę zapisaną w postaci napisu (kody ascii
  20. kolejnych cyfr) do postaci binarnej w konwencji LE - Little Endian - każdy
  21. kolejny bajt w pamięci zawiera kolejne (wyższe) 8 bitów liczby.
  22. wszystkie funkcje operują na tablicach bajtów (unsigned char*) - w praktyce na wskaźnikach
  23. Przykładowy prototyp funkcji dodającej:
  24.  
  25. void dodaj(char* l1, char* l2, char* wynik);
  26.  
  27. I/O - za pomocą języka C - printf/scanf
  28.  
  29. Kompilacja: gcc -o prog prog.c dodaj.s konwertuj.s
  30.  
  31. ######################### konwersja napisu na liczbę #########################
  32. (adresy rosną "w prawo")
  33. buf_we: '0x123123': '0''x''1''2''3''1''2''3''\n'00000000.....
  34. (kolejne bajty zawierają znaki lub wartość 0 (koniec napisu))
  35. liczba: : 35,49,18,0,0,0...... (kolejne bajty oddzielone przecinkami)
  36.  
  37. ######################### notatki i zagadnienia ##############################
  38. Lab 3
  39. Łączenie kodu asemblera z kodem w C:
  40. - ramka stosu
  41. - podział programu na kilka plików źródłowych
  42. - pojecie "symboli" i krótkie omówienie konsolidacji
  43. - różnice pomiędzy wywołaniem funkcji jadra a funkcji bibliotecznych
  44. - pomiar czasu wysokiej rozdzielczości z wykorzystaniem instrukcji RDTSC
  45. - podstawy pisania kodu o wysokiej wydajności - usuwanie niepotrzebnych operacji
  46. z pętli (printf, malloc)
  47. - analiza kodu generowanego przez kompilator - zapobieganie optymalizacjom
  48. kompilatora wynikającymi np. z obliczenia wartości wyrażenia podczas
  49. kompilacji
  50. Po zaliczeniu student powinien umieć pisać programy składające się w części z
  51. plików asemblerowych, a w części z kodu w C. Powinien tez rozumieć, gdzie są
  52. podstawowe pułapki powodujące spadek wydajności kodu.
  53.  
  54. ####### literatura ########
  55. ABI 32/64b (głównie rozdział 3.)
  56. http://software.intel.com/sites/default/files/article/402129/mpx-linux64-abi.pdf
  57. http://math-atlas.sourceforge.net/devel/assembly/abi386-4.pdf
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement