Je arabčina jazykom raja? Paradise Language Ďalšie operácie pre prácu s dátami a pamäťou

18. december je svetovým dňom arabského jazyka. Sviatok bol ustanovený Organizáciou Spojených národov v roku 2010 a je jedným zo šiestich oficiálnych jazykov Organizácie Spojených národov. Podľa najnovších údajov je na svete 300 miliónov ľudí, ktorí hovoria arabsky a jej dialektmi. Navyše za 240 miliónov je domáci. Arabský jazyk a náboženstvo islam sú neoddeliteľne spojené. Jedno bez druhého je nemysliteľné, pretože už jeden a pol tisícročia moslimovia sveta čítajú modlitby v arabčine päťkrát denne. Bol na to zoslaný Svätý Korán a prorok Mohamed (mier s ním) prehovoril.

Groznyj duchovenstvo svojím spôsobom označilo významný dátum. K obyvateľom mesta sa prihovoril imám mešity „Srdce Čečenska“ Magomed Dadahaev. Vysvetlil úlohu arabského jazyka v živote moslima:

Bez znalosti arabčiny sa človek nemôže naučiť islam. Preto sa medzi moslimami tento jazyk od nepamäti teší veľkej úcte. Predpokladom pre štúdium náboženstva Proroka (mier s ním) je analýza arabských textov, z ktorých takmer všetky boli napísané veľmi dávno. V modernej arabčine je viac ako 12 miliónov slov (na porovnanie, v ruštine je 131 000 a v angličtine asi milión ...). Je to veľmi bohatý a zložitý jazyk. Keď som študoval na Islamskej univerzite v Sýrii, náš učiteľ, filológ, nám dal nasledujúci príklad: v arabčine počet synoným len pre jedno slovo „ťava“ dosahuje šesťtisíc! Jeho gramatika je tiež veľmi zložitá a mnohostranná. Jeho štúdium si vyžaduje poriadnu dávku intelektuálneho a vôľového úsilia. Preto medzi vykladačmi Koránu a hadísov proroka (mier s ním) nie sú žiadni amatéri. Je takmer nemožné ponoriť sa do významu posvätného textu bez solídnej arabskej slovnej zásoby a znalosti syntaxe, sémantiky a fonetiky tohto jazyka. Niekedy sa nájdu ľudia, ktorí sa nazývajú znalcami Koránu. Citujú citáty z Posolstva Najvyššieho, dávajú ľuďom rady. Ale ak sa ich spýtate na zdroj vedomostí, dostanete odpoveď: "Preklad som si prečítal." Takíto ľudia sú pre islam veľmi nebezpeční, pretože bez toho, aby vedeli, čo robia, môžu zaviesť zmätok a nepresnosti vo výklade posolstva Všemohúceho. V islamských vzdelávacích inštitúciách sa široko praktizuje nasledujúca metodológia výučby: študenti základných škôl niekoľko rokov študujú výlučne arabskú filológiu. A len po dostatočnom zvládnutí potrebného množstva materiálu získajú prístup k štúdiu textov Koránu. Arabský jazyk je teda akýmsi odrazovým mostíkom k osvojeniu si informácií o islame. Arabčina je navyše jazyk, ktorým budú obyvatelia raja hovoriť. Sláva Alahovi, že nás stvoril moslimov! Čo nám dal krásny, bohatý arabský jazyk za pochopenie našej vôle!

1. Toto je príbeh, o ktorom si ľudia prestali rozumieť a objavili sa mnohé jazyky moderného sveta. Aký populárny je tento mýtus medzi rôznymi národmi a aké sú jeho interpretácie?

2. Mýtus o Babylonskej veži je založený nielen na presvedčení, že spočiatku celé ľudstvo hovorilo rovnakým jazykom, ale aj na skutočnosti, že tento jazyk bol „ideálny“: názvy predmetov vyjadrovali ich pravú podstatu. Zdieľajú tieto názory aj predstavitelia iných kultúr a veria, že ich jazyk je najbližší originálu?

Odpoveď na prvú otázku ponúka Kniha Genezis 11:1-9, kde sa hovorí, že Boh sa rozhodol potrestať ľudskú rasu tým, že na ňu uvalil kliatbu zmätenosti jazykov. Odpoveď na druhú otázku možno nájsť v Genesis 2:19. V tejto časti Boh priviedol všetky zvieratá a vtáky k Adamovi, aby počul, ako ich Adam bude volať, a „ako človek volá každú živú dušu, tak sa aj volala“. Improvizovaná prehliadka rôznych kultúr nám umožní vidieť, ako sú tieto problémy pokryté. Pokiaľ ide o prvý z nich, mnohí súhlasia so Starým zákonom: rozmanitosť jazykov je trestom Pána alebo prinajmenšom dôsledkom nejakého nepriaznivého faktora.

Legenda jedného z austrálskych kmeňov hovorí o jedení starých ľudí. Kmene, ktoré jedli samotné telo, hovorili „čistým“ jazykom a tí, ktorí jedli vnútorné orgány, hovorili „nečistým“ jazykom. Afričan Kabila verí, že ľudia začali hovoriť rôznymi jazykmi v dôsledku konfliktu. Podľa kmeňa z Assamu bol zmätok jazykov spôsobený tým, že tri deti kedysi lovili potkana. Jeden z amazonských kmeňov je toho názoru, že Boh rozdelil ľudí a ich jazyky, aby sa mu stali poslušnejšími. Medzi domorodým obyvateľstvom Ameriky, kmeňom Maidu (Kalifornia), sa verí, že ľudia spočiatku hovorili rovnakým jazykom, ale raz, na pohrebnom obradu, jazyk prestal byť rovnaký. Irokézovia veria, že oddelenie jazykov bolo spôsobené rodinnou hádkou, ktorá vyústila do vraždy dieťaťa. Ale predpoklad, že viacjazyčnosť je prekliatie, nie je taký bežný, ako sa zdá. Vo svete existuje veľa verzií, podľa ktorých k oddeleniu došlo v dôsledku prírodných procesov.

Staroveký indický posvätný hymnus „Rigveda“ spomína, že kedysi existoval Vak („slovo“) a bohovia ho rozdelili do mnohých podôb. Národy Indočínskeho polostrova rozprávajú o šiestich rasách, z ktorých každá mala svoj vlastný jazyk v podobe stonky, ktorá sa vlnila z tekvice. Kmeň Quiche (Guatemala) má mýtus, že ľudia žili spolu a hovorili rovnakým jazykom, kým sa nerozdelili do skupín. Každá si vybrala svojho boha a začala hovoriť vlastným jazykom.

Mýtus o stvorení juhoamerického kmeňa Navajo hovorí o „Meniacej sa žene“ a objavení sa skutočných národov, ktoré hovorili jej jazykom. Vytvorila teda susedné národy - pueblo, mexických domorodcov a ďalších, ktorí hovorili svojimi jazykmi a šírili ich rôznymi smermi. V islame Korán učí, že Adam si nevymyslel mená ani nič iné, ale všetko ho naučil Alah. Rozmanitosť jazykov je úplne prirodzená a je prejavom moci Alaha. Všetci ľudia sú schopní porozumieť zjaveniam Koránu, bez ohľadu na to, v akom jazyku sú napísané.

Mytologický systém mnohých národov sveta nemá vysvetlenie pre miešanie jazykov, ktoré sa jednoducho považuje za samozrejmosť, a preto nemôže odpovedať na našu otázku. Takmer vo všetkých kultúrach sveta však existuje zmienka o „ideálnom“ jazyku (otázka 2). Vyššie sme spomenuli austrálsky kmeň, ktorý verí, že niektorí ľudia (ktorí jedia ľudské telo) hovoria „čistým“ jazykom, ktorý vyjadruje skutočnú podstatu vecí. Podľa starých Egypťanov boh Ptah dával všetkému mená, a tak sa jazyk stal darom od bohov. V Číne vyučovali „správny“ jazyk mýtickí cisári. Korán vníma rozmanitosť jazykov ako rozdelenie jedného jazyka, ktorý zahŕňa všetky ostatné.

Všade sa ľudia snažia prísť na to, ako názov objektu prezrádza jeho podstatu. Predpokladá sa, že buď „ideálny“ jazyk popisujúci skutočnú podstatu objektu existuje dnes, alebo zostal v minulosti. Druhý predpoklad slúži ako predpoklad hľadania pravdy a harmónie vo svete. Zdá sa, že predstavy o prepojení jazyka a reálneho sveta a ľudskej existencie sú zakorenené v našom vedomí. V tejto súvislosti vyvstáva otázka, ktorá prvýkrát zaznela v Platónovom dialógu „Cratilus“ a odvtedy je predmetom neustálej diskusie: či je spojenie medzi menom a objektívnou podstatou vecí prirodzené (vznikajúce v subjektívnom vedomí rodeného hovorcu? ) alebo je toto spojenie podmienené a náhodné?

Jazyk je znakový systém, ktorý vám umožňuje prejsť od významu a zmyslu pojmu k jeho označeniu.

Človek je verbálny tvor a na rozdiel od zvierat komunikuje s vlastným druhom pomocou jazyka. Niekedy hovoria o "jazyku zvierat", ale je zrejmé, že takýto výraz je podmienený - pokiaľ ide o jeho bohatstvo a schopnosti, jazyk zvierat nie je podobný ľuďom. Anjeli zas na svoju komunikáciu nepotrebujú jazyk vôbec – ťažko si predstaviť, že by hovorili rusky alebo anglicky.

Funkcie jazyka môžu byť rôzne - okrem sprostredkovania informácií pomáha vyjadrovať pocity a hodnotenia.

Dá sa preložiť Písmo?

Jazyk Cirkvi je jazykom modlitby, uctievania a Písma.

V niektorých náboženstvách posvätné texty spočiatku existujú v jednom konkrétnom jazyku a považujú sa za zásadne nepreložiteľné. Moslimský Korán bol teda pôvodne zostavený v arabčine. Moslimovia navyše veria, že takto vznikla táto kniha na začiatku vekov.

Židovskí pisári boli tiež naklonení myšlienke možnosti posvätných textov iba v hebrejčine. To nebol prípad kresťanského Písma od začiatku.

V 3. storočí pred n. bol realizovaný takzvaný „preklad sedemdesiatky“ – Septuaginta – preklad Starého zákona do gréčtiny. Navyše, niektorí bádatelia sa domnievajú, že to bola Septuaginta, ktorá zohrala úlohu Svätého písma v medzizákonných časoch.

Práve existencia Septuaginty sa stala hlavným argumentom v prospech principiálnej preložiteľnosti Písma. Existuje však ešte silnejší. Teraz sa považuje za dokázané, že Kristus hovoril s apoštolmi v aramejčine. Ale zostavovatelia evanjelií neváhali sprostredkovať tieto rozhovory v gréčtine.

Teraz existuje vedecký smer - lingvistická rekonštrukcia. Ich zostavovatelia sa snažia pochopiť, ako tieto dialógy zneli v origináli. Ale stále je to predmetom vedeckých štúdií.

Je to naozaj v rajichladný?

Pri preklade jazyka do jazyka niekedy vznikajú problémy, pretože jazyky nie sú gramaticky identické. Významy a odtiene slov v rôznych jazykoch sú tiež odlišné.

Napríklad fráza „nebo je horúce a chladné miesto“ jasne ukazuje, že Písmo bolo vytvorené v krajinách s horúcim podnebím, kde je „chlad“ skôr príjemný. V ruštine by takéto združenia sotva vznikali. A sloveso „ochladiť“ vo význame „oddýchnuť si“, „baviť sa“ sa do ruštiny dostalo ako pauzovací papier z hebrejčiny cez gréčtinu.

Rozumeli všetci Slovania Biblii?

Písmo bolo našim predkom prinesené neruským spôsobom. Cyril a Metod - Solunskí Gréci - vyvinuli nový spisovný jazyk založený na hovorovej reči Solunských Slovanov.

Vo svete veľa ľudí používa jazyky, ktoré nemajú písaný jazyk. Pokiaľ hovoríme o každodennom živote, neexistujú žiadne problémy. Ale len čo treba preložiť do takéhoto jazyka náboženský text alebo filozofický traktát, treba jazyk zdokonaliť, čo urobili Cyril a Metod.

Ak predpokladáme, že slovanské kmene pred niekoľkými tisíckami rokov bolo ľahšie dohodnúť sa medzi sebou ako moderné slovanské národy, potom budeme mať pravdu - jazyky boli bližšie. To však neznamená, že preklad Svätého písma, ktorý urobili Cyril a Metod, bol pre obyvateľov Kyjeva a Novgorodu zrozumiteľnejší - písaný spisovný jazyk bol iný.

Možno je to črtou ruskej situácie, keďže ruský literárny jazyk je bližšie k cirkevnej slovančine ako k moskovskému dialektu. V skutočnosti celý cirkevnoslovanský jazyk vstúpil do ruštiny ako „vysoký pokoj“. Napríklad aj moderné príčastia – ako plač, beh – sa tvoria presne podľa cirkevnoslovanského vzoru – v starej ruštine to bude „plač“, „beh“.

Niekedy staré ruské náprotivky úplne vypadli - „dobré“ a „bologo“ v mene „Bologoye“; "Shelom", ktorý je na rozdiel od "helmy" iba v eposoch.

Jazyky sú si blízke a ... paralelné

V starovekom Rusku bola situácia diglosie. Toto nie je ako bilingvizmus. Diglosia je používanie dvoch jazykov paralelne v spoločnosti. Napríklad v XIX storočí sa používala ruština aj francúzština. Francúzština bola jazykom vyššej spoločnosti, ale v zásade sa dal preložiť akýkoľvek text.

V diglosii sa jazyky z hľadiska používania neprekrývajú. Hovorili starou ruštinou, starou ruštinou vedeli napísať domácu poznámku. Ale modlili sa cirkevnou slovančinou.

Tento stav existoval už pred Petrom, v 18. storočí sa postupne zrútil. Teraz sa veda a literatúra mohli rozvíjať v ruštine, ale v cirkevnej slovančine stále existujú iba modlitby. Preložte do cirkevnoslovanskej reklamy - a bude to vyzerať ako vtip alebo rúhanie.

Kňaz alebo pastier?

Žijeme v jedinečnej dobe. V cárskom Rusku sa Biblia dala čítať v ruštine, v starom Rusku ju bolo možné počúvať v cirkevnej slovančine. Ale väčšina ľudí bola negramotná alebo nebola dostatočne vzdelaná, aby čítala a vnímala Písmo.

V sovietskych časoch sa každý stal gramotným, ale neexistoval žiadny text Písma.

Gramotnosť je stále zachovaná a texty sú dostupné.

Okrem samotného Písma sme pozvaní osvojiť si ešte niektoré slovanské texty – od modlitieb až po služby Božie. Je pravda, že existujúci preklad do ruštiny je trochu ťažko pochopiteľný. V 19. storočí, ktorí nemali obdoby, prekladatelia často prekladali slovanstvo do prekladu.

Takže fráza „Ja som dobrý pastier“ prešla do prekladu. A tu sú niektoré ťažkosti. Doslovný preklad z gréčtiny by znel: „Som dobrý pastier“, ale takýto preklad je vnímaný ako nízky. Na druhej strane, o vznešenom „farárovi“ dnes prostý poslucháč vníma skôr ako „kňaza“. Treba však priznať, že doslovný preklad mnohých biblických výrokov do ruštiny – slovné spojenie „ústami dieťaťa hovorí pravdu“ – ako filozofické porekadlo vnímať nebude.

Ale vo všeobecnosti vnímaniu slovanského textu Biblie viac bráni nepochopenie významu, a nie slov.

Samostatnou ťažkosťou sú gramatické konštrukcie. Existuje napríklad množstvo vylepšení, ktoré pochádzajú z gréčtiny. „Odpustiť hriechy a priestupky“ jednoducho znamená odpustiť všetky hriechy. Konštrukcie typu „hneval som sa hnevom“, „miloval som láskou“ sú podobné.

Problémy vznikajú aj pri prekladaní posvätných textov do iných jazykov (hoci národy, do ktorých jazykov ešte nebolo preložené Písmo, tvoria možno 5℅ svetovej populácie). To znamená, že práca, ktorú Cyril a Metod vykonali pre Slovanov, pokračuje.

Cyril a Metod neboli prví – predtým existovali preklady do etiópčiny, gótčiny. Po Cyrilovi a Metodovi preložil Sväté písmo Štefan z Permu do zyrijského jazyka.

Posvätné a svetské preklady

Je každý preklad považovaný za posvätný text? Nie, ale len do tej miery, do akej je to akceptované v cirkevných spoločenstvách. Napríklad synodálny preklad ako liturgický preklad nie je zakázaný, ale nie je akceptovaný. Ale ako taký ho používajú protestanti, napríklad ruskí baptisti.

Existujú dokonca aj moderné prúdy protestantizmu, ktoré veria, že biblický text by mal byť dostupný každému. Vychádzajú aj komiksy na biblickú tematiku.

S textom Nového zákona nie sú žiadne problémy – jeho zdroj je známy v gréčtine. Ale základom synodálneho prekladu Starého zákona bol hebrejský text. Fragmenty z gréckeho prekladu boli vložené len vtedy, keď boli nezrovnalosti zásadné.

V modernej verzii by bolo pekné mať dva preklady – oba z hebrejských masoretských textov a z gréčtiny. Bolo by to výhodné pre tých, ktorí neovládajú oba jazyky.

Odpovede na otázky

Po prejave dostal veľkňaz Alexander niekoľko otázok:

Akým jazykom hovoril Adam?

- Ťažko povedať. Na jednej strane sa jazyk mení, kým žije. Nikto však nevie, či to nebola nová vlastnosť jazykov, ktorá sa objavila po výstavbe Babylonskej veže.

Ale v každom prípade sa Adamov jazyk pravdepodobne nepodobal žiadnemu z existujúcich jazykov, vrátane hebrejčiny.

Existuje nejaká polemika o preklade služby do ruštiny?

- O tejto myšlienke sa diskutovalo už pred revolúciou a renovátori ju čiastočne skompromitovali. Všetci neslúžili v ruštine, ale myšlienku podporili.

Preklad Biblie do ruštiny nebol jednoduchý, hoci myšlienka Metropolitného filaretu, že je potrebné prekladať z hebrejčiny aj gréčtiny, bola múdrym rozhodnutím. Aj keď nám to nedalo vedecké preklady z oboch jazykov.

