Galaksija 122

Texas Instruments 59

Našu malu školu programiranja na džepnim računarima počinjemo napisom o popularnom TI-59. Upoznaćemo se sa instrukcijama njegovog programskog jezika i konstrukcijom njegovih programa.

Dejan Ristanović

Svaki program se sastoji od određenog broja naredbi. Svaka naredba nalaže računam da izvrši neku operaciju. Naredba lnx, na primer, nalaže računani da izračuna i prikaže prirodni logaritam broja koji se nalazi na ekranu. Većina naredbi ima i svoj adresni deo. Recimo da naređujemo računaru da broj sa ekrana smesti u memoriju. To postižemo naredbom STO. Ali, u koju memoriju? Da to odredimo, moramo da kompletiramo naredbu brojem: STO 25. To znači da se broj sa ekrana smešta u 25. memoriju, a broj 25 se naziva adresni deo naredbe. Često će nam biti potrebno da prikažemo opšti oblik adresnog dela neke naredbe. Za to će nam služiti mala slova i, j, k. Opšti oblik naredbe store bio bi, dakle, STO ij, gde i i j u principu mogu da budu bilo koje dve cifre. Kod nekih naredbi adresni deo može da ima i tri cifre (na primer, GTO ijk). U adresi može da stoji i labela (o njima ćemo govoriti docnije, za sada samo zapamtite termin) koju u opštem slučaju obeležavamo sa N (na primer, GTO N).

Opis TI-59

Računar TI-59 ima 120 memorijskih registara, od kojih su neki rezervisani za smeštanje programa a preostali za čuvanje podataka. U jedan memorijski registar, kada je određen za smeštanje programa, staje 8 programskih koraka. Kada uključite računar, 60 registara će biti rezervisano za program a preostalih 60 za podatke. To znači da postoje 479 programskih koraka - od 0 do 60*8-1. Ovaj odnos možete da promenite tako što ćete otkucati koliko puta po deset registara želite da rezervišete za podatke i pritisnuti 2nd Op 17.

Na primer, 5 2nd Op 17 će rezervisati 50 registara za podatke (0-49) i 70 registara za program (540 programskih koraka). Za podatke možete da rezervišete najviše 100 registara (sa 10 2nd Op 17) - 20 registara uvek ostaje rezervisano za program. Pritiskom na 2nd Op 16 u svako doba možete da ustanovite sa koliko programskih koraka i registara za podatke raspolažete.

Funkcije i njihovi kodovi

Smatrajući da su funkcije nekih opštih naredbi poznate (da, na primer, naredba x2 izračunava kvadrat broja koji se nalazi na ekranu) govorićemo uglavnom o onome što se odnosi na programiranje.

Na svakom tasteru je ispisano ime jedne funkcije, dok je ime druge funkcije ispisano iznad tog tastera. Svaka ovakva funkcija (instrukcija) ima svoj kod koji je obavezno dvocifren broj. On se dobija tako što se izbroji u kom je redu taj taster (1-9), što daje prvu cifru koda, a zatim i koji je taj taster u redu (brojano sleva). Ukoliko je instrukcija ispisana na tasteru, njegov broj u redu daje drugu cifru koda. Ukoliko je ona napisana iznad tastera, onda na ovaj broj dodajemo 5. Tako, na primer, naredba CLR ima kod 25. Njega smo dobili na sledeći način: taster na kome je napisana ta naredba je u drugom redu i on je peti u tom redu. Koji je kod naredbe tan? Ona se izvršava kada se pritisne 2nd tan odnosno 2nd 1/x. Taster na kom je napisano 1/x je u trećem redu, a on je peti u redu. Prva cifra je, dakle 3, a druga 5+5=10, dakle 0. Kod naredbe tan je 30.

Postoji nekoliko izuzetaka od ovog pravila. Kodovi brojeva su, jednostavno, ti brojevi. Na primer, kod instrukcije kojom se unosi broj 2 je 02, a ne 83! Isto tako, pojedine instrukcije koje se dobijaju pritiskanjem većeg broja tastera imaju posebne kodove (one se često koriste, pa su zbog uštede programskih koraka dobile posebna obeležja koja ćemo pomenuti). Za lakše snalaženje sa kodovima možete da koristite overlay koji ste dobili uz računar. Na njemu su ispisani kodovi svih instrukcija.

