Da li je arapski jezik raja? Paradise Language Dodatne operacije za rad sa podacima i memorijom

18. decembar je Svjetski dan arapskog jezika. Praznik su ustanovile Ujedinjene nacije 2010. godine i jedan je od šest službenih jezika Ujedinjenih naroda. Prema posljednjim podacima, u svijetu ima 300 miliona ljudi koji govore arapski i njegove dijalekte. Štaviše, za 240 miliona on je domaći. Arapski jezik i vjera islama su neraskidivo povezani. Jedno je nezamislivo bez drugog, jer već jedan i po milenijum muslimani svijeta čitaju molitve na arapskom pet puta dnevno. Časni Kur'an je poslat na njega, a Poslanik Muhammed (a.s.) je govorio.

Sveštenstvo Grozni je na svoj način obilježilo značajan datum. Stanovnicima grada obratio se imam džamije "Srce Čečenije" Magomed Dadahaev. On je objasnio ulogu arapskog jezika u životu muslimana:

Bez znanja arapskog, čovjek ne može naučiti islam. Stoga je među muslimanima ovaj jezik od pamtivijeka uživao veliko poštovanje. Preduvjet za proučavanje vjere Poslanika, sallallahu alejhi ve sellem, je analiza arapskih tekstova, od kojih su skoro svi napisani veoma davno. U modernom arapskom jeziku ima više od 12 miliona riječi (za poređenje, na ruskom ih je 131.000, a na engleskom oko milion...). To je veoma bogat i složen jezik. Dok sam studirao na Islamskom univerzitetu u Siriji, naš profesor, filolog, dao nam je sljedeći primjer: u arapskom jeziku broj sinonima za samo jednu riječ “kamila” dostiže šest hiljada! Njegova gramatika je takođe veoma složena i višestruka. Njegovo proučavanje zahtijeva priličnu količinu intelektualnih i voljnih napora. Stoga, među tumačima Kur'ana i hadisa Poslanika, sallallahu alejhi ve sellem, nema amatera. Gotovo je nemoguće uroniti u značenje svetog teksta bez dobrog arapskog rječnika i poznavanja sintakse, semantike i fonetike ovog jezika. Ponekad postoje ljudi koji sebe nazivaju učenjacima Kurana. Oni citiraju citate iz Poruke Svevišnjeg, daju ljudima savjete. Ali ako ih pitate o izvoru znanja, dobićete odgovor: "Pročitao sam prevod." Takvi ljudi su veoma opasni za islam, jer su, ne znajući šta rade, u stanju unijeti zabunu i netačnosti u tumačenje poruke Uzvišenog. U islamskim obrazovnim ustanovama široko se primjenjuje sljedeća nastavna metodologija: osnovci nekoliko godina uče isključivo arapsku filologiju. I tek kada dovoljno savladaju potrebnu količinu materijala, pristupaju proučavanju Kuranskih tekstova. Dakle, arapski jezik je svojevrsna odskočna daska za savladavanje informacija o islamu. Osim toga, arapski je jezik kojim će stanovnici raja govoriti. Slava Allahu što nas je stvorio muslimanima! Šta nam je dao lijepi, bogati arapski jezik za razumijevanje naše volje!

1. Ovo je priča da su ljudi prestali da se razumeju i da su se pojavili brojni jezici savremenog sveta. Koliko je ovaj mit popularan među različitim narodima i koja su njegova tumačenja?

2. Mit o vavilonskoj kuli nije zasnovan samo na vjerovanju da je u početku cijelo čovječanstvo govorilo istim jezikom, već i na činjenici da je taj jezik bio „idealan“: imena predmeta su prenosila njihovu pravu suštinu. Da li predstavnici drugih kultura dijele ove stavove i vjeruju li da je njihov jezik najbliži originalu?

Odgovor na prvo pitanje nudi se u Knjizi Postanka 11:1-9, gdje se pripovijeda da je Bog odlučio kazniti ljudsku rasu tako što će joj nametnuti prokletstvo zabune jezika. Odgovor na drugo pitanje može se naći u Postanku 2:19. U ovom dijelu Bog je Adamu doveo sve životinje i ptice da bi čuo kako će ih Adam zvati, a "kako čovjek zove svaku živu dušu, tako joj je bilo i ime". Improvizirani obilazak različitih kultura omogućit će nam da vidimo kako su ova pitanja pokrivena. Što se prvog od njih tiče, mnogi se slažu sa Starim zavjetom: različitost jezika je kazna Gospodnja, ili, barem, posljedica nekog nepovoljnog faktora.

Legenda jednog od australijskih plemena govori o jelu starih ljudi. Plemena koja su jela samo telo govorila su "čistim" jezikom, a ona koja su jela unutrašnje organe govorila su "nečistim" jezikom. Afrikanac Kabila vjeruje da su ljudi počeli govoriti različite jezike kao rezultat sukoba. Prema jednom plemenu iz Asama, do zbrke jezika došlo je zbog činjenice da je troje djece jednom lovilo pacove. Jedno od amazonskih plemena smatra da je Bog podijelio ljude i njihove jezike kako bi Mu postali poslušniji. Među autohtonim stanovništvom Amerike, plemenom Maidu (Kalifornija), vjeruje se da su ljudi u početku govorili istim jezikom, ali jednom, na pogrebnoj ceremoniji, jezik je prestao biti isti. Irokezi smatraju da je do razdvajanja jezika došlo zbog porodične svađe koja je rezultirala ubistvom djeteta. Ali pretpostavka da je višejezičnost prokletstvo nije tako uobičajena kao što se čini. U svijetu postoji mnogo verzija prema kojima je do razdvajanja došlo kao rezultat prirodnih procesa.

Drevna indijska sveta himna "Rigveda" spominje da je nekoć postojao Vak ("riječ") i da su je bogovi podijelili na mnoge oblike. Narodi poluostrva Indokine govore o šest rasa, od kojih je svaka imala svoj jezik u obliku stabljike koja se uvija iz bundeve. Pleme Quiche (Gvatemala) ima mit da su ljudi živjeli zajedno i govorili istim jezikom sve dok se nisu podijelili u grupe. Svaka je izabrala svog boga i počela da govori na svom jeziku.

Mit o stvaranju južnoameričkog plemena Navaho govori o "ženi koja se mijenja" i pojavi stvarnih naroda koji su govorili njenim jezikom. Dakle, stvorila je susjedne narode - pueblos, meksičke aboridžine i druge, a oni su govorili svojim jezicima, šireći ih u različitim smjerovima. U islamu, Kur'an uči da Adam nije izmišljao imena niti bilo šta drugo, već ga je Allah svemu podučio. Raznolikost jezika je apsolutno prirodna i predstavlja manifestaciju Allahove moći. Svi ljudi mogu razumjeti objave Kur'ana, bez obzira na kojem jeziku su napisane.

Mitološki sistem mnogih naroda svijeta nema objašnjenje za miješanje jezika, koje se jednostavno podrazumijeva, pa stoga ne može odgovoriti na naše pitanje. Međutim, u gotovo svim kulturama svijeta postoji referenca na "idealni" jezik (pitanje 2). Gore smo spomenuli australijsko pleme, koje vjeruje da neki ljudi (koji jedu ljudsko tijelo) govore "čistim" jezikom koji prenosi pravu suštinu stvari. Prema starim Egipćanima, bog Ptah je svemu dao imena, pa je jezik postao dar bogova. U Kini su "ispravan" jezik učili mitski carevi. Kur'an gleda na raznolikost jezika kao na podjelu jednog jezika koji uključuje sve ostale.

Svuda ljudi pokušavaju da dokuče kako ime objekta otkriva njegovu suštinu. Pretpostavlja se da ili “idealni” jezik koji opisuje pravu suštinu objekta postoji danas ili je ostao u prošlosti. Druga pretpostavka služi kao preduvjet za potragu za istinom i harmonijom u svijetu. Čini se da su ideje o povezanosti jezika i stvarnog svijeta i ljudskog postojanja usađene u našu svijest. S tim u vezi, postavlja se pitanje, koje je prvi put izrečeno u Platonovom dijalogu "Kratilus" i od tada je predmet stalnih rasprava: da li je veza između imena i objektivne suštine stvari prirodna (nastaje u subjektivnoj svijesti izvornog govornika? ) ili je ova veza uslovna i slučajna?

Jezik je znakovni sistem koji vam omogućava da pređete od značenja i smisla pojma do njegove oznake.

Čovjek je verbalno stvorenje i, za razliku od životinja, komunicira sa svojom vrstom koristeći jezik. Ponekad govore o "jeziku životinja", ali je jasno da je takav izraz uslovljen - po svom bogatstvu i mogućnostima, jezik životinja nije sličan ljudskom. Anđelima, s druge strane, uopšte nije potreban jezik za komunikaciju - teško ih je zamisliti da govore ruski ili engleski.

Funkcije jezika mogu biti različite - osim što prenosi informacije, pomaže u izražavanju osjećaja i procjena.

Može li se Sveto pismo prevesti?

Jezik Crkve je jezik molitve, bogosluženja i Svetog pisma.

U nekim religijama, sveti tekstovi u početku postoje na jednom određenom jeziku i smatraju se suštinski neprevodivim. Dakle, muslimanski Kuran je izvorno sastavljen na arapskom jeziku. Štaviše, muslimani vjeruju da je tako nastala ova knjiga na početku vremena.

Jevrejski pisari su takođe bili skloni ideji o mogućnosti svetih tekstova samo na hebrejskom. To nije bio slučaj s kršćanskim pismom od početka.

U 3. veku pne. izvršen je takozvani "prevod sedamdesetorice" - Septuaginta - prevod Starog zaveta na grčki. Štaviše, neki istraživači vjeruju da je upravo Septuaginta igrala ulogu Svetog pisma u međuzavjetnim vremenima.

Upravo je postojanje Septuaginte postalo glavni argument u prilog principijelne prevodivosti Svetog pisma. Postoji, međutim, još jači. Sada se smatra dokazanim da je Hristos razgovarao sa apostolima na aramejskom. Ali sastavljači jevanđelja nisu oklevali da te razgovore prenesu na grčkom.

Sada postoji naučni pravac - lingvistička rekonstrukcija. Njihovi sastavljači pokušavaju da shvate kako su ovi dijalozi zvučali u originalu. Ali to je ipak predmet naučnih studija.

Da li je zaista u rajuhladno?

Prilikom prevođenja jezika na jezik ponekad nastaju problemi jer jezici nisu gramatički identični. Značenja i nijanse riječi u različitim jezicima su također različite.

Na primjer, fraza „nebo je toplo i hladno mjesto“ jasno pokazuje da je Sveto pismo stvoreno u zemljama s vrućom klimom, gdje je „hladnoća“ prilično ugodna. U ruskom, takva udruženja teško da bi se pojavila. I glagol "ohladiti" u značenju "odmarati se", "zabavljati se" ušao je u ruski kao paus papir od hebrejskog preko grčkog.

Da li su svi Sloveni razumeli Bibliju?

Sveto pismo je preneto našim precima na neruski način. Ćirilo i Metodije - Solunski Grci - razvili su novi pisani jezik zasnovan na govornom jeziku Solunskih Slovena.

U svijetu mnogi narodi koriste jezike koji nemaju pisani jezik. Dokle god govorimo o svakodnevnom životu, nema nikakvih problema. Ali, čim se neki vjerski tekst ili filozofska rasprava treba prevesti na takav jezik, jezik treba unaprijediti, što su i učinili Ćirilo i Metodije.

Ako pretpostavimo da su se slovenska plemena prije nekoliko hiljada godina lakše slagala jedni s drugima nego moderni slovenski narodi, onda ćemo biti u pravu - jezici su bili bliži. Ali to ne znači da je prevod Svetog pisma, koji su napravili Ćirilo i Metodije, bio razumljiviji Kijevljanima i Novgorodcima - pisani književni jezik je bio drugačiji.

Možda je to odlika ruske situacije, budući da je ruski književni jezik bliži crkvenoslovenskom nego moskovskom dijalektu. U stvari, čitav crkvenoslovenski jezik ušao je u ruski kao „visoki smiraj“. Na primjer, čak i moderni participi - kao što su plač, trčanje - formirani su upravo po crkvenoslovenskom modelu - u staroruskom će to biti "plakati", "trčati".

Ponekad su staroruski pandani potpuno ispali - "dobro" i "bologo" u nazivu "Bologoye"; "Šelom", koji je samo u epovima, za razliku od "šlema".

Jezici su bliski i ... paralelni

U staroj Rusiji postojala je situacija diglosije. Ovo nije kao dvojezičnost. Diglosija je paralelna upotreba dva jezika u društvu. Na primjer, u XIX vijeku su se koristili i ruski i francuski. Francuski je bio jezik visokog društva, ali, u principu, svaki tekst se mogao prevesti.

U diglosiji, jezici se ne preklapaju u smislu upotrebe. Govorili su na staroruskom, na staroruskom su mogli da napišu kućnu belešku. Ali molili su se na crkvenoslovenskom.

Ovakvo stanje je postojalo prije Petra, u 18. vijeku se postepeno urušilo. Sada bi se nauka i književnost mogle razvijati na ruskom, ali na crkvenoslovenskom i dalje postoje samo molitve. Prevedite na crkvenoslavenski oglas - i izgledat će kao šala ili bogohuljenje.

Sveštenik ili pastir?

Živimo u jedinstvenoj eri. U carskoj Rusiji Biblija se mogla čitati na ruskom, u staroj Rusiji se moglo slušati na crkvenoslovenskom. Ali većina ljudi je bila nepismena ili nije bila dovoljno obrazovana da čita i percipira Sveto pismo.

U sovjetsko vrijeme svi su se opismenili, ali nije bilo teksta Svetog pisma.

Pismenost je i dalje očuvana, a tekstovi dostupni.

Pored samog Svetog pisma, pozvani smo da savladamo još neke slovenske tekstove - od molitava do bogosluženja. Istina, postojeći prijevod na ruski je pomalo težak za razumijevanje. U 19. veku, bez analoga, prevodioci su često prevodili slavizme u prevod.

Tako je fraza "Ja sam dobri pastir" prešla u prijevod. I evo nekih poteškoća. Doslovni prijevod s grčkog zvučao bi: "Ja sam dobar pastir", ali takav prijevod se doživljava kao nizak. S druge strane, o uzvišenom "pastoru" sada obični slušalac doživljava više kao "sveštenika". Međutim, mora se priznati da je doslovan prijevod mnogih biblijskih izreka na ruski nemoguć - fraza "ustima djeteta govori istina" - neće se doživljavati kao filozofska izreka.

Ali općenito, percepciju slovenskog teksta Biblije više ometa nerazumijevanje značenja, a ne riječi.

Posebna poteškoća su gramatičke konstrukcije. Na primjer, postoji niz poboljšanja koja dolaze iz grčkog. “Oprosti grijehe i prijestupe” jednostavno znači oprostiti sve grijehe. Slične su konstrukcije tipa „Ljutio sam se od ljutnje“, „S ljubavlju sam voleo“.

Prilikom prevođenja svetih tekstova na druge jezike nastaju i problemi (iako narodi na čije jezike Sveto pismo još nije prevedeno čine, možda, 5℅ svjetske populacije). Odnosno, nastavlja se posao koji su Ćirilo i Metodije uradili za Slovene.

Ćirilo i Metodije nisu bili prvi - prije toga su postojali prijevodi na etiopski, gotski. Nakon Ćirila i Metodija, Stefan Permski je preveo Sveto pismo na zirijanski jezik.

Sveti i profani prevodi

Da li se svaki prijevod smatra svetim tekstom? Ne, ali samo u mjeri u kojoj je to prihvaćeno u crkvenim zajednicama. Na primjer, sinodalni prijevod kao liturgijski prijevod nije zabranjen, ali nije prihvaćen. Ali ga kao takvog koriste protestanti, na primjer, ruski baptisti.

Postoje čak i moderne struje protestantizma koje vjeruju da bi biblijski tekst trebao biti dostupan svima. Objavljuju se i stripovi zasnovani na biblijskim temama.

Nema problema s tekstom Novog zavjeta - njegov izvor je poznat na grčkom. Ali osnova sinodalnog prijevoda Starog zavjeta bio je hebrejski tekst. Fragmenti iz grčkog prijevoda umetnuti su samo kada su neslaganja bila suštinska.

U modernoj verziji bilo bi lijepo imati dva prijevoda - i sa hebrejskih masoretskih tekstova i sa grčkog. Bilo bi zgodno za one koji ne znaju oba jezika.

Odgovori na pitanja

Nakon govora, protojereju Aleksandru je postavljeno nekoliko pitanja:

Kojim jezikom je Adam govorio?

- Teško je reći. S jedne strane, jezik se mijenja dok je živ. Ali niko ne zna nije li to novo svojstvo jezika koje se pojavilo nakon izgradnje Babilonske kule.

Ali, u svakom slučaju, Adamov jezik je vjerovatno bio drugačiji od bilo kojeg od postojećih jezika, uključujući hebrejski.

Ima li kontroverzi oko prijevoda usluge na ruski?

- O ovoj ideji se govorilo i prije revolucije, a djelomično su je kompromitovali obnovitelji. Nisu svi služili na ruskom, ali su tu ideju podržali.

Prijevod Biblije na ruski nije bio lak, iako je ideja mitropolita Filareta da je potrebno prevoditi i sa hebrejskog i sa grčkog bila mudra odluka. Iako nam to nije dalo naučne prevode sa oba jezika.

Postoje pojedinačni slučajevi upotrebe ruskog jezika - molitva optinskih staraca i akatist "Slava Bogu za sve" izvorno su napisani na ruskom jeziku.