Existujú jednotlivé prípady použitia ruského jazyka - modlitba starcov Optiny a akatist "Sláva Bohu za všetko" boli pôvodne napísané v ruštine.

Existuje toľko iných prekladov a pri ich implementácii bude toľko nuancií, že je jednoduchšie texty trochu rusifikovať, ako ich prekladať.

Tento proces prebieha spontánne už dlho. Niekedy sa vyskytnú incidenty: napríklad v „obrade svadby“ je duál niekedy nečakane nahradený množným číslom a v moderných akatistoch sa používa nejednotne.

Ako sa Božia prozreteľnosť podieľa na formovaní rôznych jazykov?

- Jazyk existuje mimo ľudskej vôle. Človek môže vytvoriť esperanto, ale prirodzené jazyky existujú podľa ich vlastných zákonov.

Cyrila a Metoda preložené do cirkevnej slovančiny inšpiráciou zhora, ale aj podľa dovtedy existujúceho vzoru.

Inšpiráciou zhora, písaním evanjelií v gréčtine, apoštoli položili myšlienku prekladu evanjelia.

Pripravila Daria Mendeleeva

Fotografiu Dmitrija Kuzmina

OTÁZKA: Assalam alaikum aha!

Tu som narazil na tento článok. Ak sa nemýlim, napísal si to opačne. Ak to nie je ťažké, môžete tento článok znova komentovať.

moslimský.

Arabčina je jazykom Koránu. Bol vyvoleným spomedzi všetkých jazykov sveta a má mimoriadne vlastnosti. Tento jazyk je tiež jazykom proroka Mohameda (mier a požehnanie Alaha s ním). Tento jazyk je bohatý a žiadny zo svetových jazykov mu nemôže konkurovať. Má duchovný a fyzický vplyv na toho, kto hovorí týmto jazykom.

Predtým Arabi organizovali súťaže v poézii, ale keď Prorok (s.a.s.) dostal Zjavenie, Arabi boli takí ohromení takou úžasnou výraznosťou jazyka a dokonca si niektorí mysleli, že Korán má na človeka magický vplyv. Ak chce niekto opraviť jedno slovo alebo písmeno z Koránu, bude narušená celá harmónia Božskej knihy. Ani jediné slovo Koránu by sa nemalo zmeniť, inak sa zmení význam a fonetika.

Vieme, že niektoré slová majú tendenciu časom zastarať a nepoužívame ich. A jazyk Koránu nestratil svoj význam už 1439 rokov ...

Vyučujem o Koráne už viac ako 10 rokov a dodnes som nestretol ani jedného z mojich študentov, aby mi položil otázku: „Prečo študujeme Korán? odkiaľ to prišlo? Aké výhody má? Čím sa líši od čítania zľava doprava?" Deň čo deň rastie počet ľudí, ktorí chcú študovať arabskú abecedu a pravidlá tajwid, aby si neskôr mohli prečítať Korán z originálu. Málokto sa však zamýšľa nad odpoveďou na vyššie uvedené otázky. A nakoniec, keď im hovorím o výhodách Koránu, o jeho výhodách, mnohí sa do toho začnú ponárať.

Arabský jazyk má 29 písmen. Zvuky sa tvoria na hranici hrtana, v strede hrtana, hrudníka, medzi koreňom jazyka a ústnou dutinou. Zvuky arabského jazyka „čistia“ ústnu dutinu a je menej náchylná na choroby. Arabčina je tiež dobrý logopéd. Lieči pískanie a nesprávnu výslovnosť písmena „r“. Tento jazyk pomáha aj ľuďom so zrakovým postihnutím. Pretože čítanie arabského textu zľava doprava zlepšuje zrakový aparát človeka a uvoľňuje ho. Oválny, okrúhly tvar písmen je dobrý aj na psychiku.

Všetky písmená arabskej abecedy sú spoluhlásky. Neexistujú žiadne špeciálne písmená pre samohlásky. Rozlišujú sa krátke a dlhé samohlásky. Krátke samohlásky sa prenášajú písomne ​​pomocou samohlások - horných a dolných indexov. Taktiež z 28 písmen je 22 písmen spojených na oboch stranách a 6 písmen je spojených iba vpravo.

Korán sa k nám dostal už 23 rokov bez skreslenia. Korán je posledná božská kniha a po nej už nebudú žiadne ďalšie knihy. Bol poslaný dolu celému ľudstvu. Zákony Koránu zostanú v platnosti až do dňa súdu a nebudú sa meniť. Korán je večný, veľký zázrak Všemohúceho, daný prorokovi Mohamedovi (s.a.s.). Čítanie Koránu je uctievanie. Odporúčam každému, aby si túto neskutočne úžasnú knihu prečítal každý deň a poznal jej význam. Poponáhľajte sa, aby ste sa naučili čítať a rozprávať sa so svojím Stvoriteľom. Alah nám dá, aby sme boli obyvateľmi Jannatu a hovorili arabským jazykom, ktorý si On sám vybral.

Dilyar Bektayeva,

ustaz of Aktobe regional

centrálna mešita "Nur Kasyr"

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

ODPOVEĎ: wa aleikum ako salám brat!

Takých ako ona, domácich a ignorantských „falošných ustazov“ treba od moslimov odohnať, aby ich nezavádzali. Raz sa v mešite Aktobe šíria takéto nezmysly a držia nevedomých učiteľov, možno preto je v tomto meste toľko extrémistických sektárov. Ani Korán, ani Sunna neobsahujú ani len náznak toho, že arabčina bude spoločným jazykom pre všetkých obyvateľov Raja. Premýšľajte sami, ako budú predstavitelia iných národností medzi sebou komunikovať v raji, ak nepoznajú arabský jazyk?!

Predtým odpovedal na podobnú otázku:

Vyvinutý adaptívny jazyk PARADISE dialógového programovacieho systému DSPP Moskovská štátna univerzita Fakulta výpočtovej matematiky a kybernetiky N.P. Brussentsov, V.B. Zacharov, I.A.Rudnev, S.A. Sidorov, N.A. Chanyshev Moskva, 1987

Všeobecný popis jazyka RAJA

Účel a účel rozvoja jazyka

PARADISE (Developable Adaptive Language) je základný jazyk štruktúrovaného programovacieho dialógového systému DSPP. Basic znamená, že je základom pre všetky ďalšie konštrukcie uskutočňované v DSSP rozvíjaním (rozšírením, posilňovaním) základného jazyka a prípadne prispôsobením takto vytvorených jazykových prostriedkov konkrétnej aplikácii. Na rozdiel od takzvaných vysokoúrovňových jazykov PARADIS neposkytuje hotové dátové typy a operácie, ale iba prvky a primitívy na efektívne definovanie požadovaných typov. Napríklad pôvodné dátové formáty sú 8-bitové bajty, 16-bitové slová a 32-bitové slová, ktoré sa interpretujú v závislosti od operácií, ktoré sa na nich vykonávajú, ako celé čísla, booleovské vektory, písmenové kódy, boolovské hodnoty, ukazovatele údajov a procedúr. V tomto prípade je možné na jednej strane manipulovať s jednotlivými bitmi bajtov a slov a na druhej strane vytvárať zložené dátové jednotky (slová viacerých dĺžok, vektory, polia, textové reťazce atď.), nastavenie pre nich jedného alebo druhého výkladu zavedenie vhodných operácií. Takže je možné zaviesť reálne čísla požadovanej dĺžky a rozsahu hodnôt, komplexné čísla a iné objekty a verzia jazyka orientovaného na túto aplikáciu bude zahŕňať objekty a prostriedky obsiahnuté v tejto aplikácii a nebude zahŕňať to, čo sa nevzťahuje na to, - jazyk sa prispôsobí (prispôsobí) aplikácii. Vývoj DSPP sledoval cieľ vytvorenia široko dostupného a efektívneho programovacieho nástroja pre mikropočítače, t.j. počítače založené na mikroprocesoroch. Podstatným znakom architektúry mikroprocesorov je elementárnosť dátových typov a operácií, čo znamená na jednej strane univerzálnosť, na druhej strane pracnosť programovania. Mikroprocesory a mikropočítače vytvorené na ich základe majú vďaka svojej všestrannosti potenciálne neobmedzené aplikačné možnosti. Praktická implementácia týchto schopností však stojí predovšetkým na prácnosti vývoja požadovaných aplikačných programov. Navyše uspokojivé aplikačné programy je možné vytvárať len s hlbokou a jemnou znalosťou špecifík príslušných aplikácií, t.j. mali by byť vyvinuté nielen programátormi, ale aj vysokokvalifikovanými odborníkmi v tej či onej oblasti. Programovací systém by preto mal nielen výrazne zvýšiť produktivitu práce programátora, ale byť aj taký jednoduchý, aby ho zvládli a efektívne používali aj neprofesionálni programátori.

Radikálnym riešením tohto problému by sa zdalo výrazné zjednodušenie počítačovej architektúry. Ale, žiaľ, architektúra mikropočítačov sa vyvíja diametrálne opačným smerom – cestou narastajúcej zložitosti a prepracovanosti, takže pre profesionálneho programátora dnes nie je jednoduché dokonale ovládať jazyk zostavovača mikropočítačov. Systémové programovacie jazyky ako C alebo PL/M do určitej miery (aj keď zďaleka nie dostatočnej) znížili náročnosť vývoja programu, no len ťažko ich možno odporučiť ľuďom, ktorí nemajú s programátorským remeslom skúsenosti. Široko dostupný jazyk by mal byť, samozrejme, jednoduchší a prirodzenejší, mal by vychádzať čo možno z bežných, známych predstáv o podstate a technike programovania.

Okrem dostupnosti a výrazného zníženia zložitosti vývoja programu v porovnaní s programovaním v jazyku symbolických inštrukcií si DSPP vyžadoval univerzálnosť jazyka, rovnakú ako v jazyku symbolických inštancií, vysokú efektivitu stroja (tj kompaktnosť a rýchlosť kód), spoľahlivosť testovateľnosti vytvorených programov a ich udržiavateľnosť a modifikovateľnosť, ako aj mobilita (prenosnosť) systému a programov v ňom vyvinutých na stroje rôznych architektúr.

Procedurálne programovanie

Programovanie v jazyku PARADISE je dosť podobné tak rozšíreným typom ľudskej činnosti, ako je plánovanie a organizovanie vzájomne súvisiacich akcií, prác, procesov alebo stavba zložitých hmotných objektov – strojov, jednotiek, štruktúr. Podobne ako dizajnér, ktorý realizuje svoj nápad agregovaním svojich základných častí (bloky, zostavy, časti), programátor syntetizuje požadovanú komplexnú akciu z jednoduchých akcií poskytovaných jazykom. Môžeme tiež povedať, že programovanie (dizajn) je postupný rozklad (rozklad) implementovaného objektu na stále menšie komponenty.

V jazyku PARADISE je hlavným „konštruktom“ postup – pomenovaná akcia. Jazyk je založený na obmedzenom súbore najjednoduchších postupov (primitívov), reprezentovaných vlastnými názvami (označeniami). Napríklad: + znamená pridať, NEG znamená zmeniť znamienko, VCTR znamená vytvoriť vektor. Ide najmä o primitívy: a; (dvojbodka a bodkočiarka), umožňujúci zadať novú procedúru napríklad s názvom P, pričom ju definujú ako postupnosť procedúr P1, P2, ..., PN v tvare

: P P1 P2 ... PN;

Ak procedúra P predstavuje akciu, ktorú má vytvorený program vykonať, je konštrukcia tohto programu pomocou jazyka PARADISE zredukovaná na postupné detailovanie procedúr P1, P2, ..., PN. To znamená, že každá z týchto procedúr musí byť definovaná sekvenciou menších procedúr, ktoré sú potom definované sekvenciami ešte menších procedúr a tak ďalej, až kým sa nedosiahnu definície pozostávajúce len z primitív.

Tento návrh programu, ktorý začína od daného cieľa a postupne zmenšuje postupy, ktoré používa, až po jadro jazyka, je známy ako programovanie zhora nadol. Je to hlavný spôsob získania programov v jazyku PARADISE na riešenie individuálnych, presne definovaných problémov. Opakom je programovanie zdola - budovanie systému postupne rozšírených postupov založených na základných prostriedkoch jazyka, zameraných na určitú problémovú oblasť. Týmto spôsobom sa uskutočňuje vývoj jazyka a jeho prispôsobenie konkrétnej aplikácii.

V oboch prípadoch je nevyhnutné dôkladné štruktúrovanie vytvorených programov: každý program a každá časť programu musí pozostávať z malého počtu samostatných častí, z ktorých každá plní špecifickú funkciu a umožňuje autonómne overenie. Vzhľadom na jazyk PARADISE to znamená najmä to, že definície procedúr by mali byť krátke: definujúca postupnosť by spravidla nemala obsahovať viac ako 5-7 členov. Štruktúrovanie poskytuje prehľadnosť, overiteľnosť a modifikovateľnosť programu, výrazne znižuje náročnosť jeho tvorby a údržby.

Vyššie uvedený príklad definovania postupu P je zjednodušený. V skutočnosti môže definujúca postupnosť obsahovať ako členy nielen názvy procedúr, ale aj inštrukcie (príkazy) pozostávajúce z viac ako jedného slova. Názov procedúry, ak sa používa mimo kombinácie s inými slovami, je príkazom na vykonanie procedúry, ktorú určil. Postupnosť názvov procedúr určuje vykonávanie týchto procedúr v poradí ich názvov za sebou (v lineárnom poradí). Na špecifikáciu ďalších sekvencií vykonávania poskytuje PARADISE špeciálne slová (predpony), ktoré predpisujú vykonávanie procedúr pomenovaných v kombinácii s nimi v závislosti od špecifikovanej podmienky, ako aj opakované (cyklické) vykonávanie procedúry.

Napríklad lineárna sekvencia P0 P1 spôsobí, že sa vykoná procedúra P0 a potom sa vykoná procedúra P1. Ak sa procedúra P1 musí vykonať nie vždy, ale skôr ak je za predpokladu, že v dôsledku vykonania P0 sa získa kladné číslo, tak namiesto P1 zapíšu príkaz na vykonanie podľa podmienky: IF + P1, t.j. namiesto P0 P1 bude P0 IF + P1. PARADISE obsahuje sadu prefixových podmienok, ktoré umožňujú efektívne vyjadriť podmienené vykonanie, ako aj výber z dvoch, troch alebo viacerých procedúr.

Viacnásobné vykonanie postupu je špecifikované pomocou predpony RP. Príkaz RP P teda znova a znova volá vykonanie procedúry P, kým sa nevytvoria podmienky, za ktorých sa spustí EX obsiahnutý v tele tejto procedúry - výstup zo slučky, po ktorom sa vykoná ďalší príkaz v lineárnom poradí. . Podmienkou opustenia slučky môže byť napríklad nulová rovnosť niektorej premennej X, ktorá je vyjadrená ako:

Procedúra, ktorej meno sa objavuje v definícii inej procedúry, sa považuje za vnorenú do nej. Vnorená procedúra, ak nie je primitívom, môže zas obsahovať vnorené procedúry, t.j. hniezdenie môže byť viacnásobné. Pravidlá jazyka PARADISE navyše nezakazujú zahrnúť do definície procedúry vlastný názov alebo názov procedúry obsahujúci tento názov, t.j. PARADISE umožňuje rekurziu.

Opakovane vykonávaná procedúra môže byť vnorená aj do opakovane vykonávanej procedúry. V tomto prípade sú slučky vnorené. PARADISE umožňuje viacnásobné vnorenie slučiek.

Lineárna postupnosť príkazov, vnorenie, podmienené a cyklické vnorenie procedúr - tým sa vyčerpávajú možnosti konštrukcie programov v jazyku PARADISE. Nedostatok, homogénnosť a prirodzenosť týchto prostriedkov je zárukou ľahkého ovládania a používania jazyka. Zároveň je to dôsledný štruktúrovaný programovací jazyk, ktorý poskytuje výrazné zníženie náročnosti vývoja a spoľahlivosti programu.

Postupy a údaje

Všetko, čo bolo doteraz povedané, je charakteristikou jazyka RAJA ako prostriedku na predpisovanie akcií, konštruovanie ľubovoľných akcií z konečnej množiny primitívnych operácií. Druhú stranu jazyka predstavujú prostriedky reprezentujúce objekty, na ktorých sa vykonávajú akcie – prostriedky prezentácie a organizácie údajov.

Mimoriadne jednoduchým dátovým prvkom je dvojciferný prvok – bit. Všetky ostatné formáty a dátové typy sú zostavené z bitov. V jazyku PARADISE sú ako základné formáty akceptované 8-bitové bajty, 16-bitové slovo a 32-bitové dlhé slovo. V závislosti od operácií, ktoré sa na nich vykonávajú, bajty, slová a dlhé slová pripúšťajú mnohé interpretácie, t.j. môže slúžiť ako základ pre rôzne typy údajov. Sú tiež východiskom pre formovanie kompozitných formátov a typov.

PARADISE v skutočnosti neobsahuje ani jednoduché, ani kompozitné dátové typy - existujú len základné formáty (bajt, slovo, dlhé slovo) a prostriedky na zostavenie zložených formátov z nich: vektory a viacrozmerné polia. V tomto prípade sa rovnaké bajty (slová, dlhé slová) v závislosti od operácií, ktoré sa na nich vykonávajú, interpretujú ako bitové vektory alebo ako binárne celé čísla so znamienkom a bez znamienka alebo ako písmená vstupnej / výstupnej abecedy atď. Dátové typy a ich súvisiace obmedzenia a kontroly môžu byť zavedené v problémovo orientovaných jazykových rozšíreniach.

V základnom jazyku deklarácia názvov údajov vykonáva iba funkciu poskytovania prístupu k údajom podľa názvu: názov je spojený s počtom pamäťových buniek požadovaných deklaráciou a mechanizmom na prístup k nim. Testovacie a transformačné operácie nie sú priamo aplikované na pomenované dáta. Tieto operácie sú definované na zásobníku operandov, čo je sekvencia 32-bitových dlhých slov (prvkov zásobníka) dynamicky modifikovaných pridávaním (vtláčaním) nových prvkov na jeho koniec, ako aj odstraňovaním prvkov z rovnakého konca (vyskakovanie zo zásobníka ). Prvky sa sťahujú v opačnom poradí, ako boli odoslané: ako prvé sa stiahne to, čo odoslal posledný. Dáta, ktoré sa majú testovať alebo konvertovať, sa vložia do zásobníka, kde sa s nimi vykonajú predpísané operácie, po ktorých sa výsledky spracovania dajú zo zásobníka vybrať.

