1 / 22

KOMPIUTERIŲ ARCHITEKTŪRA (SMALL – nauja versija )

KOMPIUTERIŲ ARCHITEKTŪRA (SMALL – nauja versija ). Doc. Stasys Maciulevičius Kompiuterių katedra sta sys @ ecdl .lt. S. A. 1 2 6. Algoritmo aprašo pavyzdys.

kyna
Télécharger la présentation

KOMPIUTERIŲ ARCHITEKTŪRA (SMALL – nauja versija )

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. KOMPIUTERIŲ ARCHITEKTŪRA(SMALL – nauja versija) Doc. Stasys Maciulevičius Kompiuterių katedra stasys@ecdl.lt

  2. S A 1 2 6 Algoritmo aprašo pavyzdys • Tarkime, reikia sudaryti struktūros, realizuojančios teigiamų sveikųjų skaičių daugybos operaciją, aprašą algoritmo lygiu • Operandai bus 6 bitų, skaičių formatas toks: • S - skaičiaus ženklas,A - skaičiaus reikšmės laukas, užimantis 5 skiltis.

  3. Daugyba stumiant dauginamąjį (nuo žem.skilčių) • Sudauginkime skaičius 25 ir 19 :  25 × 19 = 475 • Dvejetainiais skaičiais: 0.11001× 0.10011 = 0.0111011011 • Jei daugintume rankomis:               0.11001           × 0.10011  ------------       011001      011001    011001  ------------------   0111011011

  4. Daugyba stumiant dauginamąjį (nuo žem.skilčių) • Dauginsime nuo žemiausiųjų skilčių, stumdami dauginamąjį • Todėl dauginamąjį (A) išplečiame iki dvigubo ilgio, kairėje prirašydami nulius:      A           B           0.0000011001  0.10011   

  5. Daugyba stumiant dauginamąjį (nuo žem. skilčių) A          B            C0.0000011001  0.10011   0.0000000000                                            +0.00000110010.0000110010  0.01001   0.0000011001+0.00001100100.0001100100  0.00100   0.00010010110.0011001000  0.00010   0.00010010110.0110010000  0.00001   0.0001001011+0.01100100000.1100100000  0.00000   0.0111011011

  6. Daugyba stumiant dauginamąjį (nuo žem.skilčių) • Kaip matome, dauginamąjį palaipsniui stumiame į kairę, o daugiklį (B) – į dešinę • Jei žemiausioji B skiltis lygi 1, prie dalinių sandaugų sumos (C) pridedame dauginamąjį (A) • Ciklas vykdomas tiek kartų, koks dauginamųjų ilgis (be ženklo skilties) • Dauginant skaičius reikės atlikti 5 sumavimo ir postūmio ciklus • Daugybos ciklams skaičiuoti panaudosime 3 skilčių skaitiklį

  7. Daugyba stumiant dauginamąjį (nuo žem.skilčių) • Dauginant skaičius reikės atlikti 5 sumavimo ir postūmio ciklus. Daugybos ciklams skaičiuoti panaudosime 3 skilčių skaitiklį • Įvertinę šias aplinkybes, sudarome tokį algoritmą: • Įvedame daugiklio ir dauginamojo reikšmes • Dalinių sandaugų sumą prilyginame nuliui, o ciklų skaitiklį - 5 • Tikriname žemiausiąją daugiklio skiltį. Jei ji lygi 1, prie dalinių sandaugų sumos pridedame dauginamąjį • Dauginamąjį pastumiame į kairę, o daugiklį - į dešinę • Sumažiname skaitiklio turinį. Jei skaitiklio turinys nelygus 0 (t.y., atlikta mažiau nei 5 ciklai), grįžtame į 3 žingsnį • Pabaiga.

  8. Small • Algoritmams užrašyti naudojama paprasta, kiek panaši į C, aparatūros aprašymo kalba • Pagrindiniai jos elementai Bekus-Nauro forma aprašyti faile Naujoji Small.doc • Žemiau pateiksime pagrindinius jos elementus pavyzdžiais

  9. Small • Skaičiai: 181d =10110101 = 0B5h • Dvejetainiams skaičiams sistemos nuoroda nereikalinga

  10. Small • Vardai: A, A1, a1 • Varduose skiriamos mažosios ir didžiosios raidės • Kaip įprasta, vardai negali sutapti su kalbos žodžiais • Kalbos žodžius reikia pradėti didžiąja raide (su nedidelėmis išimtimis, pvz., if)

  11. Small • Struktūros elementai: Reg - registras, Cnt - skaitiklis, Trg – trigeris • Pavyzdžiai: • Reg A[8], B[8], c[16], z[1]; - čia aprašyti 8 skilčių registrai A ir B, 16 skilčių registras c ir 1 skilties registras z (ekvivalentiška aprašui Trg z;) • Cnt Sk[3]; - čia aprašytas 3 skilčių skaitiklis Sk (jis gali skaičiuoti nuo 0 iki 7 arba atvirkščiai)

  12. Small • Kintamųjų pavyzdžiai (elementų aprašai buvo pateikti aukščiau): • A- 8 skilčių registras A (visas) • A[8] - aštuntoji registro A skiltis • B[5:8] - keturios dešiniosios registro B skiltys • A.B - žodis, sudarytas apjungus registrus A ir B (sudėtingas kintamasis)

  13. Small • Loginių operacijų ženklai: & - log. sandauga, | - log. suma, # - suma moduliu 2 • Reiškinių pavyzdžiai (elementų aprašai buvo pateikti aukščiau): • A + B - dviejų 8 skilčių registrų A ir B turinių suma • c[1:8] + A - prie aukštesniųjų registro c skilčių pridėtas A • c[1:8] + ^A + 1 - prie aukštesniųjų registro c skilčių pridėtas A su priešingu ženklu (papild. kode) • A | B - dviejų 8 skilčių registrų A ir B turinių loginė suma • A[1] #B[1] - registrų A ir B pirmųjų skilčių (ženklo sklilčių) turinių suma moduliu 2

  14. Small • Postūmio operatoriai: RLS - log. postūmis į dešinę, LLS - log. postūmis į kairę, RCS - ciklinis postūmis į dešinę, LCS - ciklinis postūmis į kairę, RAS - aritmetinis postūmis į dešinę • Postūmio operacijų pavyzdžiai (elementų aprašai buvo pateikti aukščiau): • RLS(A) arba A := 0.A[1:7] - registro A turinio loginis postūmis į dešinę • LLS(A.B) arba A.B := A[1:7].B.0 - registrų A ir B turinių loginis postūmis į kairę, kai išstumta aukščiausioji B skiltis bus “įstumta” į A

  15. Small • Sąlygos sakinių sintaksė: <sąlygos sakinys> ::= if <loginis reiškinys> { <sakinių seka> }[else { <sakinių seka> }] • Sąlygos sakinio pavyzdys: if b[6]==1 { c=c+a; }

  16. Small • Kiekvienas sakinys baigiamas kabliataškiu (;) • Po Begin ir End kabliataškis nededamas! • Vartotojo įvesti struktūros elementų vardai turi būti tekste rašomi taip, kaip jie buvo užrašyti struktūros elemento apraše

  17. Daugybos algoritmas - Small Šis daugybos algoritmas gali būti šitaip užrašytas kaip daugybos įtaiso aprašas: Unit daugyba; Reg a[11], c[11]; Reg b[6]; Cnt sk[3]; Begin a=input; b=input; Print a,b; sk=5d; Print "Ciklo pradzia";

  18. Daugybos algoritmas - Small ciklas: if b[6]==1 { c=c+a; } a = LLS(a); b = RLS(b); sk = sk-1; Print sk, a, c; if sk<>0 { Goto ciklas; } Print c; End

  19. Small 2009 langas

  20. Modeliavimas Small • Paspaudus Run, programa prašo įvesti kintamuosius:

  21. Modeliavimas Small • Rezultatai: • Gautasis rezultatas C = 00111011011 = 475

  22. Modeliavimas Small • Programoje yra kontrolė, ar sumuojant neatsiranda pernaša iš aukščiausiosios skilties. Jei ši pernaša turi būti ignoruojama, patartina daryti taip: aprašykite vieno bito registrą ir į jį nukreipkite pernašą • Pavyzdžiui: c=c+a davė: c[1:17]=11111111111100111 a[1:17]=11111111110011100 Calculation result is too big to save it to `c` at line 27 Tada pataisoma taip: Reg x[1]; x.c = c + a;

More Related