Rajský jazyk. Akým jazykom hovoril Adam a prečo je v raji super? Akým jazykom sa hovorí v raji

Assalamu alaikum wa rohmatullahi wa barakatuhu!
"Arabčina je jazykom obyvateľov Raja!" (Približný význam)
Drahí bratia, žiadam vás, aby ste objasnili otázku týkajúcu sa tohto hadísu, je to spoľahlivé? Vo všeobecnosti sú tieto slová slovami proroka Mohameda, alayhi solyatu wa salam?
barakAllahu fikum wa jazakumullahu khairan!

Wa alaikum salaam wa rahmatullahi wa barakatuh!

At-Tabarani v "al-Awsat" podľa správ Abu Hurayrah:
"Posol Alahov, mier a požehnanie Alaha s ním, povedal: "Som Arab, Korán je v arabčine a jazykom miest v raji bude arabčina."

Shaykh al-Albani ho priviedol do Silsila ad-da'ifa na číslo 161 a povedal:

„Tento hadíth je vymyslený (Maudu‘). V skutočnosti neexistuje jediný spoľahlivý hadís, ktorý by vysvetľoval, akým jazykom budú obyvatelia Raja hovoriť, a preto je potrebné mlčať a nepúšťať sa do rozhovorov o tejto problematike, poskytovať informácie o nej Všemohúcemu Alahovi a venovať sa iba tomu, čo bude chcieť. viesť k páchaniu tých skutkov, ktoré budú prospešné na druhom svete!
Sheikhul-Islam Ibn Taymiyyah, nech sa nad ním Alah zmiluje, dostal otázku: „Akým jazykom budú ľudia hovoriť v Deň zmŕtvychvstania? Osloví Alah Všemohúci ľudí v arabčine? A je tvrdenie, že jazykom obyvateľov pekla je perzština a obyvatelia raja arabčina?
Na čo odpovedal: „Chvála Alahovi, Pánovi svetov! Nie je známe, akým jazykom budú ľudia v ten deň hovoriť, ako a akým jazykom ich osloví ich Pán, je veľký a slávny. Ani Všemohúci Alah, ani jeho posol, mier a požehnanie s ním, nám o tom nič nepovedal, ani nie je spoľahlivé, že jazykom obyvateľov pekla bude perzština a jazykom obyvateľov raja arabčina. A nevieme, že v tejto otázke medzi spoločníkmi, nech je s nimi Alah spokojný, došlo k nejakým nezhodám. Naopak, zdržali sa toho, lebo rozprávať o tom je zbytočné. V tejto otázke však medzi nasledujúcimi generáciami panovali nezhody. Niektorí povedali, že budú komunikovať v arabčine, iní povedali, že to neplatí pre obyvateľov pekla, pretože budú odpovedať v perzštine a to je ich jazyk v pekle. Po tretie, že ľudia budú komunikovať v asýrčine, pretože je to jazyk Adama, z ktorého pochádzajú všetky ostatné jazyky. Po štvrté – že to neplatí pre obyvateľov Raja, keďže budú komunikovať v arabčine. Nikto z nich však nemá argument v prospech svojich slov, ani zo strany rozumu, ani zo zdrojov šaríe, ale sú to len tvrdenia bez akýchkoľvek dôkazov. Všemohúci Alah vie najlepšie!" Pozri Majmu'ul Fatawa 4/299.

1. Toto je príbeh o tom, ako 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 sa zakladá 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 ich vyjadrovali pravá podstata. Zdieľajú tieto názory aj predstavitelia iných kultúr a domnievajú sa, že ich jazyk je najbližší tomu pôvodnému?

Odpoveď na prvú otázku ponúka 1. Mojžišova 11:1-9 Starého zákona, kde sa hovorí, že Boh sa rozhodol potrestať ľudskú rasu tým, že na ňu uvalil kliatbu zo zmätku 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 bude Adam volať, a „ako človek volá každého živého tvora, tak to bolo jeho meno“. Improvizované kultúrne turné nám umožní vidieť, ako sú tieto problémy pokryté. Pokiaľ ide o prvý z nich, mnohí s ním súhlasia Starý testament: Rôznorodosť jazykov je trestom Pána alebo aspoň vý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. Africkí Kabiles veria, že ľudia začali hovoriť rôzne jazyky kvôli konfliktu. Podľa kmeňa z Assamu bol zmätok jazykov spôsobený tým, že raz tri deti lovili potkana. Jeden z amazonských kmeňov zastáva názor, že Boh rozdelil ľudí a ich jazyky, aby sa mu stali poslušnejšími. Medzi domorodým obyvateľstvom Ameriky v kmeni Maidu (Kalifornia) sa verí, že ľudia spočiatku hovorili rovnakým jazykom, ale jedného dňa, na pohrebnom obradu, jazyk prestal byť jedným. Irokézovia veria, že oddelenie jazykov bolo spôsobené rodinnou hádkou, ktorá viedla k smrti 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.

Staroindická posvätná hymna „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, vinúcej sa z tekvice. Kmeň Quiche (Guatemala) má mýtus, že ľudia žili všetci spolu a hovorili rovnakým jazykom, kým sa nerozdelili do skupín. Každá si vybrala 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. Tak vytvorila susedné národy - Pueblos, mexických domorodcov a ďalších, ktorí hovorili svojimi vlastnými 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, v akomkoľvek jazyku sú napísané.

Mytologický systém mnohých národov sveta nemá vysvetlenie pre zmätok 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 je však zmienka o „ideálnom“ jazyku (otázka 2). Vyššie sme spomenuli austrálsky kmeň, ktorý verí, že niektorí ľudia (živiaci sa na ľudskom tele) hovoria „čistým“ jazykom, ktorý vyjadruje pravú 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 považuje rozmanitosť jazykov za rozdelenie jedného jazyka, ktorý zahŕňa všetky ostatné.

Všade sa ľudia snažia pochopiť, ako názov predmetu prezrádza jeho podstatu. Predpokladá sa, že buď „ideálny“ jazyk, ktorý vystihuje skutočnú podstatu predmetu, 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 s reálnym svetom a ľudskou existenciou sú zakorenené v našich mysliach. V tejto súvislosti vyvstáva otázka, ktorá prvýkrát zaznela v Platónovom dialógu „Cratylus“ a odvtedy je predmetom neustálej diskusie: 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é?

18. december je Svetovým dňom arabského jazyka. Sviatok ustanovila Organizácia Spojených národov v roku 2010 a je jedným zo šiestich oficiálne jazyky OSN. 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 natívny. Arabský jazyk a náboženstvo islam sú neoddeliteľne spojené. Jedno je nemysliteľné bez druhého, pretože už jeden a pol tisícročia moslimovia sveta čítajú modlitby v arabčine päťkrát denne. Bol naň zoslaný Svätý Korán a prorok Mohamed (mier s ním) prehovoril.

Duchovenstvo Grozného poznamenalo svojim spôsobom významný dátum. K obyvateľom mesta sa prihovoril imám mešity srdca Čečenska Magomed Dadakhaev. Vysvetlil úlohu arabského jazyka v živote moslima:

Bez znalosti arabského jazyka sa človek nemôže naučiť islam. Preto je medzi moslimami tento jazyk od nepamäti veľmi rešpektovaný. Nevyhnutnou podmienkou 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 (pre porovnanie, v ruštine je ich 131 000 a v angličtine asi milión ...). Je veľmi bohatá a Ťažký jazyk. Keď som študoval na islamskej univerzite v Sýrii, náš učiteľ, filológ, nám dal tento 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é pochopiť význam posvätného textu bez toho, aby sme mali solídny arabský lexikón a znalosť syntaxe, sémantiky a fonetiky tohto jazyka. Niekedy sa nájdu ľudia, ktorí sa označujú za expertov na Korán. Citujú z Posolstva Všemohúceho, 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 nevedia, čo robia, môžu priniesť 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 metodika výučby: študenti základných škôl niekoľko rokov študujú výlučne arabskú filológiu. A len po zvládnutí potrebného množstva látky v dostatočnom rozsahu 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ú hovoriť obyvatelia Raja. Chvála Alahovi, že z nás urobil moslimov! Čo nám dalo krásny, bohatý arabský jazyk na pochopenie našej vôle!

Vyvinutý adaptívny jazyk PARADISE interaktívneho programovacieho systému DSSP Moskovsky Štátna univerzita Fakulta výpočtovej matematiky a kybernetiky N. P. Brusentsov, V. B. Zacharov, I. A. Rudnev, S. A. Sidorov, N. A. Chanyshev Moskva, 1987

Všeobecný popis jazyka PARA

Účel a účel rozvoja jazyka

PARA (Evolved Adaptive Language) je základný jazyk konverzačného systému DSSP pre štruktúrované programovanie. Základné - znamená byť základom pre všetky ďalšie stavby realizované v DSSP prostredníctvom rozvoja (rozšírenie, posilnenie) základný jazyk a možno aj takto vytvorené úpravy jazykové nástroje pre konkrétnu aplikáciu. Na rozdiel od jazykov tzv vysoký stupeň, PARADISE 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é slovo a 32-bitové dlhé slovo, ktoré sa interpretujú v závislosti od operácií s nimi vykonávaných ako celé čísla, booleovské vektory, kódy znakov, logické hodnoty, dáta a procedúry. ukazovatele. 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é riadky atď.), nastavenie jedného alebo druhého výkladu pre nich 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 zameraná na danú aplikáciu bude obsahovať objekty a prostriedky vlastné tejto aplikácii a nebude obsahovať to, čo neplatí. k nemu - jazyk sa prispôsobí (prispôsobí) aplikácii. Rozvoj DSSP sledoval cieľ vytvorenia široko prístupnej a účinný prostriedok nápravy programovanie mikropočítačov, t.j. počítače založené na mikroprocesoroch. Podstatným znakom architektúry mikroprocesorov je elementárna povaha dátových typov a operácií, čo znamená na jednej strane univerzálnosť, na druhej strane náročnosť programovania. Vďaka svojej všestrannosti majú mikroprocesory a mikropočítače na nich založené potenciálne neobmedzené možnosti využitia. Praktická realizácia týchto možností však spočíva predovšetkým v komplexnosti vývoja potrebný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 určitej oblasti. Programovací systém by preto mal do značnej miery nielen zvýšiť produktivitu programátorov, ale byť aj natoľko jednoduchý, aby ho zvládli a efektívne používali aj neprofesionálni programátori.

Radikálnym riešením tohto problému by bolo zrejme 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é zvládnuť jazyk montáže mikropočítačov. Systémové programovacie jazyky ako C alebo PL/M znížili náročnosť vývoja softvéru do určitej (aj keď zďaleka nie dostatočnej) miery, no len ťažko ich možno odporučiť ľuďom, ktorí nemajú skúsenosti s programovaním. Široko dostupný jazyk by mal byť, samozrejme, jednoduchší a prirodzenejší, mal by byť založený na najbežnejších, známych predstavách o podstate a technike programovania.