Ak je napríklad premenná X deklarovaná ako 32-bitové slovo, možno s ňou priamo vykonať iba dve operácie:

1) presunutie jej hodnoty do zásobníka, čo sa deje automaticky vždy, keď je spomenuté meno X,

2) priradenie k nemu príkazom! Hodnota X poslednej (hornej) položky vyskočenej zo zásobníka.

Ak povedzme chcete zdvojnásobiť hodnotu X jej pridaním k sebe, môžete to urobiť vykonaním nasledujúcich príkazov jeden po druhom:

Dve kópie hodnoty X sa vložia do zásobníka, potom ich príkaz + vysunie, pridá a natlačí výsledné množstvo na zásobník, potom príkaz! X odstráni túto sumu a priradí jej hodnotu premennej X.

Zvyčajná notácia daného príkladu pre jazyky na vysokej úrovni v tvare X: = X + X je programátorovi známejšia, ale nie je priamym odrazom postupnosti inštrukcií vykonávaných procesorom, ale je druh matematického vzorca. Je to výhodné pri programovaní výpočtových úloh, avšak v základnom jazyku sa javí ako dôležitejšia jednoznačná zhoda s vykonávanými príkazmi, pretože program možno kontrolovať príkazom priamo v programovacom jazyku a nie je potrebné poznať jazyk. vôbec iný ako jazyk procesora.

Obzvlášť cennou výhodou vrstveného spracovania údajov je však to, že testovacie a transformačné rutiny možno definovať a implementovať nezávisle od údajov, na ktoré sa aplikujú. Testovacie a transformačné operácie nie sú formulované s ohľadom na dátové identifikátory (alebo názvy konštánt a premenných, formálne parametre), ale s ohľadom na prvky zásobníka, ktorým musia byť v čase operácie priradené hodnoty operandov. sa vykonáva. Napríklad operácia sčítania dvoch čísel vykonaná príkazom + (add) spočíva v tom, že sa zo zásobníka zoberú dva vrchné prvky (horný a podradený) ako sčítance, vypočíta sa ich súčet a vloží sa do zásobníka. Ak chcete pridať dve čísla, musíte ich hodnoty vložiť do zásobníka a vykonať príkaz +, výsledok bude na vrchu zásobníka.

Skúšobno-transformačný postup s ľubovoľným počtom vstupných a výstupných parametrov možno týmto spôsobom definovať jednoducho ako pomenovanú akciu (bez zoznamu parametrov) vykonanú na zásobníku obsahujúcom hodnoty argumentov v predpísanom poradí a po vykonaní - hodnoty výsledkov. Ak chcete použiť takýto postup na konkrétny súbor špecifických údajov, je potrebné tieto údaje vložiť do zásobníka v príslušnom poradí. Po ich spotrebovaní procedúra zanechá svoje výsledky v zásobníku (tiež usporiadané v určitom poradí).

Inými slovami, názvy procedúr v jazyku PARADISE sa používajú rovnakým spôsobom ako znaky operácií a sú to v podstate symboly operácií s ľubovoľným počtom operandov. V súlade s princípom fungovania zásobníka sa operácie píšu v postfixovej forme, t.j. názov operácie je umiestnený za zoznamom názvov alebo hodnôt jej operandov. Ak napríklad označíte operáciu získania súčtu troch čísel symbolom ++, súčet čísel A, 5 a B bude vyjadrený takto:

Bolo by možné stanoviť formálne pravidlá postfixového jazyka a riadiť sa nimi pri písaní programov, ale pre človeka je jednoduchšie a bezpečnejšie narábať nie s pravidlami, ale s modelom zásobníkového procesora, t. s modelom stroja, pre ktorý sú programy vytvorené a ktorý ich bude vykonávať. V prípade jazyka PARADISE je takýmto strojom DSPP-procesor - súbor hardvéru a programov, ktorý implementuje akcie predpísané v tomto jazyku.

DSP procesor

Fyzicky môže byť DSPP-procesor implementovaný vo forme mikroprocesora takej jednoduchej a efektívne programovateľnej architektúry, ktorá by umožnila najlepšie vyriešiť problém softvérového vybavenia mikropočítačov. Takýto mikroprocesor však ešte nebol vytvorený a jeho architektúra musí byť emulovaná na existujúcich mikropočítačoch, aby sa zlepšila ich programovateľnosť. Emulácia je samozrejme nákladná – na jej implementáciu je potrebná pamäť a strojový čas, no v prípade emulácie procesora PRSP sú tieto náklady relatívne malé.

Z pohľadu programátora je charakteristická pre procesor jeho architektúra, t.j. informácie o tom, čo je daný procesor ako nástroj na spracovanie údajov, aké sú možnosti prezentácie údajov na vstupe a vo vnútri procesora, aké operácie testovania a konverzie údajov sú k dispozícii, ako je usporiadaná vlastná pamäť procesora, ako aj prístup k hlavná a vonkajšia pamäť, aké sú ovládacie prvky priebeh programu, interakcia s vonkajším prostredím, reakcia na výnimočné udalosti a pod. Zvládnutie architektúry je predpokladom zmysluplného (neformálneho) programovania, čo výrazne znižuje počet chýb a zvyšuje spoľahlivosť programov.

Centrálnym článkom procesora DSPP je spomínaný zásobník operandov. V samotnom zásobníku sa vykonáva spracovanie a dáta sa spravidla prenášajú cez zásobník. Jednotlivé príkazy a krátke sekvencie príkazov cez zásobník je možné vykonávať ich privedením na vstup procesora priamo z klávesnice terminálu. V tomto prípade procesor DSPP simuluje činnosť postfixovej kalkulačky. Čísla a mnemotechnické kódy operácií zadávaných z klávesnice sú oddelené medzerami. Zadaný text sa zobrazí ako reťazec na obrazovke terminálu. Vstupným koncovým signálom a príkazom pre procesor "Vykonajte zadaný predpis" je stlačenie klávesu , tiež označované , ... Čísla prichádzajúce na vstup procesora sú vložené do zásobníka a príkazy sú vykonávané v zásobníku. Výsledok výpočtu získaný v hornej časti zásobníka možno príkazom skopírovať na obrazovku terminálu. (bodka).

Ak chcete napríklad vypočítať výraz (2-5) * 3 a zobraziť výsledok, zadajte:

2 5 - 3 * .

Po stlačení klávesu procesor vypíše výsledok, takže celý riadok bude vyzerať

* 2 5 - 3 * . -90

Hviezdičku na začiatku riadku vydáva procesor ako signál, že čaká na vstup.

V uvažovanom príklade procesor vnímal a spracovával vstupné čísla ako celé desatinné miesta. V skutočnosti pri zadávaní boli tieto čísla prevedené na binárny doplnok a pri výstupe boli prevedené späť do desiatkovej sústavy. Procesor PRSP umožňuje aj binárne, osmičkové a hexadecimálne I/O režimy. Pre prepnutie do požadovaného režimu je potrebné vykonať jeden z príkazov B2, B8, B10, B16, resp.

Stlačenie kláves spôsobí, že vstup procesora dodá kódy reprezentujúce písmená uvedené na týchto klávesoch (písmená, čísla, interpunkčné znamienka, symboly operácií). Postupnosť vstupných znakov tvorí vstupný reťazec – reťazec bajtov obsahujúci kódy znakov, jeden bajt na znak. Maximálna dĺžka vstupného reťazca je 80 znakov.

Procesor v ňom pri spracovaní vstupného reťazca izoluje slová – kombinácie písmen oddelené od seba medzerami a interpretuje ich. Ak je spracovávané slovo názvom operácie (procedúry) alebo daným, známym procesoru, potom procesor vykoná akcie, ktoré musia byť podľa definície nazývané týmto názvom. Ak procesor nepozná slovo, pokúsi sa ho interpretovať ako číslo, berúc do úvahy nastavený I/O režim.

Čísla sú rozpoznané ako slová pozostávajúce z číslic prípustných v danej číselnej sústave a prípadne obsahujúce znamienko mínus ako prvé písmeno. V hexadecimálnom režime vstupu/výstupu sú spolu s číslami platné aj latinské písmená A, B, C, D, E, F. Prijaté číslo sa skonvertuje na binárny doplnkový kód a vloží sa do zásobníka operandov ako 32-bitový slovo. V tomto prípade, ak je hodnota čísla mimo rozsahu reprezentovateľných hodnôt -2147483648: 2147483647, potom sa nahradí hodnotou porovnateľnou v module 2** 32 z tohto rozsahu.

V prípade, že spracovávané slovo nie je procesoru známe a nemôže byť prijaté ako číslo, procesor zobrazí na obrazovke terminálu správu: „Neviem<обрабатываемое слово>“a čaká na zadanie ďalších predpisov.

Zadávanie údajov vo forme voľného textu (sekvencie bajtov-písmen) sa vykonáva vo forme textových literálov, ktoré sú textom uzavretým v dvojitých úvodzovkách, napríklad: "Textový literál". Príchod textového literálu ako vstupu do procesora spôsobí, že text uzavretý medzi úvodzovkami sa zapíše do hlavnej pamäte ako reťazec bajtových písmen. V tomto prípade sa do zásobníka vloží adresa prvého bajtu a počet bajtov (dĺžka textu). Doslovný text, pred ktorým je bodka, interpretuje procesor ako príkaz „odoslať text medzi úvodzovkami na obrazovku terminálu“. Napríklad pridanie kombinácie symbolov na vstup procesora „No memory“ spôsobí hlásenie: Na obrazovke sa nezobrazí žiadna pamäť.

Kód jednotlivého znaku sa vloží do zásobníka ako najmenej významný bajt vrcholu, keď tento znak dorazí na vstup procesora spolu so znakom #, ktorý je mu vopred odoslaný. Napríklad kombinácia znakov #L odošle kód písmena L do zásobníka, kombinácia znakov #5 odošle kód číslo 5. Príkaz TOB na výstup bajtu do terminálu zobrazí znak, ktorého kód je obsiahnutý v nízkej byte hornej časti zásobníka.

Aj v režime priameho vykonávania príkazov procesor PRSP ďaleko prevyšuje možnosti bežnej kalkulačky, pričom užívateľovi okrem operácií spracovania dát poskytuje aj prostriedky na deklarovanie pomenovaných dát a definovanie procedúr, ktoré potom možno použiť spolu so základnými operácií. Názvy údajov sú deklarované a procedúry sú definované pomocou špeciálnych príkazov.

Ak chcete napríklad vytvoriť 16-bitovú premennú s názvom, povedzme, TEMP, napíšte na klávesnici a vložte ju na vstup procesora pomocou klávesu príkaz

VAR TEMP

Spolu s deklaráciou môžete premennej priradiť počiatočnú hodnotu, napríklad 0:

VAR TEMP 0! TEPL

Teraz príchod názvu TEMP na vstup procesora spôsobí, že aktuálna hodnota tejto premennej sa presunie do zásobníka a príkazom sa môže vykonať priradenie novej hodnoty vyskočenej zo zásobníka! TEPL.

Definícia procedúry sa zadáva príkazom: (dvojbodka), ktorý obsahuje názov definovanej procedúry a definuje reťazec príkazov písmenom; (bodkočiarka) ako znak konca definície. Ukážme si definíciu a použitie procedúr na príklade výpočtu faktoriálu prirodzeného čísla N podľa vzorca

N! = N* (N-1) * (N-2) * ... * 2 * 1, t.j. N-1 násobenie.

Postup FCT na získanie požadovaného výsledku musí vynásobiť dané číslo N postupným znižovaním čísel, počnúc od N-1 po 1, t.j. iba N-1 krát. V jazyku PARADISE sa to naprogramuje t-násobným vykonaním procedúry P: DO P, kde P je názov procedúry, t je aktuálna hodnota vrcholu zásobníka, ktorá udáva, koľkokrát procedúra P potrebuje. byť vykonaný.

Predpokladajme, že pred použitím postupu FCT sa číslo N vtlačí na zásobník a je na jeho vrchole. Aby bol postup prehľadnejší, znázorníme modifikovateľný multiplikátor premennej K:

Uvádzame definíciu postupu FCT v tvare:

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

Komentáre v hranatých zátvorkách odrážajú aktuálny stav zásobníka operandov. Tím! K, ktorým sa začína definovaná procedúra, priradí hodnotu čísla N prevzatého zo zásobníka do premennej K. Potom sa K na zásobník natlačí dvakrát a odčítaním 1 na vrchole zásobníka sa počet vykonaní tzv. vytvorí sa opakovaný postup F rovný N-1. Nasleduje príkaz DO F, ktorý predpíše cyklus, po ktorom bude vrch zásobníka obsahovať požadovanú faktoriálovú hodnotu - N !. tím. (bodka) vytlačí kópiu tejto hodnoty na obrazovku terminálu. Zostáva definovať procedúru F, ktorá upraví hodnotu K odčítaním 1 a vynásobí K čiastkový výsledok výpočtu R. obsiahnutý v zásobníku:

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

Overenie správnosti oboch procedúr sa vykonáva vykonávaním ich definícií po jednej, po každom príkaze sa na obrazovke terminálu zobrazí obsah zásobníka operandov a hodnota premennej K. Po dokončení procedúry FCT sa v hornej časti zásobník musí obsahovať hodnotu N ! a hodnota premennej K sa musí rovnať 1.

Skontrolované a opravené procedúry (ak boli pri overovacom procese zistené chyby) sa testujú ich aplikáciou na jednotlivé hodnoty čísla N. Keďže procedúra F je vnorená do FCT, pri poslednom testovacom procese sa testuje automaticky. Treba mať na pamäti, že hodnoty výsledku nesmú prekročiť maximálne kladné číslo reprezentované v doplnkovom kóde 32-bitovým slovom: 2147483647, t.j. FCT poskytuje správne výsledky len pre N = 1, ..., 13.

Používanie FCT sa nelíši od použitia vlastných inštrukcií procesora: na získanie výsledku je potrebné nastaviť hodnotu operandu a zadať názov procedúry:

5 FCT 120

7 FCT 5040

Vyššie uvedená implementácia procedúry FCT si vyžiadala zavedenie pomocnej premennej K, avšak funkčne ekvivalentnú procedúru možno vykonať aj bez pomocnej premennej pomocou operácie C, ktorá vloží kópiu jej vrcholu do zásobníka, a operácie E2 a E3, ktoré si vymieňajú vrchol s druhým a tretím prvkom zásobníka. Definícia tohto postupu je nasledovná.

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

: FA C E3 * E2 1-;

Výhodou takéhoto postupu „čisto zásobníka“ je jeho úplná autonómia: rovnako ako základné operácie zásobníka procesora sa vykonáva iba na zásobníku operandov, bez potreby ďalšej pamäte a bez akýchkoľvek zmien v iných komponentoch procesora.

Názvy definovaných procedúr a deklarované dáta sa vložia do procesorového slovníka, ktorý vytvorí spojenie týchto názvov s menovanými objektmi, teda s telami procedúr umiestnenými v hlavnej pamäti a s prvkami tejto pamäte alokovanými pre uloženie deklarovaných údajov. Pri spracovaní ďalšieho slova zo vstupného toku procesor prezerá slovník a keď v ňom nájde zodpovedajúce slovo, vykoná akcie spojené s týmto slovom. Ak bolo vyhľadávanie neúspešné, potom, ako už bolo spomenuté, sa vykoná pokus o číselnú interpretáciu slova a ak sa to nepodarí, nasleduje hlásenie, že procesor slovo nepozná.

V dôsledku zostavenia definície procedúry sa do slovníka zapíše názov tejto procedúry a ukazovateľ (adresa) jej tela, čo je postupnosť ukazovateľov na procedúry a údaje tvoriace definíciu. Inými slovami, vnútorná reprezentácia tela procedúry sa získa nahradením názvov procedúr a údajov v jej definícii ukazovateľmi zodpovedajúcich telies, ktoré sú zase rovnakými postupnosťami ukazovateľov a v prípade primitív reťazami strojových inštrukcií. Toto nazývame interná reprezentácia programu procedurálny kód.

Keď sa spolu s kompiláciou definícií procedúry P skompilujú aj definície všetkých vnorených procedúr neznámych procesoru, vytvorí sa úplná hierarchia ukazovateľov, ktorá umožňuje vykonať procedúru P zadaním iba jej názvu. vstup procesora. V tomto prípade názvy vnorených procedúr zostavené v súvislosti s definíciou P, ak nepotrebujete odkazovať na tieto procedúry samostatne, nemá zmysel ich ukladať do slovníka. V mnohých prípadoch sa ukazuje, že je vhodné zatvoriť prístup k tej či onej časti slovníka, pričom možno ponechať možnosť vykonávať len niektoré postupy.

Na splnenie týchto požiadaviek je slovník implementovaný ako zbierka podslovníkov, nad ktorými sú definované operácie, ktoré umožňujú vytvárať a ničiť podslovníky a ich časti, mazať názvy, zatvárať a otvárať prístup k určitým podslovníkom. . Každý podslovník má názov, ktorý sa používa v príkazoch, ktoré s ním súvisia. Názvy podslovníkov musia začínať znakom $, napríklad: $ PRIME, $ EDIT, $ FLOAT, $ TEXTPROC, $ GRAPHICS.

Sub-slovník $ PRIME obsahujúci základnú množinu slov DSPP je po spustení procesora otvorený ako pre prístup k slovám, ktoré obsahuje, tak aj pre doplnenie o nové slová. Nové slová zadané do neho, ak je to potrebné, môžu byť vymazané spolu s telami s nimi spojenými pomocou príkazu FORGET $ PRIME. Potom je možnosť ďalšieho zadávania slov do tohto podslovníka zabezpečená vykonaním príkazu GROW $ PRIME, ktorý umožňuje podslovník $ PRIME opäť zväčšiť a všetko, čo je v ňom zadané, možno opäť vymazať príkazom FORGET $. príkaz PRIME atď. V tomto režime sa PRIME používa pri experimentovaní s malými fragmentmi programov, individuálnymi príkladmi, odhadmi, ako aj v prípade potreby zaraďovaním nových slov do podslovníka $ PRIME v poradí vývoja jazyka systému.