Toliko je drugih prijevoda i bit će toliko nijansi u njihovoj implementaciji da je lakše donekle rusificirati tekstove nego ih prevesti.

Ovaj proces se već dugo odvija spontano. Ponekad se događaju incidenti: na primjer, u "Obredu vjenčanja" dual se ponekad neočekivano zamjenjuje množinom, au modernim akatistima se koristi nedosljedno.

Kako Božansko Proviđenje učestvuje u formiranju različitih jezika?

- Jezik postoji mimo ljudske volje. Čovjek može stvoriti esperanto, ali prirodni jezici postoje prema svojim zakonima.

Ćirilo i Metodije prevodili na crkvenoslovenski po nadahnuću odozgo, ali i po uzoru koji je postojao do tada.

Po nadahnuću odozgo, zapisujući jevanđelja na grčkom, apostoli su postavili ideju o prevođenju Jevanđelja.

Pripremila Daria Mendeleeva

Fotografija Dmitrija Kuzmina

PITANJE: Assalam alaikum aha!

Evo naišao sam na ovaj članak. Ako se ne varam, napisao si obrnuto. Ako nije teško, možete ponovo komentirati ovaj članak.

Musliman.

Arapski je jezik Kur'ana. Bio je izabrani među svim jezicima svijeta i ima izvanredna svojstva. Ovaj jezik je također jezik poslanika Muhammeda sallallahu alejhi ve sellem. Ovaj jezik je bogat i nijedan od svjetskih jezika ne može mu konkurirati. On ima duhovni i fizički uticaj na govornika ovog jezika.

Ranije su Arapi priređivali pjesnička takmičenja, ali kada je Poslanik (s.a.s.) primio Objavu, Arapi su bili toliko zadivljeni tako divnom izražajnošću jezika, pa su čak neki mislili da Kur'an ima magičan učinak na čovjeka. Ako neko želi da ispravi jednu riječ ili slovo iz Kurana, narušit će se čitav sklad Božanske knjige. Niti jednu riječ Kur'ana ne treba mijenjati, inače će se promijeniti značenje i fonetika.

Znamo da neke riječi imaju tendenciju da zastare s vremenom i da ih ne koristimo. A jezik Kurana nije izgubio svoju relevantnost već 1439 godina ...

Predajem Kuran više od 10 godina i do danas nisam sreo nekog od mojih učenika da mi postavi pitanje: „Zašto učimo Kuran? odakle je došao? Koje prednosti ima? Po čemu se to razlikuje od čitanja s lijeva na desno?" Iz dana u dan raste broj ljudi koji žele da uče arapsko pismo i pravila tedžvida, kako bi kasnije mogli čitati Kuran iz originala. Ali malo ljudi razmišlja o odgovoru na gornja pitanja. I na kraju, kada im pričam o dobrobitima Kur'ana, o njegovim dobrobitima, mnogi počnu ulaziti u to.

Arapski jezik ima 29 slova. Zvukovi se formiraju na granici larinksa, u sredini larinksa, grudnog koša, između korijena jezika i usne šupljine. Zvukovi arapskog jezika "čiste" usnu šupljinu i manje je podložna bolestima. Takođe, arapski je dobar logoped. Liječi šapat i pogrešan izgovor slova "r". Ovaj jezik pomaže i osobama sa oštećenjem vida. Jer čitanje arapskog teksta s lijeva na desno poboljšava vizualni aparat osobe i opušta je. Ovalni, okrugli oblik slova je također dobar za psihu.

Sva slova arapskog alfabeta su suglasnici. Ne postoje posebna slova za samoglasnike. Pravi se razlika između kratkih i dugih samoglasnika. Kratki samoglasnici se prenose u pisanom obliku pomoću samoglasnika - superskripta i indeksa. Takođe, od 28 slova, 22 slova su povezana sa obe strane, a 6 slova su povezana samo sa desne strane.

Kuran je došao do nas 23 godine bez izobličenja. Kur'an je posljednja božanska knjiga i neće biti drugih knjiga poslije njega. On je poslan cijelom čovječanstvu. Zakoni Kur'ana će ostati na snazi ​​do sudnjeg dana i neće se mijenjati. Kuran je vječno, veliko čudo Svemogućeg, dato Poslaniku Muhammedu (s.a.s.). Čitanje Kur'ana je ibadet. Savjetujem svima da čitaju ovu nevjerovatno divnu knjigu svaki dan i znaju njeno značenje. Požurite da naučite čitati i razgovarati sa svojim Kreatorom. Allah će nam dati da budemo stanovnici Dženneta i da govorimo arapskim jezikom, koji je On sam izabrao.

Dilyar Bektayeva,

ustaz Aktobe regionalnog

centralna džamija "Nur Kasyr"

http://nurgasyr.kz/index.php/ma-alar/1826-yazyk-zhitelej-dzhannata

ODGOVOR: ve alejkum kao selam brate!

Takve kao što je ona, domaće i neuke "lažne ustaze" treba otjerati od muslimana, kako ih ne bi doveli u zabludu. Jednom u Aktobe džamiji se šire takve gluposti i drže neuki učitelji, možda zato u ovom gradu ima toliko ekstremističkih sektaša. Ni Kur'an ni Sunnet ne sadrže ni daleki nagovještaj da će arapski jezik biti zajednički jezik za sve stanovnike Raja. Zamislite sami kako će predstavnici drugih nacionalnosti međusobno komunicirati u Raju ako ne znaju arapski jezik?!

Prethodno je odgovorio na slično pitanje:

Razvijeni adaptivni jezik PARADISE sistema za programiranje dijaloga DSPP Moskovski državni univerzitet Fakultet računarske matematike i kibernetike N.P. Brussentsov, V.B. Zakharov, I.A.Rudnev, S.A. Sidorov, N.A. Chanyshev Moskva, 1987.

Opšti opis jezika RAJA

Svrha i svrha razvoja jezika

PARADISE (Developable Adaptive Language) je osnovni jezik DSPP sistema za dijalog strukturiranog programiranja. Osnovni znači da je osnova za sve dalje konstrukcije koje se sprovode u DSSP-u razvijanjem (proširivanjem, jačanjem) osnovnog jezika i, možda, prilagođavanjem ovako stvorenih jezičkih sredstava specifičnoj primeni. Za razliku od takozvanih jezika visokog nivoa, PARADIS ne pruža gotove tipove podataka i operacije, već samo elemente i primitive za efikasno definisanje potrebnih tipova. Na primjer, originalni formati podataka su 8-bitni bajtovi, 16-bitne riječi i 32-bitne duge riječi, koje se tumače ovisno o operacijama koje se na njima izvode kao cijeli brojevi, logički vektori, slovni kodovi, logički brojevi, pokazivači podataka i procedura. U ovom slučaju moguće je, s jedne strane, manipulirati pojedinačnim bitovima bajtova i riječi, as druge strane, formirati kompozitne jedinice podataka (riječi višestrukih dužina, vektori, nizovi, tekstualni nizovi, itd.), postavljanje za njih jednog ili drugog tumačenja uvođenje odgovarajućih operacija. Dakle, mogu se uvesti realni brojevi potrebne dužine i raspona vrijednosti, kompleksni brojevi i drugi objekti, a verzija jezika orijentirana na ovu aplikaciju uključivat će objekte i sredstva svojstvena ovoj aplikaciji i neće uključivati ​​ono što se ne odnosi na it, - jezik će biti prilagođen (prilagođen) aplikaciji. Razvoj DSPP-a težio je stvaranju široko dostupnog i efikasnog programskog alata za mikroračunare, tj. računari bazirani na mikroprocesorima. Bitna karakteristika arhitekture mikroprocesora je elementarna priroda tipova podataka i operacija, što znači, s jedne strane, univerzalnost, as druge strane, mukotrpnost programiranja. Zbog svoje svestranosti, mikroprocesori i mikroračunari stvoreni na njihovoj osnovi imaju potencijalno neograničene mogućnosti primjene. Međutim, praktična implementacija ovih mogućnosti počiva prvenstveno na mukotrpnosti razvoja potrebnih aplikativnih programa. Osim toga, zadovoljavajući aplikativni programi mogu se kreirati samo uz duboko i suptilno poznavanje specifičnosti dotične aplikacije, tj. trebali bi ih razvijati ne samo programeri, već i visoko kvalifikovani stručnjaci u jednoj ili drugoj oblasti. Dakle, sistem programiranja ne samo da bi trebalo da u velikoj meri poveća produktivnost rada programera, već i da bude toliko jednostavan da ga mogu savladati i efikasno koristiti neprofesionalni programeri.

Radikalno rješenje ovog problema bi izgledalo kao značajno pojednostavljenje arhitekture računara. Ali, nažalost, arhitektura mikroračunara se razvija u dijametralno suprotnom smjeru – putem sve veće složenosti i sofisticiranosti, tako da profesionalnom programeru danas nije lako savršeno savladati jezik montažera mikroračunara. Sistemski programski jezici poput C ili PL/M su u određenoj mjeri (iako daleko od dovoljne) smanjili složenost razvoja programa, ali se teško mogu preporučiti ljudima koji nemaju iskustva u programiranju. Široko dostupan jezik bi, naravno, trebao biti jednostavniji i prirodniji, trebao bi se zasnivati ​​na, što je više moguće, uobičajenim, poznatim idejama o suštini i tehnici programiranja.

Pored dostupnosti i značajnog smanjenja složenosti razvoja programa u poređenju sa programiranjem na asemblerskom jeziku, DSPP je zahtevao svestranost jezika, istu kao i asemblerskog jezika, visoku mašinsku efikasnost (tj. kompaktnost i brzinu rada). koda), pouzdanost testiranja kreiranih programa i njihovu održivost i modifikaciju, kao i mobilnost (prenosivost) sistema i programa razvijenih u njemu na mašine različitih arhitektura.

Proceduralno programiranje

Programiranje na jeziku RAJA prilično je slično tako raširenim vrstama ljudskih aktivnosti kao što su planiranje i organizovanje međusobno povezanih akcija, radova, procesa ili konstrukcija složenih materijalnih objekata – mašina, jedinica, struktura. Poput dizajnera koji realizuje svoju ideju agregiranjem njenih sastavnih delova (blokova, sklopova, delova), programer sintetiše potrebnu složenu akciju iz jednostavnih radnji koje pruža jezik. Takođe možemo reći da je programiranje (dizajn) postupna dekompozicija (dekompozicija) objekta koji se implementira na sve manje komponente.

Na jeziku RAJA, glavna "konstrukcija" je procedura - imenovana akcija. Jezik se zasniva na ograničenom skupu najjednostavnijih procedura (primitiva), predstavljenih sopstvenim imenima (oznakama). Na primjer: + znači dodati, NEG znači promijeniti znak, VCTR znači kreirati vektor. Konkretno, tu su primitivi: i; (dvotočka i tačka i zarez), što vam omogućava da unesete novu proceduru, na primjer, sa imenom P, definirajući je kao niz procedura P1, P2, ..., PN u obliku

: P P1 P2 ... PN;

Ako procedura P predstavlja radnju koju kreirani program treba da izvede, konstrukcija ovog programa pomoću jezika PARADISE svodi se na sekvencijalno detaljiranje procedura P1, P2, ..., PN. To znači da svaka od ovih procedura mora biti definirana nizom manjih procedura, koje se zatim definiraju nizovima još manjih procedura, i tako dalje, sve dok se ne dobiju definicije koje se sastoje samo od primitiva.

Ovakav dizajn programa, počevši od datog cilja i postupnog smanjenja procedura koje koristi do srži jezika, poznat je kao programiranje odozgo prema dolje. To je glavni način dobijanja programa na jeziku RAJ za rješavanje pojedinačnih, dobro definiranih problema. Suprotno je programiranje odozdo prema gore – izgradnja sistema postepeno uvećanih procedura zasnovanih na osnovnim sredstvima jezika, fokusiranih na određeno problemsko područje. Na taj način se vrši razvoj jezika i njegovo prilagođavanje specifičnoj primjeni.

U oba slučaja neophodno je temeljito strukturiranje kreiranih programa: svaki program i svaki dio programa moraju se sastojati od malog broja zasebnih dijelova, od kojih svaki obavlja određenu funkciju i omogućava autonomnu verifikaciju. Što se tiče jezika RAJA, to posebno znači da definicije procedura treba da budu kratke: definitivni niz, po pravilu, ne bi trebalo da sadrži više od 5-7 članova. Strukturiranje obezbeđuje jasnoću, proverljivost i modifikaciju programa, značajno smanjuje složenost njegovog kreiranja i održavanja.

Gornji primjer definiranja procedure P je pojednostavljen. U stvari, sekvenca koja definiše može sadržavati kao članove ne samo imena procedura, već i instrukcije (naredbe) koje se sastoje od više od jedne riječi. Ime procedure, kada se koristi izvan kombinacije s drugim riječima, je naredba za izvršavanje procedure koju je odredio. Redoslijed imena procedura diktira izvršavanje ovih procedura redoslijedom njihovih imena jedan za drugim (linearnim redoslijedom). Za specifikaciju drugih sekvenci izvršavanja, PARADISE daje posebne riječi (prefikse) koje propisuju izvršavanje procedura imenovanih u kombinaciji s njima, u zavisnosti od navedenog uslova, kao i ponovljeno (ciklično) izvršavanje procedure.

Na primjer, linearni niz P0 P1 uzrokuje da se izvrši procedura P0, a zatim da se izvrši procedura P1. Ako se procedura P1 mora izvesti ne uvijek, već ako je predviđeno da se kao rezultat izvršavanja P0 dobije pozitivan broj, onda umjesto P1 naredbu izvršenja upisuju prema uvjetu: IF + P1, tj. umjesto P0 P1 biće P0 IF + P1. PARADISE uključuje skup uslova prefiksa koji vam omogućavaju da efikasno izrazite uslovno izvršenje, kao i izbor između dve, tri ili više procedura.

Višestruko izvršavanje procedure je specificirano korištenjem RP prefiksa. Dakle, naredba RP P poziva izvršavanje P procedure iznova i iznova dok se ne stvore uslovi pod kojima se aktivira EX sadržan u tijelu ove procedure - izlaz iz petlje, nakon čega se izvršava sljedeća naredba po linearnom redoslijedu . Uslov za izlazak iz petlje može biti, na primjer, jednakost nuli neke varijable X, koja se izražava kao:

Za proceduru čije se ime pojavljuje u definiciji druge procedure kaže se da je ugniježđena unutar nje. Ugniježđena procedura, ako nije primitivna, može sadržavati ugniježđene procedure, tj. gniježđenje može biti višestruko. Osim toga, pravila RAJSKOG jezika ne zabranjuju uključivanje u definiciju procedure vlastitog imena ili naziva procedure koja sadrži ovaj naziv, tj. PARADISE dozvoljava rekurziju.

Ponavljano izvršavana procedura može biti ugniježđena iu ponavljano izvršenoj proceduri. U ovom slučaju, petlje su ugniježđene. PARADISE omogućava višestruko ugniježđenje petlji.

Linearni niz naredbi, ugniježđenje, uslovno i ciklično ugniježđenje procedura - ovim se iscrpljuju mogućnosti konstruisanja programa na jeziku PARADISE. Oskudnost, homogenost i prirodnost ovih sredstava garancija je lakoće savladavanja i upotrebe jezika. Istovremeno, radi se o rigoroznom strukturiranom programskom jeziku koji omogućava značajno smanjenje intenziteta rada i pouzdanosti programa.

Procedure i podaci

Sve što je do sada rečeno je karakteristika jezika RAJA kao sredstva za propisivanje akcija, konstruisanje proizvoljnih akcija iz konačnog skupa primitivnih operacija. Drugu stranu jezika predstavljaju sredstva za predstavljanje objekata na kojima se izvode radnje – sredstva za predstavljanje i organizovanje podataka.

Izuzetno jednostavan element podataka je dvocifreni element - bit. Svi ostali formati i tipovi podataka izgrađeni su od bitova. U jeziku PARADISE, 8-bitni bajt, 16-bitna reč i 32-bitna duga reč su prihvaćeni kao osnovni formati. U zavisnosti od operacija koje se nad njima obavljaju, bajtovi, riječi i duge riječi dopuštaju mnoge interpretacije, tj. može poslužiti kao osnova za različite vrste podataka. Oni su takođe polazna tačka za formiranje kompozitnih formata i tipova.

Zapravo, PARADISE ne sadrži ni jednostavne ni kompozitne tipove podataka - postoje samo osnovni formati (bajt, riječ, duga riječ) i sredstva za konstruiranje kompozitnih formata od njih: vektori i višedimenzionalni nizovi. U ovom slučaju, isti bajtovi (riječi, duge riječi), ovisno o izvršenim operacijama na njima, tumače se kao bitni vektori, ili kao binarni cijeli brojevi s predznakom i bez predznaka, ili kao slova ulazno/izlazne abecede, itd. Tipovi podataka i njihova pridružena ograničenja i provjere mogu se uvesti u proširenja jezika usmjerena na problem.

U osnovnom jeziku, deklaracija imena podataka obavlja samo funkciju pružanja pristupa podacima po imenu: ime je povezano sa brojem memorijskih ćelija koje zahteva deklaracija i mehanizmom za pristup njima. Operacije testiranja i transformacije se ne primjenjuju direktno na imenovane podatke. Ove operacije su definirane na steku operanda, koji je niz 32-bitnih dugih riječi (elemenata steka) koji se dinamički modificiraju dodavanjem (guranjem) novih elemenata na njegov kraj, kao i uklanjanjem elemenata sa istog kraja (iskačući iz steka ). Elementi se povlače obrnutim redoslijedom od onog kojim su poslani: prvo se povlači ono što je posljednji poslao. Podaci koji se testiraju ili konvertuju se guraju na stek, gde se na njemu izvode propisane operacije, nakon čega se rezultati obrade mogu iskočiti iz steka.

