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

0x08 graphic

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