background image

Bąkowski Łukasz I8X3S1 
 

 

 

 

 

 

 

 

Architektura i Organizacja 

Komputerów II 

 

 

Analiza i projektowanie programów na poziomie asemblera. 

Program, realizujący zadane przekształcenia tablic liczb 

zmiennoprzecinkowych

.  

Konkurs na najszybciej działający program, realizujący zadane 

przekształcenia tablic liczb zmiennoprzecinkowych. 

 

 

 

 

 

 

Bąkowski Łukasz I8X3S1 

 

background image

Bąkowski Łukasz I8X3S1 
 

 

 

Treść zadania 

I. 

Napisać program Lab9v3  w asemblerze komputera DLX, który: 

1.  Zadeklaruje  dwie  tablice  przechowujące  liczby  zmiennoprzecinkowe  podwójnej 

precyzji:  T  110-  elementową  oraz  Twy  100-elementową,  a  także  zmienną  Suma 
zmiennoprzecinkową podwójnej precyzji  

2.  Komórki  tablicy  T  wypełni  (nie  za  pomocą  statycznej  deklaracji  z  nadaniem 

wartości  początkowych)  kolejnymi  liczbami  o  części  ułamkowej  równej  0.9  i 
części  całkowitej  rosnącej,  począwszy  od  powiększonego  o  100  numeru 
w dzienniku studenta/ studentki (np.  nr=1, liczby T[1] = 101.9, T[2] = 102.9 itd.). 

3.  Następnie dla każdego elementu tablicy Twy wykona operację 

        

                                           
                                           

 

4.      W zmiennej Suma umieści sumę wszystkich elementów tablicy Twy

II. 

Przed  rozpoczęciem  tworzenia  programu  zaprojektować  arkusz  kalkulacyjny  w 
Excelu, wykonujący te same obliczenia.  
 

III. 

Zmierzyć  liczbę  cykli  zegarowych  dla  wykonania  uzyskanego  programu  przy 
dowolnej,  wybranej  przez  studentkę/  studenta  konfiguracji  sprzętowej,  za  wyjątkiem 
czasów fazy Execute jednostek zmiennoprzecinkowych (2/5/19). 

 

IV. 

W  przypadku  uzyskania  poprawnego  wyniku  działania  programu  (zmienna  Suma  i 
tablice  T  i  Twy),  program  bierze  udział  w  konkursie  na  „najszybciej  działający 
program”. Kryterium oceny jest liczba cykli zegarowych, potrzebnych do wykonania 
programu. Zwycięzca konkursu otrzymuje dwie oceny bdb do średniej z laboratorium. 
Pozostali  uczestnicy  oceny  pozytywne,  zależne  od  uzyskanego  czasu  wykonania.  W 
przypadku  niepoprawnego  działania  programu  ocena  za  ćwiczenie  9-10  jest  równa 
ndst.  Zwycięzca  jest  zobowiązany  do  publicznego  przedstawienia  na  forum  grupy 
opracowanego  programu,  ze  wskazaniem  sposobów  uzyskania  najszybszego 
programu. 

 

 

 

background image

Bąkowski Łukasz I8X3S1 
 

 

 

Kod programu LB_L910v3.s 

Opisy  poszczególnych  funkcji  oraz  komentarze  zostały  napisane  kursywą.  W  wypadku 
powtórzenia  wielokrotnie  komendy,  komentarz  występuje  przy  pierwszym  jej  wystąpieniu 
oraz  przy  ważnych  miejscach  kodu.  Sam  kod  programu  został  napisany  czcionką 

Luicid 

Console. 

 

; Lukasz Bakowski I8X3S1 

linijki kodu zaczynające się od “ ;” są  komentarzami autora programu.

 

; Zadanie Laboratoryjne 9-10 
 
.data 

dyrektywa mówiąca, że występujący po niej kod jest deklaracją zmiennych

 

 

T: 

.space  

880 

deklaracja miejsc w pamięci o nazwie T i wielkości 880 bajty

 

 

.align     4 

wyrównywanie danych

 

 

Twy:  .space  

800 

 