Na primjer, ako postoji varijabla X deklarirana kao 32-bitna duga riječ, tada se samo dvije operacije mogu izvršiti direktno na njoj:

1) guranje njegove vrijednosti na stek, što se događa automatski svaki put kada se spomene ime X,

2) dodeljivanje mu komandom! X vrijednost posljednje (gornje) stavke iskočila je iz hrpe.

Ako, recimo, želite udvostručiti vrijednost X tako što ćete ga dodati samom sebi, onda to možete učiniti izvršavanjem sljedećih naredbi jednu za drugom:

Dvije kopije vrijednosti X će biti gurnute na stek, zatim će ih + komanda iskočiti, dodati i gurnuti rezultirajući iznos na stog, nakon čega će naredba! X će ukloniti ovaj iznos i dodijeliti njegovu vrijednost varijabli X.

Uobičajena za jezike visokog nivoa notacija datog primjera u obliku X: = X + X je poznatija programeru, ali nije direktan odraz slijeda instrukcija koje izvršava procesor, već je vrsta matematičke formule. Ovo je zgodno kada se programiraju računski zadaci; međutim, u osnovnom jeziku, čini se da je nedvosmislena korespondencija sa izvršenim naredbama važnija, jer se program može provjeriti komandom direktno u programskom jeziku i nema potrebe za poznavanjem jezika. osim jezika procesora uopšte.

Ali posebno vrijedna prednost naslagane obrade podataka je to što se rutine testiranja i transformacije mogu definirati i implementirati neovisno o podacima na koje se primjenjuju. Operacije testiranja i transformacije nisu formulirane u odnosu na identifikatore podataka (ili imena konstanti i varijabli, formalne parametre), već u odnosu na elemente steka, kojima se moraju dodijeliti vrijednosti operanada do trenutka kada operacija se izvodi. Na primjer, operacija sabiranja dva broja, koju izvodi naredba + (add), sastoji se od uzimanja gornja dva elementa (vrh i pod) iz steka kao sabiraka, izračunavanja njihove sume i guranja na stek. Da biste dodali dva broja, potrebno je da njihove vrijednosti gurnete na stog i izvršite naredbu +, rezultat će biti na vrhu hrpe.

Procedura test-transformacije sa proizvoljnim brojem ulaznih i izlaznih parametara može se na ovaj način definirati jednostavno kao imenovana radnja (bez liste parametara) koja se izvodi na steku koji sadrži vrijednosti argumenata u propisanom redoslijedu, a nakon izvršenja - vrijednosti rezultata. Da bi se takav postupak primijenio na određeni skup specifičnih podataka, potrebno je ove podatke gurnuti odgovarajućim redoslijedom na stog. Nakon što ih potroši, postupak će ostaviti svoje rezultate na hrpi (također raspoređenim u određenom redoslijedu).

Drugim riječima, nazivi procedura u jeziku PARADISE koriste se na isti način kao i znakovi operacija i u suštini su simboli operacija sa proizvoljnim brojem operanada. U skladu sa principom rada steka, operacije se pišu u postfiksnom obliku, tj. naziv operacije se postavlja nakon navođenja imena ili vrijednosti njenih operanada. Na primjer, ako operaciju dobivanja zbroja tri broja označite simbolom ++, tada će zbir brojeva A, 5 i B biti izražen na sljedeći način:

Bilo bi moguće uspostaviti formalna pravila postfiksnog jezika i rukovoditi se njima pri pisanju programa, ali je čovjeku lakše i sigurnije da se bavi ne pravilima, već modelom stek procesora, tj. sa modelom mašine za koju su programi kreirani i koja će ih izvršavati. U slučaju jezika PARADISE, takva mašina je DSPP-procesor - skup hardvera i programa koji implementira radnje propisane u ovom jeziku.

DSP procesor

Fizički, DSPP-procesor se može implementirati u obliku mikroprocesora one jednostavne i efektivno programabilne arhitekture koja bi omogućila rešavanje problema softverske opreme mikroračunara na najbolji način. Ali takav mikroprocesor još nije stvoren i njegova arhitektura mora biti emulirana na postojećim mikroračunarima kako bi se poboljšala njihova programibilnost. Naravno, emulacija je skupa - zahtijeva memoriju i strojno vrijeme za implementaciju, ali u slučaju emulacije PRSP procesora ovi troškovi su relativno mali.

Sa stanovišta programera, karakteristika procesora je njegova arhitektura, tj. informacije o tome šta je dati procesor kao alat za obradu podataka, koje su mogućnosti prezentacije podataka na ulazu i unutar procesora, koje su operacije testiranja i konverzije podataka dostupne, kako je organizirana vlastita memorija procesora, kao i pristup glavna i eksterna memorija, koje su to kontrole toka programa, interakcije sa spoljnim okruženjem, odgovora na izuzetne događaje itd. Ovladavanje arhitekturom je preduslov za smisleno (neformalno) programiranje, čime se značajno smanjuje broj grešaka i povećava pouzdanost programa.

Centralna veza DSPP procesora je gore pomenuti stek operanda. U samom steku se vrši obrada, a podaci se po pravilu prenose preko steka. Pojedinačne komande i kratke sekvence komandi preko steka mogu se izvršiti tako što se unose na procesorski ulaz direktno sa terminalske tastature. U ovom slučaju, DSPP procesor simulira rad postfix kalkulatora. Brojevi i mnemonički kodovi operacija uneseni sa tastature razdvojeni su razmacima. Uneseni tekst se prikazuje kao niz na ekranu terminala. Ulazni završni signal i naredba procesoru "Izvrši uneseni nalog" je pritiskom na tipku , također označeno , ... Brojevi koji stignu na procesorski ulaz se guraju u stog, a komande se izvršavaju na steku. Rezultat proračuna dobijen na vrhu steka može se kopirati na ekran terminala pomoću naredbe. (tačka).

Na primjer, da biste izračunali izraz (2-5) * 3 i prikazali rezultat, unesite:

2 5 - 3 * .

Nakon pritiska na tipku procesor daje rezultat, tako da će cijela linija izgledati

* 2 5 - 3 * . -90

Zvjezdicu na početku reda procesor izdaje kao signal da čeka na unos.

U razmatranom primjeru, procesor je percipirao i obradio ulazne brojeve kao cijele decimale. U stvari, prilikom unosa, ovi brojevi su konvertovani u binarni komplement, a pri izlazu su konvertovani nazad u decimalni sistem. PRSP procesor također omogućava binarne, oktalne i heksadecimalne I/O modove. Za prelazak na željeni način rada potrebno je izvršiti jednu od naredbi B2, B8, B10, B16.

Pritiskom na tipke unos procesora dovodi do kodova koji predstavljaju slova naznačena na ovim tipkama (slova, brojevi, znakovi interpunkcije, simboli operacija). Niz ulaznih znakova formira ulazni niz - lanac bajtova koji sadrže kodove znakova, jedan bajt po karakteru. Maksimalna dužina ulaznog niza je 80 znakova.

Prilikom obrade ulaznog niza, procesor izoluje riječi u njemu - kombinacije slova koje su međusobno odvojene razmacima i interpretira ih. Ako je riječ koja se obrađuje ime operacije (procedure) ili zadana, poznata procesoru, tada procesor izvodi radnje koje se po definiciji moraju pozvati ovim imenom. Ako riječ nije poznata procesoru, tada je pokušava protumačiti kao broj, uzimajući u obzir postavljeni I/O način rada.

Brojevi se prepoznaju kao riječi koje se sastoje od cifara dozvoljenih u datom brojevnom sistemu i, možda, sadrže znak minus kao prvo slovo. U heksadecimalnom režimu unosa/izlaza, zajedno sa brojevima važe i latinična slova A, B, C, D, E, F. Primljeni broj se pretvara u binarni komplementarni kod i gura u stog operanda kao 32-bitna dužina. riječ. U ovom slučaju, ako je vrijednost broja izvan raspona reprezentativnih vrijednosti -2147483648: 2147483647, tada se zamjenjuje vrijednošću koja je uporediva u modulu 2 ** 32 iz ovog raspona.

U slučaju kada obrađena riječ nije poznata procesoru i ne može se prihvatiti kao broj, procesor prikazuje poruku na ekranu terminala: „Ne znam<обрабатываемое слово>“i čeka da se unesu daljnji recepti.

Unos podataka u obliku slobodnog teksta (niza bajtova-slova) vrši se u obliku tekstualnih literala, koji su tekst stavljen u dvostruke navodnike, na primjer: "Text literal". Dolazak tekstualnog literala kao ulaza u procesor uzrokuje da se tekst zatvoren između navodnika upiše u glavnu memoriju kao niz bajt-slova. U ovom slučaju, adresa prvog bajta i broj bajtova (dužina teksta) se guraju u stog. Tekstualni literal kojem prethodi tačka procesor tumači kao naredbu da "pošalje tekst između navodnika na ekran terminala". Na primjer, dodavanje kombinacije simbola na ulaz procesora "Nema memorije" će uzrokovati da se na ekranu pojavi poruka: Nema memorije.

Kod pojedinačnog znaka se gura u stog kao najmanji značajan bajt vrha kada ovaj znak stigne na procesorski ulaz zajedno sa znakom # koji mu je prethodno poslan. Na primjer, #L kombinacija znakova će poslati slovo L kod u stog, kombinacija znakova # 5 će poslati kod s brojem 5. TOB komanda za izlaz bajta na terminal prikazuje znak čiji je kod sadržan u niskom bajt vrha steka.

Čak iu načinu direktnog izvršavanja naredbi, PRSP procesor daleko nadmašuje mogućnosti konvencionalnog kalkulatora, pružajući korisniku, pored operacija obrade podataka, sredstva za deklariranje imenovanih podataka i definiranje procedura koje se potom mogu koristiti uz osnovne operacije. Imena podataka su deklarirana, a procedure definirane pomoću posebnih naredbi.

Na primjer, da biste kreirali 16-bitnu varijablu pod nazivom, recimo, TEMP, otkucajte na tastaturi i unesite je na procesorski ulaz pomoću tipke komanda

VAR TEMP

Možete, zajedno sa deklaracijom, dodijeliti početnu vrijednost varijabli, na primjer, 0:

VAR TEMP 0! TEMP

Sada će dolazak imena TEMP na ulaz procesora uzrokovati da se trenutna vrijednost ove varijable gurne na stek, a dodjela nove vrijednosti iskoči iz steka može se izvršiti naredbom! TEMP.

Definicija procedure se unosi naredbom: (dvotočka) koja sadrži naziv procedure koja se definira i slovom definira lanac komandi; (tačka-zarez) kao znak na kraju definicije. Pokažimo definiciju i upotrebu postupaka na primjeru izračunavanja faktorijala prirodnog broja N po formuli

N! = N * (N-1) * (N-2) * ... * 2 * 1, tj. N-1 množenje.

FCT procedura da bi se dobio željeni rezultat mora pomnožiti dati broj N sukcesivno opadajućim brojevima, počevši od N-1 do 1, tj. samo N-1 puta. U jeziku PARADISE, ovo je programirano t-putom izvršavanja procedure P: DO P, gdje je P ime procedure, t je trenutna vrijednost vrha steka, što pokazuje koliko puta je potrebno proceduri P da se izvrši.

Pretpostavimo da se prije primjene FCT procedure, broj N gurne na stek i nalazi se na njegovom vrhu. Da bi procedura bila jasnija, predstavljamo promjenjivi množitelj varijable K:

Uvodimo definiciju FCT procedure u obliku:

FCT [N]! K K K 1- DO F. [N];

Komentari u uglastim zagradama odražavaju trenutno stanje steka operanda. Tim! K, sa kojim počinje definisana procedura, promenljivoj K dodeljuje vrednost broja N uzetog iz steka. Zatim se K dva puta gura na stek, a oduzimanjem 1 na vrhu steka, broj izvršenja formira se ponovljeni postupak F jednak N-1. Nakon toga slijedi naredba DO F, koja propisuje petlju, nakon čega će vrh steka sadržavati traženu faktorijalnu vrijednost - N !. Tim. (tačka) ispisuje kopiju ove vrijednosti na ekran terminala. Ostaje da se definiše postupak F, koji modifikuje vrednost K oduzimanjem 1 i množi sa K delimični rezultat proračuna R. sadržan u steku:

F [R] K 1-! K [R] K *;

Provjera ispravnosti obje procedure se izvodi izvršavanjem njihovih definicija jednu po jednu, prikazujući sadržaj steka operanda i vrijednost varijable K na ekranu terminala nakon svake naredbe. Kada se FCT procedura završi, vrh stek mora sadržavati vrijednost N!, a vrijednost varijable K mora biti jednaka 1.

Provjerene i ispravljene procedure (ako su greške otkrivene tokom procesa verifikacije) se testiraju primjenom na pojedinačne vrijednosti broja N. Pošto je F procedura ugniježđena u FCT, ona se testira automatski tokom posljednjeg procesa testiranja. Treba imati na umu da vrijednosti rezultata ne smiju prelaziti maksimalni pozitivan broj predstavljen u kodu komplementa 32-bitnom dugom riječju: 2147483647, tj. FCT daje tačne rezultate samo za N = 1, ..., 13.

Upotreba FCT-a se ne razlikuje od korištenja vlastitih instrukcija procesora: da biste dobili rezultat, morate postaviti vrijednost operanda i unijeti naziv procedure:

5 FCT 120

7 FCT 5040

Gornja implementacija FCT procedure zahtijevala je uvođenje pomoćne varijable K, međutim, funkcionalno ekvivalentna procedura se može izvesti bez pomoćne varijable korištenjem operacije C, koja gura kopiju svog vrha na stek, i operacije E2 i E3, koji zamjenjuju vrh sa drugim i trećim elementom steka, respektivno. Definicija ovog postupka je sljedeća.

: FCTA [N] C 1- C DO FA D. ;

: FA C E3 * E2 1-;

Prednost takve procedure "čisto stog" je njena potpuna autonomija: baš kao i osnovne operacije steka u procesoru, ona se izvodi samo na stogu operanda, bez potrebe za bilo kakvom drugom memorijom i bez izazivanja bilo kakvih promena u drugim komponentama procesora.

Nazivi definisanih procedura i deklarisani podaci unose se u procesorski rečnik, čime se uspostavlja veza ovih imena sa imenovanim objektima, odnosno sa tijelima procedura smeštenim u glavnoj memoriji i sa elementima ove memorije dodeljenim za pohranjivanje deklariranih podataka. Obrađujući sljedeću riječ iz ulaznog toka, procesor pregledava rječnik i, pronalazeći odgovarajuću riječ u njemu, izvodi radnje povezane s ovom riječju. Ako je pretraga bila neuspješna, tada se, kao što je već spomenuto, pokušava numerički interpretirati riječ, a ako ne uspije, slijedi poruka da procesor ne poznaje riječ.

Kao rezultat sastavljanja definicije procedure, naziv ove procedure i pokazivač (adresa) njenog tijela, koji je niz pokazivača na procedure i podatke koji čine definiciju, unose se u rečnik. Drugim riječima, interna reprezentacija tijela procedure dobiva se zamjenom naziva procedura i podataka u njegovoj definiciji sa pokazivačima odgovarajućih tijela, koji su zauzvrat isti nizovi pokazivača, au slučaju primitivnih lanaca. mašinskih uputstava. Ovo interno predstavljanje programskog proceduralnog koda nazivamo.

Kada se, uz kompilaciju definicija P procedure, kompajliraju definicije svih ugniježđenih procedura nepoznatih procesoru, formira se potpuna hijerarhija pokazivača, što omogućava da se P procedura izvrši tako što se unese samo njeno ime procesorski ulaz. U ovom slučaju, imena ugniježđenih procedura sastavljena u vezi s definicijom P, ako ne morate posebno da se pozivate na ove procedure, nema smisla pohranjivati ​​ih u rječnik. U brojnim slučajevima, pokazalo se da je preporučljivo zatvoriti pristup jednom ili drugom dijelu rječnika, ostavljajući, možda, mogućnost izvođenja samo nekih procedura.

Da bi se zadovoljili takvi zahtjevi, rečnik je implementiran kao kolekcija podrečnika, nad kojima su definisane operacije koje vam omogućavaju da kreirate i uništavate podrečnike i njihove delove, brišete imena, zatvarate i otvarate pristup određenim podrečnikima. . Svaki podrečnik ima ime koje se koristi u naredbama koje se odnose na njega. Nazivi podrečnika moraju početi sa $, na primjer: $ PRIME, $ EDIT, $ FLOAT, $ TEXTPROC, $ GRAPHICS.

Podrečnik $ PRIME koji sadrži osnovni skup DSPP reči, nakon pokretanja procesora, otvoren je kako za pristup rečima koje sadrži tako i za dopunu novim rečima. Nove riječi unesene u njega, ako je potrebno, mogu se izbrisati zajedno sa tijelima koja su s njima povezana naredbom FORGET $ PRIME. Nakon toga, omogućena je mogućnost daljeg unosa riječi u ovaj podrečnik izvršavanjem naredbe GROW $ PRIME, koja omogućava da se podrečnik $ PRIME ponovo poveća, a sve što se u njega unese ponovo može biti izbrisano pomoću FORGET $ PRIME komanda, itd. U ovom načinu rada PRIME se koristi kada se eksperimentiše sa malim fragmentima programa, pojedinačnim primjerima, procjenama, kao i, ako je potrebno, uključuje nove riječi u podrečnik $ PRIME po redoslijedu razvoja sistemskog jezika.

U slučaju kreiranja posebnog programa za njega formiraju svoj vlastiti rječnik, a to se postiže činjenicom da tekst programa počinje naredbom