V prípade vytvorenia samostatného programu si preň vytvoria vlastný slovník a to sa dosiahne tým, že text programu začína príkazom

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

Človek vníma tento príkaz ako nadpis, za ktorým nasleduje komentár v hranatých zátvorkách, ktorý niekoľkými slovami charakterizuje funkciu implementovanú programom. Pre procesor je ekvivalentom postupnosti príkazov

ZABUDNITE $<имя>RAST $<имя>

Preto každé prijatie textu programu na vstup procesora spôsobí vymazanie jeho predchádzajúcej verzie a otvorenie takto vyčisteného podslovníka na zadanie novej verzie programu s rovnakým názvom. Je to výhodné pri opravách vytvoreného programu, ako aj pri jeho budúcich úpravách.

Text zostaveného programu sa nezadáva priamo z klávesnice do vstupu procesora, ale tvorí sa vo vyrovnávacej pamäti textového editora. Príkaz E (Edit) nastavuje režim úprav, v ktorom už procesor nevníma slová napísané na klávesnici ako príkazy, ktoré sa majú vykonať okamžite, ale sú to jednoducho text zapísaný do vyrovnávacej pamäte a súčasne zobrazovaný na obrazovke. Pomocou špeciálnych kláves, ktoré ovládajú pohyb indikátora aktuálnej polohy (kurzora) na obrazovke, ako aj príkazov na úpravu zadávaných stlačením iných kláves, je možné zadaný text opravovať a meniť, vymazávať a vkladať, prenášať jeho časti. z miesta na miesto atď.

Na konci zadávania a úpravy textu sa editor vypne stlačením klávesu E súčasne s (alebo skôr s predtým stlačeným) klávesom a systém prejde do hlavného režimu príkazov DSPP. Podobná akcia sa vyvolá jednoducho stlačením klávesu ... V tomto režime je možné obsah vyrovnávacej pamäte editora odoslať na vstup procesora príkazom PF (PerForm - execute). Tým sa vykonajú všetky príkazy obsiahnuté v texte, najmä príkaz PROGRAM $<имя>vymaže $ zadaný v podslovníku<имя>od posledného vykonania tohto príkazu, názvy údajov a procedúr a zodpovedajúce telá, čím sa tento podslovník znova otvorí na rozšírenie. Príkazy deklarácie údajov a definície procedúry vložia názvy, ktoré do nich zadajú, spolu s ukazovateľmi na údaje označené týmito názvami a orgány procedúr zostavené v súlade s definíciami.

Po dokončení sťahovania sú procedúry a údaje dostupné pre referenciu podľa ich názvov napísaných z klávesnice a správnosť programu môžete skontrolovať spustením procedúr vo vzostupnom poradí, t.j. počnúc tými, ktorých definície neobsahujú neoverené postupy. Pred spustením kontroly je potrebné sa uistiť, že v programe nie sú použité žiadne nedefinované mená. Procesor ich zobrazí na obrazovke príkazom UNDEF. Ak chcete doplniť text programu o definície týchto názvov, ako aj opraviť ďalšie chyby zistené počas procesu kontroly, pomocou príkazu E zavolajte editor a vykonajte príslušnú úpravu zdrojového kódu programu vo vyrovnávacej pamäti editora a potom prepnite procesor do hlavného režimu a načítajte obsah vyrovnávacej pamäte pomocou príkazu PF.

Po skontrolovaní a otestovaní programu je možné jeho zdrojový kód skopírovať z vyrovnávacej pamäte editora na disk pomocou príkazu OE f, kde f je názov súboru v tvare, v ktorom sa program zapíše na disk. V budúcnosti je možné obsah súboru načítať na vstup procesora príkazom LOAD f a tiež skopírovať do vyrovnávacej pamäte editora ako doplnok k textu v ňom pomocou príkazu IE f. V predvolenom nastavení majú súbory príponu .dsp. Buffer možno predtým vymazať príkazom KE. Je tiež možné vytlačiť obsah vyrovnávacej pamäte pomocou príkazu LPE.

Po načítaní programu pripraveného na spustenie je možné vyčistiť vytvorený slovník $<имя>pomocou príkazu CLEAR $<имя>... Vykonaním tohto príkazu procesor odstráni nepotvrdené mená z pomenovaného podslovníka, t.j. všetky mená okrem tých s predponou :: (dve dvojbodky) pred ich definíciami. V tomto prípade sa vymažú iba samotné názvy (záznamy v slovníku) a súbory procedúr a s nimi spojené údaje sú uložené a dostupné počas vykonávania programu pomocou interných odkazov vytvorených počas kompilácie, ale zvonku už nie sú dostupné. Ak chcete obnoviť možnosť prístupu zvonku, napríklad ak potrebujete skompilovať nejaký doplnok alebo zmenu, musíte znova načítať zdrojový kód programu.

Mená je možné zneprístupniť zvonku bez ich odstránenia zo slovníka pomocou príkazu SHUT $<имя>, čím sa zatvorí prístup ku všetkým slovám pomenovaného podslovníka. Otvorenie slovníka na použitie jeho slov sa vykoná príkazom USE $<имя>... Existuje tiež príkaz LEN $<имя>, ktorý zatvorí všetky podslovníky okrem menovaného a príkaz CANCEL, ktorý toto obmedzenie zruší. Uvedené príkazy vám umožňujú kontrolovať používanie slovníka počas kompilácie a obmedziť množinu mien dostupných používateľovi programu na požadované minimum.

Vyhľadanie mena v slovníku prebieha tak, že sa na jeho slová pozrieme v opačnom poradí, ako boli zapísané v slovníku, t.j. počnúc posledným zadaným. Preto pre názov definovaný v slovníku viac ako raz platí posledná definícia. Ak je podslovník obsahujúci túto poslednú definíciu zatvorený, vyhľadávanie pokračuje, kým sa nepoužije prvý dostupný záznam v slovníku s daným názvom a definíciou označenou týmto záznamom.

Niekoľko slov o vstupe a výstupe údajov. Ako už bolo spomenuté, procesor sa snaží interpretovať slovo spustiteľného programu, ktoré sa nenachádza v slovníku, ako číslo a v prípade úspechu vloží binárny ekvivalent tohto čísla do zásobníka. Zadanie čísla do zásobníka je možné vykonať príkazom TIN, ktorý vyžaduje napísanie zadaného čísla na klávesnici. Existujú aj príkazy na vloženie znaku zadaného z klávesnice do zásobníka: TIB - s displejom, TRB - bez zobrazenia tohto znaku na obrazovke. V tomto prípade je písmenový kód reprezentovaný najmenej významným bajtom 32-bitového slova vloženého do zásobníka, z ktorých najvýznamnejšie 3 bajty sú rovné nule.

Obsah hornej časti zásobníka je možné zadať ako číslo a ako písmeno. Príkaz TON spôsobí zobrazenie číselnej hodnoty podriadku vo výstupnom poli, ktorého šírka je nastavená vrcholom, v systéme reprezentácie čísel nastavenom v čase jeho vykonania. Príkaz TOB vytlačí na obrazovku znak, ktorého kód je obsiahnutý v spodnom byte hornej časti zásobníka. V oboch prípadoch je výstup sprevádzaný odstránením argumentov zo zásobníka.

Procesor DSPP má aparát pre externé a interné (príkazové) prerušenia a poskytuje nasledujúce prostriedky na ich spracovanie. Postup spracovania externého prerušenia je definovaný podobne ako normálny postup, ale s predponou INT pridanou pred dvojbodkou. Názov takejto procedúry je spojený s adresou vektora prerušenia s príkazom:

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

Prerušenie príkazu je pomenovaná operácia volajúca procedúru odozvy. Názov tejto operácie určuje príkaz TRAP, ktorý ju spája s takzvanou procedúrou konečnej odozvy, vykonávanou v prípade, že konečná odpoveď nie je nahradená inou procedúrou odozvy pomocou príkazu ON alebo EON. Všetky tri príkazy majú rovnaký formát:

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

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

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

Procedúra spojená s názvom volania príkazom EON sa vykoná s predbežným výstupom z tela procedúry obsahujúcej príkaz EON a s hodnotou ukazovateľa zásobníka operandov, ktorá sa vyskytla v čase vykonania EON.

Syntax PARADISE

Abeceda jazyka PARADISE obsahuje latinku a ruštinu, veľké a malé písmená, desatinné číslice, matematické a iné špeciálne znaky. Prvky (členy) abecedy sa nazývajú písmená. Vonkajšia reprezentácia písmena je jeho tlačený obrázok (tlačený znak). Vo vnútri procesora PRSP je každý tlačený znak reprezentovaný bajtom, ktorého hodnota je binárny kód tohto znaku. Transformáciu vonkajšej reprezentácie na vnútornú a naopak vykonáva vstupno/výstupné zariadenie (klávesnica, displej, tlačiareň). Pre uľahčenie je číselná hodnota kódu vyjadrená v desiatkovej, šestnástkovej alebo osmičkovej sústave, pričom zodpovedajúce číslo sa pomenúva ako desiatkový, šestnástkový alebo osmičkový písmenový kód.

Všetky objekty jazyka PARADISE sú postavené z písmen a predstavujú lineárne reťazce písmen konečnej dĺžky, nazývané slová. Oddeľovač slov za sebou je netlačiteľný znak (medzera). Reťazec medzier je rovnaký ako jedna medzera. Funkciu oddeľovača slov navyše vykonáva príkaz „Prejsť na začiatok nasledujúceho riadku“, označený na klávesniciach vstupných zariadení symbolom alebo a spolu s písmenami má internú reprezentáciu kódovým bajtom. Na začiatku a na konci riadku teda nie sú potrebné žiadne oddeľovacie medzery.

Príklady slov: CLEAR NOP STEK2 & 1+ -366 X Vzorka.

Procesor DSPP rozlišuje slová podľa prvých siedmich písmen a identifikuje ich polymérnym porovnaním so slovami vo svojom slovníku. Slovník obsahuje slová, ktoré sú názvami (označeniami) vlastných operácií procesora, ktoré sa nazývajú základné operácie alebo primitíva a môžu byť doplnené o názvy objektov definovaných používateľom (údaje, procedúry). Slová obsiahnuté v slovníku sú teda buď názvy akcií (operácie, procedúry), alebo názvy údajov (konštanty, premenné, polia).

Ak v slovníku nie je žiadne rozpoznateľné slovo, procesor sa ho pokúsi priradiť k jednému z nasledujúcich prípadov:

    číselný literál, t.j. postupnosť čísel, prípadne začínajúca znamienkom mínus, napríklad: 0, 4096, -25;

    doslovný znak: slovo začínajúce znakom #, ktoré spôsobí, že procesor dostane hneď nasledujúci znak ako daný kód, napríklad: #A - veľké latinské písmeno A literál, # 5 - číslica 5 literál, # - medzera doslovný, ## - doslovné písmená #;

    textový literál: ľubovoľný text uzavretý v úvodzovkách a oddelený oddeľovačmi slov, napríklad: "Text", "Vstupný súbor N3";

    príkaz na odoslanie textovej správy na displej: text zobrazenej správy oddelený vľavo dvojitou bodkou a dvojitými úvodzovkami vpravo a oddelený oddeľovačmi slov, napríklad: „Zásobník je prázdny ";

    komentár: ľubovoľný text uzavretý v hranatých zátvorkách a oddelený oddeľovačmi, napríklad:.

Literály a príkaz na vydanie správy na displej fungujú ako objekty jazyka DSPP spolu so slovami rozpoznanými slovníkom, pričom komentáre procesor DSPP úplne ignoruje - sú určené pre osobu, nie pre stroj. Ak sa slovo nenájde v slovníku a nesúvisí s uvedenými konštrukciami, spracovateľ vydá hlásenie: „Neviem<неопознанное слово>".

Kvôli špeciálnemu významu, ktorý sa dáva písmenám #, "a kombinácii." na začiatku slova, t.j. za oddeľovačom, ako aj písmenom „pred oddeľovačom by sa nemali používať na označených pozíciách v slovách určených na zaradenie do slovníka.

Postupnosť slov na vstupe procesora sa interpretuje ako postupnosť inštrukcií vykonávaných procesorom. V tomto prípade sa rozlišujú tri druhy slov:

1) vykonávané samostatne, t.j. čo sú jednoslovné príkazy (monológy);

2) vykonávané v spojení s jedným alebo viacerými nasledujúcimi slovami, t.j. čo sú začiatočné slová (predpony) dvoj-, troj- alebo verbóznych príkazov;

3) pred príkazom ako vysvetlenie alebo označenie špeciálneho režimu vykonávania (predpony).

Monológy zahŕňajú literály, názvy údajov, väčšinu I/O, testovanie a konverziu údajov v zásobníku a používateľom definované rutiny. Napríklad: 1987 - číselný literál, # 5 - číslica 5 ​​písmen, Zoznam schém - textový literál, LENGTH - názov premennej, TOB, NEG, +, &,<, = - имена (обозначения) операций, SORT, CONVERT, ЧИСТКА, СНЯТЬ - имена процедур пользователя.

Predpony sú vlastné príkazom na popis údajov a definovanie procedúr, ako aj manipuláciu s pomenovanými údajmi, podmienené a opakované vykonávanie procedúr a správu slovníkov. Príklady príkazov s predponami:

VAR SUM - vytvorte premennú SUM,

: ODD [x] 1 &; - vytvoriť procedúru ODD, ktorá nahradí nepárne číslo 1, párne 0,

0 X - priraďte hodnotu 0 premennej X,

BR + P1 P2 - ak je hodnota jeho vrcholu prevzatá zo zásobníka kladná, potom vykonajte P1, inak vykonajte P2,

RP CHECK - vykonajte procedúru CHECK znova a znova,

USE $ REAL - otvorte podslovník $ REAL na použitie.

Špecifická predpona zvyčajne vyžaduje určitý počet slov za ňou. V práve uvedených príkladoch teda predpony VAR,! 0 a USE vyžadujú každé jedno slovo a predpona BR + vyžaduje dve slová. Predpona: (dvojbodka) vám však umožňuje vytvoriť príkaz ľubovoľnej dĺžky, začínajúc tromi slovami. Koniec príkazu je slovo; (bodkočiarka). Ľubovoľná dĺžka je tiež vlastná príkazu - deskriptor konštanty CNST A1 ... AJ; a procedúra príkaz s viacerými voľbami BR A1 P1 ... AJ PJ ELSE PN.

Predpony sú špeciálne slová, ktoré po pridaní na začiatok príkazu upravia jeho obsah alebo definujú špeciálny spôsob vykonania. Napríklad príkaz VAR X bez predpony je inštrukcia na vytvorenie 16-bitovej premennej X. Ak k nej pripojíte predponu BYTE, dostaneme príkaz BYTE VAR X, ktorý dáva pokyn na vytvorenie 8-bitovej premennej (bajt) s názvom X. Ak použijete predponu LONG, dostaneme LONG VAR X – inštrukciu na vytvorenie 32-bitovej premennej s názvom X.

Predpona iného typu, konkrétne :: (dve dvojbodky), robí výsledok príkazu odolným voči procedúre CLEAR, ktorá odstraňuje nefixované slová zo slovníka. Názvy zadané do slovníka v procese vytvárania programu pomocou príkazov na popis údajov a definovanie procedúr po vytvorení a otestovaní programu možno zo slovníka odstrániť, s výnimkou niekoľkých, ktoré sú potrebné na údržbu hotového programu. . Odstránenie sa vykoná príkazom CLEAR $<имя подсловаря>, pokyn na vymazanie slovníka spojeného s programom, pričom v ňom ponechajú len tie slová, ktorých definície obsahujú predponu ::. Príklady príkazov, ktoré generujú neodstrániteľné slová:

:: BYTE CNST LITCODE # # 0 #A;

::: MOD / [int (a, b), zvyšok (a, b)] E2 D [zvyšok (a, b)];

Ako ukazuje druhý príklad, ktorý obsahuje predpony :: a BYTE, v príkaze môže byť viac ako jedna predpona.

Príkaz v DSPP teda môže byť buď jedno slovo (monológ), alebo fráza (fráza), ktorá začína predponou a obsahuje počet slov nastavený pre danú predponu, a ak predpona umožňuje ľubovoľný počet slov , potom má na konci oddeľovacie slovo alebo to môže byť fráza so špeciálnymi predponovými slovami pred ňou.

Základný jazyk DSPN neobsahuje zložitejšie syntaktické konštrukcie ako príkaz a neobsahuje žiadne iné konštrukcie okrem tých, ktoré sú uvedené vyššie. Dokonca aj také nevyhnutné veci v programovacích jazykoch, ako je výraz a funkcia, v základnom jazyku chýbajú a možno ich v prípade potreby zaviesť až v priebehu jeho vývoja.

Program v základnom jazyku je jednoducho súbor príkazov vykonávaných v poradí, v akom sa vyskytujú v texte. Okrem toho každý príkaz, s výnimkou tých, ktoré obsahujú iba primitíva, v procese jeho vykonávania zahŕňa postupnosť príkazov, ktoré definujú slová, ktoré sú v ňom zahrnuté. Príslušné príkazy môžu zase obsahovať slová označujúce reťazce príkazov, v ktorých sú možné aj slová odkazujúce na ich súvisiace reťazce atď. na úroveň, na ktorej príkazy obsahujú iba primitíva.

Všeobecný popis jazyka PARADISE, ktorý tvoril obsah tejto kapitoly, bol venovaný charakteristike štruktúry tohto jazyka a základnej (počiatočnej) množine jeho príkazov, čo je množina vstavaných príkazov (primitív) spracovateľa DSPP. Ďalší vývoj jazyka a zodpovedajúce zvyšovanie schopností procesora sa uskutočňuje zavádzaním nových procedúr, príkazov, formátov a dátových typov, konštruovaných pomocou základných nástrojov. Spravidla je takýto vývoj orientovaný na problém a uskutočňuje sa vo forme balíkov procedúr, ktoré sa okrem základného systému načítavajú aj na vstup procesora.