Unošenje nekih instrukcija zahteva pritiskanje više tastera. Da, biste na primer, izračunali ex, treba da pritisnete INV lnx. Za arcsin x pritiskate INV 2nd sin (a nikako 2nd INV sin). Ovo su dva očigledna primera ali ima instrukcija čije unošenja zahteva pritisak na šest ili sedam tastera. Ove instrukcije zauzimaju više programskih koraka: INV lnx, na primer, zauzima dva koraka i kodira se kao 22 23 a INV If flg Ind 25 123 (naveli smo primer najduže naredbe, njenu funkciju ćete shvatiti docnije) kao 22 87 40 25 01 23 (6 koraka).

Programi

Svaki program se sastoji od velikog broja naredbi. Svaka od njih ima svoj redni broj u programu (prva koju otkucate ima broj 0, sledeća broj 1 itd.) koji se naziva apsolutna adresa te naredbe. Naredbe, pored apsolutne, mogu da imaju i relativnu adresu, koja se operativno realizuje preko labele. Labela je marker koji se postavlja negde u programu. Recimo da se na programskim koracima 100 i 101 nalaze naredbe LBL = (kodirane kao 76 95). Ako korisnik pritisne SBR = računar će početi da traži LBL =, od sledećeg programskog koraka, koga će naći na 100. i 101. koraku. On će tada odatle početi da izvršava program.

Gotovo svaki taster može da bude labela. U programu, na primer, mogu postojati LBL CLR, LBL 2nd log, LBL +, LBL LBL itd. Jedino brojevi i instrukcije SST, BST, Ins, Del, LRN, Ind, 2nd ne mogu da budu labele. Specijalno, slova A do E i A' do E' su takozvane globalne labele koje služe da se njima obeleže počeci važnih delova programa. Za njihovo pozivanje nije potrebno pritiskati taster SBR pa su naredbe SBR A i A, što se tiče funkcije, ekvivalentne. Čemu, međutim služe labele kad već svaka instrukcija ima svoju apsolutnu adresu? U programu su često potrebne ispravke (stara je istina da program samo slučajno može da proradi "iz prve"), pa se brojevi pojedinih instrukcija često menjaju umetanjem novih. Labele su obični programski koraci koji se pomeraju zajedno sa ostalim instrukcijama.

Unošenje programa

Pre unošenja programa, potrebno je obrisati eventualni program koji se već nalazio u memoriji. To se najlakše postiže pritiskom na 2nd CP (Clear Program). Zatim pritisnete LRN i unosite program pritiskanjem odgovarajućih tastera. Posle unošenja čitavog programa, pritisnite ponovo LRN.

U toku kucanja programa (ili njegovog sastavljanja) verovatno će doći do raznoraznih grešaka. Da biste ih ispravili, potrebno je da umete da čitate program koji je unesen u računar. U tom cilju pritisnite RST LRN ili GTO ijk LRN (zavisno od toga da li želite da program čitate od početka ili od koraka ijk). Na ekranu se nalazi broj oblika ijk ab, gde je ijk broj programskog koraka, a ab kod instrukcije koja se nalazi na tom programskom koraku. Obzirom da neke instrukcije zauzimaju više programskih koraka, nije sigurno da li je broj ab naredba ili adresni deo naredbe koja se nalazi na prethodnom koraku. Zato postoje tasteri SST i BST. Pritiskom na SST čitaćete instrukciju koja se nalazi na sledećem koraku (u našem slučaju ijk+1) a pritiskom na BST - onu koja se nalazi na prethodnom. Potrebno je da se vratite nekoliko koraka unazad i ustanovite logični sled instrukcija.

Ispravljanje programa

Ukoliko odlučite da izbrišete instrukciju čiji se kod nalazi na ekranu, jednostavno pritisnete 2nd Del. Ako želite da pre instrukcije čiji kod vidite umetnete jednu ili nekoliko instrukcija, pritisnite 2nd Ins onoliko puta koliko programskih koraka zauzimaju instrukcije koje unosite, a zatim ih unesite. Bitno je (da još jednom to naglasimo) znati da jedna instrukcija zauzima više programskih koraka i da, ako brišete neku naredbu, izbrišete i njen adresni deo.

Izvršavanje programa

Program ste uneli - kako sada da naredite kalkulatoru da počne sa njegovim izvršavanjem? Najjednostavniji način je da pritisnete GTO ijk R/S ili RST R/S. Na taj način će program početi da se izvršava od programskog koraka ijk (ili 0, ako koristite RST). Imate, naravno, i mogućnost da koristite labele. Pritisak na taster A započinje izvršavanje programa od mesta na kome se nalazi labela A. Ukoliko labela A ne postoji ili, uopšte, ako uradite nešto što kalkulator "ne može da shvati", na ekranu će trepereti broj.