PROGRAM $<имя программы>

Osoba doživljava ovu naredbu kao naslov, nakon čega slijedi komentar u uglastim zagradama, koji u nekoliko riječi karakterizira funkciju koju implementira program. Za procesor, to je ekvivalentno nizu naredbi

ZABORAVI $<имя>GROW $<имя>

Stoga će svaki prijem teksta programa na ulaz procesora uzrokovati brisanje njegove prethodne verzije i otvoriti ovako očišćeni podrečnik za unos nove verzije programa sa istim imenom. Ovo je zgodno kada pravite ispravke u kreiranom programu, kao i kada ga menjate u budućnosti.

Tekst konstruisanog programa se ne unosi direktno sa tastature u procesorski ulaz, već se formira u baferu uređivača teksta. Komanda E (Uredi) postavlja način uređivanja, u kojem riječi ukucane na tastaturi procesor više ne percipira kao naredbe koje treba izvršiti odmah, već su to jednostavno tekst upisan u bafer i istovremeno prikazan na ekranu. Uz pomoć posebnih tastera koji kontrolišu kretanje indikatora trenutne pozicije (kursora) na ekranu, kao i komandi za uređivanje datih pritiskom na druge tastere, uneseni tekst se može korigovati i menjati, brisati i umetati, prenositi njegove fragmente. od mjesta do mjesta itd.

Na kraju unosa i uređivanja teksta uređivač se isključuje pritiskom na tipku E istovremeno sa (tačnije, s prethodno pritisnutim) tipkom , i sistem prelazi u glavni način rada DSPP komandi. Slična radnja se poziva jednostavnim pritiskom na tipku ... U ovom režimu, sadržaj editor bafera se može poslati na ulaz procesora pomoću naredbe PF (PerForm - execute). Ovo će izvršiti sve naredbe sadržane u tekstu, posebno naredbu PROGRAM $<имя>će izbrisati $ unesen u podrečnik<имя>od posljednjeg izvršenja ove naredbe, imena podataka i procedura i odgovarajućih tijela, ponovo otvara ovaj podrečnik za proširenje. Naredbe deklaracije podataka i definicije procedure će u njih staviti imena koja unose, zajedno sa pokazivačima na podatke označene ovim imenima i tijela procedure sastavljena u skladu s definicijama.

Kada se preuzimanje završi, procedure i podaci su dostupni za referencu po njihovim nazivima, ukucanim sa tastature, a ispravnost programa možete provjeriti izvršavanjem procedura uzlaznim redoslijedom, tj. počevši od onih čije definicije ne sadrže neprovjerene procedure. Prije početka provjere, važno je provjeriti da se u programu ne koriste nedefinirana imena. Procesor ih prikazuje na ekranu naredbom UNDEF. Da biste dopunili tekst programa definicijama ovih imena, kao i da biste ispravili druge greške otkrivene tokom procesa provjere, koristite naredbu E da pozovete uređivač i izvršite odgovarajuću modifikaciju izvornog koda programa u međuspremniku uređivača, a zatim prebacite procesor u glavni mod i učitajte sadržaj bafera pomoću PF naredbe.

Nakon provjere i testiranja programa, njegov izvorni kod se može kopirati iz bafera editora na disk pomoću OE f komande, gdje je f naziv datoteke u obliku kojeg će program biti upisan na disk. U budućnosti se sadržaj datoteke može učitati na procesorski ulaz pomoću naredbe LOAD f, a također se kopirati u editor bafer kao dodatak tekstu u njemu pomoću IE f naredbe. Podrazumevano, datoteke imaju ekstenziju .dsp. Međuspremnik se može prethodno obrisati pomoću KE naredbe. Također je moguće ispisati sadržaj bafera pomoću LPE naredbe.

Nakon učitavanja programa, spremnog za izvršenje, moguće je očistiti kreirani rečnik $<имя>sa naredbom CLEAR $<имя>... Izvršavajući ovu naredbu, procesor uklanja nepovezana imena iz imenovanog podrječnika, tj. sva imena osim onih sa prefiksom :: (dvije dvotočke) ispred definicija. U ovom slučaju brišu se samo imena (unosi u rječniku), a tijela procedura i podaci koji su s njima povezani su sačuvani i dostupni tokom izvršavanja programa pomoću internih veza uspostavljenih tokom kompilacije, ali više nisu dostupni izvana. Da biste vratili mogućnost pristupa izvana, na primjer, ako trebate kompajlirati neki dodatak ili promjenu, morate ponovo učitati izvorni kod programa.

Imena se mogu učiniti nedostupnima izvana bez uklanjanja iz rječnika korištenjem naredbe SHUT $<имя>, zatvarajući pristup svim riječima imenovanog podrječnika. Otvaranje rječnika za korištenje njegovih riječi vrši se naredbom USE $<имя>... Postoji i SAMO $ komanda<имя>, koji zatvara sve podrečnike osim imenovanog, i naredbu CANCEL, koja poništava ovo ograničenje. Navedene komande vam omogućavaju da kontrolišete upotrebu rečnika tokom kompilacije i da ograničite skup imena dostupnih korisniku programa na potreban minimum.

Pretraživanje imena u rječniku vrši se gledanjem njegovih riječi obrnutim redoslijedom od onog kojim su unesene u rječnik, tj. počevši od posljednje unesene. Stoga, za ime definirano više puta u rječniku, najnovija definicija je važeća. Ako je podrečnik koji sadrži ovu poslednju definiciju zatvoren, pretraga se nastavlja sve dok se ne koristi prvi dostupni unos rečnika sa datim imenom i definicijom naznačenom ovim unosom.

Nekoliko riječi o unosu i izlazu podataka. Kao što je već spomenuto, procesor pokušava protumačiti riječ izvršnog programa koja se ne nalazi u rječniku kao broj i, ako je uspješan, gura binarni ekvivalent ovog broja na stog. Unos broja u stog može se izvršiti naredbom TIN, koja zahtijeva upisivanje unesenog broja na tastaturi. Postoje i komande za guranje znaka unešenog sa tastature na stek: TIB - sa displejom, TRB - bez prikazivanja ovog znaka na ekranu. U ovom slučaju, slovni kod je predstavljen najmanjim značajnim bajtom 32-bitne riječi ubačene u stek, od kojih su 3 najznačajnija bajta jednaka nuli.

Sadržaj vrha hrpe može se uneti kao broj i kao slovo, respektivno. Naredba TON uzrokuje prikaz numeričke vrijednosti podreda u izlaznom polju, čija je širina postavljena vrhom, u sistemu predstavljanja brojeva koji je postavljen u trenutku njegovog izvršavanja. Komanda TOB ispisuje na ekran znak čiji se kod nalazi u nižem bajtu na vrhu steka. U oba slučaja, izlaz je praćen uklanjanjem argumenata iz steka.

DSPP procesor ima aparat za eksterne i interne (komandne) prekide i obezbeđuje sledeća sredstva za njihovu obradu. Procedura za rukovanje eksternim prekidom definisana je slično normalnoj proceduri, ali sa INT prefiksom dodatim ispred dvotačka. Ime takve procedure je povezano sa adresom vektora prekida sa naredbom:

<адрес вектора>VEZA<имя процедуры>

Prekid naredbe je imenovana operacija koja poziva proceduru odgovora. Naziv ove operacije određuje naredba TRAP, koja ga povezuje sa takozvanom procedurom konačnog odgovora, koja se izvodi ako konačni odgovor nije zamijenjen drugom postupkom odgovora pomoću naredbe ON ili EON. Sve tri naredbe imaju isti format:

TRAP<имя вызова> <процедура реагирования>

ON<имя вызова> <процедура реагирования>

EON<имя вызова> <процедура реагирования>

Procedura povezana s imenom poziva pomoću EON naredbe se izvršava s preliminarnim izlaskom iz tijela procedure koja sadrži EON komandu i sa vrijednošću pokazivača steka operanda koja se dogodila u vrijeme izvršavanja EON-a.

PARADISE sintaksa

Abeceda jezika RAJ uključuje latinicu i ruski, velika i mala slova, decimalne cifre, matematičke i druge posebne znakove. Elementi (članovi) abecede nazivaju se slovima. Spoljašnji prikaz slova je njegova štampana slika (štampani znak). Unutar PRSP procesora, svaki ispisani znak je predstavljen bajtom čija je vrijednost binarni kod ovog znaka. Transformaciju eksterne reprezentacije u internu i obrnuto vrši ulazno/izlazni uređaj (tastatura, displej, štampač). Radi praktičnosti, numerička vrijednost koda je izražena u decimalnom, heksadecimalnom ili oktalnom sistemu, imenujući odgovarajući broj kao decimalni, heksadecimalni ili oktalni slovni kod.

Svi objekti jezika RAJA izgrađeni su od slova i predstavljaju linearne lance slova konačne dužine, zvane riječi. Razdjelnik riječi koje slijede jedna za drugom je znak koji se ne može ispisati (razmak). Niz razmaka je isti kao jedan razmak. Osim toga, funkciju separatora riječi vrši naredba "Idi na početak sljedećeg reda", označena na tastaturi ulaznih uređaja simbolom ili i zajedno sa slovima, ima internu reprezentaciju kod-bajtom. Dakle, nisu potrebni razmaci na početku i na kraju reda.

Primjeri riječi: CLEAR NOP STEK2 & 1+ -366 X Uzorak.

DSPP procesor razlikuje riječi po prvih sedam slova, identificirajući ih polimernim poređenjem sa riječima u svom rječniku. Rječnik sadrži riječi koje su nazivi (oznake) vlastitih operacija procesora, koje se nazivaju osnovnim operacijama ili primitivima, i mogu se dopuniti imenima korisnički definiranih objekata (podaci, procedure). Dakle, riječi sadržane u rječniku su ili imena akcija (operacija, procedura) ili imena podataka (konstante, varijable, nizovi).

Kada u rječniku nema prepoznatljive riječi, procesor pokušava da je dodijeli jednom od sljedećih slučajeva:

    numerički literal, tj. niz brojeva, koji može početi sa znakom minus, na primjer: 0, 4096, -25;

    literalni znak: riječ koja počinje znakom #, što uzrokuje da procesor primi odmah sljedeći znak kao dati kod, na primjer: #A - veliko latinično slovo A literal, # 5 - cifra 5 literal, # - razmak literal, ## - literalna slova #;

    literal teksta: proizvoljan tekst zatvoren u dvostruke navodnike i odvojen graničnicima riječi, na primjer: "Tekst", "Ulazni fajl N3";

    naredba za slanje tekstualne poruke na displej: tekst prikazane poruke, omeđen s lijeve strane dvostrukim navodnicima i dvostrukim navodnicima na desnoj strani, i razdvojen graničnicima riječi, na primjer: "Stog je prazan ";

    komentar: proizvoljan tekst zatvoren u uglastim zagradama i odvojen separatorima, na primjer:.

Literali i komanda za izdavanje poruke na displeju deluju kao objekti DSPP jezika zajedno sa rečima koje rečnik prepoznaje, dok su komentari potpuno zanemareni od strane DSPP procesora - namenjeni su osobi, a ne mašini. Ako se riječ ne nalazi u rječniku i nije povezana s navedenim konstrukcijama, procesor izdaje poruku: "Ne znam<неопознанное слово>".

Zbog posebnog značenja datog slovima #, "i kombinacija." na početku riječi, tj. iza separatora, kao i slovo „ispred separatora, ne treba ih upotrebljavati na naznačenim pozicijama u riječima određenim za uvrštavanje u rečnik.

Niz riječi na ulazu procesora tumači se kao niz instrukcija koje izvršava procesor. U ovom slučaju razlikuju se tri vrste riječi:

1) obavlja samostalno, tj. koje su naredbe od jedne riječi (monolozi);

2) izvedeno u sprezi sa jednom ili više narednih riječi, tj. koje su početne riječi (prefiksi) dvo-, tro- ili opširnih naredbi;

3) prethodna naredbi kao pojašnjenje ili indikacija posebnog načina izvršavanja (prefiksi).

Monologi uključuju literale, imena podataka, većinu I/O, testiranje i konvertovanje podataka na steku i korisnički definisane rutine. Na primjer: 1987 - numerički literal, # 5 - cifra 5 literal, Lista shema - tekstualni literal, LENGTH - naziv varijable, TOB, NEG, +, &,<, = - имена (обозначения) операций, SORT, CONVERT, ЧИСТКА, СНЯТЬ - имена процедур пользователя.

Prefiksi su inherentni naredbama za opisivanje podataka i definisanje procedura, kao i za manipulaciju imenovanim podacima, uslovno i ponovljeno izvršavanje procedura i upravljanje rečnikom. Primjeri naredbi sa prefiksima:

VAR SUM - kreiranje varijable SUM,

: ODD [x] 1 &; - kreirajte ODD proceduru zamjenom neparnog broja sa 1, paran sa 0,

0 X - dodijeliti vrijednost 0 varijabli X,

BR + P1 P2 - ako je vrijednost njegovog vrha uzeta iz steka pozitivna, onda izvršiti P1, u suprotnom izvršiti P2,

RP CHECK - izvoditi CHECK proceduru iznova i iznova,

KORISTI $REAL - otvori $REAL podrečnik za upotrebu.

Tipično, određeni prefiks zahtijeva određeni broj riječi iza njega. Dakle, u upravo navedenim primjerima, prefiksi VAR,!0 i USE zahtijevaju po jednu riječ, a prefiks BR + dvije riječi. Međutim, prefiks: (dvotočka) vam omogućava da formirate naredbu proizvoljne dužine, počevši od tri riječi. Kraj naredbe je riječ; (tačka-zarez). Proizvoljna dužina je takođe svojstvena komandi - deskriptor konstante CNST A1 ... AJ; i naredba višestrukog izbora procedure BR A1 P1 ... AJ PJ ELSE PN.

Prefiksi su posebne riječi koje, kada se dodaju na početak naredbe, mijenjaju njen sadržaj ili definiraju poseban način izvršenja. Na primjer, naredba VAR X bez prefiksa je instrukcija za kreiranje 16-bitne varijable X. Ako joj priložite BYTE prefiks, dobijamo naredbu BYTE VAR X, koja upućuje na kreiranje 8-bitne varijable (bajt) pod nazivom X. Ako koristite LONG prefiks, onda dobijamo LONG VAR X - instrukciju za kreiranje 32-bitne varijable pod nazivom X.

Pre-prefiks drugog tipa, naime :: (dvije dvotočke), čini rezultat naredbe otpornim na proceduru CLEAR, koja uklanja nefiksirane riječi iz rječnika. Imena unesena u rječnik u procesu konstruiranja programa naredbama za opisivanje podataka i definiranje procedura, nakon što je program kreiran i testiran, mogu se ukloniti iz rječnika, s izuzetkom nekoliko potrebnih za održavanje gotovog programa. . Uklanjanje se vrši naredbom CLEAR $<имя подсловаря>, navodeći da se obriše rečnik povezan sa programom, zadržavajući u njemu samo one reči čije definicije sadrže prefiks ::. Primjeri naredbi koje generiraju riječi koje se ne mogu ukloniti:

:: BYTE CNST LITCODE # # 0 #A;

::: MOD / [int (a, b), odmor (a, b)] E2 D [ostatak (a, b)];

Kao što pokazuje drugi primjer, koji sadrži prefikse :: i BYTE, u naredbi može biti više od jednog prefiksa.

Dakle, naredba u DSPP-u može biti ili jedna riječ (monolog), ili fraza (fraza) koja počinje prefiksom i sadrži broj riječi postavljenih za dati prefiks, a ako prefiks dozvoljava proizvoljan broj riječi , onda na kraju ima graničnu riječ ili može biti fraza sa posebnim riječima pre-prefiksa ispred sebe.

Osnovni jezik DSPN-a ne sadrži složenije sintaksičke konstrukcije od naredbe i ne sadrži nikakve druge konstrukcije osim onih o kojima se raspravljalo gore. Čak i takve neophodne stvari u programskim jezicima, kao što su izraz i funkcija, nedostaju u osnovnom jeziku i mogu se uvesti, ako je potrebno, samo u toku njegovog razvoja.

Program u osnovnom jeziku je jednostavno skup naredbi koje se izvršavaju redoslijedom kojim se pojavljuju u tekstu. Štaviše, svaka naredba, sa izuzetkom onih koje sadrže samo primitive, u procesu svog izvršavanja uključuje niz naredbi koje definiraju riječi koje su u njoj uključene. Uključene naredbe mogu sadržavati riječi koje označavaju lance komandi, u kojima su riječi također moguće koje se odnose na njihove povezane lance itd. do nivoa na kojem komande sadrže samo primitive.

Opšti opis jezika RAJ, koji je činio sadržaj ovog poglavlja, posvećen je karakteristikama strukture ovog jezika i osnovnom (početnom) skupu njegovih naredbi, a to je skup ugrađenih naredbi (primitiva) DSPP procesora. Dalji razvoj jezika i odgovarajuće povećanje mogućnosti procesora vrši se uvođenjem novih procedura, komandi, formata i tipova podataka, konstruisanih korišćenjem osnovnih alata. Takav razvoj je po pravilu problemski orijentisan i odvija se u obliku paketa procedura učitanih na ulaz procesora pored osnovnog sistema.

Sa druge strane, osnovni sistem se može dopuniti specijalnim alatima za povećanje mašinske efikasnosti DSP programa koji se realizuju na njegovoj osnovi. Ovi alati uključuju mogućnost definisanja pojedinačnih procedura direktno u kodu instrukcija mašine koja se koristi. Način na koji je procedura definisana nema uticaja na njenu dalju upotrebu: nazivi svih procedura se unose u zajednički rečnik i potpuno su jednaki. Brojni bibliotečki programi vam omogućavaju da koristite procedure ili čitave programe napisane na drugim jezicima.

