raČunalnitvo za elektrotehnike in raČunalnitvo napotki za laboratorijske vaje vsebina uvod hipotetični računalnik ogrevanje in vaja vnos in izpis podatkov ter preprosta aritmetika vaja generator naključnih tevil vaja iskanje največjega tevila programski jezik c ogrevanje in vaja branje in izpis podatkov enostavni podatki vaja urejanje podatkov polja vaja znakovni nizi uvod osnovni namen teh laboratorijskih vaj je neposreden stik z računalnikom z njegovo pomočjo bo lahko preveril in poglobil razumevanje snovi ki jo slii na predavanjih in avditornih vajah celotne vaje sestavlja est nalog za vsako izmed katerih sta na razpolago po dve uri laboratorijskega časa prve tri naloge pokrivajo področje hipotetičnega računalnika medtem ko so druge tri namenjene programskemu jeziku c Če si eli dodatnih problemov lahko med drugim pobrska med starimi izpitnimi nalogami ali po katerikoli knjigi iz spiska literature veliko cejevskih problemov nekatere tudi reene najde v knjiici praktično programiranje v jeziku c avtorja i fajfarja za tiste ki bi radi kaj poskusili tudi doma je tu na voljo simulator hipotetičnega računalnika datoteke simulatorja so zapakirane in se ob zagonu programa simulator exe same odpakirajo dobi lahko tudi razvojno okolje za jezik c ogrevanje in vaja najprej si poglejmo kako uporabljamo simulator hipotetičnega računalnika na tem mestu predpostavljam da si vsaj priblino domač z arhitekturo in ukazi hipotetičnega računalnika v datoteki primer asm ki je priloena simulatorju njeno vsebino lahko pogleda in spreminja s poljubnim urejevalnikom besedila se nahaja preprost primer zbirnikega programa program z vhodne enote priključene na prvem vmesniku prebere podatek x ga pomnoi z dve in rezultat izpie na izhodni enoti priključeni na drugem vmesniku celoten program izgleda takole org inicializacija vmesnikov lda sta vhodk prvi vmesnik je vhoden lda sta izhodk drugi vmesnik je izhoden branje podatkov beri lda vhodk jpl beri Čakamo na podatek lda vhodp ko prispe ga preberemo v akumulator sta x in shranimo v celico x mnoenje z dve ada x setejemo x in x rezultat gre v akumulator izpis rezultata na izhodno enoto sta izhodp vsebino akumulatorja shranimo na izhod zaključna zanka konec jmp konec spremenljivke in konstante x rmb vhodk equ vhodp equ izhodk equ izhodp equ end gornji zbirniki program moramo najprej prevesti v strojni jezik to storimo z naslednjim ukazom hasm primer asm primer bin pri tem je hasm prevajalnik primer asm je vhodna datoteka ki vsebuje zbirniki program in primer bin je izhodna datoteka v katero bo prevajalnik zapisal program v strojnem jeziku ko smo program uspeno prevedli zaenemo simulator hipotetičnega računalnika na katerem bomo pognali na prevedeni program simulator zaenemo z ukazom hsim nakar uzremo naslednji prizor izkueno oko bo takoj opazilo da zaslon na en mah prikazuje celotno vsebino računalnika vseh pomnilnikih celic in pet registrov in e več kot to opazujemo lahko tudi stanje registrov v preteklih dveh korakih in ukaz ki je na vrsti za izvajanje v naslednjem koraku zaporedne tevilke korakov se nahajajo v zgornjem levem kotu ekrana pretekla koraka sta označena z in trenutno stanje registrov je označeno z medtem ko pomeni naslednji korak izvajanja programa ker je to programski simulator so na začetku vsebine vseh celic nastavljene na nič česar pri resničnem računalniku ne moremo predpostaviti ukazi ki jih na simulator pozna so na gornji sliki vidni v vrstici na dnu ekrana program ki ga elimo izvajati moramo najprej naloiti v pomnilnik hipotetičnega računalnika to storimo z ukazom load pritisnemo tipko l v okno ki se pri tem pokae vpiemo ime datoteke ki jo elimo naloiti v naem primeru je to datoteka primer bin naloeni program lahko e takoj vidimo v pomnilniku hipotetičnega računalnika v podoknu z naslovom memory map kot to kae naslednja slika vsebina ene celice v naem primeru celice nič je vedno osvetljena osvetljena celica je tista na katero kae programski tevec program counter kar pomeni da je ukaz ki je v tej celici naslednji na vrsti za izvajanje spomnimo se da na hipotetični računalnik vedno prične izvajati program z ukazom ki je v celici nič ko imamo program enkrat v pomnilniku je ta e pripravljen da ga poenemo en način zagona programa je z ukazom run pritisk na tipko r pri tem se preselimo v zunanjost računalnika v ozadju na program teče in čaka na sve podatek to čakanje smo v programu dosegli z zanko sestavljeno iz ukazov lda vhodk in jpl beri ker prvi ukaz iz krmilnega registra prvega vmesnika v akumulator znova in znova nalaga vrednost ostaja negativnostni bit v registru stanja nastavljen na zaradi tega nas skok ki sledi vedno vrača nazaj na branje krmilnega registra sedaj e lahko vnaamo podatke prek vhodne enote in unit in jih z vhodne enote out unit beremo vpiimo na vhodno enoto binarno vrednost in potrdimo vnos z dvakratnim pritiskom na tipko enter v tem hipu se nastavi najviji bit krmilnega registra prvega vmesnika na sliki ga vidimo v oknu z imenom interface adapter na ko na program ki e vedno teče v ozadju vsebino te celice naloi v akumulator ukaz lda vhodk se nastavi negativnostni bit v registru stanja na ena zaradi česar skok jpl beri ne potegne več izvajanje programa se nadaljuje z naslednjim ukazom lda vhodp branje podatkovnega registra prvega vmesnika takoj ko program prebere vrednost iz podatkovnega registra prvega vmesnika se najviji bit njegovega krmilnega registra spet postavi na podatek je e prebran in potemtakem ni več sve Čim računalnik opravi z mnoenjem in izvri ukaz sta izhodp na izhodni enoti ugledamo rezultat slika kae da se je sedaj na ena postavil najviji bit krmilnega registra drugega izhodnega vmesnika kar pomeni da je podatek v podatkovnem registru sve neprebran ta bit se bo nastavil nazaj na takoj potem ko bo izhodna enota podatek prebrala branje podatka izhodne enote simuliramo s pritiskom na tipko f s pritiskom na tipko esc se lahko vrnemo nazaj v notranjost računalnika sedaj je osvetljena celica v estnajstikem zapisu kjer se pričenja ukaz jmp konec program se je v resnici izvril do konca in se sedaj vrti v zaključni mrtvi zanki ponovno ga lahko zaenemo le tako da hipotetični računalnik resetiramo z ukazom reset oziroma tipko s s tem smo postavili programski tevec spet na nič za izvajanje programa imamo poleg načina ki smo ga ravno spoznali e en način ki mu rečemo koračno izvajanje koračno izvajanje programa nam pride hudo prav kadar program ne deluje tako kot smo si zamislili kar sploh ni tako redek pojav in nas za vsak ukaz posebej zanima kako se izvede posamezen korak programa izvedemo z ukazom trace tipko t pri tem lahko opazujemo kako se spreminjajo vsebine pomnilnikih celic in registrov hkrati pa je vsakokrat osvetljena druga celica kakor se pač premikamo po programu teava nastopi ko program prispe do zanke ki čaka na sve podatek s pritiskanjem na tipko t skačemo naprej in nazaj po zanki vendar iz celice estnajstiko fc tu je krmilni register prvega vmesnika vedno znova beremo ničlo podatek ni sve v koračnem načinu avtomatično nastavljanje bitov krmilnih registrov vhodno izhodnih vmesnikov ne deluje v register moramo poseči ročno to storimo z ukazom edit tipka e ki nam omogoča da se s smernimi tipkami kurzorji pomikamo po pomnilniku in s pritiskom na tipko enter pričnemo s spreminjanjem vsebine elene celice Če se pomaknemo do celice in pritisnemo tipko enter ugledamo takno sliko na sliki lahko vidimo v četrtem stolpcu na vrhu ekrana stolpec z naslovom mnemonic zbirniko obliko ukazov ki se izvajajo vidimo da se v resnici izmenoma ponavljata ukaza lda in jpl vpiimo v okno z naslovom edit cell binarno vrednost najviji bit nastavimo na in tako signaliziramo sveino podatka vnos potrdimo z dvakratnim pritiskom na tipko enter ponovimo postopek za celico estnajstiko cd tu je podatkovni register prvega vmesnika in vnesimo neko vrednost na primer s pritiskom na tipko esc se sedaj vrnemo v izvajalni način in nadaljujemo s pritiskanjem na tipko t tokrat se uspeno prebijemo skozi bralno zanko in tudi vse do konca programa pri tem opazuj kaj se dogaja z registri in posameznimi celicami na primer v celici estnajstiko to je v resnici celica x ki smo jo v naem zbirnikem programu rezervirali s psevdoukazom rmb se kmalu pojavi vrednost f ki smo jo malo prej vnesli v podatkovni register prvega vmesnika sedaj ko obvlada navigacijo po simulatorju poskusi za nalogo napisati svoj program naloga se glasi takole tokrat sta na oba vmesnika priključeni vhodno izhodni enoti na obe lahko piemo in z obeh beremo napii zbirniki program ki s prve enote bere podatek x z druge podatek y nato pa izpie na prvi enoti vsoto x y in na drugi razliko x y prebranih vrednosti vaja za drugo vajo bomo iz hipotetičnega računalnika naredili generator psevdonaključnih tevil besedo psevdo sem uporabil zato ker ta tevila v resnici ne bodo naključna generirali jih bomo po točno predpisanem algoritmu ki nam bo kot rezultat dal zaporedje vrednosti ki se bodo nepoučenemu opazovalcu zdele naključne v resnici vsi generatorji naključnih tevil ki jih srečamo v digitalnih računalnikih generirajo psevdonaključna tevila za vajo izdelaj fibonaccijev generator psevdonaključnih tevil ki računa vrednosti po naslednjem algoritmu x x x mod operator mod predstavlja ostanek pri celotevilskem deljenju program naj prvi dve vrednosti prebere z vhodne enote priključene na prvem vmesniku potem pa naj v neskončni zanki eno za drugo izpisuje izračunane vrednosti vaja za zadnjo vajo iz hipotetičnega računalnika napii e zbirniki program ki z vhodne enote priključene na prvem vmesniku prebere deset predznačenih osembitnih celih tevil in največje tevilo izpie na izhodni enoti priključeni na drugem vmesniku ogrevanje in vaja predno začnemo z resnim delom v jeziku c je potrebno poznati nekaj osnov dela z razvojnim okoljem teh se lahko naučimo tako da preizkusimo primer opisan v drugem poglavju knjiice praktično programiranje v jeziku c avtorja i fajfarja za prvo vajo iz ceja bo izdelal program ki zna razmiljati napisal bo enostaven računalniki program ki bo nadomestil enega človekega igralca v stari otroki igri s kamenčki v tej igri dva igralca s kupa kamenčkov izmenoma jemljeta po en dva ali tri kamenčke izgubi tisti ki s kupa vzame zadnji kamenček za pomoč si poglejmo algoritem po katerem se računalnik odloča o tem koliko kamenčkov bo vzel s kupa Če je k tevilo kamenčkov ki so e ostali na kupu potem vzame računalnik n kamenčkov n k if n n pri tem predstavlja cejevski operator ostanka pri celotevilskem deljenju kot vidimo je količina razmiljanja ki ga je potrebno vloiti v to igro zelo majhna glavni programerski izziv pri izdelavi programa je izvedba pogovora z uporabnikom sem spada izpisovanje sporočil kdo je na potezi koliko kamenčkov je vzel računalnik koliko kamenčkov je e na kupu kdo je zmagal itd zelo pomemben del pogovora z uporabnikom je tudi preverjanje podatkov ki jih uporabnik vnaa na primer če se uporabnik zmoti ali celo nalač goljufa ga je potrebno na to opozoriti in mu omogočiti ponoven vnos program je mogoče raziriti tudi tako da igralcu na primer omogočimo da izbere kdo bo prvi vlekel ter določi začetno tevilo kamenčkov in tevilo kamenčkov ki jih je dovoljeno vzeti s kupa v eni potezi vaja v tej vaji napii program ki uredi po velikosti polje desetih celih tevil Če ti je to premajhen izziv poskusi sprogramirati vsaj dva različna postopka urejanja in ju primerjaj med seboj po hitrosti delovanja vaja za zadnjo vajo napii lepalnik besedila program napii tako da bo s tipkovnice prebral zankovni niz in ga na zaslon izpisal v lepi obliki program naj vse dolge presledke sestavljene iz večih zaporednih presledkov nadomesti z enojnimi poskrbi naj tudi da bo za vejico in piko vedno presledek medtem ko presledka pred vejico ali piko ne sme biti na primer niz joj kako sem jaz danes utrujen naj predela v joj kako sem jaz danes utrujen Če se po opravljeni nalogi dolgočasi lahko razmisli kako bi lahko program prepoznal situacije kjer za vejico ne sme biti presledka problem je na primer kako ločiti med pi je enak decimalna vejica za vejico ni presledka in izrebane so bile tevilke in natevanje za vejico je presledek fakulteta za elektrotehniko računalnitvo za elektrotehnike pii mi