Na druhej strane základný systém je možné doplniť o špeciálne nástroje na zvýšenie efektivity stroja programov DSP realizovaných na jeho základe. Medzi tieto nástroje patrí možnosť definovať jednotlivé postupy priamo v inštrukčnom kóde používaného stroja. Spôsob, akým je procedúra definovaná, nemá žiadny vplyv na jej ďalšie použitie: názvy všetkých procedúr sú zapísané do spoločného slovníka a sú úplne rovnocenné. Množstvo knižničných programov umožňuje používať procedúry alebo celé programy napísané v iných jazykoch.

Popis operácií a príkazov

Operácie zásobníka

Zásobník operandov je jedným z hlavných prvkov architektúry procesora DSP. Väčšina inštrukcií procesora používa zásobník, spotrebúva operandy, ktoré z neho potrebujú, a vkladá doň výsledky. Interpretácia údajov v zásobníku závisí od podstaty riešeného problému, to znamená, že je v konečnom dôsledku zverená programátorovi. Vzhľadom na to, že hodnota, ktorá sa dostala do zásobníka, v skutočnosti stráca svoje meno, je ťažké z textu programu určiť, na ktoré operandy sa tá či oná operácia aplikuje, aké sú jej výsledky. Preto sa pre explicitné označenie operandov a výsledkov procedúr v jazyku PARADISE používajú komentáre. V tomto prípade nie je potrebné (a nie vždy možné) popisovať celý obsah stohu. Je bezpodmienečne nutné komentovať hornú časť zásobníka, ktorá je ovplyvnená procedúrou, ktorá sa na ňom vykonáva, pretože bez toho sa stráca viditeľnosť programu a jeho overenie je náročné.

Na dosiahnutie konzistentnosti programu by sa tieto komentáre mali písať podľa niekoľkých jednoduchých pravidiel. Ako každý komentár, aj popis údajov v zásobníku je uzavretý v hranatých zátvorkách. Tento popis je zoznam operandov, ktoré sú v zásobníku v danom bode programu. Každý prvok zoznamu charakterizuje obsah jednej pozície zásobníka, ako oddeľovač sa používa čiarka. Pozície zásobníka sú uvedené zľava doprava, počnúc najhlbším prvkom a končiac v hornej časti zásobníka. Popisom jednotlivého operandu môže byť číslo, názov, výraz alebo akýkoľvek iný zmysluplný záznam, ktorý vysvetľuje význam hodnoty v zásobníku. Niekedy je možné zadať niekoľko možných hodnôt pre danú pozíciu zásobníka. V tomto prípade sú hodnoty uvedené s lomkou.

Tu je príklad komentára odrážajúceho stav zásobníka operandov:

[začiatočná adresa, N + 1,1 / 0]

V bode programu, kde sa nachádza tento komentár, musí zásobník operandov obsahovať aspoň tri pozície a navrchu môže byť 1 alebo 0, v podsekcii - číselná hodnota rovná N + 1 a nižšie it - nejaké číslo interpretované ako počiatočná adresa.

Pre pohodlie pri špecifikovaní požadovanej polohy stohu použijeme pojem hĺbky. Budeme predpokladať, že horná časť stohu leží v hĺbke 1, podvrstva je v hĺbke 2 atď. Konkrétne ide o hodnotu označenú v príklade ako „spustiť reklamu“. leží v hĺbke 3.

Štúdium základného jazyka DSPC začneme príkazmi na vkladanie hodnôt do zásobníka. Najjednoduchším (a najčastejšie používaným) príkazom tohto typu je číselný literál, teda explicitná indikácia konštanty, ktorá sa má vložiť do zásobníka. Predpokladajme napríklad, že chceme do zásobníka vložiť čísla 28, -5 a 11. Ak to chcete urobiť, zadajte z klávesnice nasledujúci reťazec:

28 -5 11 a stlačte tlačidlo (návrat vozíka). Procesor rozpozná zadané čísla a po jednom ich vtlačí do zásobníka, takže na vrchu bude 11. Na overenie stačí vytlačiť na displej hodnotu vrcholu zásobníka. Na tento účel sa používa príkaz DSPP s názvom. (bodka). Zadaním „bodky“ na klávesnici a stlačením , dostaneme na obrazovke odpoveď: 11, čo zodpovedá poslednej hodnote vytlačenej do zásobníka. Opakované vykonávanie "bodu" vedie k rovnakému výsledku - tento príkaz vykreslí iba vrchol bez zmeny stavu zásobníka.

Aby sa zobrazil celý obsah zásobníka, DSPP obsahuje príkaz .. (dve bodky). Po jeho vykonaní sa na obrazovke zobrazí riadok:

Ako vidíte, forma výtlačku sa riadi prijatými konvenciami pre komentovanie stavu zásobníka (okrem toho, že namiesto čiarky je použitá medzera). Príkaz .. nemení obsah zásobníka.

32-bitové slovo (4 bajty) sa používa na reprezentáciu jednej pozície zásobníka v pamäti stroja, čísla sú reprezentované v dvoch doplnkových kódoch. V súlade s tým môže procesor PRSP správne vnímať iba celé čísla ležiace v rozsahu od -2147483648 do 2147483647. Ak zadané číslo nie je reprezentovateľné 32 bitmi (so znamienkom), potom sa najvýznamnejšie bity, ktoré sa nezmestia, zahodia.

V uvažovaných príkladoch sa predpokladalo, že procesor PRSP je v desiatkovom vstupno/výstupnom režime čísel. Na nastavenie tohto režimu v jazyku PARADISE slúži príkaz B10.

V mnohých úlohách je potrebné interpretovať spracované dáta nie ako čísla, ale ako binárne kódy, teda 32-zložkové bitové vektory. V DSPP je možné pracovať s kódmi prezentovanými v binárnej, osmičkovej alebo hexadecimálnej číselnej sústave. Na nastavenie požadovaného režimu stačí vykonať jeden z troch príkazov: B2, B8 alebo B16, po ktorých procesor zaznamená a vytlačí všetky zadané kódy v zadanom číselnom systéme.

Túto funkciu možno použiť na prevod desiatkových čísel na základ 2, 8 a 16. Ak chcete napríklad previesť číslo 29, musíte zadať a spustiť nasledujúci riadok:

B10 29 B2. B8. B16. Výsledkom je, že procesor zobrazí sériu čísel: 00000000035 0000001D, ktoré predstavujú desiatkové číslo 29 v troch špecifikovaných číselných sústavách. Všimnite si, že kódy sú vytlačené v ich strojovom vyjadrení, to znamená s úvodnými nulami a bez znamienok „+“, „-“. Pri vykonávaní riadku B10 -2 B8. vráti sa číslo 37777777776, čo je osmičkové znázornenie dvojkového doplnku -2.

Pri práci s hexadecimálnymi kódmi sa môžu vyskytnúť kolízie medzi číselnými literálmi a názvami príkazov procesora DSPP. Napríklad slovo B8 v hexadecimálnom I/O režime možno interpretovať ako príkaz na nastavenie osmičkového režimu a ako hexadecimálnu konštantu. Aby ste sa vyhli nejednoznačnosti, začnite číselné literály s nevýznamnou nulou, napríklad 0B8.

Základ inštrukčného systému procesora DSPP tvoria operácie konverzie dát v zásobníku. Všeobecným pravidlom, ktorým sa riadi fungovanie týchto operácií, je, že každá operácia spotrebuje (odstráni) operandy, ktoré potrebuje, zo zásobníka a na ich miesto vloží výsledné hodnoty (ak nejaké existujú).

Zvážte inštrukcie procesora, ktoré implementujú štyri aritmetické operácie: sčítanie, odčítanie, násobenie a delenie celých čísel. Na ich zobrazenie v jazyku RAJA sa používajú slová: +, -, * a /. Ak chcete získať súčet dvoch čísel v zásobníku, napríklad 123 a 45, musíte tieto čísla vložiť do zásobníka a vykonať príkaz +. Na to stačí zadať z klávesnice nasledujúci riadok (predpokladá sa, že je nastavený desiatkový režim I / O):

123 45 +

Ak teraz zobrazíme obsah zásobníka (pomocou príkazu ..), výsledok sčítania bude viditeľný:

Operácia komutatívneho násobenia funguje podobným spôsobom.

Pri vykonávaní operácií nekomutatívneho odčítania a delenia sa čiastkový zásobník berie ako odčítaný (dividenda) a vrchol slúži ako odčítaný (deliteľ). Napríklad na výpočet rozdielu 151-68 musíte vykonať riadok:

151 68 -

Program na vykonávanie aritmetickej operácie v jazyku PARADISE sa vyznačuje tým, že operácia je umiestnená za zodpovedajúcimi operandmi. Tento zápis aritmetických výrazov sa nazýva postfixový (alebo poľský inverzný) zápis a je široko používaný v zásobníkových mikrokalkulátoroch. Predpokladajme napríklad, že potrebujeme vypočítať hodnotu aritmetického výrazu ((127 + 81) * 15- (31 + 117) * 21) * 3

V postfixovej notácii bude tento výraz vyzerať takto:

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

Tento riadok (v ktorom sú slová od seba oddelené medzerami) je hotový program na výpočet nášho výrazu procesorom DSP.

Delenie / príkaz sa líši od ostatných aritmetických operácií tým, že jeho výsledkom sú dve hodnoty - kvocient a zvyšok. Kvocient je v spodnej časti zásobníka a zvyšok je v hornej časti. Kvocient je záporný, ak dividenda a deliteľ sú rôzne znamienka. Zvyšok má vždy znamienko dividendy. Tu je niekoľko príkladov použitia príkazu division.

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

Pri vykonávaní výpočtov môžu nastať chybné situácie: pretečenie a delenie nulou. Procesor DSPP na ne nijako nereaguje (najmä pri delení nulou sa obsah zásobníka nemení) a kontrola nad správnosťou použitia operácií je pridelená programátorovi.

Pri programovaní je často potrebné zvýšiť alebo znížiť hodnotu hodnoty o 1 alebo 2. Do jazyka PARADISE boli zavedené špeciálne príkazy, ktoré vykonávajú naznačené akcie na vrchu zásobníka. Označujú sa slovami: 1+, 1-, 2+, 2-. Vykonanie týchto príkazov je ekvivalentné vtlačeniu požadovanej konštanty (1 alebo 2) do zásobníka a následnému vykonaniu požadovanej aritmetickej operácie (+ alebo -). Napríklad 2+ je ekvivalentom slovného páru 2 +. Úvod do jazyka týchto príkazov je z dôvodov efektívnosti.

Na zvýšenie efektívnosti v základnom jazyku procesora DSP existujú príkazy T0 a T1, ktoré nahradia hodnotu vrcholu zásobníka 0 a 1, bez ohľadu na to, aká hodnota bola na začiatku pred zadaným príkazom. Príklady:

Na prácu s číselnými údajmi sú k dispozícii aj príkazy NEG, ABS a SGN. Príkaz NEG obráti znamienko vrcholu zásobníka, ABS nahradí hodnotu vrcholu zásobníka jeho modulom, SGN - spotrebuje číselnú hodnotu z vrcholu zásobníka a na jeho miesto nahradí znamienko extrahovaného čísla. : -1 - ak je číslo záporné, 1 - ak je kladné, 0 - ak je rovné nule. Napríklad:

5 NEG [-5] ABS SGN

Príkazy MIN a MAX v základnom jazyku vám umožňujú nájsť minimum a maximum dvoch celých čísel. Operandy pre tieto inštrukcie sú dve čísla v hornej a dolnej časti zásobníka. Inštrukcia MIN ponecháva najmenší z počtu parametrov v zásobníku, MAX maximum z nich. Napríklad:

5 0 15 MIN [-5,0] MAX

Ak chcete nájsť minimum (maximum) z troch čísel v zásobníku, stačí dvakrát použiť príkaz MIN (MAX):

MIN MIN [-2]

Príkaz SEG na kontrolu, či číslo obsiahnuté v hornej časti zásobníka spadá do určeného rozsahu od a do b (vrátane hraníc), zanechá v zásobníku znak: 1, ak je číslo v rozsahu, a 0, ak nie:

SEG [funkcia] napríklad:

Okrem inštrukcií na prácu s číselnými údajmi obsahuje sada inštrukcií pre procesor DSPP množstvo operácií určených na konverziu 32-bitových kódov. Tieto operácie považujú prvok zásobníka za 32-zložkový vektor bitov, ktorého komponenty sú očíslované sprava doľava tak, že bit úplne vľavo je číslo 31 a bit úplne vpravo je 0. Klesajúce číslovanie komponentu opakuje číslovanie bitov strojového slova akceptované pre mnohé mikroprocesory.

Príkazy vykonávané na bitových vektoroch primárne zahŕňajú bitové operácie Booleovej algebry:

    bitová inverzia vrcholu zásobníka INV, zmena hodnoty každého bitu vrcholu, t.j. nahradenie 0 1 a 1 0;

    bitové spojenie hornej a dolnej časti zásobníka &, nastavenie i-tého bitu výsledku, i = 31,30, ..., 0, na 1, ak sa i-té bity oboch operandov rovnajú 1 a v ostatných prípadoch nastavenie i-tého bitu na 0;

    bitová disjunkcia hornej a dolnej časti zásobníka & 0, nastavenie v i-tom bite výsledku, i = 31,30, ..., 0, hodnota 0, ak i-té bity oboch operandov sú rovné 0 a v ostatných prípadoch nastavenie i-tého bitu rovné 1;

    bitové sčítanie (neekvivalencia) „+“ uzlov a poduzlov, ktoré nastaví i-tý bit výsledku na 0, ak i-té bity oboch operandov majú rovnaké hodnoty, a nastaví i-tý bit výsledku. bit výsledku na 1, ak sú hodnoty i-tých bitov operandov odlišné.

525 INV 722 & 136 & 0 325 "+"

Bitové spojenie sa často používa na vynulovanie (vymazanie) bitov slov. Ak to chcete urobiť, spojte pôvodné slovo s maskou obsahujúcou nuly v čísliciach, ktoré je potrebné vymazať, a jednotky v zostávajúcich číslicach. Napríklad, ak potrebujete vynulovať bity od 3 do 5 v niektorom slove X, musíte vykonať jeho bitovú konjunkciu s maskou 37777777707. Pre X = 235 dostaneme:

Bitová disjunkcia sa môže použiť na vloženie požadovaného bitového vzoru do vopred vyčistenej skupiny slov. Predpokladajme napríklad, že chcete vložiť binárnu kombináciu 010 do bitov 3 až 5 slova zostávajúceho v zásobníku ako výsledok posledného príkladu. Môžete to urobiť takto:

Operácie bitovej manipulácie zahŕňajú aj príkazy logického posunu:

    ľavý posun SHL - každý bit vrcholu zásobníka počnúc 31. má hodnotu nasledujúceho v zostupnom poradí čísel a posledný, nulový bit má hodnotu 0;

    pravý posun SHR - každý bit hornej časti zásobníka, začínajúc od 0, nadobúda hodnotu nasledujúceho vo vzostupnom poradí čísel a 31. bit má hodnotu 0;

    posun pozdĺž horného SHT - horný prvok sa vytiahne zo zásobníka a zaobchádza sa s ním ako s celým číslom N, čo udáva, koľko posunutí a ktorým smerom by sa malo vykonať v hornej časti zásobníka: keď N> 0, posunie sa na vľavo, keď N<0 - вправо.

B8 125 SHR SHL -2 SHT

Operácie posunu vľavo možno použiť na vynásobenie čísel 2 na N-tú mocninu, kde N je prirodzené číslo, ktoré určuje počet posunov. Napríklad vynásobenie čísla -5 číslom 8 je možné vykonať posunutím tohto čísla o 3 číslice doľava:

B10 -5 3 SHT [-40]

V tomto prípade by sa mala brať do úvahy možnosť pretečenia.

Posun doprava možno použiť ako operáciu delenia úplne 2 na mocninu N iba pre kladné čísla, pretože najvýznamnejší (znamienko) bit sa pri posune doprava vynuluje. Napríklad:

keďže

Príkazy na otočenie hornej časti zásobníka o 1 bit doprava ROR a ľavé ROL sú podobné príkazom logického posunu, až na to, že rozšírený extrémny bit nezmizne, ale je zatlačený na voľné miesto z opačného konca 32. -trochu dlhé slovo. Napríklad (hexadecimálne čísla):

Pre spracovanie binárnych kódov sú určené aj príkazy DSPP procesora SWB a SWW. Funkciou SWB je vymeniť bajty spodnej polovice vrcholu zásobníka a funkciou SWW zameniť polovice vrcholu zásobníka. Ukážme si fungovanie týchto príkazov pomocou hexadecimálneho I/O režimu (v tomto režime je každý bajt reprezentovaný dvomi hexadecimálnymi číslicami):

B16 0ABCD SWB SWB

0ABCDEF12 SWB SW

Inštrukcie na manipuláciu so zásobníkom hrajú v jazyku PARADISE dôležitú úlohu. Nemenia hodnoty údajov v zásobníku, ale menia iba ich umiestnenie, čím uľahčujú prístup k operandom umiestneným hlboko v zásobníku.

Existujú tri príkazy na vymazanie členov zásobníka: D, DD, DS (Drop). Príkaz D odstráni jeden (horný) prvok zo zásobníka, DD - dva prvky, napríklad:

D DD D DS odstráni všetky prvky zo zásobníka (vyčistí zásobník):

Príkaz na skopírovanie vrcholu zásobníka C (Copy - copy) vloží do zásobníka kópiu aktuálnej hodnoty jeho vrcholu. To sa rovná duplikácii horného prvku zásobníka: starý vrchol sa stáva vedľajším a jeho kópia sa stáva novým vrcholom. Príklad:

Ukážme si aplikáciu tohto príkazu na príklade výpočtu polynómu p (x) = 3 * x ** 2 + 4 * x-5 podľa Hornerovej schémy: p (x) = (3 * x + 4) * x -5. Predpokladáme, že x je na vrchole zásobníka.

[x] C 3 * 4 + * 5 -

Spolu s príkazom na kopírovanie vrcholu zásobníka v jazyku PARADISE existujú aj príkazy C2, C3, C4, ktoré kopírujú prvky nachádzajúce sa v hĺbkach 2, 3, 4. Ich prácu možno ilustrovať na nasledujúcich príkladoch:

C2 C4