Opis operacija i komandi

Stack operacije

Stog operanda je jedan od glavnih elemenata arhitekture DSP procesora. Većina procesorskih instrukcija koristi stek, konzumirajući operande koji su im potrebni iz njega i gurajući rezultate u njega. Interpretacija podataka u steku zavisi od suštine problema koji se rešava, odnosno na kraju je poverena programeru. Zbog činjenice da vrijednost koja je ušla u stek zapravo gubi ime, teško je iz teksta programa utvrditi na koje operande se primjenjuje ova ili ona operacija, kakvi su njeni rezultati. Zbog toga se za eksplicitnu indikaciju operanda i rezultata procedura u jeziku PARADISE koriste komentari. U ovom slučaju nije potrebno (i nije uvijek moguće) opisati cijeli sadržaj steka. Apsolutno je potrebno komentirati gornji dio steka, na koji utiče procedura koja se na njemu izvodi, jer se bez toga gubi vidljivost programa i otežava njegova verifikacija.

Da bi se postigla konzistentnost programa, ove komentare treba napisati uz nekoliko jednostavnih pravila. Kao i svaki komentar, opis podataka na steku je u uglastim zagradama. Ovaj opis je lista operanada koji se nalaze na steku u datoj tački programa. Svaki element liste karakteriše sadržaj jedne pozicije steka, a kao separator se koristi zarez. Pozicije stekova su navedene s lijeva na desno, počevši od najdubljeg elementa i završavajući na vrhu hrpe. Opis pojedinačnog operanda može biti broj, ime, izraz ili bilo koji drugi značajni zapis koji objašnjava značenje vrijednosti na steku. Ponekad se može specificirati nekoliko mogućih vrijednosti za datu poziciju steka. U ovom slučaju, vrijednosti su navedene s kosom crtom naprijed.

Evo primjera komentara koji odražava stanje steka operanda:

[početna adresa, N + 1,1 / 0]

U tački programa u kojoj se nalazi ovaj komentar, stog operanda mora sadržavati najmanje tri pozicije, a na vrhu može biti 1 ili 0, u pododjeljku - numerička vrijednost jednaka N + 1, a ispod it - neki broj interpretiran kao početna adresa.

Radi praktičnosti specificiranja potrebne pozicije steka, koristićemo koncept dubine. Pretpostavićemo da se vrh hrpe nalazi na dubini 1, podsloj na dubini 2, itd. Konkretno, vrijednost označena u primjeru kao "početni oglas". leži na dubini od 3.

Započećemo naše proučavanje osnovnog DSPC jezika sa naredbama za guranje vrednosti na stog. Najjednostavnija (i najčešće korišćena) naredba ovog tipa je numerički literal, to jest, eksplicitna indikacija konstante koja se ubacuje u stek. Na primjer, pretpostavimo da želimo da gurnemo brojeve 28, -5 i 11 na stog. Da biste to učinili, unesite sljedeći niz s tastature:

28 -5 11 i pritisnite tipku (povrat kočije). Procesor prepoznaje unesene brojeve i gura ih u stek jedan po jedan, tako da će vrh biti 11. Da biste to provjerili, dovoljno je ispisati vrijednost vrha steka na ekranu. Za to se koristi DSPP komanda sa imenom. (tačka). Ukucavanjem "tačke" na tastaturi i pritiskom , dobijamo odgovor na ekranu: 11, što odgovara posljednjoj vrijednosti ubačenoj na stek. Ponovljeno izvršavanje "tačke" dovodi do istog rezultata - ova komanda samo prikazuje vrh bez promjene stanja steka.

Da bi se prikazao ceo sadržaj steka, DSPP sadrži komandu .. (dve tačke). Nakon što ga izvršimo, na ekranu se pojavljuje linija:

Kao što možete vidjeti, oblik ispisa slijedi prihvaćene konvencije za komentarisanje stanja steka (osim što se umjesto zareza koristi razmak). Komanda .. ne mijenja sadržaj steka.

32-bitna riječ (4 bajta) se koristi za predstavljanje jedne pozicije steka u memoriji mašine, brojevi su predstavljeni u komplementarnom kodu za dva. Shodno tome, PRSP procesor može ispravno percipirati samo cijele brojeve koji se nalaze u rasponu od -2147483648 do 2147483647. Ako se uneseni broj ne može predstaviti sa 32 bita (sa predznakom), tada se odbacuju najznačajniji bitovi koji se ne uklapaju.

U razmatranim primjerima pretpostavljeno je da je PRSP procesor u decimalnom režimu unosa/izlaza brojeva. Za podešavanje ovog načina rada na jeziku PARADISE postoji komanda B10.

U mnogim zadacima potrebno je interpretirati obrađene podatke ne kao brojeve, već kao binarne kodove, odnosno 32-komponentne bitne vektore. U DSPP-u je moguće raditi sa kodovima predstavljenim u binarnom, oktalnom ili heksadecimalnom brojevnom sistemu. Za podešavanje željenog režima dovoljno je izvršiti jednu od tri komande: B2, B8 ili B16, nakon čega će procesor uočiti i ispisati sve unete kodove u navedenom brojevnom sistemu.

Ova funkcija se može koristiti za pretvaranje decimalnih brojeva u bazu 2, 8 i 16. Na primjer, da biste pretvorili broj 29, morate unijeti i izvršiti sljedeći red:

B10 29 B2. B8. B16. Kao rezultat, procesor će prikazati niz brojeva: 00000000035 0000001D koji su reprezentacije decimalnog broja 29 u tri navedena brojevna sistema. Imajte na umu da se kodovi štampaju u svom mašinskom prikazu, odnosno sa vodećim nulama i bez znakova "+", "-". Prilikom izvršavanja linije B10 -2 B8. bit će vraćen broj 37777777776, koji je oktalni prikaz komplementa dva -2.

Kada radite sa heksadecimalnim kodovima, može doći do kolizija između numeričkih literala i imena naredbi DSPP procesora. Na primjer, riječ B8 u heksadecimalnom I/O modu može se tumačiti kao naredba za postavljanje oktalnog načina rada i kao heksadecimalna konstanta. Da biste izbjegli dvosmislenost, započnite numeričke literale s ne-značajnom nulom, kao što je 0B8.

Osnovu sistema instrukcija DSPP procesora čine operacije konverzije podataka u steku. Opće pravilo koje reguliše rad ovih operacija je da svaka operacija troši (uklanja) potrebne operande iz steka i gura vrijednosti rezultata (ako ih ima) na njihovo mjesto.

Razmotrimo instrukcije procesora koje implementiraju četiri aritmetičke operacije: sabiranje, oduzimanje, množenje i dijeljenje cijelih brojeva. Da bi ih prikazali na jeziku RAJA, koriste se riječi: +, -, * i /, redom. Da biste dobili zbir dva broja na stogu, na primjer 123 i 45, trebate gurnuti ove brojeve na stog i izvršiti naredbu +. Da biste to uradili, dovoljno je da sa tastature unesete sledeći red (pretpostavlja se da je decimalni I/O mod postavljen):

123 45 +

Ako sada prikažemo sadržaj steka (koristeći naredbu ..), rezultat dodavanja će postati vidljiv:

Komutativno množenje radi na sličan način.

Kada se izvode nekomutativne operacije oduzimanja i dijeljenja, podsklad se uzima kao oduzeti (dividenda), a vrh služi kao oduzeti (djelitelj). Na primjer, da biste izračunali razliku 151-68, morate izvršiti liniju:

151 68 -

Program za izvođenje aritmetičke operacije na jeziku PARADISE karakteriše činjenica da se operacija nalazi iza odgovarajućih operanada. Ova notacija aritmetičkih izraza naziva se postfiksna (ili poljska inverzna) notacija i široko se koristi u mikrokalkulatorima steka. Pretpostavimo, na primjer, da trebamo izračunati vrijednost aritmetičkog izraza ((127 + 81) * 15- (31 + 117) * 21) * 3

U postfiksnoj notaciji, ovaj izraz će izgledati ovako:

127 81 + 15 * 31 117 + 21 * - 3 *

Ovaj red (u kojem su riječi odvojene jedna od druge razmacima) je gotov program za izračunavanje našeg izraza od strane DSP procesora.

Dijeljenje / naredba se razlikuje od ostalih aritmetičkih operacija po tome što su njen rezultat dvije vrijednosti - količnik i ostatak. Kvocijent je na dnu steka, a ostatak na vrhu. Količnik je negativan ako su dividenda i djelitelj različitih predznaka. Ostatak uvijek ima predznak dividende. Evo nekoliko primjera korištenja naredbe dijeljenja.

125 7 / [-17,-6] / / /

Prilikom izvođenja proračuna mogu se pojaviti pogrešne situacije: prelijevanje i dijeljenje nulom. DSPP procesor na njih ne reaguje ni na koji način (posebno, prilikom deljenja sa nulom, sadržaj steka se ne menja), a kontrola nad ispravnošću upotrebe operacija je dodeljena programatoru.

Prilikom programiranja često je potrebno povećati ili smanjiti vrijednost vrijednosti za 1 ili 2. U jezik PARADISE uvedene su posebne komande koje izvršavaju naznačene radnje na vrhu steka. Označeni su riječima: 1+, 1-, 2+, 2-. Izvršavanje ovih naredbi je ekvivalentno guranju tražene konstante (1 ili 2) na stog i zatim izvođenju potrebne aritmetičke operacije (+ ili -). Na primjer, 2+ je ekvivalentno paru riječi 2 +. Uvod u jezik ovih komandi je iz razloga efikasnosti.

Takođe, da bi se povećala efikasnost u osnovnom jeziku DSP procesora, postoje T0 i T1 komande koje zamenjuju vrednost vrha steka sa 0 i 1, respektivno, bez obzira na to koja je vrednost bila na vrhu pre navedene komande. primjeri:

Komande NEG, ABS i SGN su takođe dostupne za rad sa numeričkim podacima. Naredba NEG obrće predznak vrha steka, ABS zamjenjuje vrijednost vrha steka njegovim modulom, SGN - konzumira numeričku vrijednost s vrha steka i zamjenjuje znak ekstrahovanog broja na njegovo mjesto : -1 - ako je broj negativan, 1 - ako je pozitivan, 0 - ako je jednak nuli. Na primjer:

5 NEG [-5] ABS SGN

Naredbe MIN i MAX u osnovnom jeziku vam omogućavaju da pronađete minimum i maksimum od dva cijela broja. Operandi za ove instrukcije su dva broja na vrhu i dnu steka. Instrukcija MIN ostavlja najmanji od broja parametara na steku, MAX najveći od njih. Na primjer:

5 0 15 MIN [-5,0] MAX

Da biste pronašli minimum (maksimum) od tri broja na hrpi, samo upotrijebite naredbu MIN (MAX) dvaput:

MIN MIN [-2]

SEG naredba za provjeru da li broj koji se nalazi na vrhu hrpe pada unutar specificiranog raspona od a do b (uključujući granice) ostavlja znak na steku kao rezultat: 1 ako je broj u rasponu i 0 ako je ne:

SEG [funkcija] na primjer:

Pored instrukcija za rad sa numeričkim podacima, skup instrukcija za DSPP procesor uključuje niz operacija dizajniranih za konverziju 32-bitnih kodova. Ove operacije tretiraju element steka kao 32-komponentni vektor bitova, čije su komponente numerisane s desna na lijevo na način da je krajnji lijevi bit broj 31, a krajnji desni 0. Opadajući broj komponente ponavlja numerisanje bitova mašinske reči prihvaćeno za mnoge mikroprocesore.

Naredbe koje se izvršavaju na bitnim vektorima prvenstveno uključuju bitove operacije Bulove algebre:

    inverzija vrha INV steka po bitu, mijenjanje vrijednosti svakog bita vrha, tj. zamjena 0 sa 1 i 1 sa 0;

    bitna konjunkcija vrha i dna steka &, postavljajući i-ti bit rezultata, i = 31,30, ..., 0, na 1 ako su i-ti bitovi oba operanda jednaki 1 , au drugim slučajevima postavljanje i-tog bita na 0;

    bitna disjunkcija vrha i dna steka & 0, postavljanje u i-ti bit rezultata, i = 31,30, ..., 0, vrijednost 0, ako su i-ti bitovi oba operanda su jednake 0, au drugim slučajevima postavljanje i-tog bita na 1;

    bitovsko zbrajanje (neekvivalentnost) "+" čvorova i podčvorova, koji postavlja i-ti bit rezultata na 0 ako i-ti bitovi oba operanda imaju iste vrijednosti, i postavlja i-ti bit rezultata na 1 ako su vrijednosti i-tih bitova operanada različite.

525 INV 722 & 136 & 0 325 "+"

Bitova konjunkcija se često koristi za nuliranje (brisanje) bitova riječi. Da biste to učinili, povežite originalnu riječ s maskom koja sadrži nule u znamenkama koje treba obrisati i jedinice u preostalim znamenkama. Na primjer, ako trebate nulirati bitove od 3 do 5 u nekoj riječi X, potrebno je izvršiti njenu bitnu konjukciju sa maskom 37777777707. Za X = 235 dobijamo:

Bitova disjunkcija se može koristiti za umetanje željenog bitova u prethodno očišćenu grupu riječi. Na primjer, pretpostavimo da želite da stavite binarnu kombinaciju 010 u bitove 3 do 5 riječi koja je ostala na steku kao rezultat posljednjeg primjera. Možete to učiniti ovako:

Operacije manipulacije bitovima također uključuju logičke naredbe pomaka:

    levi pomak SHL - svaki bit vrha steka, počevši od 31., uzima vrijednost sljedećeg u opadajućem redoslijedu brojeva, a posljednji, nulti bit uzima vrijednost 0;

    desni pomak SHR - svaki bit vrha steka, počevši od 0, uzima vrijednost sljedećeg u rastućem redoslijedu brojeva, a 31. bit uzima vrijednost 0;

    pomak duž gornjeg SHT - gornji element se iskače iz steka i tretira kao cijeli broj N, što pokazuje koliko pomaka i u kojem smjeru treba izvršiti na vrhu hrpe: kada je N> 0, pomak se vrši na lijevo, kada je N<0 - вправо.

B8 125 SHR SHL -2 SHT

Operacije lijevog pomaka mogu se koristiti za množenje brojeva sa 2 na N-tu potenciju, gdje je N prirodan broj koji određuje broj pomaka. Na primjer, množenje broja -5 sa 8 može se uraditi pomicanjem ovog broja za 3 znamenke ulijevo:

B10 -5 3 SHT [-40]

U tom slučaju treba uzeti u obzir mogućnost prelivanja.

Pomak udesno se može koristiti kao operacija dijeljenja u potpunosti sa 2 na stepen N samo za pozitivne brojeve, budući da se najznačajniji (značni) bit nuli kada se pomakne udesno. Na primjer:

dok

Naredbe za rotiranje vrha steka za 1 bit udesno ROR i lijevo ROL slične su komandama logičkog pomaka, osim što prošireni ekstremni bit ne nestaje, već se gura u prazan prostor sa suprotnog kraja 32 -malo duga reč. Na primjer (heksadecimalni brojevi):

Za obradu binarnih kodova predviđene su i komande DSPP procesora SWB i SWW. SWB funkcija je zamjena bajtova donje polovine vrha steka, a SWW funkcija je zamjena polovica vrha steka. Ilustrujmo rad ovih naredbi koristeći heksadecimalni I/O mod (u ovom načinu svaki bajt je predstavljen sa dvije heksadecimalne cifre):

B16 0ABCD SWB SWB

0ABCDEF12 SWW SWB

Instrukcije za manipulaciju stekom igraju važnu ulogu u jeziku PARADISE. Oni ne mijenjaju vrijednosti podataka na steku, već samo mijenjaju njihovu lokaciju, što olakšava pristup operandima koji se nalaze duboko u steku.

Postoje tri naredbe za brisanje članova steka: D, DD, DS (Ispuštanje). Naredba D uklanja jedan (gornji) element iz steka, DD - dva elementa, na primjer:

D DD D DS uklanja sve elemente iz steka (čisti stek):

Komanda za kopiranje vrha steka C (Copy - copy) gura na stek kopiju trenutne vrijednosti njegovog vrha. Ovo je jednako dupliranju gornjeg elementa steka: stari vrh postaje sub, a njegova kopija postaje novi vrh. primjer:

Pokažimo primjenu ove naredbe na primjeru izračunavanja polinoma p (x) = 3 * x ** 2 + 4 * x-5 prema Hornerovoj shemi: p (x) = (3 * x + 4) * x -5. Pretpostavljamo da je x na vrhu hrpe.

[x] C 3 * 4 + * 5 -

Uz naredbu za kopiranje vrha steka u jeziku PARADISE, postoje i naredbe C2, C3, C4, koje kopiraju elemente koji se nalaze na dubinama 2, 3, 4. Njihov rad se može ilustrovati sljedećim primjerima:

C2 C4

Postoji i CT komanda za kopiranje stavke na dubinu naznačenu na vrhu hrpe. Izvršavajući CT, procesor izbacuje gornji element iz steka, koristi njegovu vrijednost kao indikator dubine kopiranog elementa i gura kopiju potonjeg na stek. Dakle, kopiranje elementa koji se nalazi na dubini od 5 postavlja par od 5 CT komandi, kada se izvrši, procesor će gurnuti broj 5 na stek, a zatim izvršiti CT komandu. Izvršavanje CT sa parametrima 1, 2, 3, 4 je ekvivalentno C, C2, C3, C4, respektivno.

