1 / 30

KOMPIUTERIŲ ARCHITEKTŪRA ir OPERACINĖS SISTEMOS

KOMPIUTERIŲ ARCHITEKTŪRA ir OPERACINĖS SISTEMOS. Doc. Stasys Maciulevičius Kompiuterių katedra stasys.maciulevicius@ktu.lt. Š iandien – daugybos modeliavimas Small. Dar kart ą jau nagrin ė tas pavyzdys Kuo J ū s ų u ž duotys skiriasi nuo pavyzd ž io Patarimai:

zuzana
Download Presentation

KOMPIUTERIŲ ARCHITEKTŪRA ir OPERACINĖS SISTEMOS

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 ir OPERACINĖS SISTEMOS Doc. Stasys Maciulevičius Kompiuterių katedra stasys.maciulevicius@ktu.lt

  2. Šiandien – daugybos modeliavimas Small • Dar kartą jau nagrinėtas pavyzdys • Kuo Jūsų užduotys skiriasi nuo pavyzdžio • Patarimai: • Ženklo keitimas priešingu • Veiksmai su skirtingo ilgio žodžiais • Bendra programos schema • Jūsų atsiųsti pavyzdžiai S.Maciulevičius

  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  ------------ 011001011001011001  ------------------0111011011 S.Maciulevičius

  4. 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 S.Maciulevičius

  5. 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. S.Maciulevičius

  6. 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"; S.Maciulevičius

  7. 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 S.Maciulevičius

  8. Small 2009 langas S.Maciulevičius

  9. Modeliavimas Small • Paspaudus Run, programa prašo įvesti kintamuosius: S.Maciulevičius

  10. Modeliavimas Small • Rezultatai: • Gautasis rezultatas C = 00111011011 = 475 S.Maciulevičius

  11. 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:15]=111111111100111 a[1:15]=111111110011100 Calculation result is too big to save it to `c` at line 27 Tada pataisoma taip: Reg x[1]; x.c = c + a; S.Maciulevičius

  12. Pavyzdžio ypatumai • Operandų ilgis – 6 bitai, Jūsų užduotyse - 8 • Modulių daugyba, Jūsų užduotyse (išskyrus Daniel ir Donatą) – papildomajame kode • Jokių korekcijų, Jūsų užduotyse (išskyrus Daniel ir Donatą) – kai kuriais atvejais gali būti reikalingos korekcijos S.Maciulevičius

  13. Pavyzdžio ypatumai • Jokių kodo pertvarkymų, Jūsų užduotyse (išskyrus Daniel ir Donatą) – neigiamų operandų pervedimas į papildomąjį kodą, neigiamos sandaugos pervedimas į pradinį kodą • Daniel ir Donatos užduotyse – sandaugos ženklo nustatymas, neigiamų operandų pakeitimas teigiamais, neigiamos sandaugos pervedimas į pradinį kodą S.Maciulevičius

  14. Ženklo keitimas priešingu • Tiesioginiame kode: • A[1] = ^A[1] • A[1] = 1 - A[1] • Atvirkštiniamekode: • A = ^A • Papildomajame kode: • A[2:8] = ^A[2:8] + 1 S.Maciulevičius

  15. Veiksmai su skirtingo ilgio žodžiais • Turime A[8], C[15] • Jei rašome C = C + A: • Jei rašome C[1:8] = C[1:8] + A: 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 1 1 0 0 1 1 1 0 0 1 0 1 0 1 0 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 0 1 0 1 0 S.Maciulevičius

  16. Veiksmai su skirtingo ilgio žodžiais • Turime A[8], C[15] • Jei rašome C = C[1:8] + A: • Jei rašome C[1:8] = C + A: 0 0 0 1 0 0 1 1 0 0 1 1 0 0 1 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 1 0 0 1 0 0 0 1 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 0 0 1 1 0 1 00 0 1 1 0 0 1 1 0 0 1 1 0 1 0 S.Maciulevičius

  17. Bendra programos schema (daugumai) • Įvedame duomenis • Jei reikia, keičiame kodus • Dauginame • Jei reikia, koreguojame sandaugą • Jei reikia, keičiame sandaugos kodą S.Maciulevičius

  18. Bendra programos schema (D ir D) • Įvedame duomenis • Nustatome sandaugos ženklą • Jei reikia, keičiame kodus • Dauginame • Jei reikia, keičiame sandaugos kodą S.Maciulevičius

  19. Gautas pavyzdys Variantas - daugyba Robertsono 2 metodu nuo žemiausiųjų skilčių stumiant dalinių sandaugų sumą, A>0. Principas man kaip ir aiškus, bet … Operandų ir rezultato kodas - tiesioginis 2013 S.Maciulevičius 19

  20. Gautas pavyzdys Unit Daugyba; Rega[8], c[15]; Regb[8]; Cnt sk[5]; Begin a=input; b=input; if b[1]==1 { b[1]=1-b[1]; a[1]=1-a[1]; } Printa,b; sk=5d; ciklas: if b[8]==1 { c[1:8]=c[1:8]+a; } b=RLS(b); c=RLS(c); sk=sk-1; Printsk,a,b,c; ifsk<>0 { Goto ciklas; } Print c; End S.Maciulevičius

  21. Gautas pavyzdys - rezultatai Unit Daugyba a[1:8]=00011001 b[1:8]=00010011 "Ciklopradzia" sk[1:5]=00100 a[1:8]=00011001 b[1:8]=00001001 c[1:15]=000011001000000 sk[1:5]=00011 a[1:8]=00011001 b[1:8]=00000100 c[1:15]=000100101100000 sk[1:5]=00010 a[1:8]=00011001 b[1:8]=00000010 c[1:15]=000010010110000 sk[1:5]=00001 a[1:8]=00011001 b[1:8]=00000001 c[1:15]=000001001011000 sk[1:5]=00000 a[1:8]=00011001 b[1:8]=00000000 c[1:15]=000011101101100 c[1:15]=000011101101100 Turėtume gauti: c[1:15]=000000111011011Kas negerai? S.Maciulevičius

  22. Kas negerai? • Daugyba turi būti atliekama papildomajame kode, o operandų ir rezultato kodas – tiesioginis. Nematau neigiamo skaičiaus (a) pervedimo į papildomąjį kodą • Neteisingas ciklų skaičius • Kadangi rezultato kodas – tiesioginis, nematau sandaugos, jei ji neigiama, pervedimo į tiesioginį kodą 2013 S.Maciulevičius 22

  23. Gautas pavyzdys Daugyba nuo aukšč. skilčių, stumiant dalinių sandaugų sumą. Operandų ir rezultato kodas - atvirkštinis 2013 S.Maciulevičius 23

  24. Kitas gautas pavyzdys ciklas: sk=sk-1; c = LLS (c); b = LLS(b); if b[1]==1 { c=c+a; } Print a, b, c; if sk<>0 { Goto ciklas; } c=^c; a=^a; Print a, c; End Unit daugyba; Reg a[8], b[8]; Reg c[15]; Cnt sk[4]; Begin a = input; b = input; Print a,b; a=^a; b=^b; c = 0; sk=7d; 2013 S.Maciulevičius 24

  25. Kitas gautas pavyzdys - rezultatai Unit daugyba a[1:8]=00011001 b[1:8]=00010011 a[1:8]=11100110 b[1:8]=11011000 c[1:15]=000000011100110 a[1:8]=11100110 b[1:8]=10110000 c[1:15]=000001010110010 a[1:8]=11100110 b[1:8]=01100000 c[1:15]=000010101100100 a[1:8]=11100110 b[1:8]=11000000 c[1:15]=000101110101110 a[1:8]=11100110 b[1:8]=10000000 c[1:15]=001100001000010 a[1:8]=11100110 b[1:8]=00000000 c[1:15]=011000010000100 a[1:8]=11100110 b[1:8]=00000000 c[1:15]=110000100001000 a[1:8]=00011001 c[1:15]=001111011110111 2013 S.Maciulevičius 25

  26. Kas negerai? • Tokio tipo užduotyse veiksmų seka tokia: sandaugos ženklo nustatymas, neigiamų operandų pakeitimas teigiamais, neigiamos sandaugos pervedimas į pradinį kodą • Nematau ženklo nustatymo, neigiamų skaičių (a ir b) pervedimo į teigiamus • Kadangi rezultato kodas –atvirkštinis, nematau sandaugos, jei ji neigiama, pervedimo į atvirkštinį kodą 2013 S.Maciulevičius 26

  27. Gautas pavyzdys Daugyba nuo žemiausiųjų skilčių, stumiant dalinių sandaugų sumą. Operandų ir rezultato kodas - ???? 2013 S.Maciulevičius 27

  28. Kitas gautas pavyzdys Unit Daugyba; Rega[6], c[11]; Regb[6]; Cnt sk[5]; Begin a=input; b=input; Printa,b; sk=5d; ciklas: if b[5]==1 { c[1:5]=c+a; } b=RLS(b); c=RLS(c); sk=sk-1; Printsk,a,c; ifsk<>0 { Goto ciklas; } Print c; End S.Maciulevičius

  29. Gautas pavyzdys - rezultatai Unit Daugyba a[1:6]=011001 b[1:6]=010011 "Ciklopradzia" sk[1:5]=00100 a[1:6]=011001 c[1:11]=01100100000 sk[1:5]=00011 a[1:6]=011001 c[1:11]=00110010000 sk[1:5]=00010 a[1:6]=011001 c[1:11]=00011001000 Calculation result is too big to save it to `c[1:5]` at line 15 Kas negerai? S.Maciulevičius

  30. Kas negerai? • Atsiprašau, nežinau iš kur šis pavyzdys  • Operandų ilgis – 6 bitai, turi būti - 8 • Nematau ženklo nustatymo, neigiamų skaičių (a ir b) pervedimo į teigiamus arba kodų keitimo • c[1:5]=c+a; neteisingai užrašytas veiksmas (žr. paaiškinimus aukščiau) • Calculation result is too big to save it to `c[1:5]` at line 15 – pernaša iš aukšč. skilties (žr. paaiškinimus aukščiau) • Ir dar kažko trūksta ... 2013 S.Maciulevičius 30

More Related