K dispozícii je tiež príkaz CT na skopírovanie položky v hĺbke uvedenej v hornej časti zásobníka. Po vykonaní CT procesor vyberie horný prvok zo zásobníka, použije jeho hodnotu ako indikátor hĺbky kopírovaného prvku a vloží jeho kópiu do zásobníka. Takže kopírovanie prvku umiestneného v hĺbke 5 je nastavené dvojicou 5 príkazov CT, po vykonaní procesor vloží číslo 5 do zásobníka a potom vykoná príkaz CT. Vykonanie CT s parametrami 1, 2, 3, 4 je ekvivalentné C, C2, C3, C4.

Príkazy výmeny E2, E3, E4 (Výmena - výmena) vykonajú permutáciu prvého (horného) prvku zásobníka, respektíve s 2., 3., 4., teda s prvkom umiestneným v hĺbke 2, 3. , 4. Napríklad:

E3 E2

Na výmenu za väčšiu hĺbku slúži príkaz ET, ktorý podobne ako CT využíva hodnotu vrcholu zásobníka ako indikátor hĺbky prvku, ktorý sa vymieňa s prvým prvkom. Napríklad:

5 ET

Príkaz ET s parametrami 2, 3, 4 je ekvivalentný príkazom E2, E3, E4.

Na ilustráciu použitia príkazov na kopírovanie a zdieľanie zvážte problém s návodom. Zásobník obsahuje tri čísla. Je potrebné dostať sa na zásobník:. Je možné navrhnúť nasledujúci program, ktorého význam je jasný z pripomienok.

C3 C3 C3 +

E4 + E4

Tento príklad dobre ukazuje, aká dôležitá je úloha komentárov, odrážajúcich stav zásobníka operandov.

Programy často musia navzájom porovnávať číselné hodnoty a vykonávať rôzne postupy v závislosti od výsledkov porovnávania. V jazyku PARADISE sú porovnávacie príkazy<, =, >... Sú definované cez čísla a vo výsledku vracajú číselné hodnoty 0 a 1. Napríklad príkaz< потребляет из стека два элемента и засылает в стек число 1, если значение нижнего элемента оказалось меньше значения верхнего, а в противном случае засылает 0. Например, в результате выполнения последовательности 5 -20 < в стек будет заслан 0. Команда = засылает 1 в случае равенства потребленных ею элементов. Команда >odošle 1, keď je spodný prvok väčší ako horný. Ak chcete naprogramovať neprísne porovnávania (menšie alebo rovnaké, väčšie alebo rovné), použite príkaz NOT, ktorý nahradí nenulovú hodnotu v zásobníku nulou, ale nulu jednotkou. Napríklad vyhodnotenie logického výrazu x> = 5, kde x je nejaké číslo umiestnené v hornej časti zásobníka, možno zadať takto:

[x] 5< NOT

Ďalšie rozšírenie možností programovacích podmienok poskytuje použitie spolu s porovnávacími príkazmi aj logických operácií konjunkcie & (logické AND) a disjunkcie & 0 (logické OR). Nech je napríklad potrebné dostať 1 na hromádku, ak číslo x vo vrchole patrí do polovičného segmentu C 5< NOT C2 10 <

& E2 2 = & 0

Ovládanie programu v závislosti od výsledkov porovnania bude diskutované neskôr.

Definovanie postupov

Ako základná programovacia technika PRSP poskytuje používateľovi možnosť definovať pomenované sekvencie operácií nazývané procedúry. Nech je napríklad potrebné vypočítať hodnoty štvorcového trinomu 3 * x ** 2-4 * x + 9 pre dané hodnoty x. V tomto prípade by ste mali definovať postup, ktorý implementuje trojčlenný vzorec a výsledok odošle na terminál, a potom tento postup aplikovať na konkrétne hodnoty x. Požadovaný postup, nazvime ho PX, je definovaný takto:: PX [x] C 3 * 4 - * 9 +. D; Dvojbodka označuje operáciu „definovať procedúru“, pričom za názvom procedúry nasleduje dvojbodka za oddeľujúcou medzerou. Definujúca postupnosť príkazov (telo procedúry) nasleduje za názvom procedúry a končí sa bodkočiarkou. Stručne povedané, postup je definovaný vo forme:

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

V jazyku PARADISE je potrebné na začiatku a na konci procedúry okomentovať stav zásobníka operandov. V tele postupu sú komentáre umiestnené podľa uváženia programátora na miesta, ktoré sú ťažko zrozumiteľné.

Komentáre pomáhajú človeku pochopiť a použiť postup, zatiaľ čo procesor jednoducho ignoruje všetko v zátvorke. Ak teda zadávate definíciu jednotlivého postupu z terminálu, môžete komentáre vynechať.

Po zadaní definície postupu a stlačením klávesu procesor je informovaný o ukončení zadávania, na obrazovke terminálu sa objaví hviezdička signalizujúca vykonanie príkazu "definovať postup" a pripravenosť procesora pokračovať v dialógu. Teraz môžete použiť procedúru PX na hodnoty x dodané klávesnicou, napríklad 2, 3, 4 (výstup procesora je podčiarknutý):

* 2 PX 13

* 3 PX 24

* 4 PX 41

Definujme všeobecnejší postup na výpočet trojčlenky v tvare a2 * x ** 2 + a1 * x + a0, ktorý nám umožňuje špecifikovať hodnoty x aj a0, a1, a2. Nazvime to PXA:

: PXA C E4 E3 * + * +;

Pri použití PXA musia byť hodnoty a0, a1, a2, x v požadovanom poradí v zásobníku. Napríklad: a0 = 1, a1 = 2, a2 ​​​​= -3, x = 4

* 1 2 -3 4 PXA. D -39

V tele procedúry spolu so základnými operáciami procesora môžu byť užívateľom definované procedúry. Môžete napríklad definovať rutinu P, ktorá okrem výpočtov PXA zapíše kópiu výsledku do terminálu a odstráni výsledok zo zásobníka.

: P PXA. D;

Hlavne telo procedúry môže obsahovať názov procedúry, ktorá sa sama definuje, to znamená, že procedúra môže byť rekurzívna. Napríklad:

: ČAS [t] 1- ČAS;

Tento postup znižuje hodnotu vrcholu zásobníka o 1 a opäť odkazuje na seba, to znamená, že funguje ako počítadlo času.

Počítadlo ČASU sa v zásade nemôže zastaviť: postup na odčítanie jedného sa bude vykonávať znova a znova, pokiaľ je procesor spustený. Ale v DSPP existujú prostriedky, ktoré umožňujú riadiť priebeh procesu v závislosti od získaných výsledkov - operácie riadenia priebehu programu.

Podmienečné vykonávanie a opakovanie

Program, ktorý predstavuje postupnosť príkazov vykonávaných v poradí, v akom sa nachádzajú jeden po druhom v jeho zázname, sa nazýva lineárny. Aby bol program ľahko pozorovateľný (čitateľný) a zrozumiteľný, je rozdelený na pomenované časti, ktoré majú určitý význam – procedúry, pričom každá je definovaná vlastnou postupnosťou procedúr, ktoré sú zase definované sekvenciami menších procedúr atď. na procedúry definované priamo sekvenciami príkazov DSPP. Takýto program, napísaný ako hierarchia definícií procedúr, sa nazýva štruktúrovaný. Spôsob budovania štruktúrovaného programu, ktorý spočíva v postupnom rozklade riešeného problému na menšie a menšie čiastkové úlohy, sa nazýva štruktúrované programovanie.

Vytváranie nielen lineárnych, ale aj ľubovoľných programov metódou štruktúrovaného programovania je možné, ak existujú operácie na vykonanie procedúry podľa podmienky, opakovanie procedúry a ukončenie opakovanej procedúry. Súbor príkazov tohto druhu dostupných v DSPP poskytuje možnosť štruktúrovanej konštrukcie ľubovoľného programu.

Podmienky vykonania alebo nevykonania procedúry sú formulované vzhľadom na znamienko čísla, presnejšie na znamienko hodnoty, ktorú momentálne má vrch zásobníka. Hlavný príkaz podmieneného vykonania procedúry - BRS (BRanch on Sign - to branch by sign) dáva pokyn na vykonanie jednej z troch procedúr pomenovaných po BRS v závislosti od znamienka aktuálnej hodnoty vrcholu zásobníka. Počas vykonávania BRS procesor vyberie horný prvok zo zásobníka, otestuje jeho hodnotu a ak je záporná, vykoná prvú z menovaných procedúr, ak sa rovná nule, potom druhú a ak je kladná, potom tretiu. . Takže tým

spôsobí odstránenie jedného prvku zo zásobníka a vykonanie procedúry N, ak je odstránená hodnota záporná, vykonanie procedúry P, ak je kladná, a vykonanie procedúry Z, ak je nulová.

Príkladom použitia príkazu BRS je nasledujúca definícia procedúry SGN

: SGN [X] BRS -1 0 1;

Táto rutina nahradí hodnotu X v hornej časti zásobníka hodnotou -1, ak X<0, числом 0, если X=0, и числом 1, если X>0. Procedúra SGN je dostupná v PRSP ako základná procesorová operácia.

Príkaz BRS spolu s výberom jedného postupu z troch údajov poskytuje možnosť implementácie dvojciferných operátorov v tvare IF-THEN a IF-THEN-ELSE. Napríklad príkaz, ak x> 0, potom P1, inak P0 zodpovedá príkazu BRS P0 P0 P1, a príkaz, ak x<>0 potom P - BRS P NOP P príkaz, kde NOP je názov prázdnej operácie. Ale v DSPP je efektívnejšia implementácia dvojciferných podmienok - príkazy IF-, IF0, IF +, BR-, BR0, BR +.

Príkazy IF zodpovedajú príkazu IF-THEN. Napríklad inštrukcia IF-P dáva pokyn na vytiahnutie horného prvku zo zásobníka a otestovanie jeho znamienka, a ak má tento prvok znamienko mínus, potom vykonajte procedúru P. Inštrukcie IF0 P a IF + P dávajú pokyn na vykonanie P postup, respektíve v prípade, keď sa vyskočený prvok rovná nule, a v prípade, keď je jeho hodnota kladná.

Ako príklad ilustrujúci použitie príkazov skupiny IF uveďme definíciu príkazu základného jazyka ABS, ktorý počíta modul vrcholu zásobníka.

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

Príkazy BR-, BR0 a BR + zodpovedajú príkazu IF-THEN-ELSE, ktorý vám dáva pokyn, aby ste si vybrali jednu z dvoch procedúr pomenovaných po nich. Ak sa znamienko prvku vyskočeného zo zásobníka zhoduje so znamienkom v označení príkazu, vykoná sa procedúra pomenovaná ako prvá a ak sa nezhoduje, vykoná sa druhá procedúra. Napríklad inštrukcia BR0 P0 P1 dáva pokyn na vykonanie procedúry P0 v prípade, že prvok vyskočený zo zásobníka sa rovná nule, a ak táto podmienka nie je splnená, potom vykonajte procedúru P1.

Uvažované príkazy vám umožňujú ekonomicky naprogramovať vykonávanie postupu v závislosti od daných podmienok. Najčastejšie podmienky tvaru x<0, x=0, x>0 priamo realizujú tímy skupiny IF. Podmienky x<=0, x<>0, x> = 0 sa programujú pomocou príkazov BR-, BR0, BR + s použitím prázdnej operácie NOP ako prvého postupu. Napríklad, ak x<=0 then P соответствует команда BR+ NOP P. Примером использования команд группы BR может служить следующая реализация команды базового языка NOT, заменяющей нулевое значение вершины стека единицей, а ненулевое - нулем.

: NIE [x] BR0 1 0;

Vetvenie programu sa často vykonáva po porovnávacích príkazoch (<, =, >), ktoré vytvárajú logickú hodnotu 1 alebo 0 v závislosti od výsledku porovnania týchto dvoch čísel. Napríklad príkaz základného jazyka MAX možno naprogramovať takto:

: MAX C2 C2< IF+ E2 D ;

Skupina príkazov vetvenia obsahuje aj príkaz na výber BR, napísaný v tvare:

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

Pri vykonávaní tejto inštrukcie procesor najskôr vykoná procedúru A1 a porovná hodnotu, ktorú vložil do zásobníka, s hodnotou pod ňou na predchádzajúcom vrchole zásobníka. Ak sa hodnoty zhodujú, potom sa zo zásobníka odstránia dva horné prvky a vykoná sa procedúra P1 priradená k ukazovateľu A1, po ktorej sa vykoná prechod na príkaz nasledujúci po príkaze BR (tj vo vyššie uvedenom zázname program nasledujúci za slovom P0 v texte). Ak sa porovnávané hodnoty nezhodujú, potom sa zo zásobníka odstráni jeden horný prvok (tj výsledok A1) a rovnaké akcie sa vykonajú s párom A2 P2, potom, ak zhoda nefungovala, potom s párom A3 P3 atď. do AN PN vrátane. V prípade, že sa žiadny z pokusov nezhoduje, vykoná sa procedúra P0 pomenovaná podľa slova ELSE. Číselné konštanty zvyčajne fungujú ako postupy ukazovateľov, napríklad:

[x] C BR 5 NEG -3 ABS 0 NOT ELSE T0 [y]

Výsledkom vykonania tohto riadku v hornej časti zásobníka bude hodnota y = -5, ak x = 5; y = 3, ak x = -3; y = 1, ak x = 0 a y = 0 v opačnom prípade.

Všeobecne povedané, postup ukazovateľa môže byť nielen číselná konštanta, ale aj premenná alebo akákoľvek iná procedúra, ktorá spĺňa jednoduchú požiadavku: nevytiahne nič zo zásobníka a vloží jednu hodnotu do zásobníka.

Ako ilustráciu toho, ako sa používajú operácie podmieneného vykonávania, upravíme procedúru TIME v predchádzajúcej časti tak, aby sa počítadlo zastavilo, keď je zadaná podmienka:

: ČAS [t] 1-C IF + ČAS;

Teraz sa táto rutina TIME zavolá len vtedy, keď je vrchol zásobníka kladný. Počítadlo sa spustí presne N-krát, ak na začiatku prvého vykonania TIME bude vrchol obsahovať kladné číslo N. Napríklad, ak chcete získať 7 spúšťačov, musíte nastaviť

7 ČAS<ВК>

Keďže IF + v definícii TIME, ako každá podmienená operácia, vytiahne testovanú položku zo zásobníka a táto položka je potrebná pre nasledujúce operácie, musí sa duplikovať umiestnením operácie C (Kopírovať) pred IF +.

Rekurzia nie je primárnym prostriedkom na vykonanie procedúry viackrát. Pre programovanie slučiek v jazyku PARADISE sú k dispozícii príkazy RP (Repeat) a DO (Do - do, execute).

Príkaz RP W dáva pokyn na vykonanie procedúry W znova a znova neobmedzený počet krát. Aby sa opakovania zastavili, telo procedúry W musí obsahovať operáciu EX (Exit), ktorá sa má vykonať za danej podmienky. Operácia EX sa prepne na vykonanie postupu, ktorý nasleduje po opakovanom postupe, ktorý obsahuje túto operáciu EX v texte programu. Takže počítadlo implementované vyššie ako rekurzívna procedúra TIME môže byť naprogramované ako opakovanie procedúry W, ktorá je definovaná takto:

: W [t] 1-C IF0 EX;

Aby počítadlo fungovalo 25-krát, musíte spustiť riadok

Spolu s operáciou EX, ktorá sa používa v príkazoch podmieneného vykonania, existujú aj operácie podmieneného ukončenia EX-, EX0, EX +, ktoré majú rovnaký účinok ako príkazy IF-EX, IF0 EX, IF + EX, tj. konzumovať vrchol prvok, ktorý testuje svoj znak a vykoná výstup, ak sa znak zhoduje s označením uvedeným v označení operácie. Operácie EX, EX-, EX0, EX + je možné použiť nielen v samotnom tele opakujúceho sa postupu (v našom prípade W), ale aj v postupoch, na ktoré sa vzťahuje.

Ako príklad uveďme problém nájdenia najväčšieho spoločného deliteľa dvoch prirodzených čísel Euklidovou metódou. Podstatou metódy je, že je potrebné odčítať menšie číslo od väčšieho čísla, kým sa čísla navzájom nerovnajú. Keď sa dosiahne rovnosť, nájde sa najväčší spoločný deliteľ.

Programovanie bude prebiehať metódou vývoja zhora nadol. Najprv definujeme procedúru GCD, ktorá fixuje všeobecnú schému algoritmu. Parametrami tohto postupu sú dve čísla M a N na zásobníku, pre ktoré sa nájde najväčší spoločný deliteľ. V tele procedúry GCD musí byť špecifikovaný cyklický proces prevodu hodnôt v zásobníku. Výsledkom tohto procesu by mali zostať dve rovnaké čísla v zásobníku - ktorékoľvek z nich možno považovať za najväčšieho spoločného deliteľa. S ohľadom na tieto úvahy môže byť postup GCD definovaný nasledovne.

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

Teraz je potrebné naprogramovať jeden krok iteračného procesu, t.j. definujte postup STEP. Jeho parametrami sú dve čísla v zásobníku. Musíte porovnať tieto čísla a opustiť slučku, ak sú rovnaké, inak odčítajte menšie od väčšieho. Dá sa to urobiť napríklad takto:

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

Teraz v programe nezostali žiadne nedefinované postupy a môžete to začať kontrolovať. Kontrola by sa mala vykonávať zdola nahor, to znamená, že najprv sa musíte uistiť, že postup STEP funguje správne a až potom - GCD.

Operácia DO základného jazyka spôsobí, že po nej pomenovaná procedúra sa N-krát zopakuje, kde N je číslo nachádzajúce sa v hornej časti zásobníka v čase vykonania DO. Napríklad, aby sa procedúra P vykonala 8-krát, musíte zadať

8 DO P

Ak telo procedúry P obsahuje aspoň jednu výstupnú operáciu a podmienka na jej vykonanie je splnená skôr, ako nastane stanovený počet opakovaní, potom sa opakovania ukončia ukončením procedúry, rovnako ako v prípade RP prevádzka. Napríklad, ak DO zopakuje vyššie opísaný postup W a má vo svojej definícii IF0 EX, zápis [T] 30 DO W spôsobí 30 opakovaní W, ak T> = 30. Ak 0

Ak je v čase vykonávania operácie DO na vrchu zásobníka nulová alebo záporná hodnota, potom sa postup nasledujúci po DO nevykoná ani raz.