Naredbe za razmjenu E2, E3, E4 (Exchange - exchange) vrše permutaciju prvog (gornjeg) elementa steka, respektivno, sa 2., 3., 4., odnosno sa elementom koji se nalazi na dubini od 2, 3 , 4. Na primjer:

E3 E2

Za razmjenu za veću dubinu koristi se ET komanda, koja, kao i CT, koristi vrijednost vrha steka kao indikator dubine elementa koji se razmjenjuje sa prvim elementom. Na primjer:

5 ET

ET komanda sa parametrima 2, 3, 4 je ekvivalentna naredbama E2, E3, E4.

Da biste ilustrirali upotrebu naredbi za kopiranje i dijeljenje, razmotrite problem s tutorijalom. Stog sadrži tri broja. Potrebno je da se uđe u stack:. Može se predložiti sljedeći program čije je značenje jasno iz komentara.

C3 C3 C3 +

E4 + E4

Ovaj primjer dobro pokazuje koliko je važna uloga komentara koji odražava stanje steka operanda.

Programi često moraju međusobno upoređivati ​​numeričke vrijednosti i izvoditi različite postupke ovisno o rezultatima poređenja. Postoje komande za poređenje u jeziku PARADISE<, =, >... Definirani su preko brojeva i kao rezultat vraćaju numeričke vrijednosti 0 i 1. Na primjer, naredba< потребляет из стека два элемента и засылает в стек число 1, если значение нижнего элемента оказалось меньше значения верхнего, а в противном случае засылает 0. Например, в результате выполнения последовательности 5 -20 < в стек будет заслан 0. Команда = засылает 1 в случае равенства потребленных ею элементов. Команда >šalje 1 kada je donji element veći od gornjeg. Za programiranje nestrogih poređenja (manje ili jednako, veće ili jednako), koristite naredbu NOT, koja zamjenjuje vrijednost različitu od nule na steku nulom, ali nulu jedinicom. Na primjer, procjena logičkog izraza x> = 5, gdje je x neki broj koji se nalazi na vrhu steka, može se specificirati na sljedeći način:

[x] 5< NOT

Dalje proširenje mogućnosti programskih uslova obezbeđuje se upotrebom, uz komande za poređenje, logičkih operacija konjunkcije & (logičko I) i disjunkcije & 0 (logičko ILI). Neka, na primjer, potrebno je dobiti 1 na steku ako broj x na vrhu pripada polusegmentu C 5< NOT C2 10 <

& E2 2 = & 0

Kontrole programa u zavisnosti od rezultata poređenja biće reči kasnije.

Definisanje procedura

Kao osnovna tehnika programiranja, PRSP pruža korisniku mogućnost da definira imenovane sekvence operacija koje se nazivaju procedure. Neka je potrebno, na primjer, izračunati vrijednosti kvadratnog trinoma 3 * x ** 2-4 * x + 9 za date vrijednosti x. U ovom slučaju, trebali biste definirati proceduru koja implementira trinomsku formulu i ispisati rezultat na terminal, a zatim primijeniti ovu proceduru na određene vrijednosti x. Potrebna procedura, nazovimo je PX, definirana je na sljedeći način:: PX [x] C 3 * 4 - * 9 +. D; Dvotačka označava operaciju "definiraj proceduru", s imenom procedure iza kojeg slijedi dvotočka nakon razmaka. Definirajući niz naredbi (tijelo procedure) slijedi ime procedure i završava se tačkom i zarezom. Ukratko, procedura je definisana u obliku:

: <имя процедуры> <тело процедуры> ;

U jeziku PARADISE, potrebno je komentarisati stanje steka operanda na početku i na kraju procedure. U telu procedure, komentari se postavljaju prema diskreciji programera na mestima koja su teško razumljiva.

Komentari pomažu osobi da razumije i koristi proceduru, dok procesor jednostavno ignoriše sve što je navedeno u zagradama. Stoga, ako unesete definiciju pojedinačne procedure sa terminala, možete izostaviti komentare.

Nakon unosa definicije procedure i pritiskom na tipku procesor je obaviješten o kraju unosa, na ekranu terminala se pojavljuje zvjezdica, signalizirajući izvršenje komande "defini procedure" i spremnost procesora da nastavi dijalog. Sada možete primijeniti PX proceduru na vrijednosti x koje daje tastatura, na primjer 2, 3, 4 (izlaz procesora je podvučen):

* 2 PX 13

* 3 PX 24

* 4 PX 41

Hajde da definišemo opštiju proceduru za izračunavanje trinoma oblika a2 * x ** 2 + a1 * x + a0, koja nam omogućava da navedemo vrednosti i x i a0, a1, a2. Nazovimo to PXA:

: PXA C E4 E3 * + * +;

Kada koristite PXA, vrijednosti a0, a1, a2, x moraju biti u traženom nizu na steku. Na primjer: a0 = 1, a1 = 2, a2 ​​= -3, x = 4

* 1 2 -3 4 PXA. D -39

U tijelu procedure, zajedno sa osnovnim procesorskim operacijama, mogu postojati korisnički definirane procedure. Na primjer, možete definirati rutinu P koja će, pored PXA izračunavanja, napisati kopiju rezultata na terminal i ukloniti rezultat iz steka.

: P PXA. D;

Konkretno, tijelo procedure može uključivati ​​ime same procedure koja se definira, odnosno, procedura može biti rekurzivna. Na primjer:

: VRIJEME [t] 1- VRIJEME;

Ova procedura smanjuje vrijednost vrha steka za 1 i opet se odnosi na sebe, odnosno radi kao brojač vremena.

Brojač VREMENA, u principu, ne može da se zaustavi: postupak za oduzimanje jedan će se izvoditi iznova i iznova sve dok procesor radi. Ali u DSPP-u postoje sredstva koja vam omogućavaju da kontrolišete tok procesa u zavisnosti od dobijenih rezultata - operacija kontrole toka programa.

Uslovno izvršenje i ponavljanje

Program, koji je niz naredbi koje se izvršavaju redoslijedom njihove lokacije jedna za drugom u svom zapisu, naziva se linearnim. Da bi program bio lako uočljiv (čitljiv) i razumljiv, podijeljen je na imenovane dijelove koji imaju određeno značenje - procedure, od kojih je svaka definirana svojim nizom procedura, koje su pak definirane nizovima manjih procedura itd. na procedure definisane direktno sekvencama DSPP komandi. Takav program, napisan kao hijerarhija definicija procedura, naziva se strukturiranim. Metoda izgradnje strukturiranog programa, koja se sastoji u postepenoj dekompoziciji problema koji se rješava na sve manje i manje podzadatke, naziva se strukturirano programiranje.

Kreiranje ne samo linearnih, već i bilo kojih programa metodom strukturiranog programiranja moguće je ako postoje operacije za izvršavanje procedure po uslovu, ponavljanje procedure i izlazak iz ponovljene procedure. Skup komandi ove vrste dostupan u DSPP-u pruža mogućnost strukturirane konstrukcije proizvoljnog programa.

Uslovi za izvršenje ili neizvršenje procedure formulišu se u odnosu na predznak broja, tačnije u odnosu na predznak vrednosti koju trenutno poseduje vrh steka. Glavna komanda uslovnog izvršavanja procedure - BRS (BRanch on Sign - granati po znak) upućuje da se izvrši jedna od tri procedure nazvane po BRS, u zavisnosti od predznaka trenutne vrednosti vrha steka. Prilikom izvršavanja BRS-a, procesor izbacuje gornji element iz steka, testira njegovu vrijednost, a ako je negativna, onda izvršava prvu od imenovanih procedura, ako je jednaka nuli, zatim drugu, a ako je pozitivna, onda treću . Dakle tim

će uzrokovati uklanjanje jednog elementa iz steka i izvršenje procedure N ako je uklonjena vrijednost negativna, izvršenje procedure P ako je pozitivna i izvršenje procedure Z ako je nula.

Primjer korištenja BRS naredbe je sljedeća definicija SGN procedure

: SGN [X] BRS -1 0 1;

Ova rutina zamjenjuje vrijednost X na vrhu steka sa -1 ako je X<0, числом 0, если X=0, и числом 1, если X>0. SGN procedura je dostupna u PRSP-u kao osnovna operacija procesora.

BRS komanda, uz izbor jedne procedure od tri podatka, daje mogućnost implementacije dvocifrenih operatora oblika IF-THEN i IF-THEN-ELSE. Na primjer, izjava ako je x> 0 onda P1 else P0 odgovara naredbi BRS P0 P0 P1, a izjava ako je x<>0 zatim P - BRS P NOP P naredba, gdje je NOP naziv prazne operacije. Ali u DSPP-u postoji efikasnija implementacija dvocifrenih uslova - naredbe IF-, IF0, IF +, BR-, BR0, BR +.

IF komande odgovaraju naredbi IF-THEN. Na primjer, IF-P instrukcija nalaže da se gornji element izvuče iz steka i testira njegov predznak, a ako ovaj element ima znak minus, onda izvršite proceduru P. Instrukcije IF0 P i IF + P nalažu da se izvrši P postupak, odnosno u slučaju kada je iskočili element jednak nuli, odnosno u slučaju kada je njegova vrijednost pozitivna.

Kao primjer koji ilustruje upotrebu komandi IF grupe, dajemo definiciju komande osnovnog jezika ABS, koja izračunava modul vrha steka.

: ABS [X] C IF-NEG [| X |];

Naredbe BR-, BR0 i BR + odgovaraju naredbi IF-THEN-ELSE, upućujući vas da odaberete jednu od dvije procedure nazvane po njima. Ako se znak elementa koji je iskočio iz steka poklapa sa onim u oznaci naredbe, tada se izvršava prva imenovana procedura, a ako se ne poklapa, onda se izvršava druga procedura. Na primjer, instrukcija BR0 P0 P1 upućuje da se izvrši procedura P0 u slučaju kada je element koji je iskočio iz steka jednak nuli, a ako ovaj uvjet nije zadovoljen, onda se izvrši procedura P1.

Razmatrane komande vam omogućavaju da ekonomično programirate izvođenje procedure u zavisnosti od datih uslova. Najčešći uslovi oblika x<0, x=0, x>0 direktno implementiraju timovi IF grupe. Uslovi x<=0, x<>0, x> = 0 se programiraju sa BR-, BR0, BR + naredbama korištenjem prazne NOP operacije kao prve procedure. Na primjer, ako je x<=0 then P соответствует команда BR+ NOP P. Примером использования команд группы BR может служить следующая реализация команды базового языка NOT, заменяющей нулевое значение вершины стека единицей, а ненулевое - нулем.

: NIJE [x] BR0 1 0;

Grananje programa se često vrši nakon naredbi za poređenje (<, =, >) koji proizvode logičku vrijednost 1 ili 0, ovisno o rezultatu poređenja dva broja. Naredba osnovnog jezika MAX, na primjer, može se programirati na sljedeći način:

: MAX C2 C2< IF+ E2 D ;

Grupa komandi grananja takođe uključuje naredbu za odabir BR, napisanu u obliku:

BR A1 P1 A2 P2 ... AK PK ... AN PN OSTALO P0

Prilikom izvršavanja ove instrukcije, procesor prvo izvršava proceduru A1 i upoređuje vrijednost koju je ubacio na stek sa vrijednošću ispod nje na prethodnom vrhu steka. Ako se vrijednosti poklapaju, tada se gornja dva elementa uklanjaju iz steka i izvršava se procedura P1 koja je dodijeljena pokazivaču A1, nakon čega se vrši prijelaz na naredbu koja slijedi naredbu BR (tj. u gornjem zapisu od program koji prati riječ P0 u tekstu). Ako se uspoređene vrijednosti ne poklapaju, tada se jedan gornji element uklanja iz hrpe (tj. rezultat A1) i iste se radnje izvode s parom A2 P2, a zatim, ako podudaranje nije uspjelo, onda sa parom A3 P3 itd. do AN PN uključujući. U slučaju kada nijedan od pokušaja nije dao podudaranje, izvršava se procedura P0 koja nosi naziv po ELSE riječi. Obično numeričke konstante djeluju kao pokazivačke procedure, na primjer:

[x] C BR 5 NEG -3 ABS 0 NIJE DRUGO T0 [y]

Kao rezultat izvršavanja ove linije na vrhu steka, vrijednost y = -5 će se dobiti ako je x = 5; y = 3 ako je x = -3; y = 1 ako je x = 0 i y = 0 u suprotnom.

Općenito govoreći, pokazivačka procedura može biti ne samo numerička konstanta, već i varijabla ili bilo koja druga procedura koja zadovoljava jednostavan zahtjev: ne izbacuje ništa iz steka i gura jednu vrijednost u stek.

Kao ilustraciju načina na koji se koriste operacije uslovnog izvršenja, modifikujemo proceduru TIME u prethodnom odeljku tako da se brojač zaustavi kada se navede uslov:

: VRIJEME [t] 1- C IF + VRIJEME;

Sada se ova TIME rutina poziva samo kada je vrh steka pozitivan. Brojač će se pokrenuti tačno N puta ako do početka prvog izvršavanja TIME vrh sadrži pozitivan broj N. Na primjer, da biste dobili 7 okidača, morate postaviti

7 VRIJEME<ВК>

Pošto IF + u definiciji TIME, kao i svaka uslovna operacija, izbacuje testiranu stavku iz steka, a ova stavka je potrebna za naredne operacije, mora se duplirati postavljanjem operacije C (Kopiraj) ispred IF +.

Rekurzija nije primarni način izvršavanja procedure više puta. Za programiranje petlji u jeziku PARADISE postoje naredbe RP (Ponavljanje) i DO (Uradi - uradi, izvrši).

RP W naredba daje instrukcije za izvršavanje W procedure iznova i iznova neograničen broj puta. Da bi se ponavljanja zaustavila, tijelo W procedure mora sadržavati EX (Izlaz) operaciju koja se izvodi pod datim uslovom. EX operacija se prebacuje na izvršenje procedure koja prati ponovljenu proceduru koja sadrži ovu EX operaciju u tekstu programa. Dakle, brojač implementiran gore kao rekurzivna TIME procedura može se programirati kao ponavljanje W procedure, koja je ovako definisana:

: W [t] 1-C IF0 EX;

Da bi brojač radio 25 puta, potrebno je izvršiti liniju

Uz operaciju EX, koja se koristi u naredbama za uslovno izvršenje, postoje i operacije uslovnog izlaza EX-, EX0, EX +, koje proizvode isti efekat kao naredbe IF-EX, IF0 EX, IF + EX, tj. konzumiraju gornji element koji testira svoj znak i izvodi izlaz ako se znak poklapa sa onim naznačenim u oznaci operacije. Operacije EX, EX-, EX0, EX + mogu se koristiti ne nužno u tijelu same procedure ponavljanja (u našem slučaju W), već iu procedurama na koje se odnosi.

Kao primjer, razmotrite problem pronalaženja najvećeg zajedničkog djelitelja dva prirodna broja Euklidovom metodom. Suština metode je da je potrebno od većeg oduzeti manji broj sve dok brojevi ne postanu jednaki. Kada se postigne jednakost, naći će se najveći zajednički djelitelj.

Programiranje će se vršiti metodom top-down razvoja. Prvo, definišemo GCD proceduru, koja fiksira opštu šemu algoritma. Parametri ovog postupka su dva broja M i N na steku za koje se nalazi najveći zajednički djelitelj. U tijelu GCD procedure mora se specificirati ciklički proces pretvaranja vrijednosti u steku. Kao rezultat ovog procesa, dva jednaka broja bi trebala ostati na stogu - bilo koji od njih se može uzeti kao najveći zajednički djelitelj. Imajući u vidu ova razmatranja, GCD postupak se može definirati na sljedeći način.

: GCD RP STEP [čvor (M, N), čvor (M, N)] D [čvor (M, N)];

Sada je potrebno programirati jedan korak iterativnog procesa, tj. definirati STEP proceduru. Parametri za to su dva broja na steku. Morate uporediti ove brojeve i izaći iz petlje ako su jednaki, u suprotnom oduzmite manji od većeg. To se može učiniti, na primjer, ovako:

: KORAK C2 C2 - BRS NOP EX E2 C2 -;

Sada u programu nema nedefinisanih procedura i možete ga početi provjeravati. Provjeru treba izvršiti odozdo prema gore, odnosno prvo se morate uvjeriti da STEP procedura radi ispravno i tek onda - GCD.

Operacija DO osnovnog jezika uzrokuje da se procedura nazvana po njoj ponovi N puta, gdje je N broj koji se nalazi na vrhu steka u trenutku kada se DO izvršava. Na primjer, da bi se procedura P izvršila 8 puta, potrebno je navesti

8 DO P

Ako tijelo procedure P sadrži barem jednu izlaznu operaciju i uvjet za njeno izvršenje je zadovoljen prije nego što nastupi zadati broj ponavljanja, tada će se ponavljanja prekinuti izlaskom iz procedure, kao što je to učinjeno u slučaju RP operacija. Na primjer, ako DO ponovi gore opisanu proceduru W i ima IF0 EX u svojoj definiciji, pisanje [T] 30 DO W će uzrokovati 30 ponavljanja W ako je T> = 30. Ako je 0

Ako u trenutku izvršenja DO operacije postoji nula ili negativna vrijednost na vrhu steka, tada se procedura koja slijedi nakon DO neće izvršiti niti jednom.

Da bismo ilustrirali upotrebu DO operacije, definiramo rutinu NUM koja broji broj nenula bitova u 32-bitnoj riječi x navedenoj na vrhu steka.

Postavite brojač broja jedinica u podsklad. Brojanje jedinica sastojat će se od ponavljanja NUMI procedure 32 puta, pri čemu ćemo ispitati jedan bit riječi x. Po izlasku iz petlje, traženi broj mora biti u podsklopu.