Naredbe TI-59

0-9, + - x / = ( ) - služe za uobičajene računske operacije; brojni izrazi se unose onako kako su napisani na papiru, uz eventualnu upotrebu zagrada (TI-59 može da radi sa devet nivoa zagrada); na kraju brojnog izraza nije potrebno zatvarati sve zagrade - instrukcija = automatski zatvara sve zagrade.

EE, Eng, Fix n (kodira se kao 52, 57, 58 0n) - služe za "kontrolu ekrana", tj. za biranje načina na koji kalkulator prikazuje brojeve; da se unese broj 1.23*10-17, treba kucati 1 . 2 3 EE 1 7 +/- (ovo se kodira kao 01 93 02 03 52 01 07 94); od tog momenta pa dok ne pritisnete INV EE ili CLR računar će sve brojeve prikazivati u obliku mantisa*10exponent. Eng ima sličnu namenu, s tim što je eksponent ceo umnožak broja 3; FIX služi da kalkulator pokazuje samo prvih nekoliko decimala broja i opoziva se sa INV Fix ili Fix 9 (potpuno ekvivalentno).

Int (59) - odbacuje decimale broja; na primer, 2.5 Int daje rezultat 2

Deg, Rad, Grad (60, 70, 80) - kada uključite računar, trigonometrijske funkcije će se izračunavati za uglove izražene u stepenima; ukoliko želite da se oni izražavaju u radijanima ili gradima, pritisnite odgovarajući taster ili ga unesite u program.

X:T (32) - ekran se naziva i "registar X"; postoji, osim toga, još jedan ravnopravan registar koji se zove "registar T"; ova instrukcija broj iz registra X prebacuje u registar T, a broj iz registra T u registar X.

P->>R (37) - vrši konverziju polarnih koordinata u rektangularne; jedna od koordinata se smešta u X, a druga u T registar; INV P>>R ima inverznu funkciju - prevođenje rektagularnih koordinata u polarne.

STO mn (42 mn) - smešta broj koji se nalazi na ekranu u registar mn.

RCL mn (43 mn) - prenosi sadržaj registra mn na ekran.

SUM mn, Prd mn (44 mn, 49 mn) - omogućava računanje u registrima; SUM (Prd) dodaje (množi) broj sa ekrana broju u mn-tom registru i rezultat te operacije smešta u mn-ti registar; broj na ekranu se ne menja.

INV SUM mn i INV Prd mn - imaju inverzne funkcije: od broja u mn-tom registru oduzimaju broj na ekranu, odnosno broj u mn-tom registru dele brojem koji se nalazi na ekranu.

Exc mn (48 mn) - razmenjuje sadržaj registra X (ekrana) sa registrom mn.

CMS (47) - briše sve memorije; ovu naredbu treba izbegavati u programu.

Pgm mn (36 mn) započinje izvršavanje programa mn iz modula koji se nalazi u računaru; prostor u "Galaksiji" nam, na žalost, ne dopušta da se ozbiljnije pozabavimo programima iz modula.

GTO N, GTO ijk (61 N odnosno 61 0i jk) - program nastavlja da se izvršava od labele N odnosno programskog koraka ijk.

SBR N, SBR ijk (71 N odnosno 71 0i jk) - deluje slično prethodnoj naredbi, ali kalkulator "pamti" odakle je došao na labelu N (ili korak ijk) i po nailasku na INV SBR (kod 92) nastavlja da se izvršava od instrukcije koja neposredno sledi iza SBR N (SBR ijk); na ovaj način se realizuju potprogrami. Kada se koristi van programa, ova naredba je ekvivalentna sa GTO N (GTO ijk) R/S.

X=T N, X=T ijk (67 N odnosno 67 0i jk) - deluje kao GTO N (GTO ijk) ako je broj na ekranu jednak broju u T registru; ukoliko nije, izvršavanje programa se nastavlja kao da se ništa nije desilo. INV X=T deluje kao GTO N (GTO ijk) samo ako je broj na ekranu različit od broja u T registru

X>>=T N, X>>=T ijk (77 N, 77 0i jk) - deluj slično prethodnoj naredbi, s tim što se prelazak na labelu N (korak ijk) vrši samo ako je broj na ekranu veći ili jednak od broja u T registru; INV X>>=T ima odgovarajuću inverznu funkciju.