Okrem dostupnosti a výrazného zníženia zložitosti vývoja programov v porovnaní s programovaním v jazyku symbolických inštrukcií, DSSP vyžadoval univerzálnosť jazyka, rovnakú ako pri jazyku symbolických inštrukcií, vysokú efektivitu stroja (t.j. kompaktnosť a rýchlosť kódu) , spoľahlivosť overiteľnosti vytvorených programov a ich použiteľnosť a modifikovateľnosť, ako aj mobilitu (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 či projektovanie zložitých hmotných objektov – strojov, agregátov, štruktúr. Podobne ako konštruktor, ktorý implementuje svoju myšlienku agregovaním svojich základných častí (blokov, zostáv, častí), programátor syntetizuje požadovanú komplexnú akciu z jednoduchých akcií poskytovaných jazykom. Dá sa tiež povedať, že programovanie (konštrukcia) spočíva v postupnom rozklade (rozklade) implementovaného objektu na stále menšie komponenty.

V jazyku PARADISE je hlavným „konštruktívnym“ postup – pomenovaná akcia. Jazyk je založený na obmedzenom súbore najjednoduchších postupov (primitív) reprezentovaných vlastnými menami (notáciami). Napríklad: + znamená „pridať“, NEG znamená „obrátené znamienko“, VCTR znamená „vytvoriť vektor“. Najmä existujú primitívy: a; (dvojbodka a bodkočiarka), čo vám umožní zaviesť novú procedúru, napr. s názvom P, definujúc ju 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 PARA 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 nezískajú definície pozostávajúce len z primitív.

Táto konštrukcia programu, začínajúca od daného cieľa a postupným rozkladaním používaných postupov na úroveň základných jazykových vlastností, je známa ako programovanie zhora nadol. Je to hlavný spôsob získania programov v jazyku PARADISE na riešenie individuálnych, dobre definovaných úloh. Opakom je programovanie zdola - budovanie na základnom jazyku systému postupne rozšírených postupov 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é starostlivé štruktúrovanie vytváraný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. Vo vzťahu k jazyku PARA 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 zrozumiteľnosť, testovateľnosť a modifikovateľnosť programu, výrazne znižuje náročnosť jeho tvorby a údržby.

Vyššie uvedený príklad definovania procedúry P je zjednodušený. V skutočnosti môže definujúca postupnosť obsahovať ako členy nielen názvy procedúr, ale aj recepty (príkazy) pozostávajúce z viac ako jedného slova. Názov procedúry, ktorý sa používa bez kombinácie s inými slovami, je príkaz na vykonanie procedúry, ktorú určil. Postupnosť názvov procedúr dáva pokyn na vykonanie týchto procedúr v poradí ich názvov za sebou (v lineárnom poradí). Na nastavenie ďalších sekvencií vykonávania poskytuje PARA š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 viacnásobné (cyklické) vykonávanie procedúry.

Napríklad lineárna postupnosť P0 P1 spôsobí vykonanie procedúry P0 a následne vykonanie procedúry P1. Ak sa procedúra P1 nemusí vykonať vždy, ale len ak sa získa kladné číslo ako výsledok vykonania P0, tak sa namiesto P1 zapíše vykonávací príkaz podľa podmienky: IF + P1, t.j. namiesto P0 P1 to bude P0 IF+ P1. PARA obsahuje súbor predponových podmienok, ktoré umožňujú efektívne vyjadriť vykonanie podmienky, 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 spôsobí, že sa procedúra P vykoná znova a znova, 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 cyklu môže byť napríklad nulová rovnosť niektorej premennej X, ktorá je vyjadrená ako:

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

Opakovane vykonávaná procedúra môže byť tiež vnorená do opakovane vykonávanej procedúry. V tomto prípade dochádza k vnoreniu slučiek. 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 RAYA. Nedostatok, homogénnosť a prirodzenosť týchto prostriedkov je kľúčom k ľahkému ovládaniu a používaniu jazyka. Zároveň je to dôsledný štruktúrovaný programovací jazyk, ktorý poskytuje výrazné zníženie zložitosti vývoja a spoľahlivosti programov.

Postupy a údaje

Všetko, čo bolo doteraz povedané, je charakteristikou jazyka PARADISE ako prostriedku na predpisovanie akcií, konštruovanie ľubovoľných akcií z konečnej množiny primitívnych operácií. Druhou stránkou jazyka sú prostriedky na reprezentáciu objektov, na ktorých sa vykonávajú akcie – prostriedky na reprezentáciu a organizáciu dát.

V konečnom dôsledku jednoduchý prvokúdaj je dvojciferný prvok - bit. Bity sú stavebnými kameňmi všetkých ostatných dátových formátov a typov. V jazyku PARADISE sú akceptované ako základné formáty 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á podliehajú mnohým interpretáciám, t.j. môže slúžiť ako základ pre rôzne druhyúdajov. Okrem toho sú východiskovými prvkami pre tvorbu kompozitných formátov a typov.

PARADISE vlastne 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 tie isté bajty (slová, dlhé slová) v závislosti od operácií, ktoré sa na nich vykonávajú, interpretujú ako vektory bitov, alebo ako binárne celé čísla so znamienkom alebo bez, alebo ako písmená vstupnej/výstupnej abecedy atď. Dátové typy a ich súvisiace obmedzenia a kontroly môžu byť zavedené v jazykových rozšíreniach špecifických pre doménu.

V základnom jazyku deklarácia názvov údajov vykonáva iba funkciu poskytovania prístupu k údajom podľa názvu: s názvom je spojený počet pamäťových buniek požadovaných deklaráciou a mechanizmus prístupu k nim. Testovacie a transformačné operácie nie sú priamo aplikované na pomenované údaje. 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 (vyberaním z stoh). Prvky sa sťahujú v opačnom poradí, než v akom boli odoslané: ako prvý sa sťahuje posledný odoslaný. Dáta, ktoré sa majú testovať alebo transformovať, sa odošlú do zásobníka, kde sa s nimi vykonajú predpísané operácie, po ktorých je možné zo zásobníka odstrániť výsledky spracovania.

Ak je napríklad premenná X deklarovaná ako 32-bitové slovo, priamo s ňou možno 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) pridelím to tímu! Hodnota X posledného (horného) prvku, ktorý sa má vybrať 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:

Do zásobníka sa vložia dve inštancie hodnoty X, potom ich príkaz + odstráni, spočíta a výsledné množstvo vloží do zásobníka, potom príkaz! X vyberie túto sumu a priradí jej hodnotu premennej X.

Zvyčajné pre jazyky na vysokej úrovni písanie daného príkladu v tvare X:=X+X je programátorovi známejšie, ale nie je priamym odrazom postupnosti príkazov vykonávaných procesorom, ale je druh matematického vzorca. To je výhodné pri programovaní výpočtových problémov, avšak v základnom jazyku sa zdá byť dôležitejšia vzájomná zhoda s vykonávanými príkazmi, pretože program je možné kontrolovať príkaz po príkaze priamo v programovacom jazyku a vo všeobecnosti sa nevyžaduje znalosť iného jazyka ako jazyka spracovateľa.

Obzvlášť cennou výhodou stohovania údajov je však to, že testovacie a transformačné postupy možno definovať a implementovať nezávisle od údajov, na ktoré sú aplikované. Testovacie a transformačné operácie nie sú formulované vo vzťahu k identifikátorom údajov (alebo názvom konštánt a premenných, formálnym parametrom), ale vo vzťahu k prvkom zásobníka, ku ktorým musia byť v čase vykonania operácie priradené hodnoty operandov. 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 spodný), vypočíta sa ich súčet a odošle sa do zásobníka. Ak chcete pridať dve čísla, musíte ich hodnoty odoslať do zásobníka a vykonať príkaz +, výsledok bude v hornej časti zásobníka.

Procedúru test-transformácie s ľubovoľným počtom vstupných a výstupných parametrov možno teda definovať jednoducho ako pomenovanú akciu (bez zoznamu parametrov) vykonanú na zásobníku obsahujúcom v pravý čas hodnoty argumentov a po vykonaní hodnoty výsledkov. Ak chcete použiť takýto postup na jeden alebo druhý súbor špecifických údajov, je potrebné odoslať tieto údaje v príslušnom poradí do zásobníka. Po ich spotrebovaní zanechá procedúra na zásobníku (tiež umiestnenom v určitom poradí) svoje výsledky.

Inými slovami, názvy procedúr v jazyku PARA 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 operácie 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. Napríklad, ak operáciu získania súčtu troch čísel označíme symbolom ++, potom súčet čísel A, 5 a B bude vyjadrený takto:

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

DSSP procesor

Fyzicky môže byť DSSP procesor implementovaný vo forme mikroprocesora takej jednoduchej a efektívne programovateľnej architektúry, ktorá by umožňovala čo najlepším spôsobom riešiť problém mikropočítačového softvéru. 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ť. Samozrejme, emulácia je spojená s nákladmi – vyžaduje pamäť a počítačový čas, no v prípade emulácie PRSP procesora 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, aký je tento procesor ako nástroj na spracovanie údajov, aké sú možnosti prezentácie údajov na vstupe a vo vnútri procesora, aké sú operácie na testovanie a konverziu údajov, ako je usporiadaná vlastná pamäť procesora, ako aj prístup do hlavnej a externej pamäte, 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 nevyhnutnou podmienkou zmysluplného (neformálneho) programovania, čo výrazne znižuje počet chýb a zvyšuje spoľahlivosť programov.

Ústredným prvkom procesora DSSP je už spomínaný zásobník operandov. V skutočnosti sa spracovanie vykonáva v zásobníku a dáta sa spravidla prenášajú cez zásobník. Jednotlivé príkazy a krátke sekvencie príkazov nad zásobníkom je možné vykonávať ich privedením na vstup procesora priamo z klávesnice terminálu. V tomto prípade procesor DSSP napodobňuje činnosť postfixovej kalkulačky. Čísla zadávané z klávesnice a mnemotechnické kódy operácií sú oddelené medzerami. Zadaný text sa zobrazí ako reťazec na obrazovke terminálu. Signál na ukončenie vstupu a príkaz procesoru "Vykonajte zadanú inštrukciu" je stlačenie klávesu tiež označené , . Čísla prichádzajúce na vstup procesora sa vkladajú do zásobníka a príkazy sa vykonávajú v zásobníku. Výsledok výpočtu získaný v hornej časti zásobníka možno pomocou príkazu skopírovať na obrazovku terminálu. (bodka).

Ak chcete napríklad vyhodnotiť 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 zadané čísla ako desatinné celé čísla. V skutočnosti boli tieto čísla pri zadávaní konvertované na binárny doplnkový kód a pri výstupe boli konvertované späť na desiatkové. Procesor PRSP umožňuje aj binárne, osmičkové a hexadecimálne I/O režimy. Ak chcete prejsť do požadovaného režimu, musíte vykonať jeden z príkazov B2, B8, B10, B16, resp.

Stlačenie kláves spôsobí zadanie kódov procesora reprezentujúcich písmená uvedené na týchto klávesoch (písmená, čísla, interpunkčné znamienka, prevádzkové symboly). 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 pri spracovaní vstupného reťazca z neho extrahuje slová - kombinácie písmen oddelených od seba medzerami a interpretuje ich. Ak je spracovávané slovo názvom operácie (postupu) alebo krstným názvom známym procesoru, potom procesor vykoná akcie, ktoré by podľa definície mal tento názov volať. Ak procesor nepozná slovo, pokúsi sa ho interpretovať ako číslo, berúc do úvahy nastavený režim vstupu / výstupu.

Čísla sú slová, ktoré pozostávajú z číslic prijateľných v danej číselnej sústave a prípadne obsahujú znamienko mínus ako prvé písmeno. V hexadecimálnom režime I/O do prijateľné spolu sčíslice zahŕňajú aj latinské písmená A, B, C, D, E, F. Prijaté číslo sa skonvertuje na dvojkový 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 je nahradená hodnotou porovnateľnou modulo 2**32 z tohto rozsahu.

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