: NUM [x] 0 E2 32 DO NUMI D [N];

Za brojanje bitova koji nisu nula koristićemo činjenicu da jedan u najznačajnijem (31.) bitu riječi služi kao znak negativnog broja. Ako je riječ koja se proučava negativna, dodajte jednu na N. Na kraju NUMI procedure potrebno je pomaknuti riječ koja se proučava za jednu cifru ulijevo.

: NUMI C IF-N + SHL;

Implementacija N + procedure je prilično jednostavna: morate dodati jedan podsloju steka bez promjene vrhova.

: N + E2 1+ E2;

Ponovljene procedure mogu sadržavati RP i DO operacije u svojim tijelima, što dovodi do pojave ugniježđenih petlji, a svaka dubina ugniježđenja je dozvoljena. U ovom slučaju, postoji EXT operacija za izlazak iz ugniježđene petlje koja pokazuje dubinu ugniježđenja na vrhu steka. Na primjer, izlaz iz dvije ugniježđene petlje može se postaviti ovako:

Treba imati na umu da upotreba naredbe EXT zahtijeva dodatnu pažnju, jer kada se program modificira, dubina ugniježđenja petlji može se promijeniti i odgovarajuća konstanta prije EXT-a će se morati promijeniti.

Imenovani podaci

Stog operanda je glavni, ali ne i jedini mehanizam za manipulaciju podacima u PRSP. Takođe je moguće, zajedno sa definicijama procedura, deklarisati elemente i standardno organizovane kolekcije elemenata (tzv. strukture) podataka, koji su tada dostupni za upotrebu po njihovim imenima. Implementacijom deklaracija podataka, procesor rezervira memoriju potrebnu za njihovo pohranjivanje i obezbjeđuje potrebne mehanizme za pristup ovoj memoriji.

Osnovni jezik DSPN-a uključuje niz direktivnih riječi o kojima se govori u nastavku za deklariranje varijabli i nizova. Kako bi se proširio sistemski jezik, u njega se mogu uvesti i druge riječi ove vrste i, shodno tome, drugi elementi i strukture podataka.

Riječ VAR deklarira 16-bitnu numeričku varijablu. Na primjer, unos

deklarira varijablu X, odnosno govori procesoru da je ime X ime varijable. Procesor pridružuje ovom imenu 16-bitnu memorijsku lokaciju u kojoj će biti pohranjena vrijednost ove varijable. Instrukcija za dodeljivanje varijable X vrednosti koja se nalazi na vrhu steka operanda ima oblik

Prilikom izvršavanja ove naredbe, procesor izbacuje gornji element iz steka i upisuje njegovu vrijednost na lokaciju dodijeljenu za X varijablu.

Naredba koja se sastoji samo od imena varijable bez slova! Uzrokuje da se vrijednost ove varijable gurne u stog, a guranje se vrši kopiranjem sadržaja odgovarajuće memorijske lokacije, odnosno vrijednost varijable ostaje nepromijenjena . Dakle, svaki unos imena varijable X u program, osim ako mu odmah ne prethodi riječ koja propisuje drugu radnju, gurnut će trenutnu vrijednost ove varijable na stog, baš kao i direktno specificirani brojevi (numerički literali) su gurnuti na stog.

Kao primjer, dajmo još jednu verziju gore opisane GCD procedure u kojoj se koriste dvije radne varijable.

: BOG! X! Y RP STEP X [GCD];

: KORAK X Y = EX + X Y BR + X-Y Y-X;

: X-Y X Y -! X;

: Y-X Y X -! Y;

Kao što vidite, program je postao nešto duži, ali je njegova jasnoća povećana.

VCTR riječ deklarira jednodimenzionalni niz (vektor) od 16-bitnih ćelija, a broj najznačajnijeg elementa ovog niza je dat vrijednošću vrha. Na primjer, kao rezultat pisanja

9 VCTR ROW Procesor rezerviše 10 sekvencijalno adresabilnih 16-bitnih reči memorije, formirajući vektorski ROW (0:9). Prvo, broj 9 se gura na stek, a zatim se izvršava VCTR procedura, koja koristi gornji element steka da odredi dužinu vektora ROW za kreiranje.

Guranje vrijednosti j-tog elementa vektora ROW, 0 u stog<=j<=9, задается командой

[j] RED

Koristeći broj elementa na steku kao parametar, ime vektora ROW uzrokuje da se ovaj broj zamijeni vrijednošću odgovarajućeg elementa. Ako se riječ! nalazi neposredno ispred imena ROW vektora, tada se vrijednost podputa dodjeljuje elementu ovog vektora označenom vrhom, a dubina steka se smanjuje za 2. Na primjer, možete nulirati 5. element ROW vektora kako slijedi:

Postoji i mogućnost kreiranja konstantnih vektora, tj. vektori 16-bitnih brojeva, čije su vrijednosti određene tokom njegove deklaracije i neće se mijenjati u budućnosti. Dakle, vektor 16-bitnih konstanti VC dužine L + 1 se deklarira pomoću riječi CNST u obliku:

CNST VC k0 k1 ... kL;

gdje su k0, k1, ... kL komande koje guraju jednu vrijednost u stek. Najčešće su to samo numerički literali, ali mogu postojati i imena varijabli, procedura, kao i naredbi koje se sastoje od parova riječi, kao što je, na primjer, naredba za postavljanje adrese varijable "X" o kojoj se govori u nastavku. na komponente običnih vektora. Na primjer:

Višedimenzionalni niz od 16-bitnih riječi deklarira se pomoću riječi ARR, kojoj prethode maksimalne vrijednosti indeksa za svaku dimenziju i broj dimenzija. Na primjer, 3D niz TIR (0: 8,0: 2,0: 24) je deklariran ovako:

Broj 3 neposredno prije ARR označava dimenziju deklariranog niza.

Guranje elementa niza na stek se postiže specificiranjem indeksa ovog elementa praćenog imenom niza. Na primjer, naredba za guranje TIR (0,2,2) elementa na stek je izražena kao

U skladu s tim, dodjelu ovom elementu trenutne vrijednosti vrha steka postavlja se naredbom

Svi razmatrani primjeri ilustrirali su stvaranje struktura od 16-bitnih riječi. Međutim, jezik vam takođe omogućava da definišete strukture 32-bitnih reči i 8-bitnih bajtova. Da biste to učinili, prefiks LONG ili BYTE stavlja se ispred riječi koja definira strukturu, respektivno. Na primjer,

5 BYTE VCTR X - definicija 6-komponentnog vektora bajtova X;

BYTE CNST Y 65 66 67; - definicija 3-komponentne bajt vektor-konstante Y;

10 20 2 LONG ARR MTRX - definicija matrice dugih riječi MTRX (0: 10,0: 20).

Čitanje elemenata strukture riječi i bajtova vrši se na isti način kao u slučaju 16-bitnih struktura riječi. Ako je dužina elementa manja od 32 bita, ekstrahirana vrijednost se stavlja u najmanju značajnu riječ ili bajt na vrhu steka, a gornji dio vrha se nula. Najmanje značajna riječ ili bajt 32-bitne duge riječi u steku se također uzima kao vrijednost dodijeljena elementu strukture riječi ili bajta.

Iako se 16-bitni format riječi koristi za definiranje podataka prema zadanim postavkama, on također ima WORD notaciju. Preporučljivo je koristiti ovaj prefiks kada se program treba prenijeti na druge mašine, gdje je također implementiran DSSP i zadana vrijednost može biti drugačija.

Bajt strukture podataka najčešće se koriste za pohranjivanje i obradu tekstualnih informacija. To je zbog činjenice da je jedan bajt dodijeljen u memoriji računara za kodiranje jednog znaka. Za postavljanje kodova slova u jeziku PARADISE postoji konstrukcija #l, gdje je l bilo koje slovo dostupno na tastaturi računara. DSPP procesor ovu konstrukciju doživljava kao naredbu da se slovo l ugura u stog. Na primjer:

Ova konstrukcija obavlja iste radnje kao numerički literal jednak kodu navedenog slova, ali je njegova upotreba poželjnija, jer vas, prvo, oslobađa od potrebe za pamćenjem kodova i, drugo, čini programe razumljivijim. Konkretno, može se dati sljedeća definicija konstantnog vektora Y:

BYTE CNST Y #A #B #C;

Često je zgodno koristiti simboličku notaciju numeričke konstante u programu. Riječ definicije VALUE je dostupna za pružanje ove mogućnosti:

Ova naredba izbacuje gornju stavku sa steka i formira riječ s imenom odmah iza VALUE. Upotreba ove riječi je jednaka korištenju numeričke konstante. Na primjer:

Rad sa memorijom po fizičkim adresama

Razmatrana sredstva pružaju mogućnost imenovanja podataka i manipulacije podacima bez obzira na adresni sistem računara. Ali osnovni jezik takođe uključuje sredstva za manipulisanje adresama memorijskih elemenata. Adresa varijable ili elementa X niza se gura u stog naredbom

U slučaju elementa niza, ovoj naredbi prethodi vrijednost indeksa (s).

Naredba jezika domaćina @ zamjenjuje adresu duge memorijske riječi na vrhu steka vrijednošću koja sadrži tu riječ. Na primjer, vrijednost Y se može gurnuti na stek izvršavanjem sljedećeg reda:

@B zamjenjuje adresu vrijednošću odgovarajućeg bajta, pretpostavljajući nula visokih bajtova, a @L zamjenjuje adresu 32-bitnom riječju.

Postoje i naredbe za upisivanje vrijednosti u memoriju. T komanda upisuje na adresu izbačenu sa vrha steka 16-bitnu podvrijednost. Komanda! TB uzrokuje slično upisivanje bajta nižeg reda pod-bajta u bajt adresiran od vrha, a! TL upisuje 32-bitnu riječ pod-podbajta u riječ kojoj se adresira vrh. Na primjer, možete dodijeliti vrijednost 15 petom elementu bajt vektora BV (0:5) pomoću sljedećih naredbi:

15 5 "BV! TB

Potreba za radom s memorijom na fizičkim adresama obično se javlja prilikom kreiranja programa koji ovise o arhitekturi određenog računala, na primjer, prilikom kreiranja ulaznih/izlaznih drajvera.

Dodatne operacije za rad s podacima i memorijom

Da bi se postigla veća efikasnost i kompaktnost programa, u jezik PARADISE uvedene su sledeće operacije:

0 <имя переменной>- resetirajte varijablu;

1 <имя переменной>- dodijeliti jedinicu varijabli;

1- <имя переменной>- smanjiti vrijednost varijable za jedan;

1+ <имя переменной>- povećati vrijednost varijable za jedan;

!- <имя переменной>- oduzeti vrijednost vrha steka od varijable;

!+ <имя переменной>- dodati vrijednost vrha steka varijablu.

Svaka od ovih operacija se lako programira korištenjem naredbi za čitanje i pisanje za varijable. Na primjer,

0 X je ekvivalentno 0! X

1+ X je ekvivalentno X 1+! X

X je ekvivalentno X E2 -! X

Upotreba ovih operacija će povećati efikasnost i vidljivost programa.

U praksi, često želite da dodelite jednu vrednost svim elementima niza. Za ovo postoji operacija na jeziku RAJ !!!<имя массива>... Njegova akcija je da dodijeli vrijednost vrha steka svim komponentama specificiranog niza. Operacija!!! primjenjivo na nizove sa elementima bilo kojeg formata.

Primjer upotrebe:

kod razmaka se upisuje u sve komponente BUF niza bajtova.

Često je potrebno u programu dobiti informacije o strukturi podataka iza imena. Par naredbi SIZE? - dati format stavke podataka: 1, 2 ili 4 bajta i DIM? - dati broj stavki podataka u strukturi. Na primjer, ako su podaci deklarirani

3 4 2 DUGA ARR Z

a zatim primijenjene na njih, ove naredbe će dati sljedeći rezultat (decimalni brojevi):

VELIČINA? X SIZE? Y SIZE? Z

DIM? X DIM? Y DIM? Z

Skup instrukcija DSPP procesora uključuje, kao dodatak, četiri komande koje vam omogućavaju čitanje i pisanje pojedinačnih bitova memorijskih ćelija računara. Ovo su naredbe @BI,!BI,!BI0,!BI1. Parametri za svaki od njih su adresa memorijske riječi koja se nalazi na steku i broj bita u ovoj riječi (podsjetimo da su bitovi numerirani s desna na lijevo, počevši od nule). BI komanda također pretpostavlja da postoji bit na steku i vrijednost koju treba napisati. Naredba @BI zamjenjuje navedene parametre vrijednošću odabranog bita (0 ili 1), naredbe! BI0 i! BI1 postavljaju odabrani bit na 0 i 1, respektivno, uklanjajući njihove parametre iz steka, a! BI naredba postavlja odabrani bit na vrijednost najmanje značajnog bita trećeg elementa steka i uklanja sva tri njegova parametra iz steka. Na primjer, ako je vrijednost varijable X binarni broj 101101, tada će rezultati navedenih operacija biti sljedeći:

"X [addr.X] 3 @BI - treći bit X, 0" X 3! BI - X jednako 100101,

"X [addr.X] 0! BI0 - X jednako 100100,

"X [addr.X] 1! BI1 - X je 100110.

U jeziku PARADISE postoje i mogućnosti za rad sa nizovima bajtova koji se nalaze u memoriji. Da bi se postavio niz bajtova, dva parametra se guraju u stog: početna adresa stringa (tj. adresa njegovog prvog bajta) i dužina niza (broj bajtova u njemu).

Naredba !!! MB se koristi za dodjelu svih bajtova stringa jednoj (postavljenoj na steku) vrijednosti. On koristi tri parametra iz steka: gde je b dodeljena vrednost, a i l su početna adresa i dužina niza bajtova, respektivno. Pretpostavimo, na primjer, da trebate nulirati elemente od 3. do 10. bajtnog niza TXT (0:20). Da biste to učinili, možete pokrenuti sljedeći red:

0 3 "TXT 8 !!! MB

kao rezultat toga, osam uzastopnih elemenata navedenog niza, počevši od 3., će dobiti vrijednost 0. Slična naredba !!! MW je namijenjen za popunjavanje niza od 16-bitnih riječi sa istom vrijednošću (broj riječi je naznačeno na vrhu hrpe), a naredba!! !! M - za popunjavanje niza dugih riječi.

SB komanda prenosi bajt nizove. Njegovi parametri su:, gdje su a1 i l početna adresa i dužina prenesenog niza, a2 je početna adresa niza na koji se vrši prijenos. Kao rezultat izvršavanja naredbe!SB, niz bajtova dužine l će biti lociran u memoriji sa adrese a2, što je tačna kopija niza koji se nalazi na adresi a1 prije izvršenja prijenosa. Izvorni niz i odredišni niz mogu se preklapati. Na primjer, pretpostavimo da želite da premjestite elemente niza bajtova M (0:10) na sljedeći način: M (10): = M (9), M (9): = M (8), ..., M (1): = M (0). Da biste to učinili, možete koristiti naredbu! SB:

0 "M 10 C2 1+! SB

kao rezultat, niz od 10 bajtova će pomjeriti jedan bajt prema rastućim memorijskim adresama.

SB komanda je pogodna za rad sa nizovima znakova (podsjetimo da je svaki znak kodiran u jednom bajtu). Omogućava, na primjer, dodijeliti vrijednost eksplicitno specificiranog literalnog niza nizu bajtova. Da biste naveli takav niz, koristite tekstualni literal, tj. niz znakova zatvorenih u navodnike, na primjer "TEXT LITERAL". Ova konstrukcija, kada se naiđe u programu, uzrokuje da se početna adresa i dužina niza bajtova koji sadrži tekst zatvoren u navodnike gurne u stog. Ove parametre onda može koristiti naredba!SB. Na primjer, "TABLE" 0 "TN! SB fragment će uzrokovati da se literal TABLE pošalje u TN niz.

Komanda SRCHB pretražuje niz za specificirani bajt. Parametri:, gdje je b bajt čije se prvo pojavljivanje treba pronaći, a i n specificiraju adresu početka i dužinu niza za pretraživanje, respektivno. Ako je n> 0, onda se pretraga vrši od adrese a do adrese a + n-1 (u smjeru povećanja adresa), ako je n<0, то поиск ведется с адреса a до адреса a+n+1 (в сторону убывания адресов). В результате выполнения этой команды в стеке оказывается значение d, равное смещению относительно адреса a до первого вхождения байта b. Если такое вхождение не обнаружено, то d=n. Примеры:

#T "TEXT" SRCHB

#A "TEXT" SRCHB

#E "TEXT" [# E, a, 4] 1- + -4 [# E, a + 3, -4] SRCHB [-2]

Završavajući razmatranje načina rada sa podacima, zadržimo se na pitanju skladištenja podataka u eksternoj memoriji računara, tj. na magnetnim diskovima. U jeziku PARADISE postoji naredba SAVE<имя файла>da sačuvate kopiju glavne memorije sistema na disk zajedno sa korisnički definisanim objektima. U ovom slučaju, memorijska područja dodijeljena za podatke VAR, VCTR, ARR operacijama se ne prikazuju na disku. Kao rezultat toga, prilikom pokretanja spremljenog sistema s diska, vrijednosti navedenih podataka nisu definirane (moraju se odrediti tokom izvršavanja programa). U većini slučajeva to je opravdano, jer nema potrebe trošiti disk memoriju za pohranjivanje radnih varijabli, bafera itd. Međutim, postoje podaci čije se vrijednosti moraju odrediti odmah nakon što se sistem pokrene s diska. Primjer je varijabla koja pohranjuje brzinu razmjene podataka s nekim vanjskim uređajem. Prilikom prelaska na drugi kurs, dovoljno je promijeniti vrijednost ove varijable bez ikakvih korekcija programa.

