МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
Кафедра БІТ
Звіт до лабораторної роботи № 4
Програма ФАКТОРІАЛ
З дисципліни
“Архітектура комп’ютерних систем”
Львів – 2011
Метою роботи є ознайомлення з програмою під назвою факторіал, а також вдосконалення базисної версії програми.
Базисна версія програми.
; WINDLX Ex.3: Factorial
; (c) 1991 Guenther Raidl
; Modified: 1992 Maziar Khosravipour
; Program begin at symbol main
; requires module INPUT
; read a number from stdin and calculate the factorial (type: double)
; the result is written to stdout
;---
.data
Prompt: .asciiz "An integer value >1 : "
PrintfFormat: .asciiz "Factorial = %g\n\n"
.align 2
PrintfPar: .word PrintfFormat
PrintfValue:.space 8
.text
.global main
main:
;--- Read value from stdin into R1
addi r1,r0,Prompt
jal InputUnsigned
;--- init values
movi2fp f10,r1 ;R1 -> D0 D0..Count register
cvti2d f0,f10
addi r2,r0,1 ;1 -> D2 D2..result
movi2fp f11,r2
cvti2d f2,f11
movd f4,f2 ;1-> D4 D4..Constant 1
;--- Break loop if D0 = 1
Loop: led f0,f4 ;D0<=1 ?
bfpt Finish
;--- Multiplication and next loop
multd f2,f2,f0
subd f0,f0,f4
j Loop
Finish: ;--- write result to stdout
sd PrintfValue,f2
addi r14,r0,PrintfPar
trap 5
;--- end
trap 0
Результат виконання базисної програми
Протокол роботи конвеєра
Протокол статистики
Як бачимо програма виконується за 145 цикли. Також в програмі присутні затримки конвеєра. Кількість RAW stalls рівна – 17. Усунути ці затримки можна перебудувавши код програми.
Моя версія програми факторіал
; WINDLX Ex.3: Factorial
; (c) 1991 Guenther Raidl
; Modified: 1992 Maziar Khosravipour
; Program begin at symbol main
; requires module INPUT
; read a number from stdin and calculate the factorial (type: double)
; the result is written to stdout
;---
.data
Prompt: .asciiz "An integer value >1 : "
PrintfFormat: .asciiz "Factorial = %g\n\n"
.align 2
PrintfPar: .word PrintfFormat
PrintfValue:.space 8
.text
.global main
main:
;--- Read value from stdin into R1
addi r1,r0,Prompt
jal InputUnsigned
addi r2,r1,#0
subi r1,r1,1
Loop:
mult r2,r2,r1
subi r1,r1,1
bnez r1,Loop
sw PrintfValue,r2
addi r14,r0,PrintfPar
trap 5
;--- end
trap 0
Результат виконання базисної програми
Протокол роботи конвеєра
Протокол статистики
Як бачимо програма виконується за 121 цикл. Також в програмі присутні затримки конвеєра. Кількість RAW stalls рівна – 27. Результат виконання програми можна побачити подивившись у регістровому вікну за адресою r2
Висновок
У даній лабораторній роботі я ознайомився з програмою під назвою факторіал.