Zadávanie údajov vo forme ľubovoľného textu (sekvencie bajtov-literálov) sa uskutočňuje vo forme textových literálov, ktoré sú textom uzavretým v dvojitých úvodzovkách, napríklad: "Textový literál". Prijatie textového literálu na vstup procesora spôsobí, že text uzavretý medzi úvodzovkami sa zapíše do hlavnej pamäte vo forme reťazca bajtov-litrov. 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 na „vloženie textu medzi úvodzovky na obrazovke terminálu“. Napríklad zadaním kombinácie znakov „No memory“ na vstup procesora sa na obrazovke zobrazí správa: No memory.

Kód jedného znaku sa vloží do zásobníka ako spodný bajt vrcholu, keď tento znak dorazí na vstup procesora, spolu so znakom #, ktorému predchádza. 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 čísla 5. Príkaz TOB na výstup bajtu na terminál zobrazí znak, ktorého kód je nachádzajúce sa v dolnom byte hornej časti zásobníka.

Aj v režime priameho vykonávania inštrukcií procesor PRSP ďaleko presahuje možnosti konvenčnej kalkulačky a poskytuje používateľovi okrem operácií spracovania údajov aj prostriedky na deklarovanie pomenovaných údajov a definovanie procedúr, ktoré je potom možné použiť spolu s základné operácie. Deklarovanie názvov údajov a definovanie procedúr sa vykonáva pomocou špeciálnych príkazov.

Napríklad, ak chcete vytvoriť 16-bitovú premennú s názvom, povedzme, TEMP, mali by ste napísať na klávesnici a použiť 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 natlačí do zásobníka a príkazom sa dá priradiť nová hodnota, odstránená zo zásobníka! TEPL.

Definícia procedúry je uvedená príkazom: (dvojbodka) obsahujúcim názov procedúry, ktorá sa definuje a definuje reťazec príkazov s písmenom; (bodkočiarka) ako znak konca definície. Definíciu a použitie postupov si ukážeme na príklade faktoriálneho výpočtu prirodzené číslo 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 sa musí znásobiť dané číslo N na postupne klesajúce čísla, počnúc od N-1 po 1, t.j. iba N-1 krát. V PARA sa to naprogramuje vykonaním procedúry P t krát: DO P, kde P je názov procedúry, t je aktuálna hodnota vrcholu zásobníka, ktorá udáva, koľkokrát je potrebné vykonať procedúru P.

Predpokladajme, že pred použitím postupu FCT bolo číslo N vytlačené na stĺpec a je na jeho vrchole. Aby bol postup zrozumiteľnejší, uvádzame modifikovateľný multiplikátor premennej K:

Uvádzame definíciu postupu FCT v tvare:

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

Odrážajú komentáre v hranatých zátvorkách Aktuálny stav zásobník operandov. Tím! K, ktorá spustí definovanú procedúru, priradí premennej K hodnotu čísla N prevzatého zo zásobníka. Potom sa K na zásobník natlačí dvakrát a odčítaním 1 na vrchole zásobníka sa počet vykonaní opakovaného sa vytvorí postup F rovný N-1. Nasleduje príkaz DO F, ktorý predpíše slučku, po ktorej bude vrchol zásobníka obsahovať požadovanú hodnotu faktoriálu - N!. Tím. (bodka) zobrazí kópiu tejto hodnoty na obrazovke 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*;

Správnosť oboch procedúr sa kontroluje vykonávaním ich definícií príkaz po príkaze, 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 horná časť zásobník musí obsahovať hodnotu N! a hodnota premennej K sa musí rovnať 1.

Skontrolované a opravené (ak boli pri overovacom procese zistené chyby) procedúry sú testované ich aplikáciou na jednotlivé hodnoty čísla N. Keďže procedúra F je vnorená do FCT, jej testovanie prebieha automaticky v procese testovania to druhé. Treba mať na pamäti, že výsledné hodnoty by nemali presiahnuť maximálne kladné číslo reprezentované v dodatočný kód 32-bitové dlhé slovo: 2147483647, t.j. FCT poskytuje správne výsledky iba pre N=1, ..., 13.

Používanie FCT sa nelíši od používania natívnych inštrukcií procesora: na získanie výsledku musíte zadať 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ý postup možno vykonať aj bez pomocnej premennej pomocou operácie C, ktorá vloží kópiu svojho 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] C1- C DO FA D . ;

: FA C E3 * E2 1-;

Výhodou takéhoto postupu „čistého 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 spôsobenia akýchkoľvek zmien v iných komponentoch procesora.

Názvy definovaných procedúr a deklarované údaje sa vložia do slovníka procesora, ktorý vytvorí spojenie medzi týmito názvami a pomenovanými objektmi, teda s telami procedúr umiestnenými v hlavnej pamäti a s prvkami tejto pamäte. pamäť pridelená na ukladanie deklarovaných údajov. Pri spracovaní ďalšieho slova zo vstupného toku procesor prezerá slovník a po nájdení zhodného slova v ňom vykoná akcie spojené s týmto slovom. Ak je vyhľadávanie neúspešné, potom, ako už bolo spomenuté, sa uskutoční pokus o numerickú interpretáciu daného 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 procedúr a údajov tvoriacich 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 na zodpovedajúce telá, ktoré sú zase rovnakými postupnosťami ukazovateľov, a v prípade primitív, reťazce strojových inštrukcií. Túto internú reprezentáciu programu nazývame procedurálny kód.

Keď sa spolu so zostavením definície procedúry P skompilujú aj definície všetkých dovtedy neznámych vnorených procedúr, vytvorí sa úplná hierarchia ukazovateľov, ktorá zaisťuje možnosť vykonania procedúry P tým, že do systému zadáte iba jej názov. vstup procesora. V tomto prípade názvy vnorených procedúr zostavené v súvislosti s definíciou P, ak nepotrebujete pristupovať k týmto procedúram samostatne, nemá zmysel ich ukladať do slovníka. V mnohých prípadoch sa ukazuje ako vhodné zablokovať prístup k tej či onej časti slovníka, pričom možno ponecháva možnosť vykonávať len niektoré postupy.

Pre splnenie takýchto požiadaviek je slovník implementovaný ako súbor podslovníkov, na ktorých sú definované operácie umožňujúce vytváranie a ničenie podslovníkov a ich častí, mazanie mien, zatváranie a otváranie prístupu 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ť písmenom $, napríklad: $PRIME, $EDIT, $FLOAT, $TEXTPROC, $GRAPHICS.

Podslovník $PRIME, ktorý obsahuje základnú množinu slov PRSP, je otvorený po spustení procesora pre prístup k slovám v ňom obsiahnutým a pre doplnenie novými slovami. Nové slová zadané do neho, ak je to potrebné, môžu byť vymazané spolu s telami, ktoré sú s nimi spojené, pomocou príkazu FORGET $PRIME. Potom je možnosť ďalšieho pridávania slov do tohto podslovníka zabezpečená vykonaním príkazu GROW $PRIME, ktorý vám umožní znovu rozšíriť podslovník $PRIME a všetko, čo je do neho zadané, je možné opäť vymazať príkazom FORGET $PRIME atď. . V tomto režime sa PRSP používa pri experimentovaní s malými fragmentmi programov, jednotlivými príkladmi, odhadmi a v prípade potreby aj na zaraďovanie 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ý podslovník a to sa dosiahne tým, že text programu začína príkazom

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

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

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

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

Text navrhnutého programu sa nezadáva priamo z klávesnice na vstup procesora, ale tvorí sa vo vyrovnávacej pamäti textového editora. Príkaz E (Edit - edit) nastavuje režim úprav, v ktorom slová napísané na klávesnici už procesor nevníma ako príkazy, ktoré sa majú okamžite vykonať, ale jednoducho sa zapíšu do vyrovnávacej pamäte a súčasne sa zobrazia na obrazovke textu. Pomocou špeciálnych kláves, ktoré ovládajú pohyb ukazovateľa 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ť mazaním a vkladaním, presúvaním jeho častí. z miesta na miesto atď.

Na konci zadávania a úpravy textu sa editor vypne stlačením klávesu E súčasne s (presnejšie s predtým stlačeným) klávesom a systém sa prepne do hlavného príkazového režimu PRSP. Podobná akcia sa spustí jednoduchým stlačením klávesu . V tomto režime môže byť obsah vyrovnávacej pamäte editora vydaný do procesora príkazom PF (PerForm - execute). V tomto prípade sa vykonajú všetky príkazy obsiahnuté v texte, najmä príkaz PROGRAM $<имя>odstráni podslovník $<имя>od posledného vykonania tohto príkazu názvy údajov a procedúr, ako aj príslušné orgány, čím sa tento podslovník znovu otvára pre rast. Príkazy deklarácie údajov a príkazy definície procedúry zadajú názvy, ktoré do nich zadajú, spolu s ukazovateľmi na údaje označené týmito názvami a telami procedúr zostavenými v súlade s definíciami.

Po dokončení načítania sú procedúry a údaje dostupné pre referenciu podľa ich názvov napísaných z klávesnice a je možné skontrolovať správnosť programu vykonávaním procedúr vo vzostupnom poradí, t.j. počnúc tými, ktorých definície neobsahujú nevyskúšané postupy. Pred začatím kontroly je dobré sa uistiť, že váš program nepoužíva nedefinované názvy. 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 overovania, zavolajte do editora príkazom E a vykonajte príslušnú úpravu zdrojového textu programu umiestneného vo vyrovnávacej pamäti editora a potom prepnite procesor do hlavného režimu a načítajte obsah vyrovnávacej pamäte príkazom PF.

Po kontrole a otestovaní programu je možné jeho zdrojový kód skopírovať z vyrovnávacej pamäte editora na disk príkazom OE f, kde f je názov súboru, do ktorého 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 obsiahnutému príkazom IE f. V predvolenom nastavení majú súbory príponu .DSP. Buffer je možné vopred vyčistiť 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ť preň vytvorený podslovník $.<имя>príkaz CLEAR $<имя>. Vykonaním tohto príkazu procesor odstráni z pomenovaného podslovníka nefixované názvy, t.j. všetky mená okrem tých, ktorých definíciám predchádza fixačná predpona:: (dve dvojbodky). V tomto prípade sa vymažú iba samotné názvy (položky v slovníku), zatiaľ čo telá procedúr a s nimi spojené údaje sú zachované a dostupné počas vykonávania programu prostredníctvom interných odkazov vytvorených počas kompilácie, ale zvonku už nie sú prístupné. 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 podslovníka, ktorý je v ňom uvedený. Otvorenie podslovníka na použitie jeho slov sa vykonáva pomocou príkazu USE $<имя>. Existuje aj príkaz ONLY $<имя>, 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 nevyhnutné minimum.

Hľadanie mena v slovníku prebieha tak, že sa na jeho slová pozrieme v opačnom poradí, v akom boli zapísané do slovníka, t.j. počnúc posledným záznamom. 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 na prvú dostupnú položku slovníka s daným názvom a použije sa definícia špecifikovaná touto položkou.

