SPRAWOZDANIE
Architektura
i Organizacja Komputerów II
Analiza programu prim.s
Wojskowa Akademia Techniczna
Autor:
Rafał Swacha
Grupa:
I9Y3S1
1. Kod źródłowy
;*********** WINDLX Exp.2: Generate prime number table *************
;*********** (c) 1991 Günther Raidl *************
;*********** Modified 1992 Maziar Khosravipour *************
;-------------------------------------------------------------------
; Program begins at symbol main
; generates a table with the first 'Count' prime numbers from 'Table'
;-------------------------------------------------------------------
.data
;*** size of table
.global Count
Count: .word 10
.global Table
Table: .space Count*4
.text
.global main
main:
;*** Initialization
addi r1,r0,0 ;Index in Table
addi r2,r0,2 ;Current value
;*** Determine, if R2 can be divided by a value in table
NextValue: addi r3,r0,0 ;Helpindex in Table
Loop: seq r4,r1,r3 ;End of Table?
bnez r4,IsPrim ;R2 is a prime number
lw r5,Table(R3)
divu r6,r2,r5
multu r7,r6,r5
subu r8,r2,r7
beqz r8,IsNoPrim
addi r3,r3,4
j Loop
IsPrim: ;*** Write value into Table and increment index
sw Table(r1),r2
addi r1,r1,4
;*** 'Count' reached?
lw r9,Count
srli r10,r1,2
sge r11,r10,r9
bnez r11,Finish
IsNoPrim: ;*** Check next value
addi r2,r2,1 ;increment R2
j NextValue
Finish: ;*** end
trap 0
2. Schemat działania
3. Opis programu
Po uruchomieniu program przypisuje rejestrom R1 i R2 odpowiednio wartości 0 oraz 2, po czym przechodzi do punktu NextValue.
NextValue
Do
tego punktu program powróci, jeśli sprawdzana liczba nie będzie
liczbą pierwszą (zostanie wykonane IsNoPrim). Następuje
przypisanie rejestrowi R3 wartości 0, a program rozpoczyna
wykonywanie pętli Loop.
Loop
Następuje
sprawdzenie równowartości rejestrów R1 i R3. W przypadku
odpowiedzi twierdzącej, rejestr R4 przyjmuje wartość 1. Sprawdzane
jest czy R4 jest różne od 0. Jeśli tak, program przechodzi do
IsPrim
IsPrim
Wartość
R2 zostaje zapisana do pierwszego pola w tabeli Table, R1 zwiększa
wartość o 1, zaś Count przyjmuje wartość R9. Wartość rejestru
R1 trafia do R10 po przesunięciu arytmetycznym w prawo o 2 bity.
Program porównuje wartości R9 oraz R10. Jeśli R9 nie jest większe
od R10, do R11 przesyłana jest wartość 1. Jeśli R11 nie jest
równe zero, program następuje skok do Finish.
IsNoPrim
Finish
Następuje
zakończenie wykonywania programu.