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

Podobne dokumenty