Niekoľko slov o vstupe a výstupe údajov. Ako už bolo spomenuté, procesor sa snaží interpretovať slovo vykonávaného programu, ktoré sa nenachádza v slovníku, ako číslo a v prípade úspechu zatlačí do zásobníka binárny ekvivalent tohto čísla. Vloženie čísla do zásobníka je možné vykonať pomocou príkazu TIN, ktorý vyžaduje napísanie vstupného čísla na klávesnici. Existujú aj príkazy, ktoré spôsobia, že znak zadaný z klávesnice sa presunie do zásobníka: TIB - s displejom, TRB - bez zobrazenia tohto znaku na obrazovke. V tomto prípade je znakový kód reprezentovaný spodným bajtom 32-bitového slova odoslaného do zásobníka, ktorého 3 bajty vyššie sú rovné nule.

Zadávanie obsahu hornej časti zásobníka je možné vo forme čísla a vo forme písmena. Príkaz TON spôsobí, že číselná hodnota poduzla sa zobrazí na obrazovke vo výstupnom poli, ktorého šírka je určená vrcholom, v systéme reprezentácie čísel zavedenom v čase jeho vykonania. Príkaz TOB zobrazí znak, ktorého kód je obsiahnutý v spodnom byte hornej časti zásobníka. V oboch prípadoch po výstupe nasleduje odstránenie argumentov zo zásobníka.

Procesor DSSP má aparát pre externé a interné (príkazové) prerušenia a poskytuje nasledujúce nástroje na ich spracovanie. Procedúra určená na spracovanie externého prerušenia je definovaná rovnakým spôsobom ako bežná procedúra, 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 na zavolanie procedúry odozvy. Názov tejto operácie určuje príkaz TRAP, ktorý s ňou spája takzvanú procedúru konečnej odozvy, ktorá sa vykoná, ak nie je konečná reakcia 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 mapovaná na názov volania inštrukciou EON sa vykoná po opustení tela procedúry obsahujúcej inštrukciu EON a s hodnotou ukazovateľa zásobníka operandov, ktorý bol na mieste v čase vykonania EON.

Syntax jazyka PARA

Jazyková abeceda PARADISE obsahuje latinku a ruštinu, malé a veľké písmená, desatinné číslice, matematické a iné špeciálne znaky. Prvky (členy) abecedy sa nazývajú písmená. Vonkajšie znázornenie písmena je jeho tlačený obrázok (tlačený znak). V procesore PRSP je každý vytlačený znak reprezentovaný bajtom, ktorého hodnota je binárny kód tento list. Transformáciu vonkajšej reprezentácie na vnútornú a naopak vykonáva vstupno/výstupné zariadenie (klávesnica, displej, tlačiareň). Pre pohodlie je číselná hodnota kódu vyjadrená v desiatkovej, šestnástkovej alebo osmičkovej sústave, pričom zodpovedajúce číslo sa nazýva desiatkový, šestnástkový alebo osmičkový kód.

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

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

Procesor PRSP rozlišuje slová podľa prvých siedmich písmen, pričom ich rozpoznáva polyterminálnym 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 (údajov, procedúr) definovaných používateľom. Slová obsiahnuté v slovníku sú teda buď názvy akcií (operácie, procedúry) alebo názvy údajov (konštanty, premenné, polia).

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

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

    doslovný literál: slovo, ktoré sa začína znakom #, čo spôsobí, že procesor dostane ako daný kód znak bezprostredne nasledujúci za ním, napríklad: #A - literál veľkého latinského písmena A, #5 - literál čísla 5 , # - medzerník, ## - 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 vydanie textovej správy na displej: text výstupnej správy, vľavo oddelený kombináciou znakov bodka-dvojitá úvodzovka a dvojitej úvodzovky vpravo a oddelený oddeľovačmi slov, napr.: "Zásobník je prázdny";

    komentár: vložený ľubovoľný text hranaté zátvorky a oddelené oddeľovačmi, napríklad: .

Literály a príkaz na vydanie správy na displej fungujú ako objekty jazyka PRSP spolu so slovami rozpoznanými zo slovníka, zatiaľ čo komentáre sú procesorom PRSP úplne ignorované - 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á správu: „Neviem<неопознанное слово>".

Vzhľadom na osobitný význam, ktorý majú písmená #, "a kombinácia." na začiatku slova, t.j. za oddeľovačom, ako aj písmeno " pred oddeľovačom, nesmú byť použité na určených pozíciách v slovách definovaných na zaradenie do slovníka.

Postupnosť slov na vstupe procesora sa interpretuje ako postupnosť inštrukcií vykonávaných procesorom. Existujú tri typy slov:

1) vykonávané samostatne, t.j. reprezentujúce jednoslovné príkazy (monoslová);

2) vykonávané v spojení s jedným alebo viacerými nasledujúcimi slovami, t.j. bytie počiatočné slová(predpony) dvoj-, troj- alebo viacslovné príkazy;

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

Monoslová zahŕňajú literály, názvy údajov, väčšinu operácií I/O, testovania a konverzie údajov v zásobníku a používateľom definované procedúry. Napríklad: 1987 - číselný literál, #5 - literál číslice 5, "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 na manipuláciu s pomenovanými údajmi, podmienené a viacnásobné vykonávanie procedúr a správu slovníkov. Príklady príkazov s predponami:

VAR SUM - vytvorenie premennej SUM,

: ODD [x] 1 & ; - vytvoriť procedúru ODD, ktorá nahradí nepárne číslo 1, párne číslo 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.

Konkrétna predpona si spravidla vyžaduje určitý počet slov. V práve uvedených príkladoch teda predpony VAR, !0 a USE vyžadujú každé jedno slovo, zatiaľ čo 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 charakteristická aj pre príkazový deskriptor konštánt CNST A1 ... AJ ; a príkaz viacnásobného výberu procedúry BR A1 P1 ... AJ PJ ELSE PN.

Predpony sú špeciálne slová, ktoré po pridaní na začiatok príkazu upravujú 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íme predponu BYTE, dostaneme príkaz BYTE VAR X, ktorý dáva pokyn na vytvorenie 8-bitovej premennej premenná (bajt) s názvom X. Ak použijeme predponu LONG, tak dostaneme LONG VAR X - pokyn na vytvorenie 32-bitovej premennej s názvom X.

Predpona iného typu, a to:: (dve dvojbodky) hovorí výsledku vykonania príkazu o stabilite vzhľadom na procedúru CLEAR, ktorá odstraňuje voľné slová zo slovníka. Názvy zadané do slovníka pri konštrukcii programu príkazmi popisu údajov a definície procedúry 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. Vymazanie sa vykoná príkazom CLEAR $<имя подсловаря>, pokyn na vymazanie podslovníka priradeného k programu, pričom sa do neho uložia iba tie slová, ktorých definície obsahujú predponu::. Príklady príkazov, ktoré generujú neodstrániteľné slová:

:: BYTE CNST LITCODE # # 0 # A ;

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

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

Príkaz v DSSP teda môže byť buď jedno slovo (monoslovo) alebo fráza (fráza), ktorá začína predponou a obsahuje počet slov nastavený pre túto predponu, a ak predpona umožňuje ľubovoľný počet slov, potom má oddeľovacie slovo na konci alebo to môže byť fráza so špeciálnymi predponami.

Základný jazyk DSSP neobsahuje zložitejšie syntaktické konštrukcie ako príkaz a neobsahuje žiadne iné konštrukcie ako tie, o ktorých sme hovorili 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 základného jazyka je jednoducho súbor príkazov vykonávaných v poradí, v akom sa objavujú 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 obsiahnuté. Príslušné príkazy môžu zase obsahovať slová označujúce reťazce príkazov, ktoré môžu obsahovať aj slová odkazujúce na ich priradené reťazce atď. až po úroveň, kde príkazy obsahujú len primitíva.

Všeobecný popis jazyka PARA, ktorý tvoril obsah tejto kapitoly, bol venovaný charakteristike štruktúry tohto jazyka a základnej (počiatočnej) množiny jeho príkazov, ktorá je množinou vstavaných príkazov (primitív) procesora PRSP. Ď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 svojou povahou orientovaný na problémy a uskutočňuje sa vo forme balíkov procedúr načítaných okrem základného systému aj na vstup procesora.

Na druhej strane základný systém je možné doplniť špeciálnymi nástrojmi implementovanými na jeho základe na zvýšenie strojovej efektivity programov DSSP. Medzi tieto nástroje patrí možnosť definovať jednotlivé postupy priamo v príkazovom kóde používaného stroja. Spôsob, akým je procedúra definovaná, nemá vplyv na jej ďalšie použitie: názvy všetkých procedúr sú zapísané v spoločnom slovníku 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 vykonané na zásobníku

Zásobník operandov je jedným z hlavných prvkov architektúry procesora PRSP. Väčšina inštrukcií procesora používa zásobník, spotrebúva operandy, ktoré z neho potrebujú, a posiela doň výsledky. Interpretácia údajov na zásobníku závisí od podstaty riešeného problému, t.j. v konečnom dôsledku je to zodpovednosťou programátora. Vzhľadom na to, že hodnota, ktorá sa dostala na zásobník, 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 na explicitné označenie operandov a výsledkov procedúr v jazyku PARA používajú komentáre. V tomto prípade nie je potrebné (a nie vždy možné) popisovať celý obsah stohu. Komentovanie hornej časti zásobníka, ktorá je ovplyvnená postupom, ktorý sa na ňom vykonáva, je absolútne nevyhnutné, pretože bez toho sa stráca viditeľnosť programu a jeho overenie je náročné.

Na dosiahnutie jednotnosti programu by sa tieto komentáre mali písať s ohľadom na niekoľko 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. Hodnoty 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 jedného operandu môže byť číslo, názov, výraz alebo akýkoľvek iný zmysluplný zápis, ktorý vysvetľuje význam hodnoty v zásobníku. Niekedy môžete zadať niekoľko možných hodnôt pre určitú pozíciu zásobníka. V tomto prípade sú hodnoty uvedené oddelené lomkou.

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