Na ilustráciu použitia operácie DO definujeme rutinu NUM, ktorá počíta počet nenulových bitov v 32-bitovom slove x špecifikovanom v hornej časti zásobníka.

Umiestnite počítadlo počtu jednotiek v podzásobníku. Počítanie jednotiek bude spočívať v zopakovaní procedúry NUMI 32-krát, v ktorej budeme skúmať jeden bit slova x. Po opustení slučky musí byť požadovaný počet v podzásobníku.

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

Na počítanie nenulových bitov využijeme fakt, že ten v najvýznamnejšom (31.) bite slova slúži ako znamienko záporného čísla. Ak je skúmané slovo záporné, pridajte jedno k N. Na konci postupu NUMI musíte posunúť skúmané slovo o jednu číslicu doľava.

: NUMI C IF-N + SHL;

Implementácia postupu N + je pomerne jednoduchá: musíte pridať jeden do podvrstvy zásobníka bez zmeny vrcholov.

: N + E2 1 + E2;

Opakované procedúry môžu vo svojom tele obsahovať operácie RP a DO vedúce k výskytu vnorených slučiek a je povolená akákoľvek hĺbka vnorenia. V tomto prípade existuje operácia EXT na opustenie vnorenej slučky, ktorá označuje hĺbku vnorenia v hornej časti zásobníka. Napríklad výstup z dvoch vnorených slučiek možno nastaviť takto:

Treba mať na pamäti, že použitie príkazu EXT si vyžaduje zvýšenú pozornosť, pretože pri úprave programu sa môže zmeniť hĺbka vnorenia slučiek a bude potrebné zmeniť zodpovedajúcu konštantu pred EXT.

Pomenované údaje

Zásobník operandov je hlavným, ale nie jediným mechanizmom manipulácie s údajmi v PRSP. Spolu s definíciami procedúr je tiež možné deklarovať prvky a štandardne usporiadané kolekcie prvkov (tzv. štruktúry) údajov, ktoré sú potom k dispozícii na použitie pod ich názvami. Implementáciou deklarácií údajov si procesor vyhradzuje pamäť potrebnú na ich uloženie a poskytuje potrebné mechanizmy na prístup k tejto pamäti.

Základný jazyk DSPN obsahuje množstvo direktívnych slov diskutovaných nižšie na deklarovanie premenných a polí. Aby sa jazyk systému rozšíril, možno do neho zaviesť ďalšie slová tohto druhu a tým aj ďalšie prvky a dátové štruktúry.

Slovo VAR deklaruje 16-bitovú číselnú premennú. Napríklad vstup

deklaruje premennú X, to znamená, že procesoru povie, že názov X je názov premennej. Procesor s týmto názvom spája 16-bitové pamäťové miesto, v ktorom bude uložená hodnota tejto premennej. Inštrukcia na priradenie premennej X k hodnote, ktorá je obsiahnutá v hornej časti zásobníka operandov, má tvar

Pri vykonávaní tohto príkazu procesor vyberie horný prvok zo zásobníka a zapíše jeho hodnotu na miesto pridelené pre premennú X.

Príkaz pozostávajúci iba z názvu premennej bez písmena! Spôsobí, že hodnota tejto premennej sa presunie do zásobníka a push sa vykoná skopírovaním obsahu zodpovedajúceho miesta v pamäti, to znamená, že hodnota premennej zostane nezmenená. . Akékoľvek zadanie názvu premennej X do programu, pokiaľ mu bezprostredne nepredchádza slovo predpisujúce inú akciu, vytlačí aktuálnu hodnotu tejto premennej do zásobníka, rovnako ako priamo zadané čísla (číselné literály) sú natlačené na stoh.

Ako príklad uveďme inú verziu vyššie diskutovanej procedúry GCD, v ktorej sa používajú dve pracovné premenné.

: BOŽE! X! Y RP KROK X [GCD];

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

: X-Y X Y -! X;

: Y-X Y X -! Y;

Ako vidíte, program sa trochu predĺžil, no jeho prehľadnosť sa zvýšila.

Slovo VCTR deklaruje jednorozmerné pole (vektor) 16-bitových buniek a číslo najvýznamnejšieho prvku tohto poľa je dané hodnotou vrcholu. Napríklad v dôsledku písania

9 VCTR ROW Procesor rezervuje 10 sekvenčne adresovateľných 16-bitových slov pamäte, ktoré tvoria vektorový RIADOK (0:9). Najprv sa do zásobníka vloží číslo 9 a potom sa vykoná procedúra VCTR, ktorá použije horný prvok zásobníka na určenie dĺžky vektora ROW, ktorý sa má vytvoriť.

Presunutie hodnoty j-tého prvku vektora ROW, 0 do zásobníka<=j<=9, задается командой

[j] RIADOK

Použitím čísla prvku v zásobníku ako parametra názov vektora ROW spôsobí, že toto číslo bude nahradené hodnotou zodpovedajúceho prvku. Ak sa slovo! nachádza bezprostredne pred názvom vektora ROW, potom sa hodnota čiastkovej cesty priradí prvku tohto vektora označenému vrcholom a hĺbka zásobníka sa zníži o 2. Môžete napríklad vynulovať 5. prvok vektora ROW takto:

Existuje aj možnosť vytvárania konštantných vektorov, t.j. vektory 16-bitových čísel, ktorých hodnoty boli určené pri jeho deklarácii a nebudú sa v budúcnosti meniť. Takže vektor 16-bitových konštánt VC dĺžky L + 1 je deklarovaný pomocou slova CNST v tvare:

CNST VC k0 k1 ... kL;

kde k0, k1, ... kL sú príkazy vkladajúce jednu hodnotu do zásobníka. Najčastejšie sú to len číselné literály, ale môžu tu byť aj názvy premenných, procedúry, ale aj príkazy zložené z dvojíc slov, ako je napríklad príkaz na nastavenie adresy premennej „X“, o ktorom budeme hovoriť nižšie. na zložky obyčajných vektorov. Napríklad:

Viacrozmerné pole 16-bitových slov sa deklaruje pomocou slova ARR, pred ktorým sú uvedené maximálne hodnoty indexu pre každú dimenziu a počet dimenzií. Napríklad 3D pole TIR (0: 8,0: 2,0: 24) je deklarované takto:

Číslo 3 bezprostredne pred ARR označuje rozmer deklarovaného poľa.

Vloženie prvku poľa do zásobníka sa dosiahne zadaním indexu tohto prvku, za ktorým nasleduje názov poľa. Napríklad príkaz na zatlačenie prvku TIR (0,2,2) do zásobníka je vyjadrený ako

Podľa toho sa príkazom nastaví priradenie aktuálnej hodnoty vrcholu zásobníka tomuto prvku

Všetky uvažované príklady ilustrovali vytváranie štruktúr zo 16-bitových slov. Jazyk však umožňuje definovať aj štruktúry 32-bitových slov a 8-bitových bajtov. Za týmto účelom sa pred slovo definujúce štruktúru umiestni predpona LONG alebo BYTE. napr.

5 BYTE VCTR X - definícia 6-zložkového vektora bajtov X;

BYTE CNST Y 65 66 67; - definícia 3-zložkovej bajtovej vektorovej konštanty Y;

10 20 2 LONG ARR MTRX - definícia matice dlhých slov MTRX (0: 10,0: 20).

Čítanie prvkov slovných a bajtových štruktúr sa vykonáva rovnakým spôsobom ako v prípade 16-bitových slovných štruktúr. Ak je dĺžka prvku menšia ako 32 bitov, extrahovaná hodnota sa umiestni do najmenej významného slova alebo bajtu vrcholu zásobníka a horná časť vrcholu sa vynuluje. Najmenej významné slovo alebo bajt z 32-bitového slova v zásobníku sa tiež berie ako hodnota priradená prvku štruktúry slova alebo bajtu.

Hoci sa pri definovaní údajov štandardne používa 16-bitový formát slova, má aj zápis WORD. Túto predponu je vhodné použiť, keď sa má program preniesť na iné stroje, kde je tiež implementovaný DSSP a predvolené nastavenie môže byť iné.

Bajtové dátové štruktúry sa najčastejšie používajú na ukladanie a spracovanie textových informácií. Je to spôsobené tým, že v pamäti počítača je pridelený jeden bajt na zakódovanie jedného znaku. Na nastavenie kódov písmen v jazyku PARADISE slúži konštrukcia #l, kde l je ľubovoľné písmeno dostupné na klávesnici počítača. Procesor DSPP vníma túto konštrukciu ako príkaz na zatlačenie písmena l do zásobníka. Napríklad:

Táto konštrukcia vykonáva rovnaké akcie ako číselný doslov, ktorý sa rovná kódu zadaného písmena, ale jej použitie je vhodnejšie, pretože vás po prvé oslobodzuje od potreby zapamätať si kódy a po druhé robí programy zrozumiteľnejšími. Konkrétne je možné uviesť nasledujúcu definíciu konštantného vektora Y:

BYTE CNST Y #A #B #C;

Často je vhodné použiť v programe symbolický zápis číselnej konštanty. Definičné slovo VALUE je k dispozícii na poskytnutie tejto schopnosti:

Tento príkaz vytiahne hornú položku zo zásobníka a vytvorí slovo s názvom bezprostredne nasledujúcim za VALUE. Použitie tohto slova sa rovná použitiu číselnej konštanty. Napríklad:

Práca s pamäťou podľa fyzických adries

Uvažované prostriedky poskytujú možnosť pomenovať dáta a manipulovať s nimi bez ohľadu na adresný systém počítača. Základný jazyk však zahŕňa aj prostriedky na manipuláciu s adresami pamäťových prvkov. Adresa premennej alebo prvku poľa X sa vloží do zásobníka príkazom

V prípade prvku poľa tomuto príkazu predchádza hodnota indexu (s).

Príkaz hostiteľského jazyka @ nahradí adresu dlhého pamäťového slova v hornej časti zásobníka hodnotou, ktorá toto slovo obsahuje. Napríklad hodnotu Y je možné vložiť do zásobníka vykonaním nasledujúceho riadku:

@B nahradí adresu hodnotou zodpovedajúceho bajtu za predpokladu nula vysokých bajtov a @L nahradí adresu 32-bitovým slovom.

Existujú aj príkazy na zápis hodnôt do pamäte. Príkaz!T zapíše na adresu vyskočenú z vrchu zásobníka 16-bitovú podhodnotu. Príkaz!TB spôsobí podobný zápis bajtu nižšieho rádu podbytu do bajtu adresovaného vrcholom a!TL zapíše 32-bitové slovo sub-sub do slova adresovaného vrcholom. Môžete napríklad priradiť hodnotu 15 piatemu prvku bajtového vektora BV (0: 5) pomocou nasledujúcich príkazov:

15 5 "BV! TB

Potreba pracovať s pamäťou na fyzických adresách zvyčajne vzniká pri vytváraní programov, ktoré závisia od architektúry konkrétneho počítača, napríklad pri vytváraní vstupno/výstupných ovládačov.

Ďalšie operácie pre prácu s dátami a pamäťou

S cieľom dosiahnuť vyššiu efektivitu a kompaktnosť programov boli do jazyka PARADISE zavedené nasledujúce operácie:

0 <имя переменной>- resetovať premennú;

1 <имя переменной>- priradiť jednotku k premennej;

1- <имя переменной>- znížiť hodnotu premennej o jednu;

1+ <имя переменной>- zvýšiť hodnotu premennej o jednu;

!- <имя переменной>- odpočítať hodnotu vrcholu zásobníka od premennej;

!+ <имя переменной>- pripočítajte k premennej hodnotu vrcholu zásobníka.

Každá z týchto operácií sa dá jednoducho naprogramovať pomocou príkazov na čítanie a zápis premenných. napr.

0 X je ekvivalentné 0! X

1+ X je ekvivalentné X 1+! X

X je ekvivalentné X E2 -! X

Využitím týchto operácií sa zvýši efektívnosť a viditeľnosť programov.

V praxi často chcete priradiť jednu hodnotu všetkým prvkom poľa. Na to je prevádzka v jazyku PARADISE !!!<имя массива>... Jeho úlohou je priradiť hodnotu vrcholu zásobníka všetkým komponentom zadaného poľa. Operácia!!! použiteľné pre polia s prvkami akéhokoľvek formátu.

Príklad použitia:

kód medzery sa zapíše do všetkých komponentov bajtového poľa BUF.

Často je potrebné v programe získať informácie o dátovej štruktúre za názvom. Dvojica príkazov SIZE? - uveďte formát údajovej položky: 1, 2 alebo 4 bajty a DIM? - uveďte počet údajových položiek v štruktúre. Napríklad, ak sú deklarované údaje

3 4 2 DLHÝ ARR Z

potom aplikované na ne, tieto príkazy poskytnú nasledujúci výsledok (desatinné čísla):

VEĽKOSŤ? VEĽKOSŤ X? Y VEĽKOSŤ? Z

DIM? X DIM? Y DIM? Z

Sada inštrukcií procesora DSPP obsahuje ako doplnok štyri príkazy, ktoré umožňujú čítať a zapisovať jednotlivé bity pamäťových buniek počítača. Toto sú príkazy @BI,! BI,! BI0,! BI1. Parametre pre každý z nich sú adresa pamäťového slova umiestneného v zásobníku a číslo bitu v tomto slove (pripomeňme, že bity sú číslované sprava doľava, začínajúc od nuly). Príkaz! BI tiež predpokladá, že v zásobníku je bit a hodnota, ktorá sa má zapísať. Príkaz @BI nahradí špecifikované parametre hodnotou zvoleného bitu (0 alebo 1), príkazy! BI0 a! BI1 nastavia vybraný bit na 0 a 1, pričom ich parametre odstránia zo zásobníka a príkaz! BI príkaz nastaví vybraný bit na hodnotu najmenej významného bitu tretieho prvku zásobníka a odstráni všetky tri jeho parametre zo zásobníka. Ak je napríklad hodnota premennej X binárne číslo 101101, výsledky uvedených operácií budú nasledovné:

"X [addr.X] 3 @BI - tretí bit X, 0" X 3! BI - X sa rovná 100101,

"X [addr.X] 0! BI0 - X sa rovná 100100,

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

V jazyku PARADISE existujú aj prostriedky na prácu s reťazcami bajtov umiestnenými v pamäti. Na nastavenie reťazca bajtov sa do zásobníka vložia dva parametre: počiatočná adresa reťazca (to znamená adresa jeho prvého bajtu) a dĺžka reťazca (počet bajtov v ňom).

Príkaz !!!MB sa používa na priradenie všetkých bajtov reťazca k jednej hodnote (nastavenej v zásobníku). Zo zásobníka spotrebuje tri parametre: kde b je priradená hodnota, a a l sú počiatočná adresa a dĺžka bajtového reťazca. Predpokladajme napríklad, že potrebujete vynulovať prvky od 3. do 10. bajtového poľa TXT (0:20). Ak to chcete urobiť, môžete spustiť nasledujúci riadok:

0 3 "TXT 8 !!! MB

výsledkom je, že osem po sebe idúcich prvkov zadaného poľa, počnúc od 3., dostane hodnotu 0. Podobný príkaz !!!MW je určený na vyplnenie sekvencie 16-bitových slov rovnakou hodnotou (počet slov je uvedené v hornej časti zásobníka) a príkaz!!!M - na vyplnenie postupnosti dlhých slov.

Príkaz!SB prenáša bajtové reťazce. Jeho parametre sú:, kde a1 a l sú počiatočná adresa a dĺžka prenášaného reťazca, a2 je počiatočná adresa reťazca, na ktorý sa prenos vykonáva. V dôsledku vykonania príkazu!SB sa v pamäti nachádza bajtový reťazec dĺžky l z adresy a2, čo je presná kópia reťazca umiestneného na adrese a1 pred vykonaním prenosu. Zdrojový reťazec a cieľový reťazec sa môžu prekrývať. Predpokladajme napríklad, že chcete presunúť prvky bajtového poľa M (0:10) takto: M (10): = M (9), M (9): = M (8), ..., M (1): = M (0). Ak to chcete urobiť, môžete použiť príkaz! SB:

0 "M 10 C2 1+! SB

v dôsledku toho sa reťazec 10 bajtov posunie o jeden bajt smerom k zvýšeniu adresy pamäte.

Príkaz!SB je vhodný na prácu so znakovými reťazcami (pripomíname, že každý znak je zakódovaný v jednom byte). Umožňuje napríklad priradiť hodnotu explicitne špecifikovaného doslovného reťazca bajtovému poľu. Na určenie takéhoto reťazca použite textový literál, t.j. postupnosť znakov uzavretých v úvodzovkách, napríklad „TEXT LITERAL“. Keď sa s touto konštrukciou stretnete v programe, spôsobí, že počiatočná adresa a dĺžka bajtového reťazca obsahujúceho text uzavretý v úvodzovkách sa vložia do zásobníka. Tieto parametre potom môže použiť príkaz!SB. Napríklad fragment "TABLE" 0 "TN! SB spôsobí odoslanie literálu TABLE do poľa TN.

Príkaz SRCHB hľadá v reťazci zadaný bajt. Parametre:, kde b je bajt, ktorého prvý výskyt sa má nájsť, a a n určujú adresu začiatku a dĺžku hľadaného reťazca. Ak n> 0, vyhľadávanie sa vykonáva od adresy a po adresu a + n-1 (v smere rastúcich adries), ak 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]

Dokončením úvahy o prostriedkoch práce s dátami sa zastavíme pri problematike ukladania dát do externej pamäte počítača, t.j. na magnetických diskoch. V jazyku PARADISE je príkaz SAVE<имя файла>na uloženie kópie hlavnej pamäte systému na disk spolu s užívateľom definovanými objektmi. V tomto prípade sa na disku nezobrazia oblasti pamäte pridelené pre dáta operáciami VAR, VCTR, ARR. Výsledkom je, že pri zavádzaní uloženého systému z disku nie sú hodnoty zadaných údajov definované (musia sa určiť počas vykonávania programu). Vo väčšine prípadov je to opodstatnené, pretože nie je potrebné míňať diskovú pamäť na ukladanie pracovných premenných, vyrovnávacích pamätí atď. Existujú však údaje, ktorých hodnoty je potrebné určiť ihneď po zavedení systému z disku. Príkladom je premenná, ktorá ukladá rýchlosť výmeny dát s nejakým externým zariadením. Pri prechode na iný kurz stačí zmeniť hodnotu tejto premennej bez vykonania akýchkoľvek opráv v programe.

