SPRAWOZDANIE
Z ĆWICZENIA LABORATORYJNEGO
L3_4
Analiza działania programu Prim.s
Grupa I0Y4S1
Radosław Skłodowski
Nr 11
10.04.2011
Opis działania
Zadaniem programu jest wyliczenie zadanej (w etykiecie COUNT) ilości liczb pierwszych.
Etykieta main rozpoczyna się wpisaniem wartości do rejestrów r1(wartośc 0) oraz r2(wartość 2) następującymi poleceniami:
addi r1,r0,0
addi r2,r0,2
W etykiecie NextValue do rejestru r3 przypisana zostaje wartość 0.
addi r3,r0,0
Następnie zachodzi porównanie rejestrów r1 oraz r3. Jeśli ich zawartość jest taka sama , do rejestru r4 wpisywana jest wartość 1, a w przeciwnym wypadku 0.
Jeśli r4 jest różne od 0 to program przeskakuje do etykiety IsPrim, która zawiera polecenia sprawdzające czy liczba jest liczbą pierwszą:
sw Table(r1),r2 (TABLE(r1) := r2)
addi r1,r1,4 (r1 := r1 + 4)
lw r9,Count (r9 := COUNT)
srli r10,r1,2 ( r11 := r1/2)
sge r11,r10,r9
bnez r11,Finish
Do pamięci zostaje zapisana zostaje liczba pierwsza w tablicy o indeksie równym zawartości rejestru r1. Potem do rejestru r1 dodawana jest wartość 4, aby badać kolejny element, zaś do rejestru r9 zapisana zostaje ilość liczb pierwszych które program ma wyliczyć.
Jeśli prawdziwe jest porównanie10>r9, to do rejestru r11 zostaje zapisana wartość 1, a w przeciwnym wypadku wartość 0. W momencie gdy wartość r11 jest równa 1 program kończy swoje działanie, a gdy jest równa 0, to wartość rejestru r2 zostaje zwiększona o 1(po czym program zaczyna pracę od początku).
W przypadku, gdy zawartość rejestru r4 była równa 0 to program przechodzi do następnych rozkazów z etykiety Loop, czyli:
lw r5,Table(R3)
divu r6,r2,r5
multu r7,r6,r5
subu r8,r2,r7
Jeśli zawartość rejestru r8 jest równa 0 to rejestr r2 zwiększany jest o 1,a program wraca do początku. Jeśli zaś jest równa 1, to zawartość rejestru r3 zostaje zwiększona o 4, a program wraca do etykiety NextValue.
Opisaną sekwencje działania programu ilustruje algorytm:
Algorytm działania programu
Mapa śledzenia
Plik źródłowy: Prim.s
Zawartość rejestrów przedstawiona w systemie dzisiętnym.
Analiza przeprowadzona dla 5 liczb pierwszych.
Rejestr PC ustawiony na 100. Pozostałe rejestry wyzerowane.
Rozkaz: |
Zmiana rejestru/pamięci/komunikat: |
addi r1,r0,0 |
r1 = 0 |
addi r2,r0,2 |
r2 = 2 |
addi r3,r0,0 |
r3 = 0 |
seq r4,r1,r3 |
r4 = 1 |
bnez r4,IsPrim |
|
lw r5,Table(R3) |
aborted |
sw Table(r1),r2 |
Table(0) = 2 (Pierwszy wynik) |
addi r1,r1,4 |
r1 = 4 |
lw r9,$DATA(r0) |
r9 = 5 |
srli r10,r1,2 |
r10 = 1 |
sge r11,r10,r9 |
r11 = 0 |
bnez r11,Finish |
|
addi r2,r2,1 |
r2 = 3 |
j Next Value |
|
trap 0 |
aborted |
addi r3,r0,0 |
r3 = 0 |
seq r4,r1,r3 |
r4 = 0 |
bnez r4,IsPrim |
|
lw r5,Table(r3) |
r5 = 2 |
divu r6,r2,r5 |
r6 = 1 |
multu r7,r6,r5 |
r7 = 2 |
subu r8,r2,r7 |
r8 = 1 |
beqz r8,IsNoPrim |
|
addi r3,r3,4 |
r3 = 4 |
j Loop |
|
sw Table(r1),r2 |
aborted |
seq r4,r1,r3 |
r4 = 1 |
bnez r4,IsPrim |
|
lw r5,Table(r3) |
aborted |
sw Table(r1),r2 |
Table(4) = 3 (Drugi wynik) |
addi r1,r1,4 |
r1 = 8 |
lw r9,$DATA(r0) |
r9 = 5 |
srli r10,r1,2 |
r10 = 2 |
sge r11,r10,r9 |
r11 = 0 |
bnez r11,Finish |
|
addi r2,r2,1 |
r2 = 4 |
j NextValue |
|
trap 0 |
aborted |
addi r3,r0,0 |
r3 = 0 |
seq r4,r1,r3 |
r4 = 0 |
bnez r4,IsPrim |
|
lw r5,Table(r3) |
r5 = 2 |
divu r6,r2,r5 |
r6 = 2 |
multu r7,r6,r5 |
r7 = 4 |
subu r8,r2,r7 |
r8 = 0 |
beqz r8,IsNoPrim |
|
addi r3,r3,4 |
aborted |
addi r2,r2,1 |
r2 = 5 |
j NextValue |
|
trap 0 |
|
addi r3,r0,0 |
r3 = 0 |
seq r4,r1,r3 |
r4 = 0 |
bnez r4,IsPrim |
|
lw r5,Table(r3) |
r5 = 2 |
divu r6,r2,r5 |
r6 = 2 |
multu r7,r6,r5 |
r7 = 4 |
subu r8,r2,r7 |
r8 = 1 |
beqz r8,IsNoPrim |
|
addi r3,r3,4 |
r3 = 4 |
j Loop |
|
sw Table(r1),r2 |
aborted |
seq r4,r1,r3 |
r4 = 0 |
bnez r4,IsPrim |
|
lw r5,Table(r3) |
|
divu r6,r2,r5 |
r6 = 1 |
multu r7,r6,r5 |
r7 = 3 |
subu r8,r2,r7 |
r8 = 2 |
beqz r8,IsNoPrim |
|
addi r3,r3,4 |
r3 = 8 |
j Loop |
|
sw Table(r1),r2 |
aborted |
seq r4,r1,r3 |
r4 = 1 |
bnez r4,IsPrim |
|
lw r5,Table(r3) |
aborted |
sw Table(r1),r2 |
Table(8) = 5 (Trzeci wynik) |
addi r1,r1,4 |
r1 = 12 |
lw r9,$DATA(r0) |
r9 = 5 |
srli r10,r1,2 |
r10 = 3 |
sge r11,r10,r9 |
r11 = 0 |
bnez r11,Finish |
|
addi r2,r2,1 |
r2 = 6 |
j NextValue |
|
trap 0 |
aborted |
addi r3,r0,0 |
r3 = 0 |
seq r4,r1,r3 |
r4 = 0 |
bnez r4,IsPrim |
|
lw r5,Table(r3) |
r5 = 2 |
divu r6,r2,r5 |
r6 = 3 |
multu r7,r6,r5 |
r7 = 6 |
subu r8,r2,r7 |
r8 = 0 |
beqz r8,IsNoPrim |
|
addi r3,r3,4 |
aborted |
addi r2,r2,1 |
r2 = 7 |
j NextValue |
|
trap 0 |
|
addi r3,r0,0 |
r3 = 0 |
seq r4,r1,r3 |
r4 = 0 |
bnez r4,IsPrim |
|
lw r5,Table(r3) |
r5 = 2 |
divu r6,r2,r5 |
r6 = 3 |
multu r7,r6,r5 |
r7 = 6 |
subu r8,r2,r7 |
r8 = 1 |
beqz r8,IsNoPrim |
|
addi r3,r3,4 |
r3 = 4 |
j Loop |
|
sw Table(r1),r2 |
aborted |
seq r4,r1,r3 |
r4 = 0 |
bnez r4,IsPrim |
|
lw r5,Table(r3) |
r5 = 3 |
divu r6,r2,r5 |
r6 = 2 |
multu r7,r6,r5 |
r7 = 6 |
subu r8,r2,r7 |
r8 = 1 |
beqz r8,IsNoPrim |
|
addi r3,r3,4 |
r3 = 8 |
j Loop |
|
sw Table(r1),r2 |
aborted |
seq r4,r1,r3 |
r4 = 0 |
bnez r4,IsPrim |
|
lw r5,Table(r3) |
r5 = 5 |
divu r6,r2,r5 |
r6 = 1 |
multu r7,r6,r5 |
r7 = 5 |
subu r8,r2,r7 |
r8 = 2 |
beqz r8,IsNoPrim |
|
addi r3,r3,4 |
r3 = 12 |
j Loop |
|
sw Table(r1),r2 |
aborted |
seq r4,r1,r3 |
r4 = 1 |
bnez r4,IsPrim |
|
lw r5,Table(r3) |
aborted |
sw Table(r1),r2 |
Table(12) = 7 (Czwarty wynik) |
addi r1,r1,4 |
r1 = 16 |
lw r9,$DATA(r0) |
r9 = 5 |
srli r10,r1,2 |
r10 = 4 |
sge r11,r10,r9 |
r11 = 0 |
bnez r11,Finish |
|
addi r2,r2,1 |
r2 = 8 |
j NextValue |
|
trap 0 |
aborted |
addi r3,r0,0 |
r3 = 0 |
seq r4,r1,r3 |
r4 = 0 |
bnez r4,IsPrim |
|
lw r5,Table(r3) |
r5 = 2 |
divu r6,r2,r5 |
r6 = 4 |
multu r7,r6,r5 |
r7 = 8 |
subu r8,r2,r7 |
r8 = 0 |
beqz r8,IsNoPrim |
|
addi r3,r3,4 |
aborted |
addi r2,r2,1 |
r2 = 9 |
j NextValue |
|
trap 0 |
aborted |
addi r3,r0,0 |
r3 = 0 |
seq r4,r1,r3 |
r4 = 0 |
bnez r4,IsPrim |
|
lw r5,Table(r3) |
r5 = 2 |
divu r6,r2,r5 |
r6 = 4 |
multu r7,r6,r5 |
r7 = 8 |
subu r8,r2,r7 |
r8 = 1 |
beqz r8,IsNoPrim |
|
addi r3,r3,4 |
r3 = 4 |
j Loop |
|
sw Table(r1),r2 |
aborted |
seq r4,r1,r3 |
r4 = 0 |
bnez r4,IsPrim |
|
lw r5,Table(r3) |
r5 = 3 |
divu r6,r2,r5 |
r6 = 6 |
multu r7,r6,r5 |
r7 = 9 |
subu r8,r2,r7 |
r8 = 0 |
beqz r8,IsNoPrim |
|
addi r3,r3,4 |
aborted |
addi r2,r2,1 |
r2 = 10 |
j NextValue |
|
trap 0 |
aborted |
addi r3,r0,0 |
r3 = 0 |
seq r4,r1,r3 |
r4 = 0 |
bnez r4,IsPrim |
|
lw r5,Table(r3) |
r5 = 2 |
divu r6,r2,r5 |
r6 = 5 |
multu r7,r6,r5 |
r7 = 10 |
subu r8,r2,r7 |
r8 = 0 |
beqz r8,IsNoPrim |
|
addi r3,r3,4 |
aborted |
addi r2,r2,1 |
r2 = 11 |
j NextValue |
|
trap 0 |
aborted |
addi r3,r0,0 |
r3 = 0 |
seq r4,r1,r3 |
r4 = 0 |
bnez r4,IsPrim |
|
lw r5,Table(r3) |
r5 = 2 |
divu r6,r2,r5 |
r6 = 5 |
multu r7,r6,r5 |
r7 = 10 |
subu r8,r2,r7 |
r8 = 1 |
beqz r8,IsNoPrim |
|
addi r3,r3,4 |
r3 = 4 |
j Loop |
|
sw Table(r1),r2 |
aborted |
seq r4,r1,r3 |
|
bnez r4,IsPrim |
|
lw r5,Table(r3) |
r5 = 3 |
divu r6,r2,r5 |
r6 = 3 |
multu r7,r6,r5 |
r7 = 9 |
subu r8,r2,r7 |
r8 = 2 |
beqz r8,IsNoPrim |
|
addi r3,r3,4 |
r3 = 8 |
j Loop |
|
sw Table(r1),r2 |
aborted |
seq r4,r1,r3 |
r4 = 0 |
bnez r4,IsPrim |
|
lw r5,Table(r3) |
r5 = 5 |
divu r6,r2,r5 |
r6 = 2 |
multu r7,r6,r5 |
r7 = 10 |
subu r8,r2,r7 |
r8 = 1 |
beqz r8,IsNoPrim |
|
addi r3,r3,4 |
r3 = 12 |
j Loop |
|
sw Table(r1),r2 |
aborted |
seq r4,r1,r3 |
r4 = 0 |
bnez r4,IsPrim |
|
lw r5,Table(r3) |
r5 = 7 |
divu r6,r2,r5 |
r6 = 1 |
multu r7,r6,r5 |
r7 = 7 |
subu r8,r2,r7 |
r8 = 4 |
beqz r8,IsNoPrim |
|
addi r3,r3,4 |
r3 = 16 |
j Loop |
|
sw Table(r1),r2 |
aborted |
seq r4,r1,r3 |
r4 = 1 |
bnez r4,IsPrim |
|
lw r5,Table(r3) |
aborted |
sw Table(r1),r2 |
Table(16) = 11 (Piąty wynik) |
addi r1,r1,4 |
r1 = 20 |
lw r9,$DATA(r0) |
r9 = 5 |
srli r10,r1,2 |
r10 = 5 |
sge r11,r10,r9 |
r11 = 1 |
bnez r11,Finish |
|
addi r2,r2,1 |
aborted |
Trap 0 |
trap #0 occured |
|
|
|
PC = 344 |
|
IMAR = 340 |
|
Ilość cykli: 649 |