• Nie Znaleziono Wyników

Zadanie domowe 5 Generowanie kodu.

N/A
N/A
Protected

Academic year: 2021

Share "Zadanie domowe 5 Generowanie kodu."

Copied!
2
0
0

Pełen tekst

(1)

Zadanie domowe 5 Generowanie kodu.

W tym zadaniu zajmiemy się generowaniem kodu w asemblerze procesora MIPS 2000. Zacznijcie od przeczytania wprowadzenia do MIPS i Spim autorstwa Larusa (jest to Appendix A z podręcznika Pattersona i Hennessy’ego Computer Organization and Design):

www.math.us.edu.pl/˜pgladki/teaching/2013-2014/tk spim.pdf Następnie zainstalujcie Spima, którego możecie ściągnąć stąd:

http://spimsimulator.sourceforge.net

Załóżcie nowy katalog lab5 i skopiujcie do niego całą zawartość katalogu lab4. Następnie ściągnijcie plik

www.math.us.edu.pl/˜pgladki/teaching/2013-2014/tk lab5.zip

i rozpakujcie go; w szczególności znajdziecie tam pliki codegen.sml, compile.sml, mips.sig i mips.sml.

Przeczytajcie ze zrozumieniem pliki mips.sig i mips.sml. Następnie updatujcie sources.cm przez dodanie mips.sig, mips.sml i codegen.sml. Przeczytajcie ze zrozumieniem plik codegen.sml.

Zaimplementujcie funkcję gen func.

• skopiujcie rejestry calee-save i ra do nowych tymczasowych (można je utworzyć za pomocą Mips.newReg());

• skopiujcie rejestry argumentów do nowych tymczasowych (w Funie jest tylko jeden);

• utwórzcie nowe środowisko przez dodanie parametrów funkcji na szczyt środowiska globalnych nazw funkcji (w Fun jest tylko jeden);

• wygenerujcie kod dla wyrażeń objętych funkcją dla tego nowego środowiska;

• skopiujcie rezultat do rejestru zwracającego wartość;

• skopiujcie tymczasowe rejestry calee-save i ra z powrotem do rejestrów calee-save;

• wydajcie etykietę kończącą.

Na tym etapie nie powinniście martwić się dodatkowymi instrukcjami Move, które się wygenerują – prawie wszystkie zostaną usunięte po właściwej alokacji rejestrów.

Zaimplementujcie funkcję gen exp.

• dobrym pomysłem jest pozbawienie argumentów przekazywanych do gen exp ze wszystkich kon- struktorów Pos i Con (dlaczego?);

• dla każdego rodzaju wyrażenia wygenerujcie odpowiadający kod do rejestru wyjściowego;

• możecie dość swobodnie używać Mips.newReg() dla tworzenia tymczasowych rejestrów;

• dla wyrażeń Ref i Tuple wywołajcie alloc dla zarezerwowania odpowiedniej liczby słów, a następ- nie przechowajcie wartości w pamięci;

• dla wyrażenia <>zamiast powyższego wystarczy zastosować 0.

Przetestujcie rezultat wywołując Compile.compile ”test.fun”. W rezultacie powinniście wygenerować test.fun.noregalloc.s, czyli język asemblera, który nie będzie działał :) ponieważ:

• zawiera rejestry tymczasowe postaci $x1, $x2, które nie są rejestrami MIPSa;

• części prologów i epilogów procedur nie zostały jeszcze uwzględnione (stanie się to dopiero po ukończeniu alokacji rejestrów).

Gdy uda Wam się już doprowadzić wszystko do działania, przeczytajcie uważnie .noregalloc.s i upew- nijcie się, że wygląda sensownie – na tym etapie jest to jedyny sposób debuggowania zadania, dopóki nie mamy do dyspozycji alokatora rejestrów.

1

(2)

2

Prześlijcie mailem pliki README oraz codegen.sml. Termin zadania mija w czwartek, 9 stycznia.

Proszę pamiętać o oznaczeniu maila tagiem [aghtk].

Cytaty

Powiązane dokumenty

Widać już, że coś się zmieniło i zmienia się z dnia na dzień.. Co znaczy, gdy przyjdzie odpowiedni człowiek na odpowiednie

Projekt jest to przedsięwzięcie, na które składa się zespół czynności, które charakteryzują się tym, że mają:.. 

Tkanka oznaczona literą A jest tkanką martwą; zbudowana jest z wydłużonych komórek, które nie mają ścian poprzecznych.. Tkanki okrywające zostały przedstawione

6 Um Ritter zu werden, musste man mit 7 Jahren die Ausbildung beginnen 7 Die geistige Entwicklung war für einen Ritter von geringer Bedeutung 8 Savoir-vivre war nie die

Przyszłość ta związana jest, jak się wydaje, z możliwością zachowania idei swoistości ludzkiej świadomości, działania i praktyki (jako jawnych dla samych siebie),

- piętro koron drzew (do 40 m wysokości), tworzoną przez w pełni dojrzałe rośliny drzewiaste (różne gatunki zależnie od zbiorowiska roślinnego, w Polsce: sosna, świerk, buk,

Kiedy wszystkiego się nauczyłem i swobodnie posługiwałem się czarami, to czarnoksiężnik znów zamienił mnie w człowieka... 1 Motywacje i przykłady dyskretnych układów dynamicz-

Dostosowując powyższą metodę uzyskujemy pełny algorytm przy pomocy którego, możemy sprawdzić czy zadana liczba naturalna n o dowolnej podstawie m