.align     4 

 

Suma: .space  8 

 

a: 

.double 

104.9 

 
.text 

dyrektywa mówiąca, że napisy poniżej, są traktowane jako instrukcje

 

.global main 
 
main: 

; --------------------------- 
 

addi R2,R0,a 

do rejestru r2 załaduj adres danej a

 

 

ld F4,0(R2) 

do  f4 wpisywane jest 8bajtow spod 0bajtu adresu zapisanego w r2

 

;---------------------------- 
 

addi R6,R0,1 

do rejestru r6 załaduj wartość 1

 

 

movi2fp F0,R6 

wartości rejestru r6 kopiowana do rejestru f0

 

 

cvti2d F2,F0 

konwertowanie liczby pojedynczej precyzji na podwójnej precyzji

 

; ---------------------------- 
 

addi R2,R0,T 

do rejestru r2 załaduj adres tablicy danych T

 

;---------------------------- 
 

addi R5,R0,7 

;---------------------------- 

Petla1: 

nazwa etykiety

 

 

movd F24,F22 

 

; Ti+5 * Ti+4 * Ti+3 

do f24 przesyłana jest wartość spod rejestru f22 

 

multd F22,F20,F4 

 

; Ti+6 * Ti+5 * Ti+4 

do f22 zapisywana jest wartość iloczyny wartości spod rejestrów f20 i f4 

 

multd F20,F18,F4 

 

; Ti+6 * Ti+5 

background image

Bąkowski Łukasz I8X3S1 
 

 

 

 

subi R5,R5,1 

wartości rejestr r5 zmieszana o 1

 

 

movd F18,F4 

 

; Ti+6 

 

movd F16,F14 

 

; Ti+1 

 

movd F14,F12 

 

; Ti+2 

 

movd F12,F10 

 

; Ti+3 

 

movd F10,F8 

 

 

; Ti+4 

 

movd F8,F6  

 

; Ti+5 

 

movd F6,F4  

 

; Ti+6 

 

sd 0(R2),F4 

zapisanie wartości rejestru f4 do adresu spod r2

 

 

addd F4,F4,F2 

do wartości rejestru f4 dodawana wartość rejestru f2 

 

addi R2,R2,8 

 

bnez R5,Petla1 

jeżeli r5 = 0, idź dalej, jeżeli nie, idź do etykiety Petla1

 

; ---------------------------- 
 

addi R3,R0,Twy 

 

subi R3,R3,8 

; ---------------------------- 
 

subd F28,F22,F16  

; E = (Ti+6 * Ti+5 * Ti+4) - Ti+2 

do f28przesyłana jest różnica wartość rejestru f22 i F16 

; ---------------------------- 

 

addi R5,R0,100 

; ---------------------------- 
 

addd F26,F24,F14 

 

; F = (Ti+5 * Ti+4 * Ti+3) + Ti+1 

; ---------------------------- 
Petla2: 
 

divd F30,F28,F26 

 

; E/F 

do f30 zapisywana jest wartość ilorazu wartości spod f28 przez f26 

 

subi R5,R5,1 

 

subd F28,F22,F16  

; E = (Ti+6 * Ti+5 * Ti+4) - Ti+2 

 

addd F26,F24,F14 

 

; F = (Ti+5 * Ti+4 * Ti+3) + Ti+1 

 
 

movd F24,F22 

 

; Ti+5 * Ti+4 * Ti+3 

 

multd F22,F20,F4 

 

; Ti+6 * Ti+5 * Ti+4 

 

multd F20,F18,F4 

 

; Ti+6 * Ti+5 

 

movd F18,F4 

 

; Ti+6 

 

 

movd F16,F14 

 

; Ti+1 

 

movd F14,F12 

 

; Ti+2 

 

movd F12,F10 

 

; Ti+3 

 

movd F10,F8 

 

; Ti+4 

 

movd F8,F6  

 

; Ti+5 

 

movd F6,F4  

 

; Ti+6 

 
 

sd 0(R3),F30 

 

addd F0,F0,F30 

 
 

sd 0(R2),F4 

 

 