Indikáciou pre procesor, že hodnoty prvkov nejakej dátovej štruktúry by mali byť výstupné na disk príkazom SAVE, je predpona FIX umiestnená pred definíciou štruktúry, napr.

FIX VAR SPEED 20 FIX BYTE VCTR TABL

Práca s takto definovanými dátovými štruktúrami sa nelíši od práce so štruktúrami definovanými bežným spôsobom.

Riadiace príkazy procesora

V jazyku PARADISE existuje malá skupina príkazov určených na ovládanie procesora DSPP, alebo skôr emulátora procesora DSPP.

Príkaz RESTART spôsobí reštart procesora. V tomto prípade sa zásobník vymaže, správa sa vydá

DSSP verzia XX.XX.XX

Voľný XXXXXXW

a procesor prejde do pohotovostného režimu príkazového vstupu. Tento príkaz je užitočný pri ladení programov. Vykoná sa aj vtedy, keď nastane chybový stav: index prekročí hranice poľa, voľná pamäť je vyčerpaná atď.

Príkaz \ G sa používa na pokračovanie vykonávania programu po zastavení na nedefinovanom slove. Ak pri vykonávaní procedúry procesor narazí na odkaz na nedefinované slovo, vydá správu:

stop neviem<слово> .

kde bod je pozvanie DSPP-procesora signalizujúce, že procesor je v stave zastavenia na nedefinovanom slove. V tomto režime môžete vykonávať ľubovoľné príkazy procesora, rovnako ako v normálnom režime, keď hviezdička predstavuje výzvu. Existujú dva spôsoby ukončenia tohto režimu - buď vykonaním príkazu \ G (procesor bude pokračovať vo vykonávaní prerušenej procedúry, preskočí nedefinované slovo), alebo príkazom REŠTART.

EXEC dáva pokyn procesoru, aby vykonal procedúru, ktorej adresa je v hornej časti zásobníka. Ak chcete získať adresu procedúry, použite príkaz "" (dva apostrofy), za ktorým nasleduje názov procedúry. Napríklad v dôsledku príkazu

adresa procedúry ABS sa vloží do zásobníka. Tieto príkazy vám umožňujú odovzdať procedúru ako parameter inej procedúre.

Už spomínaná operácia SAVE patrí do skupiny príkazov na ovládanie procesora.<имя файла>, ktorý predpisuje uloženie kópie systému na disk, ako aj príkazy, ktoré určujú zdroj vstupu textových informácií dodávaných na vstup procesora. Primárnym zdrojom je klávesnica displeja.

príkaz LOAD<имя файла>prepne vstup do súboru na disku so zadaným názvom. Príkaz PF - predpisuje zadávanie príkazov z vyrovnávacej pamäte textového editora. Príkaz TEXEC odovzdá vstupu procesora textový reťazec, ktorého parametre sa nastavujú na zásobníku. Po vykonaní príkazov obsiahnutých v špecifikovaných zdrojoch sa vstup automaticky prepne na klávesnicu displeja.

Príkazy slovníka

Vstupný tok inštrukcií vnímaný procesorom môže obsahovať najmä inštrukcie na definovanie procedúr a dát, ktoré spôsobujú kompiláciu do internej reprezentácie a uloženie tela procedúry alebo pridelenie pamäte pre špecifikované dáta, ako aj zadanie názvu skompilovaného postup alebo dátovú štruktúru do slovníka DSPP.

Slovník vytvára súlad medzi externými (použitými v texte programu) názvami a adresami objektov zodpovedajúcich týmto menám vo vnútornej reprezentácii. Pri spracovaní definície procedúry alebo popisu pomenovanej veci si spracovateľ vytvorí slovník, v ktorom vytvorí nové slovníkové heslo obsahujúce názov (presnejšie prvých 7 písmen názvu) a adresu procedúry. telo alebo deskriptor údajov, ktorý je namapovaný na tento názov.

Pri programovaní zhora nadol môžu telá procedúr obsahovať odkazy na objekty, ktoré ešte nie sú definované. V tomto prípade sa v slovníku tvoria slovníkové heslá (hlavičky), označené znakom nejednoznačnosti. Príkaz UNDEF sa používa na zobrazenie všetkých nedefinovaných mien na obrazovke.

V priebehu budovania slovníka je možné vytvárať podslovníky - pomenované zbierky slovníkových vstupov. Sub-slovník zvyčajne kombinuje procedúry a dátové štruktúry súvisiace s jednou úlohou. Aby sa predišlo zámene medzi názvami podslovníkov a inými objektmi programu, názov podslovníka musí začínať znakom $. Prístup k podslovníkom na ich rozšírenie alebo použitie je možné otvárať a zatvárať pomocou špeciálnych príkazov, ktoré zahŕňajú nasledujúce (názov $ v znamená akýkoľvek platný podslovník).

GROW $ v - zväčšite podslovník $ v, to znamená, pokiaľ nie je predpísané inak, zadajte názvy všetkých kompilovaných procedúr a údajov do podslovníka $ v;

USE $ v - otvorený na použitie (na vyhľadávanie mien v ňom) podslovník $ v;

SHUT $ v - zatvorte možnosť používať podslovník $ v;

LEN $ v - sprístupniť na použitie iba podslovník $ v;

ZRUŠIŤ - zrušenie LEN posledného.

Existuje aj príkaz? $, ktorý na displeji vytlačí názvy všetkých podslovníkov v ich stave – podslovník je otvorený alebo zatvorený pre vyhľadávanie. Slovník, ktorého názov je vytlačený v hornej časti, je vždy inkrementovaný.

Základné postupy PRSP tvoria podslovník s názvom $ PRIME, štandardne otvorený na použitie a rozšírenie, to znamená, ak neexistuje príkaz, ktorý predpisuje rozšírenie iného podslovníka.

Predpokladajme napríklad operáciu? $ Vytlačil ďalší stav podslovníkov.

$ PRG otvorené

$ PRIME otvorené

$ EDIT zatvorené

$ PRIME otvorené

SYSTÉM zatvorený

To znamená, že $ PRG je momentálne otvorený na rozšírenie a použitie, $ PRIME je len na použitie a $ EDIT a SYSTEM nie sú dostupné. Všimnite si, že podslovník môže pozostávať z niekoľkých sekcií s rovnakými názvami.

Existujú príkazy na vymazanie konkrétnej sady slovníkových vstupov zo slovníka a možno aj súvisiacich interných objektov. Napríklad príkaz FORGET $ v vymaže po poslednom vykonaní príkazu GROW $ v všetky názvy zadané v slovníku (nielen v podslovníku $ v) spolu s objektmi označenými týmito názvami a zruší rozšírenie podslovník $ v, ktorý nastavil. Príkaz PROGRAM $ v robí to isté ako sekvenčné príkazy FORGET $ v GROW $ v. Prítomnosť takéhoto príkazu na začiatku akéhokoľvek programu vedie k tomu, že pri opätovnom skompilovaní programu sa jeho stará kópia vymaže a vytvorí sa slovník na uloženie objektov novej kópie programu. Napríklad vykonaním operácie FORGET $ PRIME na slovníku, ktorého stav bol zobrazený vyššie, dostaneme nový stav:

$ EDIT zatvorené

$ PRIME otvorené

SYSTÉM zatvorený

Počas vykonávania príkazu FORGET sa zobrazujú názvy sekcií, ktoré sa majú vymazať.

Všimnite si, že názov podslovníka SYSTEM nezačína na $. Je to prípustné, ale vedie to k tomu, že aplikácia príkazov FORGET a RPOGRAM na tento podslovník nespôsobí žiadnu akciu (podslovník SYSTEM pre nich takpovediac neexistuje).

Vzhľadom na to, že v hotovom programe pre drvivú väčšinu procedúr nie je potrebné odvolanie externým názvom, je možné ich názvy zo slovníka vymazať pri zachovaní interných objektov s nimi spojených. Príkaz CLEAR $ v odstráni všetky názvy zo všetkých sekcií podslovníka $ v okrem tých, ktorým predchádza predpona :: (dve dvojbodky) v texte programu (pri ich definovaní). Napríklad v dôsledku toho, že procesor vykoná nasledujúci fragment programu:

::: X + Y! + X;

VYMAZAŤ $ EXAM v podslovníku $ EXAM zostanú iba názvy X a X +, položka Y zo slovníka bude odstránená (hoci premenná zodpovedajúca slovu Y v internom zobrazení zostane).

I/O príkazy

Hlavným prostriedkom interakcie medzi používateľom a DSPP je terminál, ktorým je spravidla katódový displej s klávesnicou. Terminál slúži na prvotné zadávanie, úpravu a ladenie programov, prípravu dát a celú správu systému. Programy a dáta, ako aj samotná drevotrieska sa ukladajú ako súbory na disky a dajú sa vytlačiť na tlačiarni. Nasledujúce nástroje sú k dispozícii na riadenie I/O v súbore základných procedúr PRSP.

Programovanie činnosti terminálu zabezpečujú príkazy pre zadávanie a výstup čísel, jednotlivých písmen a sekvencií písmen (riadkov), ako aj niektoré doplnkové príkazy.

Príkaz TIB (Terminal Input Byte) spustí slučku čakajúcu na stlačenie klávesu na klávesnici terminálu. Po stlačení klávesu sa 8-bitový kód zodpovedajúceho písmena vloží do zásobníka ako najmenej významný bajt vrcholu, pričom najvýznamnejšie 3 bajty obsahujú nuly. Kópia takto zadaného písmena sa zobrazí na displeji. Nechýba ani príkaz TRB (Terminal Read Byte), ktorý sa od TIB líši tým, že vytlačenie kódu zadaného písmena do zásobníka nie je sprevádzané zobrazením tohto písmena na displeji.

Príkaz TIN (Terminal Input Number) spustí cyklus zadávania do zásobníka a zobrazenie čísla zadaného z klávesnice na displeji. Zadané číslo musí byť postupnosť čísel, ktorá môže začínať znamienkom mínus a končiť ... V závislosti od nastaveného režimu I/O procesor interpretuje čísla ako hexadecimálne, desiatkové, osmičkové alebo binárne. Ak hexadecimálne číslo začína číslicou označenou písmenom, potom sa pred ňu pridá číslica 0. Zadané číslo sa preloží do binárneho doplnkového kódu, ktorý sa vloží do zásobníka ako celočíselná hodnota 32-bitovej dlhé slovo, tj s odrezaním bitov umiestnených naľavo od závažia 2 na mocninu 31 najvýznamnejšieho bitu.

Každý príkaz DIČ zadáva jedno číslo. Ak je potrebné zadať postupnosť čísel v jednom riadku, je potrebné ich oddeliť stlačením klávesu a príkaz TIN sa musí vykonať znova pre zadanie každého čísla v programe.

Sekvencia obsahujúca n znakov napísaných z klávesnice sa zadá do pamäte počítača vo forme n bajtov umiestnených na postupne sa zvyšujúcich adresách, počnúc od adresy a, pomocou príkazu TIS (Terminal Input String), pred ktorou je adresa a a počet písmená n sa tlačia na zásobník ... Napríklad nech je deklarovaný bajtový vektor X dostatočnej dĺžky. Musíte zadať 9 znakov a ich hodnoty priradiť prvkom tohto vektora, počnúc nulovým prvkom:

Podobne príkaz TOS nastavuje výstup sekvencie n bajtových znakov s počiatočnou adresou a:

Výstup textových prvkov priamo zahrnutých v programe na terminál zabezpečuje konštrukcia

."<текст>"

Napríklad, aby sa po vykonaní určitého fragmentu programu na displeji objavil text ZADAJ ČÍSLO VARIANTU, fragment musí obsahovať položku „ZADAJ ČÍSLO VARIANTU“.

Príkaz TON (Terminal Output Number) zobrazí číslo vysunuté z podzásobníka a v hornej časti musí byť špecifikovaná dĺžka výstupného poľa. Zobrazené číslo je zarovnané k pravému okraju poľa, voľné pozície vľavo sú vyplnené medzerami a ak dĺžka čísla presahuje zadanú dĺžku poľa, ľavý je odrezaný. V desiatkovom režime I/O začínajú záporné čísla znamienkom mínus.

Príkaz TOB (koncový výstupný bajt) vytlačí písmeno, ktorého kód je určený spodným bajtom hornej časti zásobníka. Hĺbka zásobníka sa zníži o 1.

Existujú aj príkazy, ktoré priamo ovládajú kurzor na displeji:

CR - skok na začiatok nového riadku,

SP - medzera, to znamená posunutie o jednu pozíciu doprava.

Príkaz BELL vydá krátke pípnutie („zvonček“).

Niekedy je potrebné pri komunikácii s terminálom skontrolovať, či už bola klávesa stlačená a či už displej dokončil predchádzajúci výstupný príkaz. Dá sa to urobiť pomocou príkazov TTI (Terminal Test Input) a TTO (Terminal Test Output), ktoré ponechávajú príznak 1 v zásobníku, ak nastala špecifikovaná udalosť, a 0 v opačnom prípade.

Príkazy výstupu na tlačiareň sú podobné príkazom výstupu na terminál a sú založené na podobnej mnemotechnickej pomôcke, v ktorej znaky LP (riadková tlačiareň) nahradili TO alebo pridali ako úvodné znaky. Napríklad LPCR - skok na začiatok nového riadku, LPSP - medzera, LPN - výstup čísla z podriadku v poli určenom vrcholom, LPB - výstup znaku, LPS - výstup reťazca znakov. Existuje tiež príkaz [N] LPT, ktorý presunie tlačovú hlavu do polohy N vytlačeného riadku, a príkaz LPFF, ktorý podáva list papiera. Na tlač explicitne špecifikovaného textu je vhodné použiť textový literál a príkaz LPS, napríklad:

"TABUĽKA HODNOT FUNKCIÍ" LPS

Spracovanie prerušení a výnimiek

Pri programovaní periférií sa stáva nevyhnutnosťou zvládnuť prerušenia. V DSPP je toto spracovanie naprogramované nasledovne. Program určený na obsluhu prerušení je bežnou procedúrou PRSP, pred definíciou ktorej je predpona INT, napríklad INT: A! 1+ I; Predpona INT zaisťuje, že stav procesora sa uloží počas prerušenia a obnoví sa pri spracovaní prerušenia.

Ak chcete prepojiť partprogram s konkrétnym prerušením, použite príkaz LINK:

<адрес вектора>LINK<имя процедуры>keď sa vykoná, volanie rutiny spracovania prerušenia sa zapíše pozdĺž zodpovedajúceho vektora. Príkaz LINK môže vykonávať statické prepojenie procedúry s prerušením, ktoré nastane v čase kompilácie programu, ako aj dynamické počas vykonávania programu.

Prerušenie procesora je spôsob, akým je systém informovaný o udalosti, ktorá nastala vo vonkajšom svete. V programe sa môžu vyskytnúť aj udalosti vyžadujúce okamžité spracovanie. Toto sa nazýva výnimočné situácie. Príklady takýchto situácií: delenie nulou, chyba komunikácie so zariadením, koniec vstupného súboru atď.

V DSPP sa výnimky zachytávajú pomocou príkazových prerušení. Prerušenie príkazu je pomenovaná operácia volajúca procedúru odpovede a je deklarovaná takto:

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

Napríklad:

TRAP S1. "Situácia S1."

V prvom prípade je procedúra X konečnou reakciou na prerušenie S, v druhom, keď dôjde k prerušeniu S1, dostane terminál správu: Situácia S1.

Program, pri vykonávaní ktorého môže dôjsť k prerušeniu, môže naň nastaviť svoju reakciu pomocou príkazu intercept. DSSP poskytuje dva typy odpočúvania: ON a EON. Príkazy na zachytenie možno použiť iba v rámci procedúr a majú formát:

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

EON<имя прерывания> <реакция>Napríklad:

: A ... ON S. "Prerušenie S" ...;

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

ON a EON nastavujú rôzne typy reakcií. Ak je príkazom ON nastavená nová reakcia, potom keď dôjde k prerušeniu, vykoná sa reakčná procedúra, po ktorej prerušený program pokračuje v behu. Ak je reakcia nastavená príkazom EON, tak najskôr zásobník operandov prevezme hĺbku, ktorú mal v momente vykonania EON, potom sa vykoná reakcia a po jej dokončení sa vykoná procedúra, v ktorej bol príkaz EON sa okamžite ukončí.

Pozrime sa na niekoľko príkladov. Postup M zadáva znaky z klávesnice terminálu a kontroluje, či ide o číslicu. Ak zadaný znak nie je číslica, prerušenie ND sa zvýši. TRAP ND. "To nie je číslica." : M RP M1; : M1 TRB [B] C # 0< C2 #9 >& 0 IF + ND [B] TOB;

Konečná odpoveď na prerušenie ND je správa: Nie je to číslica.

Ak sa M volá z procedúry P1, ktorá má vlastnú odozvu na prerušenie ND: P1 ON ND PR1 M; : PR1 [B] CR. "Chyba." D # 0 [# 0]; potom pri zadaní nedigitálneho znaku bude prerušenie ND spracované reakčným programom PR1 typu ON, čo spôsobí výstup nasledujúceho hlásenia z nového riadku: Chyba. Zadané písmeno bude nahradené písmenom 0, po ktorom bude M pokračovať v práci.

Ak sa M volá z procedúry P2: P2 EON ND PR2 M; : PR2 CR. "Chyba. Koniec záznamu." ; potom pri zadaní nedigitálneho znaku bude prerušenie ND spracované reakčným programom PR2 typu EON, čo spôsobí výstup nasledujúceho hlásenia z nového riadku: Chyba. Koniec vstupu., Potom P2 opustí. Zásobník operandov bude potom prázdny.

V prípade potreby je možné v reakčnom programe znovu vyvolať prerušenie, čím sa rozšíri na programy vyššej úrovne. V tomto prípade bude prerušenie spracované buď programom uvedeným v príkaze na odpočúvanie v priloženom postupe, alebo konečnou reakciou. Napríklad, ak upravíte PR2 takto:: PR2 CR. "Chyba. Koniec záznamu." ND; potom správa vydaná do terminálu bude: Chyba. Koniec vstupu. Nie číslo.

DSPP má niekoľko vstavaných príkazových prerušení, na ktoré je možné reagovať v používateľských programoch.

Zdieľajte to