Indikacija procesoru da vrednosti elemenata neke strukture podataka treba da se iznesu na disk naredbom SAVE je FIX prefiks stavljen ispred definicije strukture, npr.

FIX VAR SPEED 20 FIX BYTE VCTR TABL

Rad sa strukturama podataka definisanim na ovaj način ne razlikuje se od rada sa strukturama definisanim na uobičajen način.

Komande za upravljanje procesorom

U jeziku PARADISE postoji mala grupa naredbi dizajniranih za kontrolu DSPP procesora, odnosno emulatora DSPP procesora.

Naredba RESTART uzrokuje ponovno pokretanje procesora. U ovom slučaju, stek se briše, poruka se izdaje

DSSP verzija XX.XX.XX

Besplatno XXXXXW

i procesor ulazi u stanje pripravnosti za unos komande. Ova naredba je korisna pri otklanjanju grešaka u programima. Također se izvršava kada dođe do stanja greške: indeks premašuje granice niza, slobodna memorija je iscrpljena, itd.

Naredba \ G se koristi za nastavak izvršavanja programa nakon zaustavljanja na nedefiniranoj riječi. Ako, tokom izvršavanja procedure, procesor naiđe na referencu na nedefinisanu riječ, izdaje poruku:

prestani ne znam<слово> .

gdje je tačka poziv DSPP-procesora, signalizirajući da je procesor u stanju zaustavljanja na nedefiniranoj riječi. U ovom režimu možete izvršiti bilo koju komandu procesora, baš kao iu normalnom režimu, kada je zvjezdica prompt. Postoje dva načina za izlazak iz ovog moda - ili izvršavanjem naredbe \ G (tada će procesor nastaviti s izvršavanjem prekinute procedure, preskačući nedefiniranu riječ), ili naredbom RESTART.

EXEC daje instrukcije procesoru da izvrši proceduru čija se adresa nalazi na vrhu steka. Da biste dobili adresu procedure, koristite naredbu "" (dva apostrofa) iza koje slijedi naziv procedure. Na primjer, kao rezultat naredbe

adresa ABS procedure će biti gurnuta na stek. Ove komande vam omogućavaju da prosledite proceduru kao parametar drugoj proceduri.

Već spomenuta operacija SAVE spada u grupu komandi upravljanja procesorom.<имя файла>, koji propisuje čuvanje kopije sistema na disku, kao i komande koje određuju izvor unosa tekstualnih informacija koje se dostavljaju procesorskom ulazu. Primarni izvor je ekranska tastatura.

LOAD komanda<имя файла>prebacuje ulaz na disk datoteku sa navedenim imenom. PF komanda - propisuje unos komandi iz bafera uređivača teksta. Komanda TEXEC prosljeđuje tekstualni niz na ulaz procesora, čiji su parametri postavljeni na steku. Nakon izvršenja komandi sadržanih u navedenim izvorima, unos se automatski prebacuje na ekransku tastaturu.

Naredbe rječnika

Ulazni tok instrukcija koje percipira procesor može posebno sadržavati instrukcije za definiranje procedura i podataka koji uzrokuju kompilaciju u internu reprezentaciju i pohranjivanje tijela procedure ili dodjelu memorije za navedene podatke, kao i unošenje imena kompajlirane procedure ili strukture podataka u DSPP rečnik.

Rječnik uspostavlja korespondenciju između vanjskih (korisnih u tekstu programa) imena i adresa objekata koji odgovaraju tim imenima u internom prikazu. Prilikom obrade definicije procedure ili opisa datog imena, procesor izgrađuje rečnik, formirajući u njemu novi unos u rečniku koji sadrži naziv (tačnije, prvih 7 slova imena) i adresu procedure. tijelo ili deskriptor podataka koji je mapiran na ovo ime.

U programiranju odozgo prema dolje, tijela procedura mogu sadržavati reference na objekte koji još nisu definirani. U ovom slučaju, u rječniku se formiraju rječnički unosi (zaglavlja), označeni znakom dvosmislenosti. Naredba UNDEF se koristi za prikaz svih nedefiniranih imena na ekranu.

U toku izrade rečnika moguće je formirati podrečnike - imenovane kolekcije rečničkih ulaza. Podrečnik obično kombinuje procedure i strukture podataka koje se odnose na jedan zadatak. Da bi se izbjegla zabuna između imena podriječnika i drugih programskih objekata, ime podrječnika mora početi sa znakom $. Pristup pod-rječnicima za njihovo proširenje ili korištenje može se otvoriti i zatvoriti posebnim naredbama, koje uključuju sljedeće (ime $ v označava bilo koji važeći pod-rječnik).

GROW $ v - povećati podrečnik $ v, odnosno dok nije drugačije propisano upisati nazive svih kompajliranih procedura i podataka u podrečnik $ v;

USE $ v - otvara za upotrebu (za traženje imena u njemu) podrečnik $ v;

SHUT $ v - zatvaranje mogućnosti korištenja podrečnika $ v;

SAMO $ v - učiniti dostupnim za upotrebu samo podrečnik $ v;

CANCEL - otkazivanje SAMO zadnje.

Tu je i naredba?$, koja ispisuje na displeju nazive svih podrečnika njihovog stanja - podrečnik je otvoren ili zatvoren za pretragu. Rječnik, čiji je naziv ispisan na vrhu, uvijek se povećava.

Osnovne procedure PRSP-a čine podrečnik pod nazivom $PRIM, otvoren za upotrebu i proširenje podrazumevano, odnosno ako nije postojala naredba koja propisuje proširenje drugog podrečnika.

Pretpostavimo, na primjer, da je operacija?$ ispisala sljedeće stanje podrečnika.

$ PRG otvoren

$ PRIME otvoren

$ EDIT zatvoreno

$ PRIME otvoren

SISTEM zatvoren

To znači da je $ PRG trenutno otvoren za proširenje i korištenje, $ PRIME je samo za korištenje, a $ EDIT i SYSTEM nisu dostupni. Imajte na umu da se podrečnik može sastojati od nekoliko sekcija sa istim nazivima.

Postoje naredbe za brisanje određenog skupa unosa rječnika iz rječnika i, možda, povezanih internih objekata. Na primjer, naredba FORGET $ v briše sva imena unesena u rječnik (ne samo u pod-rječnik $ v) nakon posljednjeg izvršenja naredbe GROW $ v zajedno sa objektima označenim ovim imenima i poništava proširenje podrečnik $ v koji je postavio. Naredba PROGRAM $ v čini isto što i sekvencijalne FORGET $ v GROW $ v naredbe. Prisutnost takve naredbe na početku bilo kojeg programa dovodi do činjenice da će se prilikom ponovnog kompajliranja programa njegova stara kopija izbrisati i formirat će se rječnik za pohranjivanje objekata nove kopije programa. Na primjer, izvođenjem operacije FORGET $ PRIME na rječniku, čije je stanje prikazano gore, dobijamo novo stanje:

$ EDIT zatvoreno

$ PRIME otvoren

SISTEM zatvoren

Tokom izvršavanja naredbe FORGET, prikazuju se nazivi sekcija koje treba izbrisati.

Imajte na umu da naziv podrječnika SYSTEM ne počinje sa $. Ovo je dozvoljeno, ali dovodi do toga da primjena naredbi FORGET i RPOGRAM na ovaj podrječnik ne uzrokuje nikakvu radnju (SISTEMSKI pod-rječnik za njih takoreći ne postoji).

Zbog činjenice da u gotovom programu za ogromnu većinu procedura nije potrebna žalba na eksterno ime, moguće je izbrisati njihova imena iz rječnika uz očuvanje internih objekata koji su s njima povezani. Komanda CLEAR $ v uklanja sva imena iz svih sekcija podrečnika $ v, osim onih kojima prethodi prefiks :: (dve dvotačke) u tekstu programa (kada ih definišete). Na primjer, kao rezultat procesora koji izvršava sljedeći fragment programa:

::: X + Y! + X;

CLEAR $ EXAM samo imena X i X + će ostati u podrečniku $ EXAM, unos iz rječnika Y će biti uklonjen (iako će varijabla koja odgovara riječi Y u internom prikazu ostati).

I/O komande

Glavno sredstvo interakcije između korisnika i DSPP-a je terminal, koji je, po pravilu, katodni displej sa tastaturom. Terminal se koristi za početni unos, uređivanje i otklanjanje grešaka u programima, pripremu podataka i cjelokupno upravljanje sistemom. Programi i podaci, kao i sama iverica, čuvaju se kao fajlovi na diskovima i mogu se odštampati na štampaču. Sljedeći alati su dostupni za kontrolu I/O u skupu osnovnih procedura PRSP.

Programiranje rada terminala omogućeno je komandama za unos i izlaz brojeva, pojedinačnih slova i nizova slova (linija), kao i nekim dodatnim naredbama.

Naredba TIB (Terminal Input Byte) pokreće petlju koja čeka na pritisak tipke na tipkovnici terminala. Kada se pritisne tipka, 8-bitni kod odgovarajućeg slova se gura u stog kao najmanji značajan bajt vrha, a najvažnija 3 bajta sadrže nule. Na displeju se prikazuje kopija ovako unešenog slova. Postoji i TRB (Terminal Read Byte) komanda, koja se razlikuje od TIB-a po tome što guranje koda unetog slova na stog nije praćeno prikazom ovog slova na displeju.

Komanda TIN (Terminal Input Number) pokreće ciklus ulaska u stog i prikazivanja broja ukucanog sa tastature na displeju. Uneseni broj mora biti niz brojeva, koji može početi sa znakom minus, a završava se ... U zavisnosti od postavljenog I/O režima, brojevi se tumače od strane procesora kao heksadecimalni, decimalni, oktalni ili binarni. Ako heksadecimalni broj počinje cifrom označenom slovom, tada se ispred njega dodaje cifra 0. Uneseni broj se prevodi u binarni komplementarni kod, koji se gura na stek kao cjelobrojna vrijednost 32-bitnog duga reč, tj sa odsijecanjem bitova koji se nalaze lijevo od težine 2 na stepen 31 najznačajnijeg bita.

Svaka TIN komanda unosi jedan broj. Ako je potrebno unijeti niz brojeva u jedan red, potrebno ih je razdvojiti pritiskom na tipku , a naredba TIN mora se ponovo izvršiti za unos svakog broja u programu.

Niz koji sadrži n karaktera ukucanih sa tastature unosi se u memoriju računara u obliku n bajtova koji se nalaze na adresama koje se uzastopno povećavaju, počevši od adrese a, pomoću naredbe TIS (Terminal Input String), ispred koje adresa a i broj slova n su gurnuta na stog... Na primjer, neka bude deklariran bajt vektor X dovoljne dužine. Morate unijeti 9 znakova, dodijelivši njihove vrijednosti elementima ovog vektora, počevši od nultog elementa:

Slično, TOS komanda postavlja izlaz niza od n bajt znakova sa početnom adresom a:

Izlaz na terminal tekstualnih elemenata direktno uključenih u program je obezbeđen konstrukcijom

."<текст>"

Na primjer, kako bi se prilikom izvršavanja određenog fragmenta programa na ekranu pojavio tekst ENTER VARIANT NUMBER, fragment mora sadržavati unos "UNESI BROJ VARIANTE".

Komanda TON (Izlazni broj terminala) prikazuje broj koji je iskočio iz podstaka, a dužina izlaznog polja mora biti specificirana na vrhu. Prikazani broj je poravnat sa desnom ivicom polja, slobodne pozicije na lijevoj strani se popunjavaju razmacima, a ako dužina broja prelazi zadanu dužinu polja, onda se lijevo odsiječe. U decimalnom I/O načinu, negativni brojevi počinju sa znakom minus.

Naredba TOB (terminal output byte) ispisuje slovo čiji je kod specificiran niskim bajtom na vrhu steka. Dubina naslaga se smanjuje za 1.

Postoje i komande koje direktno kontrolišu pokazivač kursora:

CR - skok na početak novog reda,

SP - razmak, odnosno pomicanje za jednu poziciju udesno.

Komanda BELL proizvodi kratak bip ("zvono").

Ponekad je prilikom komunikacije sa terminalom potrebno provjeriti da li je tipka već pritisnuta i da li je displej već izvršio prethodnu izlaznu naredbu. Ovo se može učiniti pomoću naredbi TTI (Terminal Test Input) i TTO (Terminal Test Output), koje ostavljaju zastavicu 1 na steku ako se dogodio navedeni događaj, i 0 u suprotnom.

Izlazne komande pisača slične su naredbama izlaza terminala i bazirane su na sličnoj mnemonici, u kojoj su znakovi LP (Line Printer) ili zamijenjeni TO ili dodani kao vodeći. Na primjer, LPCR - skok na početak novog reda, LPSP - razmak, LPN - izlaz broja iz podreda u polju određenom vrhom, LPB - izlaz znaka, LPS - izlaz niza znakova. Tu je i naredba [N] LPT, koja pomiče glavu za štampanje na poziciju N odštampanog reda, i LPFF komanda, koja uvlači list papira. Za ispis eksplicitno specificiranog teksta, zgodno je koristiti tekstualni literal i naredbu LPS, na primjer:

"TABELA VRIJEDNOSTI FUNKCIJE" LPS

Upravljanje prekidima i iznimkama

Prilikom programiranja perifernih uređaja, postaje neophodno rukovati prekidima. U DSPP-u, ova obrada je programirana na sljedeći način. Program namijenjen za rukovanje prekidima je normalna PRSP procedura, ispred čije definicije stoji prefiks INT, na primjer INT: A!1+ I; INT prefiks osigurava da se stanje procesora pohrani za vrijeme prekida i vrati kada se prekid obradi.

Da povežete program obrade sa određenim prekidom, koristite naredbu LINK:

<адрес вектора>VEZA<имя процедуры>kada se izvrši, poziv rutini za rukovanje prekidom se upisuje duž odgovarajućeg vektora. Komanda LINK može izvršiti i statičko povezivanje procedure sa prekidom, koji se javlja u trenutku kompilacije programa, i dinamičko, tokom izvršavanja programa.

Prekid procesora je način na koji je sistem obaviješten o događaju koji se dogodio u vanjskom svijetu. Događaji koji zahtijevaju trenutnu obradu mogu se pojaviti iu programu. To se naziva izuzetnim situacijama. Primjeri takvih situacija: podjela nulom, greška u komunikaciji s uređajem, kraj ulazne datoteke itd.

U DSPP-u, izuzeci se hvataju korištenjem komandnih prekida. Prekid naredbe je imenovana operacija koja poziva proceduru odgovora i deklarira se na sljedeći način:

TRAP<имя вызова> <конечная реакция>

Na primjer:

ZAMKA S1. "Situacija S1."

U prvom slučaju, X procedura je konačna reakcija na S prekid; u drugom, kada dođe do prekida S1, terminal će primiti poruku: Situacija S1.

Program, tokom čijeg izvođenja može doći do prekida, može podesiti svoju reakciju na njega pomoću komande presretanja. DSSP predviđa dvije vrste presretanja: ON i EON. Naredbe za presretanje mogu se koristiti samo unutar procedura i imaju format:

ON<имя прерывания> <реакция>

EON<имя прерывания> <реакция>Na primjer:

: A ... ON S. "Prekid S" ...;

: A1 ... EON S1 ABC ...;

ON i EON postavljaju različite vrste reakcija. Ako je nova reakcija postavljena naredbom ON, onda kada dođe do prekida, izvršava se procedura reakcije, nakon čega prekinuti program nastavlja da se izvodi. Ako je reakcija postavljena naredbom EON, tada stek operanda prvo preuzima dubinu koju je imao u trenutku izvršavanja EON-a, zatim se reakcija izvodi, a nakon njenog završetka izvršavanje procedure u kojoj je EON komanda bila upotreba se odmah prekida.

Pogledajmo neke primjere. Procedura M unosi znakove sa terminalske tipkovnice i provjerava da li je to cifra. Ako uneseni znak nije cifra, ND prekid se podiže. TRAP ND "Nije cifra." : M RP M1; : M1 TRB [B] C # 0< C2 #9 >& 0 IF + ND [B] TOB;

Konačni odgovor na ND prekid je poruka: Nije cifra.

Ako je M pozvan iz P1 procedure, koja ima svoj odgovor na ND prekid: P1 ON ND PR1 M; : PR1 [B] CR. "Greška." D # 0 [# 0]; onda kada se unese nedigitalni znak, ND prekid će biti obrađivan od strane PR1 reakcionog programa tipa ON, što će uzrokovati izlaz sljedeće poruke iz novog reda: Greška. Uneseno slovo će biti zamijenjeno slovom 0, nakon čega će M nastaviti sa radom.

Ako je M pozvan iz procedure P2: P2 EON ND PR2 M; : PR2 CR. "Greška. Kraj unosa." ; onda kada se unese nedigitalni znak, ND prekid će biti obrađen od strane PR2 reakcionog programa tipa EON, što će uzrokovati da se sljedeća poruka izbaci iz novog reda: Greška. Kraj unosa. Tada će P2 izaći. Stog operanda će tada biti prazan.

Ako je potrebno, prekid se može ponovo pokrenuti u programu reakcije, čime se proširuje na programe višeg nivoa. U ovom slučaju, prekidom će upravljati ili program koji je naveden u komandi presretanja u proceduri koja obuhvata, ili konačna reakcija. Na primjer, ako modificirate PR2 na sljedeći način:: PR2 CR. "Greška. Kraj unosa." ND; tada će poruka izdana terminalu biti: Greška. Kraj unosa. Nije broj.

DSPP ima nekoliko ugrađenih komandnih prekida, reakcija na koje se može obezbijediti u korisničkim programima.

Podijelite ovo