Sekwencja liczb Fibonacciego
Transkrypt
Sekwencja liczb Fibonacciego
Architektury systemów komputerowych Lista 8 x8 = 6 (minimum na bdb) Niektóre z zada« na tej li±cie polegaj¡ na napisaniu programów w asemblerze MIPS. Rozwi¡zania tych zada« b¦dziemy przedstawia¢ podczas ¢wicze« na tablicy. Zalecam jednak przetestowanie ich np. przy u»yciu symulatora SPIM lub MARS. $t0 1. Zaªó»my, »e w rejestrze znajduje si¦ pocz¡tkowo warto±¢ 0x55555555, a w $t1 warto±¢ 0x12345678 (preks 0x przed liczb¡ oznacza, »e jest ona zakodowana szesnatkowo). Jaka b¦dzie zawarot±¢ rejestru $t2 po wykonaniu nastepuj¡cej sekwencji rozkazów? sll $t2, $t0, 4 or $t2, $t2, $t1 sll $t2, $t0, 4 andi $t2, $t2, -7 srl $t2, $t0, 3 andi $t2, $t2, 0xFFEF 2. Zaªó»my, »e rejestr $t0 przechowuje znacz¡cych bitach oraz liczb¦ zentacji uzupeªnie« do 2. b dwie liczby szesnastobitowe: liczb¦ a − b. na swoich bardziej $t1 a + b, a na mniej znacz¡cych W asemblerze MIPS napisz program, który umie±ci w rejestrze dwie liczby szesnastobitowe: na bardziej znacz¡cych bitach liczb¦ liczb¦ a na swoich mniej znacz¡cych bitach. Obie zakodowane w repre- Zakªadamy, »e bª¦dy przepeªnienia nie wyst¡pi¡ (nie musisz si¦ nimi przejmowa¢). 3. Przypomnij sobie, jak kodowane s¡ rozkazy skoków warunkowych i bezwarunkowych i jak oblicza si¦ adresy rozkazów, pod które skoki maj¡ by¢ wykonane. Zaªó»my, »e licznik rozkazów, PC, ma warto±¢ 0x00000020 i wskazuje on na rozkaz skoku. Je±li jest to skok bezwarunkowy (j), to czy mo»e on by¢ wykonany pod adres 0x00001000? 0x20001400? beq)? A pod adres odpowied¹ na te pytania je±li rozwa»ymy skok warunkowy (np. 4. W programi asemblerowym wygodnie byªoby u»y¢ czasem rozkazu typu je±li zawarto±¢ rejestru rd jest mnniejsza od staªej const Jak zmieni si¦ blti rd, const, E E. W to skocz do rozkazu z etykiet¡ architekturze MIPS takiego rozkazu nie ma. Jak my±lisz, dlaczego? Zasymuluj tego typu rozkaz w asemblerze MIPS. 5. Poni»ej przedstawiam kod w asemblerze MIPS, którego zadaniem jest obliczy¢ silni¦ z liczby znajduj¡cej si¦ w rejestrze $a0 FACT: addi $sp, $sp, -8 sw $ra, 4($sp) sw $a0, 0($sp) slti $t0, $a0, 1 beq $t0, $0, L1 addi $v0, $0, 1 addi $sp, $sp, 8 jr $ra L1: addi $a0, $a0, -1 jal FACT lw $a0, 4($sp) lw $ra, 0($sp) addi $sp, $sp, 8 mul $v0, $a0, $v0 jr $ra i zwróci¢ wynik w rejestrze $v0. (a) Znajd¹ i popraw bª¦dy w powy»szym kodzie. (b) Przedstaw kod programu, realizuj¡cy to samo zadanie, ale w sposób nierekurencyjny. (c) Porównaj liczb¦ wykonanych rozkazów podczas wyliczania wyniku dla parametru $a0 rów- nego 4, dla wersji rekurencyjnej i nierekurencyjnej. (d) Przedstaw zmiany zawarto±ci stosu podczas wyliczania silni z 4, w przypadku wersji reku- rencyjnej. 6. W asemblerze procesora MIPS napisz program wyznaczaj¡cy rekurencyjnie warto±¢ n-tego wy- razu ci¡gu Fibonacciego. 7. W asemblerze procesora MIPS napisz rekurencyjn¡ funkcj¦ obliczaj¡c¡ wspóªczynniki dwumianowe Newtona (n po k") zgodnie z denicj¡: N ewton(n, k) = 1, je±li k = 0 lub k = n N ewton(n, k) = N ewton(n − 1, k − 1) + N ewton(n − 1, k) Przeanalizuj jej dziaªanie dla wywoªania z parametrami w pozostaªych przypadkach. n = 4, k = 2. Zwró¢ uwag¦ przede wszystkim na zawarto±¢ stosu wywoªa«. Emanuel Kiero«ski 2