addi R3,R3,8 

 

addi R2,R2,8 

 

 
 

addd F4,F4,F2 

 

bnez R5,Petla2 

; ----------------------------  
 

divd F30,F28,F26 

 

; E/F 

; ---------------------------- 

background image

Bąkowski Łukasz I8X3S1 
 

 

 

 

addi R5,R0,3 

; ---------------------------- 
Petla3: 

 

sd 0(R2),F4 

 

subi R5,R5,1 

 

addd F4,F4,F2 

 

addi R2,R2,8 

 

bnez R5,Petla3 

; ---------------------------- 

 

sd 0(R3),F30 

 

sd Suma, F0 

dwa słowa z rejestru f0 zapisywane są pod adres Suma

 

trap  0

 

przerwanie końca progamu 

 

 

background image

Bąkowski Łukasz I8X3S1 
 

 

 

Algorytm programu LB_L910v3.s 

 

 

 

   Start 

Koniec 

R2 – adres początku tabeli T 
F2=1.0    F4=104.9    R5=7 

R5 == 0 

F24 = F22   F22 = F20*F4    
F20 = F18*F4   F18 = F4 
F16 = F14   F14 = F12    
F12 = F10   F10 = F8    
F8 = F6   F6 = F4   R5=R5-1 
F4 zapisywane do T 
F4=F4+F2   R2=R2+8 
 

R3 – adres początku tabeli Twy 
R5=100 R5 = R5-1   R2 = R2+8 
F28 = F22-F16   F26 = F24+F14 
 

R5 == 0 

F30 = F28/F26 
F28 = F22-F16   F26 = F24+F14 
F24 = F22   F22 = F20*F4    
F20 = F18*F4   F18 = F4 
F16 = F14   F14 = F12    
F12 = F10   F10 = F8    
F8 = F6   F6 = F4   R5=R5-1 
F0=F0+F30 
F4 zapisywane do T 
F4=F4+F2   R2=R2+8 
 
 

F30 = F28 / F26 
F0 = F0+F30 
F0 zapisywane do Suma 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

R5=3 

R5 == 0 

F4 zapisywane do T 
F4=F4+F2   R2=R2+8 
 

NIE 

 
 

TAK 

 
 
 
 

   NIE 
 

 
TAK 
 
 
 
 
 

NIE 
 
 

TAK 

background image

Bąkowski Łukasz I8X3S1 
 

 

 

Zawartość arkusza kalkulacyjnego oraz pamięci operacyjnej 

symulatora WinDLX 

 
Zawartość arkusza kalkulacyjnego dla pierwszych i ostatnich 10 elementów tablicy T i Twy. 
Oraz dla sumy elementów Twy: 

 

Nr 

104,9 

105,9 

106,9 

107,9 

108,9 

109,9 

110,9 

111,9 

112,9 

10 

113,9 

… 

… 

101 

204,9 

102 

205,9 

103 

206,9 

104 

207,9 

105 

208,9 

106 

209,9 

107 

210,9 

108 

211,9 

109 

212,9 

110 

213,9 

 
 
 
 
 
 

Nr 

Twy 

1,02764 

1,02738 

1,02714 

1,02689 

1,02665 

1,02642 

1,02619 

1,02596 

1,02574 

10 

1,02552 

… 

… 

91 

1,01511 

92 

1,01503 

93 

1,01496 

94 

1,01488 

95 

1,01481 

96 

1,01474 

97 

1,01467 

98 

1,01459 

99 

1,01452 

100 

1,01445 

Zawartość pamięci operacyjnej symulatora WinDLX dla programu LB_L910v3.s  : 

 

Suma: 
 

 

 
 
 
 
 
 

Nr w dzienniku 

Suma 

101,96547 

background image

Bąkowski Łukasz I8X3S1 
 

 

 

T: 
 

 

 
Twy: 
 

 

 

 
 

 

background image

Bąkowski Łukasz I8X3S1 
 

 

 

Opis Podgląd okna STATISTICA

  

 

dla programu LB_L910v3.s 

 

 

 
CPI programu = 

1,325446.