[začiatok dr,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, dole - číselná hodnota rovnajúca sa N + 1 a pod ňou - nejaké číslo interpretované ako počiatočná adresa.

Pre pohodlie špecifikácie požadovanej polohy stohu použijeme koncept hĺbky výskytu. Budeme predpokladať, že horná časť zásobníka je v hĺbke 1, dno je v hĺbke 2 atď. Najmä hodnota označená v príklade ako "start.adr." leží v hĺbke 3.

Štúdium základného jazyka PRSP začneme pokynmi na vloženie hodnôt do zásobníka. Najjednoduchším (a najčastejšie používaným) príkazom tohto typu je číselný literál, to znamená explicitný údaj o konštante, ktorá sa má vložiť do zásobníka. Povedzme napríklad, že chceme do zásobníka vložiť čísla 28, -5 a 11. Ak to chcete urobiť, zadajte riadok z klávesnice:

28 -5 11 a stlačte tlačidlo (návrat vozíka). Procesor rozpozná zadané čísla a postupne ich nasunie na zásobník, takže hore bude 11. Na overenie stačí vytlačiť hodnotu vrcholu zásobníka na displej. Na to sa používa príkaz DSSP s názvom. (bodka). Napísaním písmena „bodka“ na klávesnici a stlačením , dostaneme na obrazovke odpoveď: 11, čo zodpovedá poslednej hodnote odoslanej do zásobníka. Opätovné spustenie "bodky" má rovnaký výsledok - tento príkaz vykreslí iba vrchol bez zmeny stavu zásobníka.

Na zobrazenie celého obsahu zásobníka na obrazovke má DSSP príkaz .. (dve bodky). Po jeho vykonaní sa na obrazovke zobrazí nasledujúci riadok:

Ako vidíte, tlačový formulár 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 doplnkoch. V súlade s tým môže procesor PRSP správne vnímať iba celé čísla v rozsahu od -2147483648 do 2147483647. Ak zadané číslo nie je reprezentovateľné v 32 bitoch (berúc do úvahy znamienko), potom sa najvýznamnejšie bity, ktoré sa nezmestia, zahodia.

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

V mnohých úlohách je potrebné interpretovať spracovávané dáta nie ako čísla, ale ako binárne kódy, teda 32-zložkové bitové vektory. V DSSP je možné pracovať s kódmi prezentovanými v binárnych, osmičkových alebo hexadecimálnych číselných sústavách. Na nastavenie požadovaného režimu stačí vykonať jeden z troch príkazov: B2, B8 alebo B16, po ktorých procesor prijme 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áklady 2, 8 a 16. Ak chcete napríklad previesť číslo 29, zadajte a vykonajte nasledujúci riadok:

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

Pri práci s hexadecimálnymi kódmi môže dochádzať ku kolíziám medzi číselnými literálmi a názvami príkazov procesora PRSP. 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 sa predišlo nejednoznačnosti, číselné literály by mali začínať nevýznamnou nulou, napríklad 0B8.

Základom príkazového systému procesora DSSP sú operácie transformácie dát, ktoré sú v zásobníku. Všeobecným pravidlom, ktorým sa riadia tieto operácie, je, že každá operácia spotrebuje (odstráni) operandy, ktoré vyžaduje, 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. Pre ich obraz v jazyku RAJA sa používajú tieto 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 +. Ak to chcete urobiť, zadajte z klávesnice nasledujúci riadok (za predpokladu, že je nastavený desiatkový režim vstupu / výstupu):

123 45 +

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

Podobne funguje aj komutatívna operácia násobenia.

Pri vykonávaní nekomutatívnych operácií odčítania a delenia sa podvrchol zásobníka berie ako minuend (dividenda) a vrchol sa používa ako podtrahend (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 PARA sa vyznačuje tým, že operácia je umiestnená za operandmi, ktoré jej zodpovedajú. Takáto notácia aritmetických výrazov sa nazýva postfixová (alebo poľská inverzná) notácia a je široko používaná v zásobníkových kalkulačkách. Napríklad, 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 PRSP.

Delenie / príkaz sa líši od ostatných aritmetických operácií tým, že 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 majú dividenda a deliteľ 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ôže dôjsť k chybným situáciám: pretečeniu a deleniu nulou. Procesor DSSP na ne nijako nereaguje (najmä pri delení nulou sa obsah zásobníka nemení) a kontrola nad správnym používaním operácií je zverená programátorovi.

Pri programovaní je často potrebné zvýšiť alebo znížiť hodnotu hodnoty o 1 a 2. Do jazyka PARADISE boli zavedené špeciálne príkazy, ktoré vykonávajú zadané 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, po ktorom nasleduje vykonanie požadovanej aritmetickej operácie (+ alebo -). Napríklad 2+ je ekvivalentom slovného páru 2 + . Úvod do jazyka týchto príkazov je spôsobený úvahami o účinnosti.

Na zlepšenie efektívnosti má základný jazyk DSSP procesora 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:

Príkazy NEG, ABS a SGN sú určené aj na prácu s číselnými údajmi. Inštrukcia NEG obráti znamienko vrcholu zásobníka, ABS nahradí hodnotu vrcholu zásobníka jeho absolútnou hodnotou, SGN - spotrebuje číselnú hodnotu z vrcholu zásobníka a vloží do neho znamienko extrahovaného čísla. miesto: -1 - ak je číslo záporné, 1 - ak je kladné, 0 - ak sa 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 minimálny počet parametrov v zásobníku, MAX ich maximum. 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]

Inštrukcia SEG na kontrolu, či číslo nachádzajúce sa v hornej časti zásobníka spadá do špecifikovaného rozsahu od a do b (vrátane hraníc), ponecháva v zásobníku nasledujúci príznak: 1, ak je číslo v rozsahu, a 0 ak nie je:

SEG [znak] napríklad:

Okrem inštrukcií na prácu s numerickými dátami obsahuje sada inštrukcií pre procesor DSSP 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 zložky sú očíslované sprava doľava tak, že bit úplne vľavo je číslo 31 a číslo úplne vpravo je 0. Zostupné číslovanie komponentov sa opakuje číslovanie bitov strojového slova prijaté pre mnohé mikroprocesory.

Inštrukcie bitových vektorov primárne zahŕňajú bitové operácie booleovskej 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 i-té bity oboch operandov sú 1, a inak nastavenie i-tého bitu na 0;

    bitová disjunkcia hornej a dolnej časti zásobníka &0, nastavenie i-tého bitu výsledku, i=31,30,...,0, na 0, ak i-té bity oboch operandov sú 0, a inak nastavenie i-tého bitu na 1;

    bitové sčítanie (neekvivalencia) "+" hornej a dolnej časti, nastavenie i-tého bitu výsledku na 0, ak i-té bity oboch operandov majú rovnaké hodnoty a nastavenie i-teho bitu výsledok na 1, ak sa hodnoty i-tých bitov operandov líšia.

525 INV 722 & 136 & 0 325 "+"

Bitové spojenie sa často používa na resetovanie (vymazanie) bitov slova. Na tento účel sa pôvodné slovo skombinuje s maskou obsahujúcou nuly v tých bitoch, ktoré je potrebné vymazať, a jednotky v zostávajúcich bitoch. Napríklad, ak potrebujete resetovať bity 3 až 5 v niektorom slove X, musíte vykonať jeho bitové spojenie s maskou 37777777707. Pre X=235 dostaneme:

Bitová disjunkcia sa môže použiť na vloženie požadovanej kombinácie bitov do predtým vyčistenej skupiny bitov slova. Napríklad, musíte 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. Dá sa to urobiť takto:

Operácie bitovej manipulácie zahŕňajú aj inštrukcie logického posunu:

    ľavý posun SHL - každý bit hornej časti zásobníka počnúc 31. má hodnotu toho, ktorý nasleduje za ním 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;

    horný posun SHT - horný prvok sa odstráni zo zásobníka a považuje sa za celé číslo N, ktoré udáva, koľko posunov a v akom smere by sa malo vykonať v hornej časti zásobníka: keď N>0, vykoná sa posun doľava, keď N<0 - вправо.

B8 125 SHR SHL -2 SHT

Operácie posunu vľavo možno použiť na násobenie čísel 2 na mocninu N, 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 celého čísla číslom 2 na mocninu N iba pre kladné čísla, pretože najvýznamnejší bit (znamienka) je počas posunu doprava nastavený na nulu. Napríklad:

keďže

Otočte hornú časť zásobníka o 1 bit doprava ROR a ľavú ROL sú podobné inštrukciám logického posunu, až na to, že okrajový bit, ktorý je vytlačený, nezmizne, ale je zatlačený do uvoľneného priestoru z opačného konca 32. -trochu dlhé slovo. Napríklad (hexadecimálne čísla):

Na spracovanie binárnych kódov sú určené aj príkazy procesora DSSP 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, ako tieto príkazy fungujú 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

Príkazy na manipuláciu so zásobníkom hrajú v jazyku PARA dôležitú úlohu. Nemenia hodnoty údajov v zásobníku, ale menia iba ich umiestnenie, čím uľahčujú prístup k operandom, ktoré sú hlboko v zásobníku.

Existujú tri príkazy na odstránenie prvkov zásobníka: D, DD, DS (Drop - discard). 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 (Kopírovať) vloží kópiu aktuálnej hodnoty jeho vrcholu do zásobníka. Je to ekvivalentné duplikovaniu horného prvku zásobníka: starý vrchol sa stáva subvertexom a jeho kópia sa stáva novým vrcholom. Príklad:

Aplikáciu tohto príkazu si ukážeme 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 hodnota x je obsiahnutá v hornej časti 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ĺbke 2, 3, 4. Ich fungovanie je možné vysvetliť na nasledujúcich príkladoch:

C2 C4

Existuje aj príkaz CT na kopírovanie prvku v hĺbke špecifikovanej v hornej časti zásobníka. Pri vykonávaní CT procesor odstráni horný prvok zo zásobníka, použije jeho hodnotu ako indikátor hĺbky kopírovaného prvku a vloží kópiu posledného prvku do zásobníka. Takže kopírovanie prvku umiestneného v hĺbke 5 je špecifikované dvojicou 5 inštrukcií CT, ktorých vykonaním procesor vloží číslo 5 do zásobníka a potom vykoná inštrukciu CT. Vykonanie CT s parametrami 1, 2, 3, 4 je ekvivalentné príkazom C, C2, C3, C4.

Príkazy výmeny E2, E3, E4 (Výmena - výmena) permutujú prvý (vrchný) prvok zásobníka s 2., 3., 4., t. j. s prvkom umiestneným v hĺbke 2, 3, 4. Napríklad:

E3 E2

Na výmenu vo väčších hĺbkach sa používa inštrukcia 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:

5ET

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 výmenu zvážte problém školenia. Na hromádke sú tri čísla. Vyžaduje sa, aby ste sa dostali na zásobník: . Môžeme navrhnúť nasledujúci program, ktorého zmysel je jasný z pripomienok.

C3 C3 C3+

E4 + E4

Tento príklad dobre ukazuje, aká veľká 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. Jazyk RAYA má porovnávacie príkazy<, =, >. Sú definované nad číslami a výsledkom sú číselné hodnoty 0 a 1. Teda príkaz< потребляет из стека два элемента и засылает в стек число 1, если значение нижнего элемента оказалось меньше значения верхнего, а в противном случае засылает 0. Например, в результате выполнения последовательности 5 -20 < в стек будет заслан 0. Команда = засылает 1 в случае равенства потребленных ею элементов. Команда >pošle 1, keď je spodný prvok väčší ako horný prvok. Na programovanie neprísnych porovnaní (menšie alebo rovné, väčšie alebo rovné) sa používa príkaz NOT, ktorý nahradí hodnotu vrcholu zásobníka, ktorý sa nerovná nule, nulou a rovný nule jeden. Napríklad vyhodnotenie logického výrazu x>=5, kde x je nejaké číslo 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é získať 1 na zásobníku, ak číslo x vo vrchole patrí do polovičného segmentu C 5< NOT C2 10 <

& E22 = &0

Nástroje riadenia programu v závislosti od výsledkov porovnania budú diskutované neskôr.

Definícia postupov

Ako základná programovacia technika PRSP poskytuje používateľovi možnosť definovať pomenované postupnosti operácií nazývané procedúry. Nech je to potrebné napríklad na výpočet hodnôt štvorcový trojčlen 3*x**2-4*x+9 pre dané hodnoty x. V takom prípade by ste mali definovať procedúru, ktorá implementuje trojčlenný vzorec a výstup výsledku na terminál, a potom použiť tento postup na konkrétne hodnoty x. Požadovaný postup, nazvime ho PX, je definovaný nasledovne: : PX [x] C 3 * 4 - * 9 + . D; Dvojbodka znamená operáciu „definovať procedúru“, pričom názov procedúry nasleduje po dvojbodke 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 komentovať 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átvorkách. Preto pri zadávaní definície jedného postupu z terminálu možno komentáre vynechať.

Po zadaní definície procedúry 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 "define procedure" a pripravenosť procesora pokračovať v dialógu. Teraz môžete použiť procedúru PX na hodnoty x zadané klávesnicou, napríklad na 2, 3, 4 (vydané procesorom sú podčiarknuté):

*2PX 13

*3PX 24

*4PX 41

Definujme si všeobecnejší postup výpočtu trojčlenky v tvare a2*x**2+a1*x+a0, ktorý nám umožňuje nastaviť 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 zásobníku v požadovanom poradí. 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ť procedúry definované používateľom. Môžete napríklad definovať procedúru P, ktorá okrem výpočtov vykonávaných PXA odošle kópiu výsledku do terminálu a odstráni výsledok zo zásobníka.

:PXA. D;

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

: TIME [t] 1- TIME ;

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

Počítadlo TIME sa v zásade nemôže zastaviť: odčítanie jednotky sa bude vykonávať znova a znova, kým je procesor spustený. Ale v DSSP existujú nástroje, 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 viditeľ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 PRSP príkazov. Takýto program, napísaný ako hierarchia definícií procedúr, sa nazýva štruktúrovaný. Spôsob konštrukcie š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 metódou štruktúrovaného programovania nielen lineárnych, ale aj ľubovoľných programov je možné za prítomnosti operácií vykonania procedúry podľa podmienky, opakovania procedúry a ukončenia opakovanej procedúry. Sada príkazov tohto druhu dostupných v DSSP poskytuje možnosť štruktúrovanej konštrukcie ľubovoľného programu.

Podmienky vykonania alebo nevykonania postupu sú formulované vzhľadom na znamienko čísla, presnejšie povedané, s ohľadom na znamienko hodnoty, ktorú tento moment horná časť zásobníka. Jadro tímu podmienené vykonávanie procedúry - BRS (BRanch on Sign - 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. Pri vykonávaní BRS procesor odstráni horný prvok zo zásobníka, otestuje jeho hodnotu a ak je záporná, vykoná prvú z vyššie uvedených procedúr, ak je nula, tak druhú a ak je kladná, tak tretiu. Takže tím

spôsobí odstránenie jedného prvku zo zásobníka a vykoná procedúru N, ak je odstránená hodnota záporná, vykoná procedúru P, ak je kladná, a vykoná procedúru Z, ak sa rovná nule.

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 jednej procedúry z troch údajov poskytuje možnosť implementovať dvojhodnotové operátory 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 - príkaz BRS P NOP P, kde NOP je názov prázdnej operácie. Ale v DSSP je ich viac efektívnu implementáciu dvojciferné podmienky - príkazy IF-, IF0, IF+, BR-, BR0, BR+.

Príkazy skupiny IF zodpovedajú príkazu IF-THEN. Napríklad príkaz IF-P prikazuje odstrániť horný prvok zo zásobníka a otestovať jeho znamienko, a ak má tento prvok znamienko mínus, potom vykonajte procedúru P. Príkazy IF0 P a IF+ P nariaďujú vykonať procedúru P , respektíve v prípade, keď je odstránený prvok nula, a keď je jeho hodnota kladná.

Ako príklad ilustrujúci použitie príkazov skupiny IF uvedieme definíciu príkazu základného jazyka ABS, ktorý vypočítava 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, ktoré sú po nich volané. Ak sa znamienko prvku odstránené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 príkaz BR0 P0 P1 dáva pokyn na vykonanie procedúry P0 v prípade, že prvok odstránený zo zásobníka je nulový, 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 sú priamo implementované príkazmi skupiny IF. Podmienky x<=0, x<>0, x>=0 sa programujú pomocou inštrukcií BR-, BR0, BR+ s použitím prázdnej operácie NOP ako prvého postupu. Napríklad veta, 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 porovnávania dvoch čísel. Napríklad príkaz MAX základného jazyka možno naprogramovať takto:

: MAX C2 C2< IF+ E2 D ;

Do skupiny inštrukcií pobočky patrí aj výberová inštrukcia BR, ktorá je napísaná ako:

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

Pri implementácii tejto inštrukcie procesor najskôr vykoná procedúru ukazovateľa A1 a porovná hodnotu, ktorú vložil do zásobníka, s hodnotou predchádzajúceho vrcholu zásobníka pod ním. Ak sa hodnoty zhodujú, potom sa zo zásobníka odstránia dva horné prvky a vykoná sa procedúra P1 spojená s ukazovateľom A1, po ktorej sa vykoná prechod na inštrukciu podľa inštrukcie BR (t. j. 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 (t. j. výsledok A1) a rovnaké akcie sa vykonajú s párom A2 P2, potom, ak zhoda nevyšla, potom s párom A3 P3 atď. do AN PN vrátane. V prípade, že ani jeden z pokusov sa nezhodoval, 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 dôsledku vykonania tohto riadku sa hodnota y=-5 získa na vrchole zásobníka, ak x=5; y=3 ak x=-3; y=1, ak x=0 a y=0 inak.

Všeobecne povedané, procedúra 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, že nevytiahne nič zo zásobníka a vloží do zásobníka jednu hodnotu.

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

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

Teraz sa táto rutina TIME zavolá len vtedy, keď je vrchol zásobníka kladný. Počítadlo bude fungovať 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 počtov, musíte zadať

7 krát<ВК>

Keďže IF+ v definícii TIME, ako každá podmienená operácia, odstraňuje testovaný prvok zo zásobníka a tento prvok je nevyhnutný pre následné operácie, musí sa duplikovať umiestnením operácie C (Kopírovať) pred IF+.

Rekurzia nie je primárnym prostriedkom opakovaného vykonávania procedúry. Pre programovacie cykly v jazyku PARADISE existujú príkazy RP (Repeat - repeat) a DO (Do - do, perform).

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 - exit), ktorá sa vykoná za danej podmienky. Operácia EX preskočí na vykonanie procedúry, ktorá nasleduje po texte programu po opakovanej procedúre obsahujúcej túto operáciu EX. Počítadlo, implementované vyššie ako rekurzívna procedúra TIME, teda môže byť naprogramované ako opakovanie procedúry W, ktorá je definovaná takto:

: W [t] 1-C IF0EX;

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

Spolu s operáciou EX, ktorá sa používa v inštrukciách podmieneného vykonania, existujú operácie podmieneného ukončenia EX-, EX0, EX+, ktoré majú rovnaký účinok ako inštrukcie IF-EX, IF0 EX, IF+ EX, t. j. spotrebujú horný prvok. ktorý otestuje svoj znak a vystúpi, ak sa znak zhoduje s označením špecifikovaným v označení prevádzky. Operácie EX, EX-, EX0, EX+ možno použiť nie nevyhnutne v tele najčastejšie opakovanej procedúry (v našom prípade W), ale aj v procedúrach, 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 pomocou euklidovskej metódy. Podstatou metódy je, že je potrebné odčítať menšie číslo od väčšieho čísla, kým sa čísla navzájom nerovnajú. Po dosiahnutí rovnosti sa nájde najväčší spoločný deliteľ.

Programovanie sa bude vykonávať pomocou metódy vývoja zhora nadol. Najprv definujeme procedúru GCD, ktorá opravuje 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 dôsledku tohto procesu by mali v zásobníku zostať dve rovnaké čísla - 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 [nod(M,N),nod(M,N)]D [nod(M,N)];

Teraz je potrebné naprogramovať jeden krok iteračného procesu, t.j. definujte postup STEP. Jeho parametre sú dve čísla na 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 ho začať testovať. Kontrola by sa mala vykonávať zdola nahor, t.j. 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 procedúra pomenovaná po nej sa N-krát zopakuje, kde N je číslo nachádzajúce sa na vrchu zásobníka v čase vykonania DO. Napríklad, aby sa procedúra P vykonala 8-krát, musíte zadať

8 D.O.P

Ak sa v tele procedúry P nachádza aspoň jedna výstupná operácia a podmienka na jej vykonanie je splnená skôr, ako nastane určený počet opakovaní, potom sa opakovania ukončia ukončením procedúry, rovnako ako v prípade operácia RP. Napríklad, ak DO opakuje vyššie uvedený postup W, ktorého definícia obsahuje IF0 EX, zápis [T] 30 DO W spôsobí 30 opakovaní W, ak je hodnota T>=30. Ak 0

Ak v čase vykonania operácie DO má vrchol zásobníka nulovú alebo zápornú hodnotu, potom sa postup nasledujúci po DO nevykoná ani raz.

Aby sme ilustrovali použitie operácie DO, definujeme procedúru NUM, ktorá počíta počet nenulových bitov v 32-bitovom slove x určenom v hornej časti zásobníka.

Počítadlo počtu jednotiek bude umiestnené v hornej časti zásobníka. Počítanie jednotiek bude spočívať v zopakovaní postupu NUMI 32-krát, v ktorom budeme skúmať jeden bit slova x. Po opustení slučky by mal byť požadovaný počet v hornej časti stohu.

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

Na počítanie nenulových bitov využívame fakt, že jednotka v najvyššom (31.) bite slova je znakom záporného čísla. Ak je skúmané slovo záporné, potom je potrebné pridať jedno k N. Na konci procedúry NUMI musíte posunúť skúmané slovo o jeden bit doľava.

: NUMI C IF- N+ SHL ;

Implementácia postupu N+ je pomerne jednoduchá: musíte pridať jeden na vrchol zásobníka bez toho, aby ste zmenili vrchol.

: N+ E2 1+ E2;

Opakovateľné procedúry môžu vo svojom tele obsahovať operácie RP a DO, ktoré vedú k vnoreným slučkám 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 môže byť špecifikovaný takto:

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

Named Data

Zásobník operandov je hlavným, ale nie jediným mechanizmom na manipuláciu s údajmi v PRSP. Spolu s definíciami procedúr je tiež možné deklarovať prvky a štandardne usporiadané kolekcie dátových prvkov (tzv. štruktúry), ktoré sú potom k dispozícii na použitie podľa ich názvov. 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 PRSP obsahuje množstvo direktívnych slov diskutovaných nižšie na deklarovanie premenných a polí. S cieľom rozšíriť jazyk systému je možné do systému zaviesť ďalšie slová tohto druhu, a teda 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 spája s týmto názvom 16-bitové pamäťové miesto, ktoré bude uchovávať hodnotu tejto premennej. Inštrukcia na priradenie hodnoty premennej X, ktorá sa nachádza v hornej časti zásobníka operandov, je

Vykonaním tohto príkazu procesor odstráni horný prvok zo zásobníka a zapíše jeho hodnotu do bunky alokovanej pre premennú X.

Príkaz pozostávajúci len z názvu premennej, pred ktorým nie je písmeno !, spôsobí, že sa hodnota tejto premennej presunie do zásobníka a upload sa vykoná skopírovaním obsahu príslušnej pamäťovej bunky, teda hodnoty premennej zostáva nezmenená. Akýkoľvek výskyt názvu premennej X v programe, ak mu bezprostredne nepredchádza slovo predpisujúce inú akciu, vytlačí aktuálnu hodnotu tejto premennej do zásobníka, rovnako ako priamo dané čísla (číselné literály) sú tlačení.

Ako príklad uvádzame inú verziu GCD procedúry diskutovanú vyššie, v ktorej sa používajú dve pracovné premenné.

: KÝVNUTIE! 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, ale jeho prehľadnosť sa zvýšila.

Slovo VCTR deklaruje jednorozmerné pole (vektor) 16-bitových buniek a číslo najvyšš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, tvoriacich vektor ROW(0:9). Najprv sa do zásobníka vloží číslo 9 a potom sa vykoná procedúra VCTR s použitím horného prvku zásobníka na určenie dĺžky vektora ROW, ktorý sa má vytvoriť.

Vloženie hodnoty j-tého prvku vektora ROW do zásobníka, 0<=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 bezprostredne pred názvom vektora ROW nachádza slovo!, potom sa prvku tohto vektora označeného vrcholom priradí hodnota podvertexu 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ť kombinácie konštantných vektorov, t.j. vektory 16-bitových čísel, ktorých hodnoty sú definované pri deklarácii a v budúcnosti sa nemenia. Vektor 16-bitových konštánt VC dĺžky L+1 je teda 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 pozostávajúce z dvojíc slov, ako napríklad príkaz na odoslanie adresy premennej „X“ diskutovaný nižšie. Prístup k prvkom konštantného vektora sa vykonáva rovnakým spôsobom ako ku komponentom bežných vektorov, napríklad:

Viacrozmerné pole 16-bitových slov je deklarované slovom ARR, pred ktorým sú uvedené maximálne hodnoty indexu pre každý rozmer a počet rozmerov. Napríklad trojrozmerné 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 vloženie prvku TIR(0,2,2) do zásobníka je vyjadrený ako

Podľa toho je priradenie aktuálnej hodnoty vrcholu zásobníka tomuto prvku dané príkazom

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. Aby to bolo možné, slovo, ktoré definuje štruktúru, má predponu LONG alebo BYTE. Napríklad,

5 BYTE VCTR X - definícia 6-zložkového bajtového vektora 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 presne 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 spodného slova alebo bajtu vrcholu zásobníka a horná časť vrcholu sa nastaví na nulu. Nízke slovo alebo bajt 32-bitového dlhé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á tiež 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 znakov v jazyku PARADISE slúži konštrukcia #l, kde l je ľubovoľný znak dostupný na klávesnici počítača. Procesor DSSP 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ý literál rovnajúci sa kódu zadaného znaku, ale jej použitie je vhodnejšie, pretože po prvé eliminuje potrebu pamätať si kódy a po druhé robí programy zrozumiteľnejšími. Konštantný vektor Y môžeme definovať najmä takto:

BYTE CNST Y #A #B #C ;

Často je vhodné použiť symbolický zápis pre číselnú konštantu v programe. Na poskytnutie tejto možnosti existuje definujúce slovo VALUE:

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

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

Uvažované nástroje poskytujú možnosť pomenovávania údajov a manipulácie s nimi bez ohľadu na adresný systém počítača. Základný jazyk však obsahuje aj nástroje, ktoré vám umožňujú manipulovať 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 (indexov).

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

Inštrukcia @B nahradí adresu hodnotou zodpovedajúceho bajtu za predpokladu, že vysoké bajty hornej časti zásobníka sú nulové a inštrukcia @L nahradí adresu 32-bitovým slovom.

Nechýbajú ani pokyny na zápis hodnôt do pamäte. Príkaz !T zapíše 16-bitovú sub-top hodnotu na adresu zobrazenú z vrchu zásobníka. Príkaz !TB spôsobí podobný zápis spodného bajtu poduzla do bajtu adresovaného uzlom a !TL zapíše 32-bitové slovo poduzla do slova adresovaného uzlom. Môžete napríklad priradiť hodnotu 15 piatemu prvku bajtového vektora BV(0:5) pomocou nasledujúcich príkazov:

15 5" B.V.!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.

Dodatočné dátové a pamäťové operácie

Aby sa dosiahla väčšia efektivita a kompaktnosť programov, boli do jazyka PARA 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íklad,

0 X je ekvivalentné 0! X

1+ X je ekvivalentné X 1+! X

X je ekvivalentné X E2 - ! X

Použitie týchto operácií zvyšuje efektivitu a viditeľnosť programov.

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

Príklad použitia:

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

Často je potrebné získať informácie o dátovej štruktúre za názvom v programe. Dvojica príkazov SIZE? - zadajte formát dátového prvku: 1, 2 alebo 4 bajty a DIM? - vráti počet dátových prvkov v štruktúre. Napríklad, ak sú deklarované údaje

3 4 2 DLHÝ ARR Z

potom vo vzťahu k nim 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

Inštrukčná sada DSSP procesora obsahuje ako prídavok štyri inštrukcie, ktoré umožňujú čítať a zapisovať jednotlivé bity počítačových pamäťových buniek. Sú to príkazy @BI, !BI, !BI0, !BI1. Parametre pre každý z nich sú adresa pamäťového slova v zásobníku a počet bitov v tomto slove (pripomíname, že bity sú číslované sprava doľava, začínajúc od nuly). Príkaz !BI tiež predpokladá prítomnosť v zásobníku a hodnotu bitu, ktorý sa má zapísať. Príkaz @BI nahradí špecifikované parametre hodnotou zvoleného bitu (0 alebo 1), príkazy !BI0 a!BI1 priradia zvolenému bitu hodnotu 0 a 1, pričom ich parametre odstránia zo zásobníka a Príkaz !BI nastaví vybraný bit na najmenej významný bit 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 je 100101,

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

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

Jazyk PARADISE má tiež prostriedky na prácu s reťazcami bajtov umiestnenými v pamäti. Na zadanie reťazca bajtov sa do zásobníka vložia dva parametre: počiatočná adresa reťazca (tj 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 (zadanej v zásobníku). Zo zásobníka spotrebuje tri parametre: , kde b je hodnota, ktorá sa má priradiť, a a l sú počiatočná adresa a dĺžka bajtového reťazca. Povedzme napríklad, že potrebujete vynulovať prvky z 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 v hornej časti zásobníka) a príkaz! !!M - na vyplnenie postupnosti dlhých slov.

Príkaz !SB posiela bajtové reťazce. Jeho parametre sú: , kde a1 a l sú počiatočná adresa a dĺžka preposielaného reťazca, a2 je počiatočná adresa reťazca, na ktorý sa preposielanie 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ť. Povedzme napríklad, že chcete presunúť prvky bajtového poľa M(0:10) takto: M(10):=M(9), M(9):=M(8), ..., M(l):= 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 v smere zvyšovania adries pamäte.

Príkaz!SB je vhodný na prácu s reťazcami znakov (pripomíname, že každý znak je zakódovaný jedným bytom). Umožňuje napríklad priradiť bajtovému poľu hodnotu explicitne daného doslovného reťazca. Na určenie takéhoto reťazca sa používa textový literál, t.j. sekvenciu znakov 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 citovaný text sa vložia do zásobníka. Tieto možnosti potom možno použiť s príkazom !SB. Napríklad fragment "TABLE" 0 "TN !SB spôsobí prenos doslovného "TABLE" do poľa TN.

Príkaz SRCHB hľadá daný bajt v reťazci. Parametre: , kde b je bajt, ktorého prvý výskyt sa má nájsť, a a n nastavujú 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 prehľadu prostriedkov práce s dátami sa zastavíme pri problematike súvisiacej s ukladaním dát do externej pamäte počítača, t.j. na magnetických diskoch. Jazyk PARADISE má príkaz SAVE<имя файла>Inštruuje uložiť kópiu 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 údaje operáciami VAR, VCTR, ARR. V dôsledku toho, keď sa uložený systém načíta z disku, hodnoty zadaných údajov nie sú 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ť miesto na disku na ukladanie pracovných premenných, vyrovnávacích pamätí atď. Existujú však údaje, ktorých hodnoty sa musia 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ácia procesoru, že hodnoty prvkov nejakej dátovej štruktúry sa majú zapísať 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 zadefinovanými dátovými štruktúrami sa nelíši od práce so štruktúrami zadefinovaný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 PRSP, alebo skôr emulátora procesora PRSP.

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

DSSP verzia XX.XX.XX

Voľný XXXXXXW

a procesor prejde do režimu čakania na príkazový vstup. Tento príkaz je užitočný pri ladení programov. Vykonáva sa aj v prípade chybových situácií: index mimo hraníc poľa, vyčerpanie voľnej pamäte atď.

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

stop neviem<слово> .

kde bodka je výzva procesora PRSP, ktorá signalizuje, ž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 (potom bude procesor pokračovať vo vykonávaní prerušenej procedúry, vynechaním nedefinovaného slova), alebo príkazom RESTART.

Príkaz EXEC inštruuje procesor, 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 vykonania 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.<имя файла>, pokyn na uloženie kópie systému na disk, ako aj príkazy, ktoré určujú vstupný zdroj textových informácií dodávaných do procesora. Spočiatku je týmto zdrojom klávesnica displeja.

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

Príkazy na správu slovníka

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

Slovník vytvára zhodu medzi externými (použitými v texte programu) a adresami objektov zodpovedajúcich týmto menám vo vnútornej reprezentácii. Pri spracovaní definície procedúry alebo opisu pomenovanej danosti si spracovateľ vytvorí slovník, v ktorom vytvorí nový slovníkový záznam obsahujúci názov (presnejšie prvých 7 znakov názvu) a adresu tela procedúry. alebo dátový deskriptor spojený s týmto názvom.

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

V priebehu rastu slovníka je možné vytvárať podslovníky - pomenované zbierky slovníkových hesiel. Podslovník zvyčajne kombinuje procedúry a dátové štruktúry súvisiace s rovnakou úlohou. Aby sa predišlo zámene medzi názvami podslovníkov a inými programovými objektmi, názov podslovníka musí začínať písmenom $. Prístup k podslovníkom na ich rast 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 - rast podslovníka $v, to znamená, že pokiaľ nie je uvedené inak, vložte 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 - zatvorí možnosť použitia podslovníka $v;

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

ZRUŠIŤ - zrušiť LEN poslednú.

Existuje aj príkaz ?$, ktorý vypíše na displej názvy všetkých podslovníkov ich stavu – či je podslovník vyhľadávania otvorený alebo zatvorený. Podslovník, ktorého názov je vytlačený navrchu, sa vždy zvýši.

Základné procedúry PRSP tvoria podslovník s názvom $PRIME, ktorý je štandardne otvorený na použitie a rast, to znamená, ak neexistoval príkaz, ktorý by dal inému podslovníku pokyn na rast.

Nechajte napríklad operáciu?$ vytlačiť ďalší stav podslovníkov.

$PRG otvorené

$PRIME otvorené

$EDIT zatvorené

$PRIME otvorené

SYSTÉM zatvorený

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

Existujú príkazy na vymazanie jednej alebo druhej množiny záznamov zo slovníka a možno aj interných objektov, ktoré sú s nimi spojené. Príkaz FORGET $v teda odstráni všetky názvy zadané v slovníku (nielen podslovník $v) od posledného vykonania príkazu GROW $v spolu s objektmi označenými týmito názvami a zruší rast $v podslovník, ktorý nastavil. Príkaz PROGRAM $v vykonáva rovnaké akcie 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 rekompilácii programu sa jeho stará kópia vymaže a vytvorí sa podslovník na uloženie objektov novej kópie programu. Napríklad vykonaním operácie FORGET $PRIME v 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 $. To je povolené, ale vedie to k tomu, že aplikácia príkazov FORGET a RPOGRAM na tento podslovník nespôsobí žiadne akcie (podslovník SYSTEM pre nich zrejme neexistuje).

Vzhľadom na to, že prevažná väčšina procedúr v hotovom programe nevyžaduje prístup externým menom, je možné ich názvy zo slovníka odstrániť 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 v texte programu (keď boli definované) predpona:: (dve dvojbodky). Napríklad v dôsledku vykonania nasledujúceho programového fragmentu procesorom:

:: : X+ Y !+ X ;

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

I/O príkazy

Hlavným prostriedkom interakcie používateľa s DSSP je terminál, ktorým je zvyčajne katódový displej s klávesnicou. Z terminálu sa vykonáva prvotný vstup, editácia a ladenie programov, príprava dát a celá správa systému. Programy a dáta, ako aj samotný PRSP, sú uložené ako súbory na diskoch a dajú sa vytlačiť na tlačiarni. Pre riadenie vstupu/výstupu obsahuje súbor základných postupov PRSP nástroje opísané nižšie.

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

Príkaz TIB (Terminal Input Byte) spúšťa čakaciu slučku na stlačenie klávesu na klávesnici terminálu. Po stlačení klávesu sa 8-bitový kód zodpovedajúceho znaku vloží do zásobníka ako spodný bajt vrcholu, pričom horné 3 bajty obsahujú nuly. Kópia takto zadaného znaku sa zobrazí na displeji. Existuje aj príkaz TRB (Terminal Read Byte), ktorý sa od TIB líši tým, že odoslanie kódu zadaného znaku do zásobníka nie je sprevádzané zobrazením tohto znaku 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. Vstupné číslo musí byť postupnosť číslic, ktorá môže začínať znamienkom mínus a končiť . V závislosti od nastaveného režimu vstupu/výstupu procesor vníma číslice 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. s orezaním bitov umiestnených naľavo od najvýznamnejšieho bitu s hmotnosťou 2 až 31.

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

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 adresou a, pomocou príkazu TIS (Terminal Input String), pred ktorým je adresa a a číslo znakov n sú vložené do zásobníka . Nech je napríklad 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 pomocou príkazu TOS je zadaný výstup sekvencie n bajtov 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 text ZADAJ ČÍSLO VARIANTU objavil na displeji pri vykonávaní určitého fragmentu programu, fragment musí obsahovať položku „ZADAJ ČÍSLO VARIANTU“.

Príkaz TON (Terminal Output Number) zobrazuje číslo, ktoré sa má vytiahnuť z hornej časti zásobníka a v hornej časti musí byť špecifikovaná dĺžka výstupného poľa. Výstupné číslo je zarovnané k pravému okraju poľa, prázdne pozície naľavo sú vyplnené medzerami a ak dĺžka čísla presahuje zadanú dĺžku poľa, naľavo dôjde k odrezaniu. V desiatkovom režime I/O začínajú záporné čísla znamienkom mínus.

Príkaz TOB (terminal output byte) vytlačí znak, ktorého kód je daný spodným bajtom vrcholu zásobníka. Hĺbka stohu 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 spôsobí krátke pípnutie („zvonček“).

Niekedy pri komunikácii s terminálom môže byť potrebné skontrolovať, či už bolo stlačené tlačidlo a či displej už 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 na výstup na tlačiareň sú podobné príkazom na výstup na terminál a sú založené na podobnej mnemotechnickej pomôcke, v ktorej písmená LP (Line Printer) nahradili TO alebo pridali ako hlavné. Napríklad LPCR - prechod na začiatok nového riadku, LPSP - medzera, LPN - výstup čísla z podvertexu v poli určenom vrcholom, LPB - výstup znaku, LPS - výstup reťazca znakov . Existuje aj 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č explicitné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 DSSP je toto spracovanie naprogramované nasledovne. Program určený na obsluhu prerušenia je bežná procedúra PRSP, pred definíciou ktorej je predpona INT, napríklad INT: A !1+ I ; Predpona INT zabezpečuje, že stav procesora sa pri prerušení uloží a po dokončení prerušenia sa obnoví.

Príkaz LINK sa používa na prepojenie rutiny s konkrétnym prerušením:

<адрес вектора>LINK<имя процедуры>pri vykonávaní ktorého sa podľa príslušného vektora zaznamená volanie procedúry obsluhy prerušenia. Inštrukcia LINK môže vykonávať statické prepojenie procedúry s prerušením, ktoré nastáva v čase kompilácie programu, ako aj dynamicky, keď je program vykonávaný.

Prerušenie procesora je spôsob, akým sa do systému hlási udalosť, ktorá nastala vo vonkajšom svete. V programe sa môžu vyskytnúť aj udalosti vyžadujúce okamžité spracovanie. Hovorí sa im 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 DSSP sú výnimočné situácie fixované pomocou príkazových prerušení. Prerušenie príkazu je pomenovaná operácia volania procedúry odozvy a je deklarovaná takto:

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

Napríklad:

TRAP S1 .Situácia S1.

V prvom prípade je konečnou reakciou na prerušenie S procedúra X, v druhom prípade pri výskyte prerušenia S1 sa na termináli zobrazí hlásenie: Situácia S1.

Program, ktorý pravdepodobne spôsobí prerušenie, môže nastaviť svoju odpoveď naň pomocou príkazu catch. V PRSP existujú dva typy zachytení: ON a EON. Príkazy na odpočúvanie 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 vytvárajú rôzne typy reakcií. Ak je príkazom ON zadaná 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, potom najprv zásobník operandov nadobudne hĺbku, ktorú mal v čase vykonania EON, potom sa vykoná reakcia a keď skončí, vykoná sa postup, v ktorom EON bol použitý príkaz zastaví okamžite.

Zvážte príklady. Postup M zadáva znaky z klávesnice terminálu a kontroluje, či ide o číslicu. Ak zadaný znak nie je číslica, vyvolá sa prerušenie ND. TRAP ND "To nie je číslo." : 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 číslica.

Ak je M volané z procedúry P1, ktorá má vlastnú odpoveď na prerušenie ND: P1 ON ND PR1 M ; : PR1 [B] CR "Chyba." D#0 [#0] ; potom pri zadaní nečíslicového znaku bude prerušenie ND spracované reakčným programom PR1 typu ON, čo spôsobí vypísanie správy z nového riadku: Chyba. Zadaný znak bude nahradený znakom 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 vstupu." ; potom pri zadaní nečíslicového znaku bude prerušenie ND spracované reakčným programom PR2 typu EON, čo spôsobí vydanie správy z nového riadku: Chyba. Koniec vstupu, po ktorom P2 opustí. Zásobník operandov bude potom prázdny.

V prípade potreby je možné prerušenie znovu aktivovať v reakčnom programe, čím sa rozšíri na programy vyššej úrovne. V tomto prípade sa o prerušenie postará buď program špecifikovaný v príkaze na zachytenie v priloženom postupe alebo konečná reakcia. Napríklad, ak upravíte PR2 takto: : PR2 CR . "Chyba. Koniec vstupu." N.D.; potom sa na termináli zobrazí správa: Chyba. Koniec zadávania. Nie číslo.

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

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

Človek je verbálna bytosť 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ý - vo svojej bohatosti a schopnostiach sa jazyk zvierat nepodobá ľudskému jazyku. Anjeli na svoju komunikáciu vôbec nepotrebujú jazyk - je ťažké 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 jazyku a považujú sa za zásadne nepreložiteľné. Moslimský Korán bol teda pôvodne napísaný v arabčine. Moslimovia navyše veria, že takto vznikla táto kniha na začiatku vekov.

Židovskí pisári sa tiež priklonili k myšlienke možnosti posvätných textov iba v hebrejčine. S Kresťanským písmom to tak na začiatku nebolo.

V treťom storočí pred naším letopočtom. takzvaný „preklad sedemdesiatky“ – Septuaginta – preklad Starého zákona do gréčtiny. Niektorí vedci sa navyše domnievajú, že práve Septuaginta zohrala úlohu Svätého písma v medzizákonných časoch.

Práve existencia Septuaginty sa stala hlavným argumentom v prospech základnej preložiteľnosti Písma. Existuje však ešte silnejší. Teraz sa považuje za dokázané, že Kristus hovoril s apoštolmi po aramejsky. Ale zostavovatelia evanjelií bez váhania odovzdali tieto rozhovory v gréčtine.

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

Je to 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 „raj je zelené a chladné miesto“ jasne ukazuje, že Písmo bolo napísané v krajinách s horúcim podnebím, kde je „chlad“ skôr príjemný. V ruštine by takéto združenia sotva vznikli. A sloveso „ochladiť sa“ vo význame „oddýchnuť si“, „zabaviť sa“ sa do ruštiny dostalo ako pauzovací papier z hebrejčiny cez gréčtinu.

Rozumeli všetci Slovania Biblii?

Písmo nebolo prinesené našim predkom v ruštine. Cyril a Metod – Solúnski Gréci – vyvinuli nový spisovný jazyk založený na hovorovej reči solúnskych Slovanov.

Na svete je veľa ľudí, ktorí používajú jazyky, ktoré nemajú písaný jazyk. Pokiaľ hovoríme o živote, neexistujú žiadne problémy. Akonáhle však treba do takéhoto jazyka preložiť náboženský text alebo filozofický traktát, treba jazyk zdokonaliť, čo urobili Cyril a Metod.

Ak predpokladáme, že pred niekoľkými tisíckami rokov bolo pre slovanské kmene jednoduchšie dohodnúť sa medzi sebou ako pre 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 - sú tvorené presne podľa cirkevnoslovanského modelu - v starej ruštine to bude „plač“, „beh“.

Niekedy staré ruské analógy úplne vypadli - „dobré“ a „bologo“ v názve „Bologoe“; „Prilba“, ktorá je na rozdiel od „prilby“ iba v epike.

Jazyky blízke a… paralelné

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

V diglosii sa jazyky z hľadiska používania nepretínajú. Hovorili staro rusky, vedeli napísať domácu poznámku v starej ruštine. 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 si inzerát do cirkevnej slovančiny a bude to vyzerať ako vtip alebo rúhanie.

Kňaz alebo farár?

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

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

Teraz je gramotnosť stále zachovaná a texty sú k dispozícii.

Okrem samotného Písma sme pozvaní osvojiť si ešte niektoré slovanské texty – od modlitieb až po bohoslužby. Je pravda, že existujúci preklad do ruštiny je trochu ťažko pochopiteľný. V 19. storočí, ktoré nemali obdoby, prekladatelia často prenášali slovanizmus 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, teraz bude jednoduchý poslucháč vnímať vznešeného „farára“ skôr ako „kňaza“. Treba však priznať, že doslovný preklad mnohých biblických výrokov do ruštiny je nemožný – slovné spojenie „ústa dieťaťa hovoria pravdu“ – nebude vnímané ako filozofické porekadlo.

Vo všeobecnosti však porozumeniu 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 zosilnení, ktoré pochádzajú z gréčtiny. „Odpustiť hriechy a priestupky“ znamená jednoducho odpustiť všetky hriechy. Podobné sú konštrukcie typu „nahnevaný hnevom“, „milovaný láskou“.

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℅ obyvateľov Zeme). Teda 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 Štefan z Permu Písmo do írskeho jazyka.

Preklady posvätné a svetské

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 ani 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ť prístupný každému. Vychádzajú aj biblické komiksy.

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 existujúcemu jazyku, vrátane hebrejčiny.

Existuje teraz 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 metropolity Philaret, ž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ú samostatné prípady použitia ruského jazyka - modlitba starších z 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 rusifikovať ako prekladať.

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

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 boli do cirkevnej slovančiny preložené inšpiráciou zhora, ale aj vzorom, ktorý vtedy existoval.

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

Pripravila Daria Mendeleeva

Fotografiu Dmitrija Kuzmina



Náhodné články

Hore