St flg n (86 0n) - postavlja indikator čiji je redni broj n u položaj 1; postoji 10 indikatora (flags) koji mogu da budu u položaju 0 ili u položaju I. INV St flg n postavlja indikator čiji je broj n u položaj 0.

If flg n N, If flg n ijk (87 0n N odnosno 87 0n 0i jk) - radi kao GTO N (GTO ijk) ako je indikator čiji je broj n u položaju 1; u protivnom, ništa se ne dešava; INV If flg radi kao GTO samo ako je indikator u položaju 0.

Nop (68) - ne radi ništa; takvo mu je i ime: no operation.

Pause (66) - prikazuje broj koji se u datom momentu zatekao u X registru oko pola sekunde; izvršavanje programa se posle toga nastavlja.

Dsz n N, Dsz n ijk (97 0n N, 97 0n 0i jk) - ima složeno dejstvo; umanjuje sadržaj n-tog registra (samo za registre 0-9) za 1 i deluje kao GTO N (GTO ijk) ako je broj koji se nađe u n-tom registru posle ovog smanjivanja veći od 1; Koristi se za realizovanje cikličnih programa.

Op mn (69 mn) - konstruktoru TI-59 je 99 instrukcija bilo malo, pa je dodao instrukciju Op koja izvršava 40 novih funkcija; ove funkcije su praktično nezavisne jedna od druge, a verovatno će vam postati jasne ako pročitale njihov spisak u vašem uputstvu za upotrebu, na strani V-27

RST (81) - ima višestruko dejstvo: postavlja sve indikatore (flags) u položaj 0, poništava eventualne ranije pozive programa iz modula, briše status-registre koji beleže pozive potprograma, vraća program na instrukciju 000 i (ako je korišćena iz programa) nastavlja izvršavanje programa.

R/S (91) - zaustavlja rad ako je u programu; sa tastature ima dvojako dejstvo: ako se ne izvršava program, započinje njegovo izvršavanje; ako je izvršavanje programa u toku, R/S ga prekida; ukoliko se odlučite da na ovaj način prekinete izvršavanje nekog programa, neće biti loše da, pre nego što nastavite sa radom, pritisnete CLR RST.

Write (96) - zapisuje na magnetnu karticu sadržaj dela memorije čiji je broj na ekranu; čitava memorija računara je podeljena na četiri dela, čiju strukturu možete da nađete na strani VII-1 uputstva za upotrebu. Da biste snimili čitavu memoriju (program i sve podatke), pritisnite 1 Write 2 Write 3 Write 4 Write i posle svakog pritiska na Write u čitač kartica ubacite po jednu stranu kartice; za snimanje svega što se nalazi u računaru potrebne su, dakle, dve kartice. Čitanje programa je još jednostavnije; kada ubacite neku magnetnu karticu, na ekranu treba da je nula; vrlo je bitno da raspodela memorije pri snimanju i čitanju kartice bude ista (postavlja se sa n Op 17).

Indirektno adresiranje

Za kraj smo ostavili oblast koja, sudeći po programima koje dobijamo, predstavlja najveću zagonetku za programere. Instrukcija RCL mn, videli smo, uvek poziva sadržaj registra mn. A instrukcija RCL Ind mn (73 mn)? Ona najpre čita sadržaj registra mn (recimo da se tamo nalazio broj PQ), a zatim poziva sadržaj registra pq. Ovo je najlakše shvatiti na primeru: neka je u nultom registru bio broj 10, u prvom 20, a u desetom 1. RCL Ind 10 je ekvivalentno sa RCL 01 i dovešće na ekran broj 20. Međutim, ako u deseti registar smestimo nulu, RCL Ind 10 će delovati kao RCL 00 i na ekran dovesti broj 10. Indirektne funkcije najčešće imaju posebne kodove koji se mogu naći na V-51 strani uputstva za upotrebu.

Ostaje nam da objasnimo naredbu GTO Ind mn. Ona nastavlja izvršavanje programa od instrukcije čija je apsolutna adresa bila u registru mn. Jedna od glavnih mana TI-59 je što se indirektno ne može prelaziti na labelu. Računar TI-59 ima još nekoliko specijalnih funkcija, koje se uglavnom odnose na rad sa štampačem PC 100 C, ali se njima ovde nećemo baviti.