Milyen nyelven beszélt Ádám, és miért menő a paradicsomban? A dss párbeszédes programozási rendszer adaptív nyelve kidolgozott Milyen nyelven beszélnek a paradicsomban

1. Ez egy történet arról szól, hogy az emberek nem értették meg egymást, és számos nyelv jelent meg modern világ... Mennyire népszerű ez a mítosz a különböző népek körében, és mi az értelmezése?

2. A Bábel-torony mítosza nemcsak azon a hiedelmen alapszik, hogy kezdetben az egész emberiség ugyanazt a nyelvet beszélte, hanem azon is, hogy ez a nyelv „ideális” volt: a tárgyak neve a valódi lényegüket közvetítette. Más kultúrák képviselői osztják-e ezeket a nézeteket, és úgy gondolják, hogy az ő nyelvük áll a legközelebb az eredetihez?

Az első kérdésre a választ az 1Mózes 11:1-9 tartalmazza, ahol elbeszélik, hogy Isten úgy döntött, hogy megbünteti az emberi fajt a nyelvek összetévesztésének átkával. A második kérdésre a válasz az 1Móz 2:19-ben található. Ebben a részben Isten minden állatot és madarat elhozott Ádámhoz, hogy meghallja, hogyan hívja őket Ádám, és „ahogy az ember minden élő lelket hív, úgy hívja a nevét”. Rögtönzött túra a különböző kultúrák lehetővé teszi számunkra, hogy lássuk, hogyan fedik le ezeket a kérdéseket. Ami az elsőt illeti, sokan egyetértenek az Ószövetséggel: a nyelvek sokfélesége az Úr büntetése, vagy legalábbis valamilyen kedvezőtlen tényező következménye.

Az egyik ausztrál törzs legendája az idős emberek étkezéséről szól. Azok a törzsek, akik saját testüket ették, „tiszta” nyelvet beszéltek, azok pedig, akik ettek belső szervek, - a "tisztátalan"-on. Az afrikai kabilák úgy vélik, hogy a konfliktus következtében az emberek különböző nyelveken kezdtek beszélni. Egy Assamból származó törzs szerint a nyelvek zavara az volt, hogy három gyerek egykor patkányra vadászott. Az egyik amazóniai törzs azon a véleményen van, hogy Isten megosztotta az embereket és nyelveiket, hogy engedelmesebbek legyenek neki. Amerika bennszülött lakossága, a Maidu törzs (Kalifornia) körében úgy tartják, hogy kezdetben az emberek ugyanazt a nyelvet beszélték, de egyszer, egy temetési szertartáson a nyelv megszűnt ugyanaz lenni. Az irokézek úgy vélik, hogy a nyelvek szétválása egy családi veszekedés miatt történt, amely egy gyermek meggyilkolásához vezetett. De az a feltételezés, hogy a többnyelvűség átok, nem olyan gyakori, mint amilyennek látszik. Számos olyan változat létezik a világon, amely szerint az elválás természetes folyamatok eredményeként következett be.

Az ősi indiai „Rigveda” szent himnusz megemlíti, hogy valaha volt Vak („szó”), és az istenek sokféle formára osztották fel. Az Indokínai-félsziget népei hat fajról mesélnek, amelyek mindegyikének megvolt a maga nyelve a tökből kicsavarodott szár formájában. A Quiche törzsnek (Guatemala) az a mítosza, hogy az emberek együtt éltek és ugyanazt a nyelvet beszélték, amíg csoportokra nem váltak. Mindegyik a saját istenét választotta, és a saját nyelvén kezdett beszélni.

A dél-amerikai navahó törzs teremtésmítosza a "Változó Nőről" és az ő nyelvét beszélő valódi népek megjelenéséről mesél. Így teremtett szomszédos népeket - pueblókat, mexikói őslakosokat és másokat, és beszélték a nyelvüket, és különböző irányokba terjesztették őket. Az iszlámban a Korán azt tanítja, hogy Ádám nem talált ki neveket vagy bármi mást, hanem Allah tanította meg mindenre. A nyelvek sokfélesége teljesen természetes, és Allah hatalmának megnyilvánulása. Minden ember képes megérteni a Korán kinyilatkoztatásait, függetlenül attól, hogy milyen nyelven írták őket.

A világ számos népének mitológiai rendszere nem tud magyarázatot adni a nyelvek keveredésére, ami egyszerűen magától értetődő, ezért kérdésünkre nem tud válaszolni. Azonban a világ szinte minden kultúrájában van utalás az "ideális" nyelvre (2. kérdés). Fentebb említettük az ausztrál törzset, amely úgy véli, hogy egyes emberek (akik eszik az emberi testet) „tiszta” nyelvet beszélnek, amely a dolgok valódi lényegét közvetíti. Az ókori egyiptomiak szerint Ptah isten mindennek nevet adott, így a nyelv az istenek ajándéka lett. Kínában a "helyes" nyelvet a mitikus császárok tanították. A Korán a nyelvek sokféleségét egyetlen nyelv felosztásának tekinti, amely magában foglalja az összes többit.

Az emberek mindenhol azt próbálják kitalálni, hogy egy tárgy neve hogyan fedi fel a lényegét. Feltételezik, hogy a tárgy valódi lényegét leíró „ideális” nyelv vagy ma létezik, vagy a múltban maradt. A második feltevés az igazság és a harmónia keresésének előfeltétele a világban. Úgy tűnik, hogy a nyelv kapcsolatáról szóló elképzelések a való Világés az emberi lét beágyazódik a tudatunkba. Ezzel kapcsolatban felmerül a kérdés, amely először Platón „Cratilus” című dialógusában hangzott el, és azóta is állandó vita tárgyát képezi: vajon természetes-e a kapcsolat a név és a dolgok objektív lényege között (amely egy anyanyelvi beszélő szubjektív tudatában merül fel? ) vagy ez a kapcsolat feltételes és véletlen?

A nyelv olyan jelrendszer, amely lehetővé teszi, hogy a fogalom jelentésétől és értelmétől a megjelölésig elmozduljunk.

Az ember verbális lény, és az állatokkal ellentétben a saját fajtájával a nyelv segítségével kommunikál. Néha az "állatok nyelvéről" beszélnek, de nyilvánvaló, hogy egy ilyen kifejezés feltételes - gazdagságát és képességeit tekintve az állatok nyelve nem hasonlít az emberekhez. Az angyaloknak viszont egyáltalán nincs szükségük nyelvre a kommunikációhoz – nehéz elképzelni, hogy oroszul vagy angolul beszéljenek.

A nyelv funkciói különbözőek lehetnek - az információ közvetítése mellett az érzések, értékelések kifejezésében is segít.

Lefordítható a Szentírás?

Az Egyház nyelve az ima, az istentisztelet és a Szentírás nyelve.

Egyes vallásokban a szent szövegek kezdetben egy adott nyelven léteznek, és alapvetően lefordíthatatlanok. Így a muszlim Korán eredetileg arabul készült. Sőt, a muszlimok úgy vélik, hogy ez a könyv így született az idők kezdetén.

A zsidó írástudók is hajlottak arra az elképzelésre, hogy a szent szövegek csak héberül lehetségesek. Ez kezdettől fogva nem így volt a Keresztény Írással.

A Kr.e. 3. században. az úgynevezett "hetvenes fordítás" - a Septuaginta - az Ószövetség görög nyelvű fordítását végezték el. Sőt, egyes kutatók úgy vélik, hogy a Septuaginta volt az, amely a Szentírás szerepét játszotta a Testamentum közötti időkben.

A Septuaginta létezése volt az, amely a fő érv a Szentírás elvi lefordíthatósága mellett szólt. Van azonban egy még erősebb is. Ma már bizonyítottnak tekintik, hogy Krisztus arámul beszélt az apostolokhoz. De az evangéliumok összeállítói nem haboztak görögül közvetíteni ezeket a beszélgetéseket.

Most van egy tudományos irány - a nyelvi rekonstrukció. Összeállítóik megpróbálják megérteni, hogyan hangzottak ezek a párbeszédek az eredetiben. De ez még mindig tudományos vizsgálatok tárgya.

Tényleg a paradicsomban vanhideg?

Egy nyelv nyelvre fordításakor néha problémák merülnek fel, mert a nyelvek nyelvtanilag nem azonosak. A szavak jelentése és árnyalata a különböző nyelveken szintén eltérő.

Például a „mennyország forró és hűvös hely” kifejezés egyértelműen azt mutatja, hogy a Szentírást forró éghajlatú országokban hozták létre, ahol a „hűvösség” meglehetősen kellemes. Oroszul ilyen asszociációk aligha merülnének fel. A "pihenni", "jól érezni magát" értelemben vett "hűteni" ige pedig pauszpapírként került az oroszba a hébertől a görögig.

Vajon minden szláv megértette a Bibliát?

A Szentírást nem orosz módon hozták el őseinkhez. Cirill és Metód – a szoluni görögök – új írott nyelvet fejlesztettek ki az alapján beszélt nyelv szalun szlávok.

A világon sok nép használ olyan nyelveket, amelyeknek nincs írott nyelvük. Amíg a hétköznapokról beszélünk, addig nincs gond. De amint egy vallási szöveget vagy egy filozófiai értekezést le kell fordítani ilyen nyelvre, a nyelvet javítani kell, amit Cirill és Metód meg is tett.

Ha feltételezzük, hogy néhány ezer évvel ezelőtt a szláv törzsek könnyebben megegyeztek egymással, mint a modern szláv népek, akkor igazunk lesz - a nyelvek közelebb voltak. De ez nem jelenti azt, hogy a Cirill és Metód által készített Szentírás-fordítás érthetőbb lett volna Kijev és Novgorod lakossága számára – az írott irodalmi nyelv más volt.

Talán ez az orosz helyzet sajátossága, hiszen az orosz irodalmi nyelv közelebb áll az egyházi szlávhoz, mint a moszkvai dialektushoz. Valójában az egész egyházi szláv nyelv „nagy nyugalomként” lépett be az orosz nyelvbe. Például még a modern tagmondatokat is - mint például a sírást, a futást - pontosan az egyházi szláv minta szerint alkotják - az óoroszban "sírás", "futás" lesz.

Néha a régi orosz társaik teljesen kiestek - „jó” és „bologo” a „Bologoye” névben; "Shelom", ami csak az eposzokban van, ellentétben a "sisakkal".

A nyelvek közel állnak és... párhuzamosak

V Ókori Rusz diglosszia helyzet állt elő. Ez nem olyan, mint a kétnyelvűség. A diglossia két nyelv párhuzamos használata a társadalomban. Például a XIX. században orosz és francia nyelvet is használtak. A francia a felsőoktatás nyelve volt, de elvileg bármilyen szöveget le lehetett fordítani.

A diglossziában a nyelvek nem fedik egymást a használat tekintetében. Óoroszul beszéltek, óoroszul háztartási jegyzetet tudtak írni. De ők egyházi szláv nyelven imádkoztak.

Ez a helyzet Péter előtt is fennállt, a 18. században fokozatosan összeomlott. Most a tudomány és az irodalom fejlődhetett oroszul, de az egyházi szláv nyelven továbbra is csak az imák léteznek. Fordítsa le egyházi szláv hirdetésbe – és úgy fog kinézni, mint egy vicc vagy istenkáromlás.

Pap vagy Pásztor?

Egyedülálló korszakban élünk. A cári Oroszországban a Bibliát oroszul lehetett olvasni, az ókori Oroszországban egyházi szláv nyelven lehetett hallgatni. De a legtöbb ember írástudatlan volt, vagy nem volt elég képzett ahhoz, hogy olvassa és megértse a Szentírást.

A szovjet időkben mindenki írástudó lett, de nem volt a Szentírás szövege.

Az írástudás továbbra is megmaradt, szövegek állnak rendelkezésre.

Magán a Szentíráson kívül további szláv szövegek elsajátítására is felkérünk bennünket – az imáktól az isteni istentiszteletekig. Igaz, a meglévő orosz fordítást kissé nehéz megérteni. A 19. században, mivel nem lévén analógja, a fordítók gyakran fordították fordításra a szlávizmusokat.

Így az „én vagyok a jó pásztor” kifejezés átkerült a fordításba. És itt van néhány nehézség. Egy szó szerinti görög fordítás így hangzik: „Jó pásztor vagyok”, de az ilyen fordítást alacsonynak tartják. Másrészt a magasztos „lelkészt” ma már az egyszerű hallgató inkább „papnak” tekinti. Mindazonáltal el kell ismerni, hogy sok bibliai mondás szó szerinti orosz nyelvű fordítása lehetetlen – a „gyerek száján keresztül az igazat beszél” kifejezés – mint filozófiai mondást nem fogják felfogni.

De általában a Biblia szláv szövegének felfogását inkább a jelentés, és nem a szavak megértésének hiánya akadályozza.

Külön nehézség az nyelvtani szerkezetek... Például számos fejlesztés létezik a görög nyelvből. A „bocsásd meg a bűnöket és vétkeket” egyszerűen azt jelenti, hogy megbocsátunk minden bűnt. A „haragudtam haraggal”, „szeretettel szerettem” típusú konstrukciók hasonlóak.

A szent szövegek más nyelvekre történő fordításakor is problémák merülnek fel (bár azok a népek, amelyek nyelvére még nem fordították le a Szentírást, a világ lakosságának talán 5℅-át teszik ki). Vagyis folytatódik az a munka, amelyet Cirill és Metód a szlávok érdekében végzett.

Cirill és Metód nem voltak az elsők – előtte voltak etióp, gótikus fordítások. Cirill és Metód után Permi István fordította le a Szentírást zyryan nyelvre.

Szakrális és profán fordítások

Minden fordítás szent szövegnek számít? Nem, de csak annyiban, amennyire az egyházi közösségekben elfogadják. Például a zsinati fordítás mint liturgikus fordítás nem tiltott, de nem is elfogadott. De a protestánsok, például az orosz baptisták így használják.

Még a protestantizmus modern áramlatai is úgy vélik, hogy a bibliai szövegnek mindenki számára elérhetőnek kell lennie. Bibliai témájú képregények is megjelennek.

Az Újszövetség szövegével nincs probléma – forrása görögül ismert. De az Ószövetség zsinati fordításának alapja a héber szöveg volt. A görög fordítás töredékeit csak akkor szúrták be, ha az eltérések alapvetőek voltak.

A modern változatban jó lenne két fordítás – mind a héber maszoréta szövegekből, mind a görögből. Kényelmes lenne azoknak, akik nem ismerik mindkét nyelvet.

Válaszok kérdésekre

A beszéd után Sándor főpapnak több kérdést tettek fel:

Milyen nyelven beszélt Ádám?

- Nehéz megmondani. Egyrészt a nyelv változik, amíg él. De senki sem tudja, hogy ez nem a nyelvek új tulajdonsága volt-e, amely a Bábel-torony építése után jelent meg.

De mindenesetre Ádám nyelve valószínűleg nem hasonlított a létező nyelvekhez, beleértve a héber nyelvet is.

Van-e vita a szolgáltatás orosz nyelvre fordításával kapcsolatban?

– Ez az ötlet már a forradalom előtt is szóba került, részben a felújítók kompromittálták. Nem mindegyik oroszul szolgált, de az ötletet ők támogatták.

A Biblia oroszra fordítása nem volt könnyű, bár Philaret nagyvárosi ötlete, hogy mind a héberről, mind a görögről le kell fordítani, bölcs döntés volt. Bár nekünk nem adott tudományos fordítások mindkét nyelvből.

Vannak egyedi esetek az orosz nyelv használatára - az Optina vének imája és az akatista "Dicsőség Istennek mindenért" eredetileg oroszul íródott.

Annyi más fordítás van, és annyi árnyalat lesz a megvalósításuk, hogy könnyebb valamelyest oroszosítani a szövegeket, mint lefordítani.

Ez a folyamat már régóta spontán módon zajlik. Néha előfordulnak incidensek: például az "Esküvői szertartás"-ban a kettős néha váratlanul többes számra cserélődik, a modern akatistákban pedig következetlenül használják.

Hogyan vesz részt az oktatásban különböző nyelvek Isteni gondviselés?

- A nyelv az emberi akarattól függetlenül létezik. Egy személy létrehozhat eszperantót, de a természetes nyelvek saját törvényeik szerint léteznek.

Cirill és Metód felülről ihletett, de az akkoriban létező modell szerint is fordítottak egyházi szláv nyelvre.

Az apostolok felülről ihletve, görögül írták le az evangéliumokat, lefektették az evangélium lefordításának ötletét.

Felkészítő: Daria Mendeleeva

Fotó: Dmitry Kuzmin

Az iskolákban az algoritmizálás alapjainak tanulmányozására az ún. iskolai algoritmikus nyelv (oktatási algoritmikus nyelv), a tanuló számára érthető orosz nyelvű szavakat használva. A legtöbb programozási nyelvtől eltérően az algoritmikus nyelv nem kötődik a számítógép architektúrájához, nem tartalmaz részleteket a gép felépítésével kapcsolatban.

Példák

Az algoritmus nyelvén az algoritmus általában a következő formában íródik:

alg algoritmus neve (argumentumok és eredmények) adott algoritmus alkalmazhatósági feltételei szükséges az algoritmus célja korai köztes értékek leírása | parancsok sorozata (algoritmus törzse) con

Az algoritmus feljegyzésében a kulcsszavakat általában aláhúzva vagy félkövérrel szedték. A logikai blokkok kiemelésére behúzásokat használtak, a blokk elejének és végének páros szavait függőleges vonallal kötötték össze.

Példa a négyzetösszeg kiszámítására:

alg Négyzetek összege ( arg ép n, vágott ép S) adott| n> 0 szükséges| S = 1 * 1 + 2 * 2 + 3 * 3 + ... + n * n korai épén | bemenet n; S: = 0 | nts i-re 1-től n-ig | | S: = S + i * i | kts | következtetés"S =", S con

E-műhely

Az algoritmikus nyelvű programozás elméleti tanulmányozásának megerősítésére a Moszkvai Állami Egyetem Mechanikai és Matematikai Karának szakemberei 1985-ben létrehoztak egy szerkesztő-fordítót. "E-műhely"("E" - Ershov tiszteletére), amely lehetővé teszi a programok bevitelét, szerkesztését és végrehajtását algoritmikus nyelven.

1986-ban az "E-workshop" számára megjelent az oktatási világok (előadók) készlete: "Robot", "Draftsman", "Two-leg", "All-terrain vehicle", amelyek lehetővé teszik a fogalmak egyszerű bemutatását. az algoritmus. Az "E-workshop" számítógépeken valósult meg: Yamaha, Corvette, UKSC, és széles körben elterjedt.

Ezt a programozási nyelvet folyamatosan finomították, és az "E-workshop" későbbi változatának leírása jelent meg az 1990-es tankönyvben. A "Kumir" ("Oktatási világok halmaza") programozási rendszert, amely ezt a tankönyvet támogatja, az "InfoMir" cég adta ki 1990-ben. Ennek a rendszernek a nyelvét Kumirnak is nevezik.

1995-ben az Orosz Föderáció Oktatási Minisztériuma a „Kumir”-t ajánlotta az „Informatika és számítástechnika alapjai” kurzus fő tananyagaként A. G. Kushnirenko, G. V. Lebedev és R. A. Svoren tankönyvei alapján. ...

Kritika

Megjegyzendő azonban, hogy egy algoritmikus nyelv – a számítógép architektúrájával közvetlenül összekötő részletek hiányában – az Algol-szerű nyelvekre hivatkozva implicite arra tanítja az iskolásokat, hogy a gépek Neumann-architektúrájára támaszkodjanak. (A Neumann-architektúra egy korábbi, Turing-gép elnevezésű ötlet gyakorlati megvalósítása. A Turing-gondolaton kívül más ötletek is léteznek. Ezek közül a legnépszerűbb a Lambda-számítás: Alonzo Church dolgozott rajta. A Lisp-gép egy olyan architektúra, amely a lambda-számításon alapul.)

Linkek

  • A. P. Ershov. Algoritmikus nyelv a számítástechnika és számítástechnika alapjai iskolai tantárgyban. 1985.07.05
  • Fórum az orosz programozási nyelvekről és fejlesztőeszközökről

Wikimédia Alapítvány. 2010.

Nézze meg, mi az "orosz algoritmikus nyelv" más szótárakban:

    Az algoritmikus nyelv egy formális nyelv, amelyet algoritmusok írására, megvalósítására vagy tanulására használnak. Minden programozási nyelv algoritmikus nyelv, de nem minden algoritmikus nyelv alkalmas nyelvként való használatra ... ... Wikipédia

    Ennek a kifejezésnek más jelentése is van, lásd: Sárkány (egyértelműsítés). Példa egy algoritmus blokkdiagramjára a DRAGON nyelvű dragon of a DRAGON séma (Friendly Russian Algorithmic Language That Provide Visibility) vizuális ... ... Wikipédia

    Ennek a kifejezésnek más jelentése is van, lásd Algoritmikus nyelv. Az oktatási algoritmikus nyelv egy formális nyelv, amelyet algoritmusok írására, megvalósítására és tanulására használnak. A legtöbb programozási nyelvtől eltérően nem kötődik a ... Wikipédiához

    Algoritmikus nyelv (más néven orosz algoritmikus nyelv, PARADISE) egy programozási nyelv, amelyet algoritmusok rögzítésére és tanulmányozására használnak. A számítástechnika iskolai tanulmányozásában az ún. iskolai algoritmus ... ... Wikipédia

    Oktatási programozási nyelv Programozási nyelv, amelyet programozási szakemberek oktatására terveztek. Egy ilyen nyelvnek meg kell felelnie a fő követelménynek: az egyszerűségnek. Minél egyszerűbb, annál gyorsabban sajátítja el a kezdő. Az ilyen ... ... Wikipédia lehetőségei

    Példa egy algoritmus blokkdiagramjára a DRAGON nyelvű dragon of a DRAGON séma (Friendly Russian Algorithmic Language That Provides Visibility) segítségével a Buran űrprogram keretében létrehozott vizuális algoritmikus nyelv. Ennek a nyelvnek a fejlesztése ... Wikipédia

KÉRDÉS: Assalam alaikum aha!

Itt akadtam rá erre a cikkre. Ha nem tévedek, fordítva írtad. Ha nem nehéz, ismét hozzászólhat ehhez a cikkhez.

Muszlim.

Az arab a Korán nyelve. Ő volt a kiválasztott a világ összes nyelve között, és rendkívüli tulajdonságokkal rendelkezik. Ez a nyelv Mohamed próféta nyelve is (béke és Allaah áldása legyen vele). Ez a nyelv gazdag, és a világ egyik nyelve sem versenyezhet vele. Lelki és fizikai befolyást gyakorol e nyelv beszélőjére.

Korábban az arabok versmondó versenyeket rendeztek, de amikor a Próféta (s.a.s.) megkapta a Jelenéseket, az arabokat annyira lenyűgözte a nyelv ilyen csodálatos kifejezőereje, sőt egyesek úgy gondolták, hogy a Korán varázslatos hatással van az emberre. Ha valaki ki akarja javítani egy szót vagy betűt a Koránból, az Isteni Könyv teljes harmóniája megsérül. A Korán egyetlen szavát sem szabad megváltoztatni, különben a jelentése és a fonetika megváltozik.

Tudjuk, hogy egyes szavak idővel elavulnak, és nem használjuk őket. És a Korán nyelve 1439 éve nem veszítette el relevanciáját ...

Több mint 10 éve tanítok a Koránról, és a mai napig nem találkoztam egyetlen tanítványommal sem, aki megkérdezte volna: „Miért tanuljuk a Koránt? Honnan jött? Milyen előnyökkel jár? Miben különbözik a balról jobbra olvasástól?" Napról napra növekszik azoknak a száma, akik az arab ábécét és a tajwid szabályait szeretnék tanulni, hogy később az eredetiből olvassák a Koránt. De kevesen gondolkodnak a fenti kérdésekre adott válaszon. És végül, amikor mesélek nekik a Korán előnyeiről, előnyeiről, sokan kezdenek ebbe beleásni magát.

Az arab nyelv 29 betűből áll. A hangok a gége határán, a gége közepén, a mellkasban, a nyelv gyökere és a szájüreg között keletkeznek. Az arab nyelv hangjai "tisztítják" a szájüreget, és kevésbé fogékonyak a betegségekre. Ezenkívül az arab jó logopédus. Meggyógyítja az "r" betű kiejtését és hibás kiejtését. Ez a nyelv a látássérülteket is segíti. Mert az arab szöveg balról jobbra olvasása javítja az ember vizuális apparátusát és ellazítja. A betűk ovális, kerek formája a léleknek is jót tesz.

Az arab ábécé minden betűje mássalhangzó. A magánhangzókhoz nincsenek speciális betűk. Különbséget tesznek rövid és hosszú magánhangzók között. A rövid magánhangzókat írásban magánhangzók - felső és alsó indexek - segítségével közvetítik. Ezenkívül a 28 betűből 22 betű van összekötve mindkét oldalon, és 6 betű csak a jobb oldalon.

A Korán 23 éve torzítás nélkül jutott el hozzánk. A Korán az utolsó isteni könyv, és nem lesz más könyv utána. Leküldték az egész emberiséghez. A Korán törvényei érvényben maradnak az ítélet napjáig, és nem változnak. A Korán a Mindenható örök, nagy csodája, Mohamed prófétának (s.a.s.) adatott. A Korán olvasása imádat. Azt tanácsolom mindenkinek, hogy minden nap olvassa el ezt a hihetetlenül csodálatos könyvet, és ismerje meg a jelentését. Siess, hogy megtanulj olvasni és beszélni Teremtőddel. Allah megadja nekünk, hogy Jannat lakói legyünk, és az arab nyelvet beszéljük, amelyet ő maga választott.

Dilyar Bektayeva,

Aktobe regionális ustaz

központi mecset "Nur Kasyr"

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

VÁLASZ: wa aleikum mint salam testvér!

Az ilyenek, a hazai és tudatlan "hamis ustazokat" el kell űzni a muszlimoktól, nehogy félrevezessék őket. Az Aktobe mecsetben ilyen hülyeségeket terjesztenek, és tudatlan tanárokat tartanak, talán ezért van ebben a városban annyi szélsőséges szektás. A Koránban vagy a Szunnában még csak távoli utalás sincs arra, hogy az arab nyelv ezt tenné közös nyelv a Paradicsom minden lakója számára. Gondolja el, hogyan kommunikálnak egymással más nemzetiségek képviselői a Paradicsomban, ha nem ismerik az arab nyelvet ?!

Korábban válaszolt egy hasonló kérdésre:

A DSSP Moskovsky párbeszédes programozási rendszer PARADISE adaptív nyelve Állami Egyetem Számítástechnikai Matematikai és Kibernetikai Kar N. P. Brussentsov, V. B. Zakharov, I. A. Rudnev, S. A. Sidorov, N. A. Chanyshev Moszkva, 1987

A PARADISE nyelvének általános leírása

A nyelvi fejlesztés célja és célja

A PARADISE (Developable Adaptive Language) a Structured Programming Dialogue System DSPP alapnyelve. A Basic azt jelenti, hogy ez az alapja minden további konstrukciónak, amelyet a DSSP-ben az alapnyelv fejlesztésével (bővítésével, megerősítésével) és esetleg a létrehozott ily módon történő adaptálásával végeznek. nyelvi eszközökkel egy adott alkalmazáshoz. Az úgynevezett magas szintű nyelvekkel ellentétben a PARADIS nem kész adattípusokat és műveleteket biztosít, hanem csak elemeket és primitíveket ad a szükséges típusok hatékony meghatározásához. Például az eredeti adatformátumok 8 bites bájtok, 16 bites szavak és 32 bites hosszú szavak, amelyeket a rajtuk végrehajtott műveletektől függően egész számokként, logikai vektorokként, betűkódokként, logikai értékekként, adat- és eljárásmutatókként értelmeznek. Ebben az esetben lehetőség van egyrészt a bájtok és szavak egyes bitjeinek manipulálására, másrészt összetett adategységek (több hosszúságú szavak, vektorok, tömbök, szöveges karakterláncok stb.) kialakítására, a megfelelő műveletek ilyen vagy olyan értelmezési bevezetése számukra. Így bevezethetők a kívánt hosszúságú és értéktartományú valós számok, komplex számok és egyéb objektumok, és a nyelv verziója orientálható adott pályázat, tartalmazni fogja az ebben az alkalmazásban rejlő objektumokat és eszközöket, és nem tartalmazza azt, ami nem kapcsolódik hozzá - a nyelvet az alkalmazáshoz igazítják (igazítják). A DSPP fejlesztése azt a célt követte, hogy széles körben elérhető és hatékony programozási eszközt hozzon létre mikroszámítógépek számára, pl. mikroprocesszoron alapuló számítógépek. A mikroprocesszorok architektúrájának lényeges jellemzője az adattípusok és műveletek elemi jellege, ami egyrészt egyetemességet, másrészt a programozás fáradságosságát jelenti. Sokoldalúságuk miatt az ezek alapján létrehozott mikroprocesszorok és mikroszámítógépek potenciálisan korlátlan alkalmazási lehetőségekkel rendelkeznek. E képességek gyakorlati megvalósítása azonban elsősorban a szükséges alkalmazási programok kidolgozásának fáradságosságán múlik. Ezen túlmenően, kielégítő alkalmazási programok csak az adott alkalmazások sajátosságainak mély és finom ismeretében hozhatók létre, pl. ezeket nem csak programozóknak kell kidolgozniuk, hanem egy-egy terület magasan képzett szakembereinek. Ezért a programozási rendszernek nemcsak nagymértékben növelnie kell a programozói munka termelékenységét, hanem olyan egyszerűnek kell lennie, hogy a nem professzionális programozók is elsajátíthassák és hatékonyan használják.

A probléma radikális megoldása a számítógép-architektúra jelentős egyszerűsítése lenne. De sajnos a mikroszámítógépek architektúrája szöges ellentétes irányba fejlődik - a növekvő komplexitás és kifinomultság útján, így a professzionális programozónak nem könnyű ma tökéletesen elsajátítani a mikroszámítógép-összeszerelő nyelvét. Az olyan rendszerprogramozási nyelvek, mint a C vagy a PL / M, bizonyos mértékig (bár messze nem eléggé) csökkentették a programfejlesztés bonyolultságát, de aligha ajánlhatók a programozásban járatlan embereknek. A széles körben elérhető nyelvnek természetesen egyszerűbbnek és természetesebbnek kell lennie, lehetőleg hétköznapi, megszokott elképzeléseken kell alapulnia a programozás lényegéről és technikájáról.

A DSPP az assembly nyelvű programozáshoz képest a programfejlesztés elérhetősége és összetettségének jelentős csökkenése mellett a nyelv sokoldalúságát, az assembly nyelvével megegyező sokoldalúságát, nagy gépi hatékonyságot (pl. kód), az elkészített programok tesztelhetőségének megbízhatósága, karbantarthatósága.és módosíthatósága, valamint a rendszer és a benne fejlesztett programok mobilitása (hordozhatósága) különböző architektúrájú gépekre.

Eljárási programozás

A programozás a PARADISE nyelvén meglehetősen hasonlít az olyan elterjedt emberi tevékenységtípusokhoz, mint az egymással összefüggő tevékenységek, munkák, folyamatok tervezése és szervezése vagy összetett anyagi objektumok - gépek, egységek, szerkezetek - építése. Mint egy konstruktor, aki a szándékát aggregálva valósítja meg alkatrészek(blokkok, csomópontok, részek), a programozó a nyelv által biztosított egyszerű műveletekből szintetizálja a szükséges összetett műveletet. Úgy is fogalmazhatunk, hogy a programozás (design) az implementálandó objektum fokozatos, egyre kisebb komponensekre való szétbontása.

A Paradicsom nyelvén a fő „konstrukció” egy eljárás – egy elnevezett cselekvés. A nyelv a legegyszerűbb eljárások (primitívek) korlátozott halmazán alapul, amelyeket saját nevükkel (megnevezéseik) képviselnek. Például: + a hozzáadást, a NEG azt jelenti, hogy módosítja a jelet, a VCTR azt jelenti, hogy vektort hoz létre. Különösen vannak primitívek: és; (kettőspont és pontosvessző), lehetővé téve új eljárás bevitelét, például P névvel, P1, P2, ..., PN eljárások sorozataként definiálva a formában

: P P1 P2 ... PN;

Ha a P eljárás azt a műveletet jelöli, amelyet a létrehozott programnak végre kell hajtania, akkor ennek a programnak a PARADISE nyelv segítségével történő felépítése a P1, P2, ..., PN eljárások szekvenciális részletezésére redukálódik. Ez azt jelenti, hogy ezen eljárások mindegyikét kisebb eljárások sorozatával kell meghatározni, amelyeket aztán még kisebb eljárások sorozatai határoznak meg, és így tovább, amíg csak primitívekből álló definíciókat nem kapunk.

A programnak ezt a tervezését, amely egy adott célból indul ki, és fokozatosan csökkenti az általa használt eljárásokat a nyelv magjáig, felülről lefelé irányuló programozásnak nevezzük. Ez a fő módja a PARADISE nyelvű programok beszerzésének egyéni, jól definiált problémák megoldására. Ennek ellentéte az alulról felfelé építkező programozás – a nyelv alapvető eszközeire épülő, fokozatosan bővített eljárások rendszerének felépítése, amely egy bizonyos problématerületre fókuszál. Ezáltal a nyelv fejlesztése és egy adott alkalmazáshoz való adaptálása valósul meg.

Mindkét esetben elengedhetetlen az elkészített programok alapos strukturálása: minden programnak és minden programrésznek kis számú különálló részből kell állnia, amelyek mindegyike meghatározott funkciót lát el, és lehetővé teszi az autonóm ellenőrzést. A PARADISE nyelvezetében ez különösen azt jelenti, hogy az eljárások definíciói legyenek rövidek: a definiáló sorozat általában nem tartalmazhat 5-7 tagnál többet. A strukturálás biztosítja a program áttekinthetőségét, ellenőrizhetőségét és módosíthatóságát, jelentősen csökkenti létrehozásának és karbantartásának bonyolultságát.

A P eljárás meghatározásának fenti példája leegyszerűsített. Valójában a definiáló sorozat tagjaiként nemcsak eljárások neveit, hanem több szóból álló utasításokat (parancsokat) is tartalmazhat. Az eljárásnév, ha más szavakkal való kombináción kívül használjuk, az általa kijelölt eljárás végrehajtására szolgáló parancs. Az eljárásnevek sorrendje határozza meg ezeknek az eljárásoknak a végrehajtását egymás utáni nevük sorrendjében (lineáris sorrendben). Más végrehajtási szekvenciák beállításához a PARADISE biztosít különleges szavak(előtagok), előírva a velük együtt megnevezett eljárások végrehajtását a megadott feltételtől függően, valamint az eljárás ismételt (ciklikus) végrehajtását.

Például egy P0 P1 lineáris sorozat P0 eljárást, majd P1 eljárást hajt végre. Ha a P1 eljárást nem mindig kell végrehajtani, hanem inkább azt, hogy P0 végrehajtása eredményeként pozitív számot kapunk, akkor P1 helyett a végrehajtási parancsot a következő feltétel szerint írják: HA + P1, azaz. P0 P1 helyett P0 IF + P1 lesz. A PARADISE tartalmaz egy sor előtag-feltételt, amely lehetővé teszi a feltételes végrehajtás hatékony kifejezését, valamint két, három vagy több eljárás közül választhat.

Az eljárás többszörös végrehajtását az RP előtag adja meg. Tehát az RP P parancs újra és újra meghívja a P eljárás végrehajtását mindaddig, amíg létre nem jönnek azok a feltételek, amelyek mellett az eljárás törzsében található EX aktiválódik - kilépés a hurokból, majd a következő parancs végrehajtása lineáris sorrendben . A ciklusból való kilépés feltétele lehet például valamely X változó nullával való egyenlősége, amelyet a következőképpen fejezünk ki:

Azt az eljárást, amelynek neve egy másik eljárás definíciójában szerepel, beágyazottnak nevezzük. Egy beágyazott eljárás, ha nem primitív, viszont tartalmazhat beágyazott eljárásokat, pl. a fészekrakás többféle lehet. Ezen túlmenően a PARADISE nyelv szabályai nem tiltják, hogy a definícióban szerepeljen egy saját elnevezésű eljárás, vagy egy ilyen nevet tartalmazó eljárás neve, pl. A PARADISE lehetővé teszi a rekurziót.

Az ismételten végrehajtott eljárás többszörösen végrehajtott eljárásba is beágyazható. Ebben az esetben a hurkok egymásba vannak ágyazva. A PARADISE lehetővé teszi a hurkok többszörös egymásba ágyazását.

Parancsok lineáris sorrendje, egymásba ágyazás, eljárások feltételes és ciklikus egymásba ágyazása – ez kimeríti a PARADISE nyelvű programok felépítésének lehetőségeit. Ezen eszközök szűkössége, homogenitása és természetessége garancia a nyelv könnyű elsajátítására és használatára. Ugyanakkor ez egy szigorúan felépített programozási nyelv, amely jelentősen csökkenti a fejlesztési munkaintenzitást és a program megbízhatóságát.

Eljárások és adatok

Mindaz, ami eddig elhangzott, a PARADISE nyelvének sajátossága, mint a cselekvések előírásának eszköze, amely primitív műveletek véges halmazából tetszőleges cselekvéseket konstruál. A nyelv másik oldalát azok az objektumok reprezentációs eszközei képviselik, amelyeken műveleteket hajtanak végre - az adatok megjelenítésének és rendszerezésének eszközei.

Rendkívül egyszerű adatelem egy kétjegyű elem - egy kicsit. Minden más formátum és adattípus bitekből épül fel. A PARADISE nyelvben a 8 bites bájt, a 16 bites szó és a 32 bites hosszú szó elfogadott alapformátumként. A rajtuk végrehajtott műveletektől függően a bájtok, szavak és hosszú szavak sokféle értelmezést engednek meg, pl. alapul szolgálhat különböző típusok adat. Ezek a kiindulópontok az összetett formátumok és típusok kialakításához is.

Valójában a PARADISE nem tartalmaz sem egyszerű, sem összetett adattípusokat – csak alapvető formátumok (byte, word, long word) vannak, és ezekből összetett formátumok készítésére szolgáló eszközök: vektorok és többdimenziós tömbök. Ebben az esetben ugyanazok a bájtok (szavak, hosszú szavak) a rajtuk végrehajtott műveletektől függően bitvektorokként, vagy előjellel és előjel nélküli bináris egész számokként, vagy a bemeneti / kimeneti ábécé betűiként, stb. . Az adattípusok és a hozzájuk tartozó megszorítások és ellenőrzések bevezethetők a problémaorientált nyelvi kiterjesztésekbe.

Az adatnevek deklarálása az alapnyelven csak azt a funkciót látja el, hogy név szerint hozzáférést biztosítson az adatokhoz: a névhez a deklaráció által igényelt memóriacellák száma és az ezek elérésének mechanizmusa kapcsolódik. A tesztelési és átalakítási műveletek közvetlenül nem alkalmazhatók elnevezett adatokra. Ezeket a műveleteket az operandusverem határozza meg, amely 32 bites szavak (veremelemek) sorozata, amelyet dinamikusan módosítanak új elemek hozzáadásával (tolásával) a végéhez, valamint az azonos végű elemek eltávolításával (a veremből kilépve). ). Az elemek visszavonása a küldésükkel fordított sorrendben történik: először azt vonják vissza, amit az utolsó küldött. A tesztelendő vagy konvertálandó adatok a verembe kerülnek, ahol elvégzik rajta az előírt műveleteket, majd a feldolgozási eredményeket ki lehet pattintani a veremből.

Például, ha van egy X változó 32 bites szóként deklarálva, akkor csak két művelet hajtható végre rajta közvetlenül:

1) értékét a verembe tolja, ami automatikusan megtörténik minden alkalommal, amikor az X nevet említik,

2) hozzárendelés a parancs által! Az utolsó (felső) elem X értéke kikerült a veremből.

Ha mondjuk meg szeretné duplázni X értékét azzal, hogy hozzáadja önmagához, akkor ezt a következő parancsok egymás utáni végrehajtásával teheti meg:

Az X értékből két példány kerül a verembe, majd a + parancs kidobja őket, hozzáadja és a kapott mennyiséget a verembe tolja, majd a parancsot! X eltávolítja ezt az összeget, és az értékét az X változóhoz rendeli.

Az adott példa magas szintű nyelveknél szokásos jelölése X formában: = X + X jobban ismert a programozó számára, de nem közvetlenül tükrözi a processzor által végrehajtott utasítások sorozatát, hanem egy olyasmi matematikai képlet... Számítási feladatok programozásakor ez kényelmes, de az alapnyelvben fontosabbnak tűnik a végrehajtott parancsok egyértelmű megfeleltetése, mivel a program közvetlenül a programozási nyelvben paranccsal ellenőrizhető, és nincs szükség nyelvtudásra. a processzor nyelvén kívül egyáltalán.

De a halmozott adatfeldolgozás különösen értékes előnye, hogy a tesztelési és átalakítási rutinok az adatoktól függetlenül határozhatók meg és implementálhatók. A tesztelési és transzformációs műveleteket nem az adatazonosítókra (vagy konstansok és változók neveire, formális paraméterekre) tekintettel fogalmazzuk meg, hanem a verem elemeire tekintettel, amelyekhez a művelet időpontjára hozzá kell rendelni az operandusok értékét. előadott. Például a + (add) paranccsal végrehajtott két szám összeadásának művelete abból áll, hogy a verem legfelső két elemét (top és sub) összegzőként kivesszük, összegüket kiszámítjuk, és a verembe toljuk. Két szám hozzáadásához az értékeiket a verembe kell tolni, és végre kell hajtani a + parancsot, az eredmény a verem tetején lesz.

Egy tetszőleges számú bemeneti és kimeneti paraméterrel rendelkező teszt-transzformációs eljárás ily módon egyszerűen egy névvel ellátott műveletként (paraméterlista nélkül) definiálható, amely az argumentumértékeket az előírt sorrendben tartalmazó veremen és végrehajtás után hajtja végre. - az eredmények értékei. Ahhoz, hogy egy ilyen eljárást egy adott adathalmazra alkalmazhassunk, ezeket az adatokat a megfelelő sorrendben a verembe kell helyezni. Elfogyasztásuk után az eljárás a veremben hagyja eredményeit (szintén meghatározott sorrendben).

Más szóval, az eljárások nevei a PARADISE nyelvben ugyanúgy használatosak, mint a műveletek jelei, és lényegében tetszőleges számú operandust tartalmazó műveletek szimbólumai. A verem működési elvének megfelelően a műveleteket postfix formában írjuk, azaz. a művelet neve az operandusok nevének vagy értékeinek felsorolása után kerül elhelyezésre. Például, ha a három szám összegének megszerzésének műveletét a ++ szimbólummal jelöli, akkor az A, 5 és B számok összege a következőképpen lesz kifejezve:

Lehetne egy postfix nyelv formális szabályait megállapítani, és ezek alapján vezérelni a programok írásakor, de az embernek könnyebb és biztonságosabb nem szabályokkal, hanem egy veremprocesszor modelljével bánni, pl. annak a gépnek a modelljével, amelyre a programokat létrehozzák, és amelyik végrehajtja azokat. A PARADISE nyelv esetében ilyen gép a DSPP-processzor - hardver- és programkészlet, amely végrehajtja az ezen a nyelven előírt műveleteket.

DSP processzor

Fizikailag a DSPP-processzor olyan egyszerű és hatékonyan programozható architektúrájú mikroprocesszor formájában valósítható meg, amely lehetővé teszi a mikroszámítógépek szoftverfelszerelési problémáinak legjobb megoldását. Ilyen mikroprocesszort azonban még nem hoztak létre, és az architektúráját emulálni kell a meglévő mikroszámítógépeken, hogy javítsák a programozhatóságukat. Természetesen az emuláció költséges – a megvalósítása memóriát és gépi időt igényel, de PRSP processzor emulációja esetén ezek a költségek viszonylag kicsik.

A programozó szemszögéből a processzor jellemzője az architektúrája, azaz. információt arról, hogy mi az adott processzor, mint adatfeldolgozó eszköz, milyen lehetőségei vannak az adatok megjelenítésének a bemeneten és a processzoron belül, milyen tesztelési és adatkonverziós műveletek állnak rendelkezésre, hogyan szerveződik a processzor saját memóriája, valamint hozzáférés a fő és a külső memória, mik a vezérlők a program menete, interakció a külső környezettel, reagálás rendkívüli eseményekre stb. Az architektúra elsajátítása annyit jelent szükséges feltételértelmes (informális) programozás, amely jelentősen csökkenti a hibák számát és növeli a programok megbízhatóságát.

A DSPP processzor központi linkje a fent említett operandusverem. Magában a veremben történik a feldolgozás, és általában az adatok átvitele a veremen keresztül történik. Egyedi parancsok és rövid parancssorozatok a verem felett végrehajthatók úgy, hogy közvetlenül a terminál billentyűzetéről táplálják a processzor bemenetére. Ebben az esetben a DSPP processzor egy postfix számológép működését szimulálja. A billentyűzetről beírt műveletek számok és mnemonikus kódjai szóközzel vannak elválasztva. A beírt szöveg karakterláncként jelenik meg a terminál képernyőjén. A bemeneti végjel és a processzornak küldött parancs: "Végezze le a beírt előírást" a gomb megnyomása , szintén jelölve , ... A processzor bemenetére érkező számok a verembe kerülnek, a parancsok a verembe kerülnek. A verem tetején kapott számítási eredmény a paranccsal a terminál képernyőjére másolható. (pont).

Például a (2-5) * 3 kifejezés kiszámításához és az eredmény megjelenítéséhez írja be:

2 5 - 3 * .

A gomb megnyomása után a processzor kiadja az eredményt, így az egész sor így fog kinézni

* 2 5 - 3 * . -90

A sor elején egy csillagot ad ki a processzor annak jelzésére, hogy bevitelre vár.

A vizsgált példában a processzor a bemeneti számokat egész tizedesjegyekként érzékelte és dolgozta fel. Valójában beíráskor ezeket a számokat a bináris komplementerre, a kiíráskor pedig a decimális rendszerre konvertálták vissza. A PRSP processzor bináris, oktális és hexadecimális I/O módokat is lehetővé tesz. A kívánt módra váltáshoz a B2, B8, B10, B16 parancsok valamelyikét kell végrehajtani.

A gombok megnyomásával a processzor bevitele a billentyűkön jelzett betűket (betűket, számokat, írásjeleket, műveleti szimbólumokat) reprezentáló kódokat adja meg. A bemeneti karakterek sorozata egy bemeneti karakterláncot alkot - egy bájtláncot, amely a karakterek kódjait tartalmazza, karakterenként egy bájttal. Egy bemeneti karakterlánc maximális hossza 80 karakter.

A bemeneti karakterlánc feldolgozása során a processzor elkülöníti a benne lévő szavakat - szóközökkel elválasztott betűkombinációkat, és értelmezi azokat. Ha a feldolgozott szó egy művelet (eljárás) vagy egy adott, a processzor által ismert neve, akkor a processzor olyan műveleteket hajt végre, amelyeket definíció szerint ezen a néven kell megnevezni. Ha a szót a processzor nem ismeri, akkor megpróbálja számként értelmezni, figyelembe véve a beállított I / O módot.

A számokat a rendszer olyan szavakként ismeri fel, amelyek egy adott számrendszerben megengedett számjegyekből állnak, és esetleg mínusz jelet tartalmaznak első betűként. A hexadecimális bemeneti/kimeneti módban a számokkal együtt a latin A, B, C, D, E, F betűk is érvényesek. A kapott szám bináris komplement kódjává alakul, és 32 bites formában kerül az operandus verembe. szó. Ebben az esetben, ha a szám értéke kívül esik az ábrázolható értékek tartományán -2147483648: 2147483647, akkor a 2 ** 32 modulusban összehasonlítható értékkel helyettesítjük ebből a tartományból.

Abban az esetben, ha a feldolgozott szót a processzor nem ismeri, és nem fogadható el számként, a processzor egy üzenetet jelenít meg a terminál képernyőjén: "Nem tudom<обрабатываемое слово>"és várja a további receptek felírását.

Az adatbevitel szabad szöveg formájában (byte-betűk sorozata) szövegliterálok formájában történik, amelyek idézőjelek közé vannak zárva, például: "Szöveg literál". Ha egy szövegliterál bemenetként érkezik a processzorhoz, az idézőjelek közé zárt szöveg bájtbetűkből álló karakterláncként kerül a fő memóriába. Ebben az esetben az első bájt címe és a bájtok száma (szöveghossz) a verembe kerül. A pont előtti szöveges literált a processzor úgy értelmezi, mint "az idézőjelek közötti szöveget elküldi a terminál képernyőjére". Például, ha a szimbólumkombinációt betáplálja a processzor bemenetére. "Nincs memória" a következő üzenetet eredményezi: Nincs memória jelenik meg a képernyőn.

Egy egyedi karakter kódja a vertex legkevésbé jelentős bájtjaként kerül a verembe, amikor ez a karakter a processzor bemenetére érkezik a neki előre küldött # jellel együtt. Például az #L karakterkombináció az L betűs kódot küldi a verembe, az 5-ös karakterkombináció az 5-ös szám kódját. A TOB parancs egy bájtot a terminálhoz egy olyan karaktert jelenít meg, amelynek kódja az alsó részben található. bájt a verem tetején.

A PRSP processzor még a parancsok közvetlen végrehajtásának módjában is messze felülmúlja a hagyományos számológépek képességeit, és az adatfeldolgozási műveleteken túlmenően olyan eszközöket is biztosít a felhasználó számára, amelyek segítségével a nevesített adatok deklarálhatók és eljárások definiálhatók, amelyek azután az alapműveletekkel együtt használhatók. tevékenységek. Az adatnevek deklarálása és az eljárások meghatározása speciális parancsokkal történik.

Például egy 16 bites TEMP nevű változó létrehozásához gépelje be a billentyűzetre, és a billentyűvel vigye be a processzor bemenetébe. parancs

VAR TEMP

A deklarációval együtt kezdőértéket is rendelhet a változóhoz, például 0:

VAR TEMP 0! TEMP

Most, hogy a TEMP név megérkezik a processzor bemenetére, ennek a változónak az aktuális értéke kerül a verembe, és a veremből kiugró új érték hozzárendelése végrehajtható a paranccsal! TEMP.

Az eljárás definícióját egy parancs adja meg: (kettőspont), amely tartalmazza a definiálandó eljárás nevét és egy parancsláncot határoz meg egy betűvel; (pontosvessző) a definíció végének karaktereként. Mutassuk be az eljárások meghatározását és használatát a faktoriális számításának példáján! természetes szám N a képlet szerint

N = N * (N-1) * (N-2) * ... * 2 * 1, azaz. N-1 szorzás.

Az FCT eljárásnak a kívánt eredmény eléréséhez meg kell szoroznia a megadott N számot egymás után csökkenő számokkal, N-1-től 1-ig kezdve, azaz. csak N-1 alkalommal. A PARADISE nyelvben ez a P eljárás t-szeres végrehajtásával van programozva: DO P, ahol P az eljárás neve, t a verem tetejének aktuális értéke, amely azt jelzi, hogy a P eljárásnak hányszor kell ki kell végezni.

Tegyük fel, hogy az FCT eljárás alkalmazása előtt az N számot a verembe toljuk, és annak tetején van. Az eljárás egyértelműbbé tétele érdekében a K változó módosítható szorzóját ábrázoljuk:

Az FCT eljárás meghatározását a következő formában mutatjuk be:

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

A szögletes zárójelben lévő megjegyzések az operandusverem aktuális állapotát tükrözik. Csapat! K, amellyel a definiált eljárás kezdődik, hozzárendeli a veremből vett N szám értékét a K változóhoz. Ekkor K kétszer kerül a verembe, és a verem tetején lévő 1-ből kivonva a verem végrehajtásainak száma az N-1-gyel egyenlő F ismételt eljárás jön létre. Ezt követi a DO F parancs, amely előír egy ciklust, amely után a verem tetején lesz a szükséges faktoriális érték - N !. Csapat. (pont) ennek az értéknek a másolatát nyomtatja ki a terminál képernyőjére. Marad az F eljárás definiálása, amely a K értékét 1 kivonásával módosítja, és a veremben található R. számításának részeredményét K-val megszorozza:

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

Mindkét eljárás helyességének ellenőrzése a definícióik egyenkénti végrehajtásával történik, minden parancs után a terminál képernyőjén megjelenítve az operandusverem tartalmát és a K változó értékét Az FCT eljárás befejeztével a felső a veremnek tartalmaznia kell az N ! értéket, a K változó értékének pedig egyenlőnek kell lennie 1-gyel.

Az ellenőrzött és kijavított eljárások (ha az ellenőrzési folyamat során hibát észleltek) az N szám egyedi értékeire történő alkalmazásával tesztelik. Mivel az F eljárás az FCT-be van beágyazva, az utolsó tesztelési folyamat során automatikusan tesztelésre kerül. Nem szabad megfeledkezni arról, hogy az eredmény értéke nem haladhatja meg a komplementkódban egy 32 bites szó által képviselt maximális pozitív számot: 2147483647, azaz. Az FCT csak N = 1, ..., 13 esetén ad helyes eredményt.

Az FCT használata nem különbözik a processzor saját utasításainak használatától: az eredmény eléréséhez be kell állítani az operandus értékét, és meg kell adni az eljárás nevét:

5 FCT 120

7 FCT 5040

Az FCT eljárás fenti megvalósítása megkövetelte egy K segédváltozó bevezetését, azonban egy funkcionálisan ekvivalens eljárás segédváltozó nélkül is végrehajtható a C művelettel, amely a csúcsának másolatát a verembe tolja, valamint az E2 műveleteket. és E3, amelyek felcserélik a csúcsot a verem második és harmadik elemével. Ennek az eljárásnak a meghatározása a következő.

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

: FA C E3 * E2 1-;

Az ilyen "tisztán verem" eljárás előnye a teljes autonómia: a processzor alapvető veremműveleteihez hasonlóan csak az operandusveremen hajtódik végre, anélkül, hogy további memóriát igényelne, és nem okozna semmilyen változást a processzor többi komponensében.

A definiált eljárások nevei és a deklarált adatok bekerülnek a processzor szótárába, amely létrehozza ezeknek a neveknek a kapcsolatát a megnevezett objektumokkal, azaz a fő memóriában található eljárástestekkel és ennek a memórianak a számára lefoglalt elemeivel. a bejelentett adatok tárolása. A bemeneti adatfolyam következő szójának feldolgozása során a processzor átnézi a szótárat, és megtalálva benne a megfelelő szót, végrehajtja a szóhoz kapcsolódó műveleteket. Ha a keresés nem járt sikerrel, akkor, mint már említettük, megkísérlik a szót számszerűen értelmezni, és ha ez nem sikerül, akkor üzenet következik, hogy a processzor nem ismeri a szót.

Egy eljárásdefiníció összeállítása eredményeként a szótárba bekerül ennek az eljárásnak a neve és törzsének mutatója (címe), amely a definíciót alkotó eljárásokra és adatokra mutató mutatósorozat. Vagyis az eljárástörzs belső reprezentációját úgy kapjuk meg, hogy a definíciójában szereplő eljárások és adatok neveit a megfelelő testek mutatóira cseréljük, amelyek viszont ugyanazok a mutatósorozatok, primitívek esetén pedig láncok. gépi utasításokat. Ezt a program belső reprezentációját eljárási kódnak nevezzük.

Amikor a P eljárás definícióinak összeállításával együtt a processzor által korábban ismeretlen összes beágyazott eljárás definícióit összeállítjuk, akkor a mutatók teljes hierarchiája jön létre, amely lehetővé teszi a P eljárás végrehajtását úgy, hogy csak a nevét adja meg a processzornak. a processzor bemenet. Ebben az esetben a P definíciójához kapcsolódóan összeállított beágyazott eljárások nevei, ha ezekre az eljárásokra nem kell külön hivatkozni, nincs értelme a szótárban tárolni. Számos esetben tanácsos bezárni a szótár egyik vagy másik részéhez való hozzáférést, így talán csak bizonyos eljárások végrehajtása marad meg.

Az ilyen követelmények teljesítése érdekében a szótár alszótárak gyűjteményeként valósul meg, amelyen olyan műveletek vannak meghatározva, amelyek lehetővé teszik alszótárak és részeik létrehozását és megsemmisítését, nevek törlését, bizonyos alszótárak bezárását és megnyitását. . Minden alszótárnak van egy neve, amelyet a hozzá kapcsolódó parancsokban használnak. Az alszótár nevének $ karakterrel kell kezdődnie, például: $ PRIME, $ EDIT, $ FLOAT, $ TEXTPROC, $ GRAPHICS.

A DSPP-szavak alapkészletét tartalmazó $ PRIME alszótár a processzor elindítása után nyitva áll mind a benne található szavak eléréséhez, mind az új szavakkal való feltöltéshez. A FORGET $ PRIME paranccsal a benne beírt új szavak szükség esetén a hozzájuk tartozó törzsekkel együtt törölhetők. Ezt követően a GROW $ PRIME parancs végrehajtása biztosítja a további szavak bevitelét ebbe az alszótárba, amely lehetővé teszi a $ PRIME alszótár ismételt növelését, és a FORGET $ segítségével minden, ami benne van, újra törölhető. PRIME parancs stb. Ebben a módban a PRIME kis programtöredékekkel, egyedi példákkal, becslésekkel való kísérletezéskor használatos, és ha szükséges, új szavakat is beiktat a $ PRIME alszótárba a rendszernyelv fejlesztési sorrendjében.

Külön program készítése esetén saját szótárt készítenek hozzá, és ezt úgy érik el, hogy a program szövege a paranccsal kezdődik.

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

Az ember ezt a parancsot fejlécként érzékeli, amit egy megjegyzés követ szögletes zárójelben, amely néhány szóban jellemzi a program által megvalósított funkciót. A processzor számára ez egyenértékű egy parancssorozattal

FELEJTS EL $<имя>NÖVEKEDNI $<имя>

Ezért a programszöveg minden egyes megérkezése a processzor bemenetére annak törlését okozza. előző verzióés megnyitja az így megtisztított szókincset a belépéshez új verzió ugyanazt a nevet viselő program. Ez kényelmes a létrehozott program korrekcióinál, valamint a jövőbeni módosításoknál.

Az elkészített program szövege nem közvetlenül a billentyűzetről kerül be a processzor bevitelébe, hanem a szövegszerkesztő pufferében formálódik. Az E parancs (Edit) beállítja azt a szerkesztési módot, amelyben a billentyűzetre beírt szavakat a processzor már nem azonnal végrehajtandó parancsként érzékeli, hanem egyszerűen a pufferbe írt szöveg, és egyidejűleg megjelenik a képernyőn. Az aktuális pozíciójelző (kurzor) képernyőn történő mozgását vezérlő speciális billentyűk, valamint más gombok lenyomásával adott szerkesztési parancsok segítségével a beírt szöveg javítható, módosítható, törlések, beszúrások, töredékeinek átvitele. helyről helyre stb.

Szövegbevitel és szerkesztés végén a szerkesztő kikapcsolása az E gomb és az előzőleg lenyomott gomb egyidejű megnyomásával történik. , és a rendszer a DSPP parancsok fő üzemmódjába lép. Egy hasonló műveletet egyszerűen egy billentyű lenyomásával hívunk meg ... Ebben a módban a szerkesztő puffer tartalma a PF (PerForm - execute) paranccsal küldhető a processzor bemenetére. Ez végrehajtja a szövegben található összes parancsot, különösen a PROGRAM $ parancsot<имя>törli az alszótárba beírt $-t<имя>ennek a parancsnak az utolsó végrehajtása óta az adatok és eljárások nevei, valamint a megfelelő törzsek, újból megnyitva ezt az alszótárt kiegészítés céljából. Az adatdeklarációs és eljárásdefiníciós parancsok az általuk beírt neveket, mutatókat az ezekkel a nevekkel jelölt adatokra és a definíciók szerint összeállított eljárási szervekre helyezik.

A letöltés befejeztével az eljárások és adatok a billentyűzetről begépelt nevükkel hivatkozásként elérhetőek, a program helyességét pedig az eljárások növekvő sorrendben történő végrehajtásával ellenőrizheti, pl. kezdve azokkal, amelyek definíciói nem tartalmaznak ellenőrizetlen eljárásokat. Az ellenőrzés megkezdése előtt célszerű megbizonyosodni arról, hogy a programban nem szerepelnek definiálatlan nevek. A processzor az UNDEF paranccsal megjeleníti őket a képernyőn. A programszöveg e nevek definícióival való feltöltéséhez, valamint az ellenőrzés során észlelt egyéb hibák kijavításához az E paranccsal hívjuk be a szerkesztőt és végezzük el a program forráskódjának megfelelő módosítását a szerkesztő pufferében, majd váltsunk a processzort fő módba, és töltse be a puffer tartalmát a PF paranccsal.

A program ellenőrzése és tesztelése után a forráskódja a szerkesztő pufferéből a lemezre másolható az OE f paranccsal, ahol f annak a fájlnak a neve, amelynek formájában a program a lemezre kerül. A jövőben a fájl tartalma a LOAD f paranccsal betölthető a processzor bemenetére, illetve az IE f paranccsal a benne lévő szöveg kiegészítéseként a szerkesztő pufferébe is másolható. Alapértelmezés szerint a fájlok kiterjesztése .dsp. A puffer előzőleg a KE paranccsal törölhető. Lehetőség van a puffer tartalmának kinyomtatására az LPE paranccsal is.

A program betöltése után, készen a végrehajtásra, lehetőség van a létrehozott szótár $ tisztítására<имя>a CLEAR $ paranccsal<имя>... Ezt a parancsot végrehajtva a processzor eltávolítja a nem véglegesített neveket a megnevezett alszótárból, pl. minden név, kivéve azokat, amelyek :: (két kettőspont) előtaggal rendelkeznek a definícióik előtt. Ebben az esetben csak maguk a nevek (szótári bejegyzések) törlődnek, és a hozzájuk tartozó eljárások és adatok törzsei mentésre kerülnek és a fordítás során létrehozott belső hivatkozások segítségével elérhetők a program végrehajtása során, de ezek kívülről már nem elérhetők. A kívülről való hozzáférés visszaállításához, például ha valamilyen kiegészítést vagy változtatást kell lefordítani, újra kell tölteni a program forráskódját.

A nevek kívülről elérhetetlenné tehetők anélkül, hogy eltávolítanák őket a szótárból a SHUT $ paranccsal<имя>, bezárja a hozzáférést a megnevezett alszótár összes szavához. A szótár megnyitása a szavai használatához a USE $ paranccsal történik<имя>... Van CSAK $ parancs is<имя>, amely bezárja az összes alszótárt, kivéve a megnevezettet, és a CANCEL parancsot, amely megszünteti ezt a korlátozást. A felsorolt ​​parancsok lehetővé teszik a szótár használatának szabályozását a fordítás során, valamint a program felhasználója számára elérhető névkészlet minimálisra korlátozását.

A név keresése a szótárban úgy történik, hogy a szavait a szótárba beírt sorrendben fordított sorrendben nézzük meg, pl. az utoljára beírttal kezdve. Ezért a szótárban többször meghatározott névre a legfrissebb definíció érvényes. Ha az utolsó definíciót tartalmazó alszótárt bezárjuk, akkor a keresés az első elérhető szótári szócikkig folytatódik, amelyre adott név és a szócikk által jelzett definíció kerül felhasználásra.

Néhány szó az adatbevitelről és -kiadásról. Mint már említettük, a processzor megpróbálja a szótárban nem található futtatható program szavát számként értelmezni, és ha sikerül, ennek a számnak a bináris megfelelőjét a verembe tolja. Egy szám beírása a verembe a TIN paranccsal hajtható végre, amelyhez a beírt számot a billentyűzeten kell begépelni. Vannak olyan parancsok is, amelyek a billentyűzetről bevitt karaktert a verembe tolják: TIB - kijelzővel, TRB - anélkül, hogy ez a karakter megjelenne a képernyőn. Ebben az esetben a betűkódot a verembe tolt 32 bites szó legkisebb jelentőségű bájtja reprezentálja, amelynek a legjelentősebb 3 bájtja nulla.

A köteg tetejének tartalma számként, illetve betűként adható meg. A TON parancs a végrehajtáskor beállított számábrázolási rendszerben az alsor számértékének megjelenítését okozza a kimeneti mezőben, melynek szélességét a csúcs határozza meg. A TOB parancs egy karaktert nyomtat a képernyőre, amelynek kódja a verem tetejének alsó bájtjában található. A kimenetet mindkét esetben az argumentumok veremből való eltávolítása kíséri.

A DSPP processzor rendelkezik egy berendezéssel a külső és belső (parancs) megszakításokhoz, és ezek feldolgozásához a következő eszközöket biztosítja. A külső megszakítások kezelésének eljárása a normál eljáráshoz hasonlóan definiálva van, de az INT előtagot a kettőspont elé tesszük. Egy ilyen eljárás neve a megszakítási vektor címéhez van társítva a következő paranccsal:

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

A parancsmegszakítás egy elnevezett művelet, amely válaszeljárást hív meg. Ennek a műveletnek a nevét a TRAP parancs határozza meg, amely hozzárendeli egy úgynevezett végső válasz eljáráshoz, amelyet abban az esetben hajtanak végre, ha a végső választ nem helyettesíti az ON vagy EON paranccsal egy másik válaszeljárás. Mindhárom parancs formátuma azonos:

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

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

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

Az EON parancs által a hívásnévhez társított eljárás az EON parancsot tartalmazó eljárás törzséből való előzetes kilépéssel és az EON végrehajtáskor előforduló operandus veremmutató értékével hajtódik végre.

PARADISE szintaxis

A PARADISE nyelv ábécéje latin és orosz nyelvet, nagy- és kisbetűket, decimális számjegyeket, matematikai és egyéb speciális karaktereket tartalmaz. Az ábécé elemeit (tagjait) betűknek nevezzük. A betű külső ábrázolása a nyomtatott képe (nyomtatott jel). A PRSP processzoron belül minden nyomtatott karaktert egy bájt képvisel, amelynek értéke ennek a karakternek a bináris kódja. A külső ábrázolás belsővé alakítását és fordítva a beviteli / kimeneti eszköz (billentyűzet, kijelző, nyomtató) végzi. Az egyszerűség kedvéért a kód számértékét decimális, hexadecimális vagy oktális rendszerben adjuk meg, a megfelelő számot decimális, hexadecimális vagy oktális betűkódként nevezzük el.

A Paradicsom nyelvének minden tárgya betűkből épül fel, és véges hosszúságú betűk lineáris láncait, úgynevezett szavakat képviseli. Az egymást követő szavak elválasztója egy nem nyomtatható karakter (szóköz). A szóközök karakterlánca ugyanaz, mint egy szóköz. Ezenkívül a szóelválasztó funkcióját az "Ugrás a következő sor elejére" parancs látja el, amelyet a beviteli eszközök billentyűzetén a szimbólum jelöl. vagy és a betűkkel együtt belső kód-byte-os ábrázolása van. Így nincs szükség elválasztó szóközökre a sor elején és végén.

Példák a szavakra: CLEAR NOP STEK2 & 1+ -366 X Sample.

A DSPP processzor az első hét betű alapján különbözteti meg a szavakat, és a szótárában szereplő szavakkal való polimer összehasonlítással azonosítja őket. A szótár olyan szavakat tartalmaz, amelyek a processzor saját műveleteinek nevei (megnevezései), amelyeket alapműveleteknek vagy primitíveknek neveznek, és kiegészíthetők a felhasználó által definiált objektumok (adatok, eljárások) neveivel. Így a szótárban szereplő szavak vagy műveletek (műveletek, eljárások), vagy adatok (konstansok, változók, tömbök) nevei.

Ha nincs felismerhető szó a szótárban, a processzor megpróbálja hozzárendelni a következő esetek egyikéhez:

    numerikus literál, azaz. számsor, amely esetleg mínuszjellel kezdődik, például: 0, 4096, -25;

    literális karakter: # karakterrel kezdődő szó, amitől a processzor a közvetlenül következő karaktert kapja adott kódként, például: #A - latin nagybetű A literál, # 5 - számjegy 5 literál, # - szóköz szó szerinti, ## - betűk #;

    text literal: tetszőleges szöveg idézőjelbe zárva és szóhatárolókkal elválasztva, például: "Szöveg", "Beviteli fájl N3";

    parancs szöveges üzenet küldésére a kijelzőre: a megjelenített üzenet szövege, balról pont-dupla idézőjel és jobbra dupla idézőjel határolja, szóhatárolókkal elválasztva, például: "A verem üres ";

    megjegyzés: tetszőleges szöveg szögletes zárójelek között és elválasztókkal elválasztva, például:.

A betűk és a kijelzőn megjelenő üzenetek parancsa a DSPP nyelv objektumaiként működnek a szótár által felismert szavakkal együtt, míg a megjegyzéseket a DSPP processzor teljesen figyelmen kívül hagyja - személynek, nem gépnek szánják. Ha a szó nem található a szótárban, és nem kapcsolódik a felsorolt ​​szerkezetekhez, a processzor egy üzenetet ad ki: "Nem tudom<неопознанное слово>".

A # betűknek adott különleges jelentése miatt "és a kombináció". egy szó elején, azaz. az elválasztó után, valamint az "elválasztó előtt" betűt nem szabad a megjelölt helyeken használni a szótárba való felvételre meghatározott szavakban.

A processzor bemenetén lévő szavak sorozata a processzor által végrehajtott utasítások sorozataként értelmeződik. Ebben az esetben háromféle szót különböztetünk meg:

1) önállóan végzett, azaz amelyek egyszavas parancsok (monológok);

2) egy vagy több következő szóval együtt hajtják végre, pl. melyek a két-, három- vagy igekötős parancsok kezdőszavai (előtagjai);

3) a parancs előtti pontosítás vagy egy speciális végrehajtási mód jelzése (előtagok).

A monológok közé tartoznak a literálok, az adatnevek, a legtöbb I/O, a veremben lévő adatok tesztelése és konvertálása, valamint a felhasználó által definiált rutinok. Például: 1987 - numerikus literál, # 5 - számjegy 5 literál, Sémalista - szöveg literál, LENGTH - változó neve, TOB, NEG, +, &,<, = - имена (обозначения) операций, SORT, CONVERT, ЧИСТКА, СНЯТЬ - имена процедур пользователя.

Az előtagok az adatok leírására és az eljárások meghatározására, valamint a megnevezett adatok manipulálására, az eljárások feltételes és ismételt végrehajtására, valamint a szótárkezelésre szolgáló parancsok velejárói. Példák előtagot tartalmazó parancsokra:

VAR SUM – hozzon létre egy SUM változót,

: ODD [x] 1 &; - hozzon létre egy páratlan eljárást, amely páratlan számot 1-gyel, páros 0-val helyettesít,

0 X - rendelje hozzá a 0 értéket az X változóhoz,

BR + P1 P2 - ha a veremből vett tetejének értéke pozitív, akkor hajtsa végre a P1-et, ellenkező esetben a P2-t,

RP CHECK - hajtsa végre a CHECK eljárást újra és újra,

USE $ REAL - nyissa meg a $ REAL alszótárt használatra.

Egy adott előtag általában meghatározott számú szót igényel utána. Tehát az imént bemutatott példákban a VAR,!0 és a USE előtagok egy-egy szót igényelnek, a BR + előtag pedig két szót. Az előtag: (kettőspont) azonban lehetővé teszi, hogy tetszőleges hosszúságú parancsot alkosson három szóval kezdve. A parancs vége a szó; (pontosvessző). A tetszőleges hosszúság szintén benne van a parancsban - konstans leíró CNST A1 ... AJ; és az eljárás feleletválasztós parancs BR A1 P1 ... AJ PJ ELSE PN.

Az előtagok olyan speciális szavak, amelyek egy parancs elejére adva módosítják annak tartalmát vagy speciális végrehajtási módot határoznak meg. Például az előtag nélküli VAR X parancs egy 16 bites X változó létrehozására szolgál. Ha hozzá csatolja a BYTE előtagot, akkor a BYTE VAR X parancsot kapjuk, amely egy 8 bites változó létrehozására utasít. (byte) nevű X. Ha a LONG előtagot használja, akkor LONG VAR X-et kapunk - egy utasítást egy X nevű 32 bites változó létrehozására.

Egy másik típusú előtag, nevezetesen :: (két kettőspont), a parancs eredményét ellenállóvá teszi a CLEAR eljárással szemben, amely eltávolítja a nem rögzített szavakat a szótárból. A programkészítés során az adatok leírására és az eljárások meghatározására szolgáló parancsokkal a szótárba bevitt nevek a program létrehozása és tesztelése után eltávolíthatók a szótárból, kivéve néhányat, amelyek a kész program karbantartásához szükségesek. . Az eltávolítás a CLEAR $ paranccsal történik<имя подсловаря>, a programhoz tartozó szótár törlésére utasítva, csak azokat a szavakat tartva meg benne, amelyek definíciói tartalmazzák a :: előtagot. Példák eltávolíthatatlan szavakat generáló parancsokra:

:: BYTE CNST LITCODE # # 0 #A;

::: MOD / [int (a, b), pihenés (a, b)] E2 D [pihenés (a, b)];

Amint a második példa, amely a :: és a BYTE előtagokat tartalmazza, mutatja, egy parancsban több előtag is lehet.

Így egy parancs a DSPP-ben lehet egyetlen szó (monológ), vagy egy olyan kifejezés (kifejezés), amely egy előtaggal kezdődik és tartalmazza az adott előtaghoz beállított szavak számát, és ha az előtag tetszőleges számú szót tesz lehetővé. , akkor van egy határoló szó a végén, vagy lehet olyan kifejezés is, amely előtt speciális prefix szavakat tartalmaz.

A DSPN alapnyelve nem tartalmaz bonyolultabb szintaktikai konstrukciókat, mint a parancs, és nem tartalmaz más szerkezeteket a fent tárgyaltakon kívül. Még a programozási nyelvekben olyan nélkülözhetetlen dolgok is, mint a kifejezés és a függvény, hiányoznak az alapnyelvből, és szükség esetén csak a fejlesztés során vezethetők be.

Az alapnyelvi program egyszerűen parancsok gyűjteménye, amelyek végrehajtása a szövegben való megjelenés sorrendjében történik. Ezenkívül a csak primitíveket tartalmazó parancsok kivételével minden parancs végrehajtása során olyan parancsok sorozatát foglalják magukban, amelyek meghatározzák a benne foglalt szavakat. Az érintett parancsok viszont tartalmazhatnak parancsláncokat jelölő szavakat, amelyekben szavak is lehetségesek a hozzájuk tartozó láncokra hivatkozva stb. arra a szintre, ahol a parancsok csak primitíveket tartalmaznak.

A fejezet tartalmát képező PARADISE nyelv általános leírása ennek a nyelvnek a szerkezeti jellemzőinek és parancsainak alapvető (kezdeti) halmazának, amely a beépített parancsok (primitívek) halmaza volt. a DSPP processzor. A nyelv továbbfejlesztése és a processzor képességeinek ennek megfelelő növelése új eljárások, parancsok, formátumok és adattípusok bevezetésével valósul meg, alapvető eszközök felhasználásával. Az ilyen fejlesztés általában problémaorientált, és az alaprendszeren kívül a processzor bemenetére betöltött eljáráscsomagok formájában valósul meg.

Másrészt az alaprendszer kiegészíthető speciális eszközökkel az ennek alapján megvalósított DSP programok gépi hatékonyságának növelésére. Ezek az eszközök magukban foglalják az egyes eljárások közvetlen meghatározását a használt gép utasításkódjában. Egy eljárás meghatározásának módja nincs hatással a további használatára: az összes eljárás neve egy közös szótárba kerül, és teljesen azonos. Számos könyvtári program lehetővé teszi más nyelveken írt eljárások vagy teljes programok használatát.

Műveletek és parancsok leírása

Veremműveletek

Az operandusverem a DSP processzorarchitektúra egyik fő eleme. A legtöbb processzorutasítás a veremet használja, felemészti belőle a szükséges operandusokat, és az eredményeket belenyomja. A veremben lévő adatok értelmezése a megoldandó probléma lényegétől függ, vagyis végső soron a programozóra van bízva. Tekintettel arra, hogy a verembe bekerült érték ténylegesen elveszti a nevét, a program szövegéből nehéz megállapítani, hogy melyik operandusra vonatkozik ez vagy az a művelet, mi az eredménye. Ezért az operandusok és eljárások eredményeinek kifejezett jelzésére a PARADISE nyelven megjegyzéseket használnak. Ebben az esetben nem szükséges (és nem is mindig lehetséges) a verem teljes tartalmát leírni. Feltétlenül szükséges kommentálni a verem felső részét, amelyre hatással van a rajta végrehajtott eljárás, hiszen e nélkül a program láthatósága elvész, ellenőrzése megnehezül.

A program egységességének elérése érdekében ezeket a megjegyzéseket néhány egyszerű szabály betartásával kell megírni. Mint minden megjegyzés, a veremben szereplő adatok leírása szögletes zárójelben van. Ez a leírás azoknak az operandusoknak a listája, amelyek a program egy adott pontján a veremben vannak. A lista minden eleme egy verempozíció tartalmát jellemzi, elválasztóként vesszőt használunk. A verempozíciók balról jobbra vannak felsorolva, a legmélyebb elemtől kezdve és a verem tetején végződve. Az egyes operandusok leírása lehet szám, név, kifejezés vagy bármely más értelmes rekord, amely megmagyarázza a veremben lévő érték jelentését. Néha több lehetséges értéket is megadhat egy adott verempozícióhoz. Ebben az esetben az értékek perjellel vannak feltüntetve.

Íme egy példa egy megjegyzésre, amely az operandusverem állapotát tükrözi:

[kezdési cím, N + 1,1 / 0]

A program azon pontján, ahol ez a megjegyzés található, az operandusveremnek legalább három pozíciót kell tartalmaznia, és a tetején 1 vagy 0 lehet, az alszakaszban - egy N + 1-gyel egyenlő számérték, alatta pedig it - valamilyen szám a kiindulási címként értelmezve.

A halom kívánt pozíciójának megadásának kényelme érdekében a mélység fogalmát használjuk. Feltételezzük, hogy a verem teteje az 1. mélységben, az alréteg a 2. mélységben van, és így tovább. Különösen a példában „hirdetés indítása”-ként jelölt érték. 3 mélységben fekszik.

Az alapszintű DSPC nyelv tanulmányozását az értékek verembe helyezésének parancsaival kezdjük. Ennek a típusnak a legegyszerűbb (és leggyakrabban használt) parancsa egy numerikus literál, azaz egy konstans kifejezett jelzése, amelyet a verembe kell tolni. Tegyük fel például, hogy a 28-as, -5-ös és 11-es számokat szeretnénk a verembe tolni. Ehhez írja be a következő karakterláncot a billentyűzetről:

28 -5 11 és nyomja meg a gombot (kocsi vissza). A processzor felismeri a beírt számokat, és egyenként benyomja a verembe, így a teteje 11 lesz. Ennek ellenőrzéséhez elegendő a verem tetejének értékét kinyomtatni a kijelzőre. Ehhez a névvel ellátott DSPP parancsot használják. (pont). A "pont" beírásával a billentyűzeten és megnyomva , a képernyőn megkapjuk a választ: 11, ami a verembe utoljára betolt értéknek felel meg. A „pont” ismételt végrehajtása ugyanarra az eredményre vezet – ez a parancs csak a csúcsot jeleníti meg a verem állapotának megváltoztatása nélkül.

A verem teljes tartalmának megjelenítéséhez a DSPP tartalmazza a .. (két pont) parancsot. A végrehajtás után a következő sort kapjuk a képernyőn:

Amint látható, a kinyomtatás formája követi a verem állapotának megjegyzésére vonatkozó elfogadott konvenciókat (kivéve, hogy vessző helyett szóközt használnak). A .. parancs nem módosítja a verem tartalmát.

Egy 32 bites szó (4 bájt) egy verempozíciót jelöl a gép memóriájában, a számokat kettő komplementer kódja képviseli. Ennek megfelelően a PRSP processzor csak a -2147483648 és 2147483647 közötti tartományba eső egész számokat képes érzékelni. Ha a beírt szám nem reprezentálható 32 bittel (jellel), akkor a nem illeszkedő legjelentősebb biteket eldobja.

A vizsgált példákban azt feltételeztük, hogy a PRSP processzor a számok decimális be-/kimeneti módjában van. Ennek az üzemmódnak a PARADISE nyelven történő beállításához egy B10 parancs található.

Sok feladatban a feldolgozott adatokat nem számokként, hanem bináris kódokként, azaz 32 komponensű bitvektorokként kell értelmezni. A DSPP-ben lehetőség van bináris, oktális vagy hexadecimális számrendszerben bemutatott kódokkal dolgozni. A kívánt mód beállításához elegendő a három parancs egyikének végrehajtása: B2, B8 vagy B16, amely után a processzor észleli és kinyomtatja az összes beírt kódot a megadott számrendszerben.

Ezzel a funkcióval decimális számokat lehet 2-es, 8-as és 16-os alapra konvertálni. Például a 29-es szám konvertálásához be kell írnia és végre kell hajtania a következő sort:

B10 29 B2. B8. B16. Ennek eredményeként a processzor egy számsort jelenít meg: 00000000035 0000001D, amelyek a 29 decimális szám reprezentációi a három megadott számrendszerben. Ne feledje, hogy a kódok a gépi ábrázolásukban vannak kinyomtatva, azaz kezdő nullákkal és "+", "-" jelek nélkül. A B10 -2 B8 sor végrehajtásakor. a 37777777776 szám kerül visszaadásra, ami a -2 kettős komplementerének oktális reprezentációja.

Ha hexadecimális kódokkal dolgozik, ütközések léphetnek fel a numerikus literálok és a DSPP processzorparancsok nevei között. Például a B8 szó Hexadecimális I/O módban értelmezhető az oktális mód beállítására szolgáló parancsként és hexadecimális állandóként. A kétértelműség elkerülése érdekében a numerikus literálokat egy nem szignifikáns nullával kezdje, például 0B8.

A DSPP processzor utasításrendszer alapját a veremben lévő adatok konvertálásának műveletei alkotják. Ezen műveletek működésére vonatkozó általános szabály az, hogy minden művelet felhasználja (eltávolítja) a veremből a számára szükséges operandusokat, és az eredményértékeket (ha vannak) a helyükre tolja.

Tekintsük a processzor utasításait, amelyek négy aritmetikai műveletet hajtanak végre: egész számok összeadása, kivonása, szorzása és osztása. A Paradicsom nyelvén való ábrázolásukhoz a következő szavakat használjuk: +, -, * és /. Ahhoz, hogy a veremben lévő két szám összegét megkapja, például 123 és 45, ezeket a számokat a verembe kell tolnia, és végre kell hajtania a + parancsot. Ehhez elegendő beírni a következő sort a billentyűzetről (feltételezzük, hogy a decimális I / O mód be van állítva):

123 45 +

Ha most megjelenítjük a verem tartalmát (.. paranccsal), akkor láthatóvá válik a hozzáadás eredménye:

A kommutatív szorzási művelet hasonló módon működik.

A nem kommutatív kivonási és osztási műveletek végrehajtása során a részverem lesz kivontnak (osztalék), a felső pedig a kivontnak (osztó). Például a 151-68 közötti különbség kiszámításához a következő sort kell végrehajtania:

151 68 -

A PARADISE nyelven egy aritmetikai műveletet végrehajtó programra jellemző, hogy a művelet a megfelelő operandusok után található. Az aritmetikai kifejezések ezt a jelölését postfix (vagy lengyel inverz) jelölésnek nevezik, és széles körben használják a verem mikroszámítógépekben. Tegyük fel például, hogy ki kell számítanunk az aritmetikai kifejezés értékét ((127 + 81) * 15- (31 + 117) * 21) * 3

A postfix jelölésben ez a kifejezés így fog kinézni:

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

Ez a sor (amelyben a szavakat szóközök választják el egymástól) egy kész program a kifejezésünk DSP processzor általi kiszámítására.

Az osztás / parancs abban különbözik a többi aritmetikai művelettől, hogy eredménye két érték - hányados és maradék. A hányados a verem alján, a maradék pedig a tetején található. A hányados negatív, ha az osztó és az osztó különböző előjelű. A maradékon mindig az osztalék előjele van. Íme néhány példa az osztás parancs használatára.

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

A számítások végrehajtása során hibás helyzetek adódhatnak: túlcsordulás és nullával való osztás. A DSPP processzor semmilyen módon nem reagál rájuk (különösen, ha nullával osztjuk, a verem tartalma nem változik), és a műveletek használatának helyességének ellenőrzése a programozóhoz van rendelve.

Programozáskor gyakran szükséges egy érték értékét 1-gyel vagy 2-vel növelni vagy csökkenteni. A PARADISE nyelvbe olyan speciális parancsok kerültek, amelyek a verem tetején hajtják végre a jelzett műveleteket. Ezeket a következő szavak jelzik: 1+, 1-, 2+, 2-. Ezeknek a parancsoknak a végrehajtása egyenértékű a szükséges konstans (1 vagy 2) verembe tolásával, majd a szükséges aritmetikai művelet végrehajtásával (+ vagy -). Például a 2+ egyenértékű a 2+ szópárral. A parancsok nyelvének bevezetése hatékonysági okokból történt.

Ezenkívül a DSP processzor alapnyelvének hatékonyságának javítása érdekében vannak T0 és T1 parancsok, amelyek a verem tetejének értékét 0-ra, illetve 1-re cserélik, függetlenül attól, hogy a megadott parancs előtt melyik érték volt a tetején. Példák:

A NEG, ABS és SGN parancsok is rendelkezésre állnak a numerikus adatok kezeléséhez. A NEG parancs megfordítja a verem tetejének előjelét, az ABS lecseréli a verem tetejének értékét a modulusára, az SGN - a verem tetejéről numerikus értéket vesz fel, és a kivont szám előjelét helyettesíti a helyére : -1 - ha a szám negatív, 1 - ha pozitív, 0 - ha egyenlő nullával. Például:

5 NEG [-5] ABS SGN

Az alapnyelv MIN és MAX parancsai lehetővé teszik két egész szám minimális és maximumának meghatározását. Ezen utasítások operandusai két szám a verem tetején és alján. A MIN utasítás a legkisebb számú paramétert hagyja a veremben, a MAX a maximumot. Például:

5 0 15 PERC [-5,0] MAX

A veremben lévő három szám minimumának (maximumának) meghatározásához használja kétszer a MIN (MAX) parancsot:

MIN MIN [-2]

A SEG parancs annak ellenőrzésére, hogy a verem tetején lévő szám a megadott a-tól b-ig terjedő tartományba esik-e (beleértve a határokat is), ennek eredményeként egy jelet hagy a veremen: 1, ha a szám a tartományban van, és 0 ha nem:

SEG [funkció] például:

A numerikus adatokkal való munkavégzésre vonatkozó utasítások mellett a DSPP processzor utasításkészlete számos olyan műveletet tartalmaz, amelyek a 32 bites kódok konvertálására szolgálnak. Ezek a műveletek a veremelemet 32 ​​komponensű bitvektorként kezelik, melynek komponensei jobbról balra vannak számozva úgy, hogy a bal szélső bit 31, a jobb szélső pedig 0. A komponens csökkenő számozása megismétli a sok mikroprocesszornál elfogadott gépi szóbitek számozását.

A bitvektorokon végrehajtott parancsok elsősorban a Boole-algebra bitenkénti műveleteit tartalmazzák:

    az INV verem tetejének bitenkénti megfordítása, a felső része egyes bitjeinek értékének megváltoztatása, azaz a 0 cseréje 1-re, és az 1 helyére 0;

    az & verem tetejének és alsó részének bitenkénti konjunkciója, az eredmény i-edik bitjét beállítva, i = 31,30, ..., 0, 1-re, ha mindkét operandus i-edik bitje 1 , és más esetekben az i-edik bitet 0-val egyenlőnek állítva;

    a verem tetejének és aljának bitenkénti diszjunkciója & 0, az eredmény i-edik bitjébe állítva, i = 31,30, ..., 0, az érték 0, ha mindkét operandus i-edik bitje egyenlők 0-val, és más esetekben az i-edik bitet 1-re állítva;

    a csomópontok és alcsomópontok bitenkénti összeadása (nem ekvivalencia) "+", amely az eredmény i-edik bitjét 0-ra állítja, ha mindkét operandus i-edik bitje azonos értékű, és beállítja az i-edik az eredmény bitje 1-re, ha az operandusok i-edik bitjeinek értéke eltérő.

525 INV 722 & 136 & 0 325 "+"

A bitenkénti kötőszót gyakran használják a szóbitek nullázására (törlésére). Ehhez kapcsolja össze az eredeti szót egy maszkkal, amely nullákat tartalmaz a törölni kívánt számjegyekben, és egyeseket a többi számjegyben. Például, ha egy X szóban 3-tól 5-ig kell nullázni a biteket, akkor ennek bitenkénti konjunkcióját kell végrehajtania a 37777777707 maszkkal. X = 235 esetén a következőt kapjuk:

A bitenkénti diszjunkció segítségével a kívánt bitmintát beilleszthetjük egy előre törölt szócsoportba. Tegyük fel például, hogy a 010 bináris kombinációt az utolsó példa eredményeként a veremben maradó szó 3-5. bitjébe szeretné helyezni. Ezt így teheti meg:

A bitmanipulációs műveletek logikai shift parancsokat is tartalmaznak:

    balra eltolás SHL - a verem tetejének minden bitje a 31.-től kezdve a következő értékét veszi fel a számok csökkenő sorrendjében, az utolsó, nulla bit pedig 0 értéket vesz fel;

    jobb eltolás SHR - a verem tetejének minden bitje 0-tól kezdve a következő értékét veszi fel a számok növekvő sorrendjében, a 31. bit pedig 0-t;

    eltolás a felső SHT mentén - a felső elem kikerül a veremből, és N egész számként kezeli, jelezve, hogy hány eltolást és milyen irányba kell végrehajtani a verem tetején: ha N> 0, akkor eltolás történik a verem tetején balra, amikor N<0 - вправо.

B8 125 SHR SHL -2 SHT

A balra eltolási műveletek segítségével megszorozhatjuk a számokat 2-vel az N-edik hatványig, ahol N egy természetes szám, amely meghatározza az eltolások számát. Például a -5 szám 8-cal való szorzata megtörténhet úgy, hogy ezt a számot 3 számjeggyel balra tolja:

B10 -5 3 SHT [-40]

Ebben az esetben figyelembe kell venni a túlcsordulás lehetőségét.

A jobbra eltolás csak pozitív számok esetén használható teljes 2-vel való osztás műveleteként N hatványára, mivel a legjelentősebb (előjel) bit nullázódik jobbra tolódáskor. Például:

mivel

A verem tetejének 1 bittel jobb ROR-ra és balra ROL-ra forgatására vonatkozó utasítások hasonlóak a logikai eltolási utasításokhoz, azzal a különbséggel, hogy a kiterjesztett szélső bit nem tűnik el, hanem a 32-es másik végéből a szabad helyre tolódik. -kicsit hosszú szó. Például (hexadecimális számok):

A bináris kódok feldolgozására a DSPP processzor SWB és SWW parancsait is szánják. Az SWB funkció a verem tetejének alsó felének bájtjait, az SWW funkció pedig a verem tetejének felének felcserélését szolgálja. Szemléltessük ezeknek a parancsoknak a működését hexadecimális I/O módban (ebben a módban minden bájt két hexadecimális számjegyből áll):

B16 0ABCD SWB SWB

0ABCDEF12 SWW SWB

A veremkezelési utasítások fontos szerepet játszanak a PARADISE nyelvben. Nem változtatják meg a veremben lévő adatok értékeit, csak a helyüket változtatják meg, megkönnyítve a verem mélyén található operandusok elérését.

Három parancs létezik a veremtagok törlésére: D, DD, DS (Drop). A D parancs egy (felső) elemet távolít el a veremből, a DD - két elemet, például:

D DD D A DS eltávolítja az összes elemet a veremből (törli a veret):

A C verem tetejének másolására szolgáló parancs (Másolás - másolás) a veremre tolja a tetejének aktuális értékének másolatát. Ez egyenértékű a verem legfelső elemének megkettőzésével: a régi felső lesz az al, a másolata pedig az új felső. Példa:

Mutassuk meg ennek a parancsnak az alkalmazását a p (x) = 3 * x ** 2 + 4 * x-5 polinom kiszámításának példáján a Horner-séma szerint: p (x) = (3 * x + 4) * x -5. Feltételezzük, hogy x a verem tetején van.

[x] C 3 * 4 + * 5 -

A PARADISE nyelvben a verem tetejének másolására szolgáló parancs mellett vannak C2, C3, C4 parancsok is, amelyek 2, 3, 4 mélységben található elemeket másolnak. Munkájukat a következő példákkal illusztrálhatjuk:

C2 C4

Van egy CT parancs is az elem másolására a verem tetején jelzett mélységben. A CT végrehajtásakor a processzor kiemeli a verem legfelső elemét, értékét a másolt elem mélységének jelzőjeként használja, és az utóbbi másolatát a veremre tolja. Tehát egy 5-ös mélységben található elem másolását egy pár 5 CT-parancs állítja be, végrehajtásukkor a processzor az 5-ös számot a verembe tolja, majd végrehajtja a CT parancsot. A CT végrehajtása 1, 2, 3, 4 paraméterekkel egyenértékű a C, C2, C3, C4 paraméterekkel.

Az E2, E3, E4 csereparancsok (Csere - csere) a verem első (felső) elemének permutációját hajtják végre a 2., 3., 4., azaz a 2, 3 mélységben található elemmel. , 4. Például:

E3 E2

A nagyobb mélységre való cseréhez az ET parancsot használjuk, amely a CT-hez hasonlóan a verem tetejének értékét használja az elem mélységének jelzőjeként, amelyet az első elemmel cserélünk. Például:

5 ET

A 2, 3, 4 paraméterekkel rendelkező ET parancs az E2, E3, E4 parancsokkal egyenértékű.

A másolási és megosztási parancsok használatának szemléltetéséhez vegyen fontolóra egy oktatóanyagot. A köteg három számot tartalmaz. A verembe kerüléshez kötelező:. A következő program javasolható, melynek értelme a hozzászólásokból kiderül.

C3 C3 C3 +

E4 + E4

Ez a példa jól mutatja, milyen fontos szerepe van az operandusverem állapotát tükröző megjegyzéseknek.

A programoknak gyakran össze kell hasonlítaniuk egymással a számértékeket, és az összehasonlítás eredményétől függően különféle eljárásokat kell végrehajtaniuk. Vannak összehasonlítási parancsok a PARADISE nyelven<, =, >... Számokon keresztül vannak meghatározva, és ennek eredményeként a 0 és 1 számértékeket adják vissza, például a parancsot< потребляет из стека два элемента и засылает в стек число 1, если значение нижнего элемента оказалось меньше значения верхнего, а в противном случае засылает 0. Например, в результате выполнения последовательности 5 -20 < в стек будет заслан 0. Команда = засылает 1 в случае равенства потребленных ею элементов. Команда >1-et küld, ha az alsó elem nagyobb, mint a felső. Nem szigorú összehasonlítások programozásához (kisebb vagy egyenlő, nagyobb vagy egyenlő), használja a NOT parancsot, amely a veremben a nullától eltérő értéket nullára, a nullát pedig eggyel helyettesíti. Például az x> = 5 logikai kifejezés kiértékelése, ahol x egy a verem tetején található szám, a következőképpen adható meg:

[x] 5< NOT

A programozási feltételek lehetőségeinek további bővítését az összehasonlító parancsokkal együtt a & (logikai ÉS) és a & 0 (logikai VAGY) diszjunkció logikai műveleteinek használata biztosítja. Legyen például szükséges, hogy a veremben 1 legyen, ha a csúcsban lévő x szám a C 5 félszegmenshez tartozik< NOT C2 10 <

& E2 2 = & 0

Az összehasonlítási eredményektől függő programvezérlésekről később lesz szó.

Eljárások meghatározása

Alapvető programozási technikaként a PRSP lehetőséget ad a felhasználónak elnevezett műveletsorozatok, úgynevezett eljárások meghatározására. Legyen szükséges például a 3 * x ** 2-4 * x + 9 négyzetháromtag értékeinek kiszámítása az adott x értékekhez. Ebben az esetben meg kell határoznia egy eljárást, amely megvalósítja a trinomikus képletet, és kiadja az eredményt a terminálnak, majd alkalmazza ezt az eljárást x meghatározott értékeire. A szükséges eljárást, nevezzük PX-nek, a következőképpen definiáljuk: PX [x] C 3 * 4 - * 9 +. D; A kettőspont az "eljárás meghatározása" műveletet jelöli, az eljárás nevét elválasztó szóköz után kettőspont követi. A meghatározó parancssor (eljárástörzs) az eljárás nevét követi, és pontosvesszővel végződik. Röviden, az eljárást a következő formában határozzuk meg:

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

A PARADISE nyelvben az eljárás elején és végén kommentálni kell az operandusverem állapotát. Az eljárás törzsében a megjegyzéseket a programozó belátása szerint nehezen érthető helyeken helyezik el.

A megjegyzések segítenek a személynek megérteni és használni az eljárást, míg a processzor egyszerűen figyelmen kívül hagy mindent, ami zárójelben van. Ezért, ha a terminálból megadja egy egyedi eljárás definícióját, akkor elhagyhatja a megjegyzéseket.

Az eljárás definíciójának megadása után és a gomb megnyomásával a processzor értesül a bevitel végéről, a terminál képernyőjén egy csillag jelenik meg, jelezve a "define procedúra" parancs végrehajtását és a processzor készségét a párbeszéd folytatására. Most már alkalmazhatja a PX eljárást a billentyűzet által biztosított x értékekre, például 2, 3, 4 (a processzor kimenete alá van húzva):

* 2 PX 13

* 3 PX 24

* 4 PX 41

Határozzuk meg egy általánosabb eljárást az a2 * x ** 2 + a1 * x + a0 alakú trinom kiszámítására, amely lehetővé teszi mind az x, mind az a0, a1, a2 értékeinek megadását. Nevezzük PXA-nak:

: PXA C E4 E3 * + * +;

A PXA használatakor az a0, a1, a2, x értékeknek a kívánt sorrendben kell lenniük a veremben. Például: a0 = 1, a1 = 2, a2 ​​= -3, x = 4

* 1 2 -3 4 PXA. D -39

Az eljárás törzsében az alapvető processzorműveletek mellett a felhasználó által meghatározott eljárások is lehetnek. Például definiálhat egy P rutint, amely a PXA számítások mellett az eredmény másolatát írja a terminálra, és eltávolítja az eredményt a veremből.

: P PXA. D;

Az eljárás törzse különösen magában foglalhatja a definiálandó eljárás nevét, vagyis az eljárás lehet rekurzív. Például:

: IDŐ [t] 1- IDŐ;

Ez az eljárás 1-gyel csökkenti a verem tetejének értékét, és ismét önmagára vonatkozik, azaz időszámlálóként működik.

Az IDŐ számláló elvileg nem állhat meg: az egy kivonási eljárást újra és újra végrehajtják, amíg a processzor fut. De a DSPP-ben vannak olyan eszközök, amelyek lehetővé teszik a folyamat lefolyásának ellenőrzését a kapott eredményektől függően - a program menetének vezérlésének művelete.

Feltételes végrehajtás és ismétlés

Lineárisnak nevezzük azt a programot, amely a rekordjában egymás után végrehajtott parancsok sorrendje. Annak érdekében, hogy a program könnyen megfigyelhető (olvasható) és érthető legyen, elnevezett részekre van osztva, amelyeknek bizonyos jelentése van - eljárásokra, amelyek mindegyike saját eljárássorozattal van meghatározva, amelyeket viszont kisebb eljárások sorozatai határoznak meg, stb. a DSPP-parancsok sorozatai által közvetlenül meghatározott eljárásokhoz. Az ilyen, eljárásdefiníciók hierarchiájaként írt programot strukturáltnak nevezzük. Strukturált programozásnak nevezzük a strukturált program felépítésének azt a módszerét, amely a megoldandó probléma egyre kisebb részfeladatokra történő fokozatos felosztásából áll.

A strukturált programozási módszerrel nem csak lineáris, hanem tetszőleges programok létrehozása is lehetséges, ha vannak műveletek az eljárás feltétel szerinti végrehajtására, az eljárás ismétlésére és az ismételt eljárásból való kilépésre. A DSPP-ben elérhető ilyen jellegű parancskészlet lehetőséget ad egy tetszőleges program strukturált felépítésére.

Az eljárás végrehajtásának vagy nem végrehajtásának feltételei a szám előjele alapján, pontosabban annak az értéknek az előjeléhez viszonyítva vannak megfogalmazva, amellyel a verem teteje éppen rendelkezik. Az eljárás feltételes végrehajtásának fő parancsa - BRS (BRanch on Sign - to branch by sign) a BRS-ről elnevezett három eljárás valamelyikének végrehajtására utasítja a verem tetejének aktuális értékének előjelétől függően. A BRS végrehajtása közben a processzor kiemeli a verem legfelső elemét, teszteli az értékét, és ha negatív, akkor végrehajtja a megnevezett eljárások közül az elsőt, ha egyenlő nullával, akkor a másodikat, és ha pozitív, akkor a harmadikat . Szóval a csapat

egy elem eltávolítását okozza a veremből, és az N eljárás végrehajtását, ha az eltávolított érték negatív, a P eljárás végrehajtását, ha pozitív, és a Z eljárás végrehajtását, ha az nulla.

Példa a BRS parancs használatára a következő SGN eljárás definíció

: SGN [X] BRS -1 0 1;

Ez a rutin a verem tetején lévő X értéket -1-re cseréli, ha X<0, числом 0, если X=0, и числом 1, если X>0. Az SGN eljárás elérhető a PRSP-ben, mint alapvető processzorművelet.

A BRS parancs a három adat közül egy eljárás kiválasztásával együtt lehetőséget ad IF-THEN és IF-THEN-ELSE formájú kétjegyű operátorok megvalósítására. Például az if x> 0, then P1 else P0 utasítás a BRS P0 P0 P1 parancsnak felel meg, az utasítás pedig ha x<>0, majd P - BRS P NOP P parancs, ahol a NOP egy üres művelet neve. A DSPP-ben azonban hatékonyabb a két számjegyű feltételek megvalósítása - az IF-, IF0, IF +, BR-, BR0, BR + parancsok.

Az IF parancsok az IF-THEN utasításnak felelnek meg. Például az IF-P utasítás azt utasítja, hogy emelje ki a legfelső elemet a veremből és tesztelje az előjelét, és ha ennek az elemnek mínuszjele van, akkor hajtsa végre a P eljárást. Az IF0 P és az IF + P utasítások a P végrehajtására utasítanak eljárást, illetve abban az esetben, ha a felugró elem egyenlő nullával, illetve abban az esetben, ha az értéke pozitív.

Példaként az IF csoport parancsainak használatát szemléltetjük, adjuk meg az ABS alapnyelv parancsának definícióját, amely a verem tetejének modulját számítja ki.

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

A BR-, BR0 és BR + parancsok az IF-THEN-ELSE utasításnak felelnek meg, és arra utasítják, hogy válasszon egyet a két róluk elnevezett eljárás közül. Ha a veremből kiugrott elem előjele egybeesik a parancskijelölésben szereplővel, akkor az elsőnek nevezett eljárás, ha pedig nem egyezik, akkor a második eljárás kerül végrehajtásra. Például a BR0 P0 P1 utasítás a P0 eljárás végrehajtását utasítja abban az esetben, ha a veremből kikerült elem nulla, és ha ez a feltétel nem teljesül, akkor hajtsa végre a P1 eljárást.

A figyelembe vett parancsok lehetővé teszik az eljárás végrehajtásának gazdaságos programozását az adott feltételek függvényében. Az x forma leggyakoribb feltételei<0, x=0, x>A 0-t közvetlenül az IF csoport csapatai valósítják meg. Feltételek x<=0, x<>A 0, x> = 0 a BR-, BR0, BR + parancsokkal programozható, első eljárásként üres NOP művelettel. Például, ha x<=0 then P соответствует команда BR+ NOP P. Примером использования команд группы BR может служить следующая реализация команды базового языка NOT, заменяющей нулевое значение вершины стека единицей, а ненулевое - нулем.

: NEM [x] BR0 1 0;

A programelágazás gyakran összehasonlító parancsok után történik (<, =, >), amelyek 1 vagy 0 logikai értéket adnak, a két szám összehasonlításának eredményétől függően. A MAX alapnyelvi parancs például a következőképpen programozható:

: MAX C2 C2< IF+ E2 D ;

Az elágazó parancscsoport tartalmazza a BR kiválasztási parancsot is, a következő formában írva:

BR A1 P1 A2 P2 ... AK PK ... AN PN EGYÉB P0

Az utasítás végrehajtásakor a processzor először végrehajtja az A1 eljárást, és összehasonlítja a verembe tolt értéket az alatta lévő értékkel a verem előző tetején. Ha az értékek egyeznek, akkor a legfelső két elemet eltávolítjuk a veremből, és végrehajtjuk az A1 mutatóhoz rendelt P1 eljárást, amely után áttérünk a BR parancsot követő parancsra (azaz a fenti rekordban a szövegben a P0 szót követő program). Ha az összehasonlított értékek nem egyeznek, akkor egy felső elemet eltávolítunk a veremből (azaz A1 eredményt), és ugyanazokat a műveleteket hajtjuk végre az A2 P2 párral, majd ha az egyezés nem működött, akkor az A3 párral P3 stb. AN PN-ig beleértve. Abban az esetben, ha egyik próbálkozás sem ad egyezést, akkor az ELSE szóról elnevezett P0 eljárás kerül végrehajtásra. Általában a numerikus állandók mutató eljárásokként működnek, például:

[x] C BR 5 NEG -3 ABS 0 NEM MÁS T0 [y]

Ennek a sornak a verem tetején történő végrehajtásának eredményeként az y = -5 értéket kapjuk, ha x = 5; y = 3, ha x = -3; y = 1, ha x = 0, és y = 0 egyébként.

Általánosságban elmondható, hogy a pointer eljárás nemcsak numerikus konstans lehet, hanem változó vagy bármilyen más eljárás, amely egy egyszerű követelményt elégít ki: nem dob ki semmit a veremből, és egy értéket tol a verembe.

A feltételes végrehajtási műveletek használatának szemléltetésére az előző részben módosítottuk a TIME eljárást úgy, hogy a számláló leáll a feltétel megadásakor:

: IDŐ [t] 1- C IF + IDŐ;

Most ez a TIME rutin csak akkor hívja meg magát, ha a verem teteje pozitív. A számláló pontosan N-szer indul el, ha a TIME első végrehajtásának kezdetéig a csúcs pozitív N számot tartalmaz. Például 7 triggerhez be kell állítani

7 IDŐ<ВК>

Mivel az IF + a TIME definícióban, mint minden feltételes művelet, kidobja a tesztelt elemet a veremből, és ez az elem szükséges a későbbi műveletekhez, meg kell duplikálni a C (Copy) művelet IF + elé helyezésével.

A rekurzió nem az elsődleges eszköze egy eljárás többszöri végrehajtásának. A programozási ciklusokhoz a PARADISE nyelvben vannak RP (Repeat) és DO (Do - do, execute) parancsok.

Az RP W parancs arra utasítja, hogy korlátlan számú alkalommal hajtsa végre a W eljárást újra és újra. Ahhoz, hogy az ismétlések leálljanak, a W eljárás törzsének tartalmaznia kell egy adott feltétel mellett végrehajtandó EX (Exit) műveletet. Az EX művelet átvált a programszövegben ezt az EX műveletet tartalmazó ismételt eljárást követő eljárás végrehajtására. Tehát a fent rekurzív TIME eljárásként megvalósított számláló programozható a W eljárás megismétléseként, amely a következőképpen definiálható:

: W [t] 1-C IF0EX;

Ahhoz, hogy a számláló 25-ször működjön, végre kell hajtani a sort

A feltételes végrehajtási parancsokban használt EX művelet mellett vannak EX-, EX0, EX + feltételes kilépési műveletek, amelyek ugyanazt a hatást produkálják, mint az IF-EX, IF0 EX, IF + EX parancsok, azaz fogyasszon el egy olyan elemet a tetején, amely teszteli az előjelét, és kilépést hajt végre, ha a jel megegyezik a művelet megjelölésében jelzettel. Az EX, EX-, EX0, EX + műveletek nem feltétlenül magában az ismétlődő eljárás törzsében (esetünkben W), hanem azokban az eljárásokban is használhatók, amelyekre vonatkozik.

Példaként tekintsük két természetes szám legnagyobb közös osztójának megtalálásának problémáját Euklidész módszerével. A módszer lényege, hogy addig kell a kisebb számot kivonni a nagyobb számból, amíg a számok egyenlővé nem válnak. Az egyenlőség elérésekor megtaláljuk a legnagyobb közös osztót.

A programozás felülről lefelé történő fejlesztés módszerével történik. Először definiáljuk a GCD eljárást, amely rögzíti az algoritmus általános sémáját. Ennek az eljárásnak a paraméterei két M és N szám a veremben, amelyekre a legnagyobb közös osztó található. A GCD eljárás törzsében meg kell adni egy ciklikus folyamatot a veremben lévő értékek konvertálására. A folyamat eredményeként két egyenlő számnak kell maradnia a veremben - bármelyiket tekinthetjük a legnagyobb közös osztónak. Ezeket a szempontokat szem előtt tartva a GCD eljárás a következőképpen definiálható.

: GCD RP STEP [csomópont (M, N), csomópont (M, N)] D [csomópont (M, N)];

Most az iteratív folyamat egy lépését kell programozni, pl. határozza meg a STEP eljárást. A paraméterek két szám a veremben. Össze kell hasonlítania ezeket a számokat, és ki kell lépnie a ciklusból, ha egyenlők, ellenkező esetben vonja ki a kisebbet a nagyobbból. Ez megtehető például a következőképpen:

: LÉPÉS C2 C2 - BRS NOP EX E2 C2 -;

Most már nem maradt definiálatlan eljárás a programban, és elkezdheti az ellenőrzést. Az ellenőrzést alulról felfelé kell elvégezni, vagyis először meg kell győződnie arról, hogy a STEP eljárás megfelelően működik, és csak ezután - GCD.

Az alapnyelvi DO művelet hatására a róla elnevezett eljárás N-szer megismétlődik, ahol N a verem tetején lévő szám a DO végrehajtásának időpontjában. Például ahhoz, hogy a P eljárás 8-szor lefusson, meg kell adni

8 DO P

Ha a P eljárás törzse legalább egy kilépési műveletet tartalmaz, és annak végrehajtásának feltétele teljesül, mielőtt a megadott számú ismétlés megtörténik, akkor az ismétlések az eljárásból való kilépéssel megszakadnak, ugyanúgy, mint a RP működés. Például, ha a DO megismétli a fent leírt W eljárást, és IF0 EX van a definíciójában, a [T] 30 DO W írása 30 W ismétlést okoz, ha T> = 30. Ha 0

Ha a DO művelet végrehajtásakor a verem tetején nulla vagy negatív érték van, akkor a DO-t követő eljárás még egyszer sem kerül végrehajtásra.

A DO művelet használatának szemléltetésére definiálunk egy NUM rutint, amely megszámolja a verem tetején megadott 32 bites x szó nem nulla bitjeit.

Helyezze az egységek számának számlálóját a részverembe. Az egyesek számlálása abból áll, hogy 32-szer megismételjük a NUMI eljárást, amelyben megvizsgáljuk az x szó egy bitjét. A ciklusból való kilépéskor a szükséges számnak az alveremben kell lennie.

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

A nem nulla bitek megszámlálásához azt fogjuk használni, hogy a szó legjelentősebb (31.) bitjében lévő egy negatív szám jeleként szolgál. Ha a vizsgált szó negatív, akkor adjon hozzá egyet az N-hez. A NUMI eljárás végén a vizsgált szót egy számjeggyel balra kell tolnia.

: NUMI C IF-N + SHL;

Az N + eljárás megvalósítása meglehetősen egyszerű: hozzá kell adni egyet a verem alrétegéhez anélkül, hogy a csúcsokat megváltoztatná.

: N + E2 1+ E2;

Az ismételt eljárások tartalmazhatnak RP és DO műveleteket a testükben, ami beágyazott hurkok előfordulásához vezethet, és bármilyen beágyazási mélység megengedett. Ebben az esetben van egy EXT művelet a beágyazott hurokból való kilépéshez, amely jelzi a beágyazási mélységet a verem tetején. Például a két egymásba ágyazott hurokból való kilépés a következőképpen állítható be:

Nem szabad megfeledkezni arról, hogy az EXT parancs használata fokozott odafigyelést igényel, mivel a program módosításakor a hurkok egymásba ágyazási mélysége megváltozhat, és az EXT előtti megfelelő állandót módosítani kell.

Megnevezett adatok

Az operandusverem a fő, de nem az egyetlen adatkezelési mechanizmus a PRSP-ben. Az eljárásdefiníciókkal együtt lehetőség van elemek és szabványosan szervezett adatgyűjtemények (ún. struktúrák) deklarálására is, amelyek aztán nevükön használhatók. Az adatdeklarációk megvalósításával a processzor lefoglalja a tárolásukhoz szükséges memóriát, és biztosítja a memória eléréséhez szükséges mechanizmusokat.

A DSPN alapnyelve számos, az alábbiakban tárgyalt direktívát tartalmaz a változók és tömbök deklarálására. A rendszernyelv bővítése érdekében más ilyen jellegű szavakat és ennek megfelelően más elemeket, adatstruktúrákat is be lehet vinni abba.

A VAR szó egy 16 bites numerikus változót deklarál. Például a bejegyzés

deklarál egy X változót, vagyis azt mondja a processzornak, hogy az X név egy változó neve. A processzor ehhez a névhez egy 16 bites memóriahelyet társít, ahol ennek a változónak az értéke kerül tárolásra. Az X változónak az operandusverem tetején lévő értékhez való hozzárendelésére vonatkozó utasítás a következő formában van

Ennek a parancsnak a végrehajtásakor a processzor kiemeli a verem legfelső elemét, és beírja az értékét az X változó számára kijelölt helyre.

Csak egy változónévből álló parancs betű nélkül!Ennek a változónak az értékét a verembe tolja, és a push a megfelelő memóriahely tartalmának másolásával történik, vagyis a változó értéke változatlan marad . Így az X változó nevének programjába történő bármilyen belépés, hacsak közvetlenül nem előzi meg egy másik műveletet előíró szó, ennek a változónak az aktuális értékét tolja a verembe, akárcsak a közvetlenül megadott számokat (numerikus literálokat). rá vannak tolva a veremre.

Példaként adjuk meg a fentebb tárgyalt GCD eljárás egy másik változatát, amelyben két munkaváltozót használunk.

: Istenem! X! Y RP X LÉPÉS [GCD];

: X LÉPÉS Y = EX + X Y BR + X-Y Y-X;

: X-Y X Y -! X;

: Y-X Y X -! Y;

Mint látható, a program kissé hosszabb lett, de az áttekinthetősége nőtt.

A VCTR szó egy 16 bites cellákból álló egydimenziós tömböt (vektort) deklarál, és ennek a tömbnek a legjelentősebb elemének számát a csúcsérték adja meg. Például az írás hatására

9 VCTR ROW A processzor 10 szekvenciálisan címezhető 16 bites memóriaszót foglal le, egy vektor ROW-t alkotva (0:9). Először a 9-es szám kerül a verembe, majd végrehajtódik a VCTR eljárás, amely a verem legfelső eleme alapján határozza meg a létrehozandó ROW vektor hosszát.

A ROW, 0 vektor j-edik elemének értékét a verembe tolva<=j<=9, задается командой

[j] SOR

A veremben lévő elemszámot paraméterként használva a ROW vektornév hatására ez a szám lecserélődik a megfelelő elem értékére. Ha a! szó közvetlenül a ROW vektor neve előtt van, akkor ennek a vektornak a csúcs által jelzett eleméhez rendelődik a részútvonal értéke, és a veremmélység 2-vel csökken. Például nullázhatja a A ROW vektor 5. eleme a következőképpen:

Lehetőség van állandó vektorok létrehozására is, pl. 16 bites számok vektorai, amelyek értéke a deklaráció során került meghatározásra, és a jövőben nem változnak. Tehát egy L + 1 hosszúságú 16 bites VC konstans vektort a CNST szó használatával deklarálunk a következő formában:

CNST VC k0 k1 ... kL;

ahol k0, k1, ... kL olyan parancsok, amelyek egy értéket helyeznek a verembe. Leggyakrabban ezek csak numerikus literálok, de lehetnek változók nevei, eljárások, valamint szópárokból álló parancsok is, mint például az alábbiakban tárgyalt "X" változó címének beállítására szolgáló parancs. közönséges vektorok összetevőihez. Például:

A 16 bites szavak többdimenziós tömbjét az ARR szóval deklarálják, amelyet az egyes dimenziók maximális indexértékei és a dimenziók száma előz meg. Például egy 3D TIR tömb (0: 8.0: 2.0: 24) a következőképpen van deklarálva:

Az ARR előtti 3-as szám a deklarált tömb méretét jelöli.

Egy tömbelemet a verembe tolhat úgy, hogy megadja ennek az elemnek az indexét, majd a tömb nevét. Például a TIR (0,2,2) elemnek a verembe helyezésére vonatkozó parancs a következőképpen fejeződik ki

Ennek megfelelően a verem tetejének aktuális értékének ehhez az eleméhez való hozzárendelését a parancs állítja be

Minden figyelembe vett példa illusztrálta a struktúrák létrehozását 16 bites szavakból. A nyelv azonban lehetővé teszi 32 bites szavak és 8 bites bájtok szerkezetének meghatározását is. Ehhez a szerkezetet meghatározó szó elé a LONG vagy BYTE előtag kerül. Például,

5 BYTE VCTR X - az X bájtok 6 komponensű vektorának meghatározása;

BYTE CNST Y 65 66 67; - egy 3 komponensű bájtos Y vektorállandó meghatározása;

10 20 2 LONG ARR MTRX - hosszú szavak mátrixának meghatározása MTRX (0: 10,0: 20).

A szó- és bájtszerkezetek elemeinek beolvasása ugyanúgy történik, mint a 16 bites szószerkezetek esetében. Ha az elem hossza kisebb, mint 32 bit, akkor a kivont érték a verem tetejének legkisebb jelentőségű szavába vagy bájtjába kerül, és a tetejének felső része nullázódik. A veremben lévő 32 bites szó legkisebb jelentőségű szavát vagy bájtját a rendszer egy szó- vagy bájtstruktúra eleméhez rendelt értéknek is tekinti.

Bár alapértelmezés szerint a 16 bites szóformátumot használják az adatok meghatározásakor, ennek WORD jelölése is van. Célszerű ezt az előtagot használni, ha a programot más gépekre kell átvinni, ahol a DSSP is implementálva van, és az alapértelmezett ettől eltérő lehet.

A bájt adatstruktúrákat leggyakrabban szöveges információk tárolására és feldolgozására használják. Ez annak a ténynek köszönhető, hogy egy bájt van lefoglalva a számítógép memóriájában egy karakter kódolásához. A betűk kódjainak beállításához a PARADISE nyelven van egy #l konstrukció, ahol l a számítógép billentyűzetén elérhető bármely betű. A DSPP processzor ezt a konstrukciót parancsként érzékeli, amely az l betűt a verembe tolja. Például:

Ez a konstrukció ugyanazokat a műveleteket hajtja végre, mint a megadott betű kódjával megegyező numerikus literál, de használata előnyösebb, mivel egyrészt megszabadítja Önt a kódok memorizálásának szükségességétől, másrészt érthetőbbé teszi a programokat. Egy konstans Y vektorra konkrétan a következő definíciót adhatjuk:

BYTE CNST Y #A #B #C;

Gyakran célszerű egy numerikus állandó szimbolikus jelölését használni egy programban. A VALUE definíciós szó elérhető a következő képesség biztosítására:

Ez a parancs kiemeli a legfelső elemet a veremből, és létrehozza a szót közvetlenül a VALUE után. Ennek a szónak a használata egyenértékű egy numerikus állandó használatával. Például:

Munka a memóriával fizikai címek alapján

A szóban forgó eszközök lehetővé teszik az adatok elnevezését és az adatok kezelését, függetlenül a számítógép címrendszerétől. De az alapnyelv tartalmaz eszközöket is a memóriaelemek címeinek manipulálására. Az X tömb egy változójának vagy elemének címét a parancs a verembe tolja

Tömbelem esetén ezt a parancsot az index(ek) értéke előzi meg.

A gazdagép nyelvi @ parancsa lecseréli egy hosszú memóriaszó címét a verem tetején a szót tartalmazó értékre. Például az Y értéke a verembe tolható a következő sor végrehajtásával:

@B lecseréli a címet a megfelelő bájt értékére nulla magas bájtot feltételezve, @L pedig a címet egy 32 bites szóra.

Vannak parancsok is az értékek memóriába írásához. A!T parancs a verem tetejéről előugró címre írja a 16 bites alértéket. A!TB parancs az albájt alacsony rendű bájtjának hasonló írását okozza a top által címzett bájthoz, a TL pedig a sub-sub 32 bites szavát írja a top által címzett szóhoz. Például a 15-ös értéket hozzárendelheti a BV bájtvektor ötödik eleméhez (0:5) a következő parancsokkal:

15 5 "BV! TB

A fizikai címeken lévő memóriával való munka szükségessége általában akkor merül fel, amikor egy adott számítógép architektúrájától függő programokat hoz létre, például bemeneti / kimeneti illesztőprogramok létrehozásakor.

További műveletek az adatokkal és a memóriával való munkához

A programok nagyobb hatékonyságának és tömörségének elérése érdekében a következő műveleteket vezettük be a PARADISE nyelvbe:

0 <имя переменной>- reset a változó;

1 <имя переменной>- egy változóhoz egységet rendelni;

1- <имя переменной>- csökkentse a változó értékét eggyel;

1+ <имя переменной>- növelje a változó értékét eggyel;

!- <имя переменной>- kivonjuk a változóból a verem tetejének értékét;

!+ <имя переменной>- adjuk hozzá a változóhoz a verem tetejének értékét.

Ezen műveletek mindegyike könnyen programozható változók olvasási és írási parancsaival. Például,

0 X egyenértékű 0-val! x

1+ X egyenértékű X 1+-val! x

X egyenértékű X E2 -vel! x

Ezeknek a műveleteknek a használata növeli a programok hatékonyságát és átláthatóságát.

A gyakorlatban gyakran egy tömb összes eleméhez egyetlen értéket szeretne rendelni. Erre van egy művelet a PARADISE nyelven !!!<имя массива>... Művelete az, hogy a verem tetejének értékét hozzárendeli a megadott tömb összes összetevőjéhez. Művelet!!! bármilyen formátumú elemet tartalmazó tömbökre alkalmazható.

Használati példa:

szóköz karakterkódot írunk a BUF bájttömb összes összetevőjére.

Gyakran szükséges információkat szerezni a programban a név mögötti adatszerkezetről. Egy pár parancs SIZE? - adja meg az adatelem formátumát: 1, 2 vagy 4 bájt, és DIM? - adja meg a struktúra adatelemeinek számát. Például, ha adatokat deklarálnak

3 4 2 HOSSZÚ ARR Z

majd alkalmazva rájuk, ezek a parancsok a következő eredményt adják (tizedes számok):

MÉRET? X MÉRET? Y MÉRET? Z

HOMÁLYOS? X DIM? Y DIM? Z

A DSPP processzor utasításkészlete kiegészítésként négy olyan parancsot tartalmaz, amelyek lehetővé teszik a számítógép memóriacelláinak egyes bitjeinek olvasását és írását. Ezek a @BI,!BI,!BI0,!BI1 parancsok. Mindegyik paraméter a veremben található memóriaszó címe és a szóban lévő bitszám (emlékezzünk arra, hogy a bitek számozása jobbról balra történik, nullától kezdve). A! BI parancs azt is feltételezi, hogy van egy bit a veremben és egy írandó érték. A @BI parancs lecseréli a megadott paramétereket a kiválasztott bit értékére (0 vagy 1), a!BI0 és!BI1 parancsok a kiválasztott bitet 0-ra, illetve 1-re állítják, eltávolítva a paramétereiket a veremből, és a!BI1 parancs beállítja a kiválasztott bitet a verem harmadik elemének legkisebb jelentőségű bitjének értékére, és eltávolítja mindhárom paraméterét a veremből. Például, ha az X változó értéke egy bináris szám 101101, akkor a felsorolt ​​műveletek eredménye a következő lesz:

"X [addr.X] 3 @BI - X harmadik bitje, 0" X 3! BI - X egyenlő 100101,

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

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

A PARADISE nyelvben a memóriában található bájtkarakterláncokkal való munkavégzésre is vannak lehetőségek. Egy bájtkarakterlánc beállításához két paraméter kerül a verembe: a karakterlánc kezdőcíme (vagyis az első bájt címe) és a karakterlánc hossza (a benne lévő bájtok száma).

A !!!MB paranccsal egy karakterlánc összes bájtja hozzárendelhető egy (a veremben beállított) értékhez. Három paramétert használ fel a veremből: ahol b a hozzárendelt érték, a és l a bájtkarakterlánc kezdőcíme és hossza. Tegyük fel, hogy például nulláznia kell az elemeket a 3. és 10. bájtos TXT tömbtől (0:20). Ehhez futtassa a következő sort:

0 3 "TXT 8 !!! MB

ennek eredményeként a megadott tömb nyolc egymást követő eleme a 3-tól kezdve kap 0 értéket. Hasonló parancs !!!MW egy 16 bites szavak sorozatának azonos értékű kitöltésére szolgál (a szavak száma). A verem tetején van feltüntetve), és a parancsot! !! M - hosszú szavak sorozatának kitöltése.

Az! SB parancs bájtkarakterláncokat továbbít. Paraméterei:, ahol a1 és l az átvitt karakterlánc kezdőcíme és hossza, a2 pedig annak a karakterláncnak a kezdőcíme, amelyre az átvitel történik. Az SB parancs végrehajtása eredményeként az a2 címről egy l hosszúságú bájt karakterlánc kerül a memóriába, amely az átvitel végrehajtása előtt az a1 címen található karakterlánc pontos másolata. A forrás és a cél karakterlánc átfedheti egymást. Tegyük fel például, hogy az M (0:10) bájttömb elemeit a következőképpen kívánja mozgatni: M (10): = M (9), M (9): = M (8), ..., M (1): = M (0). Ehhez használhatja az! SB parancsot:

0 "M 10 C2 1+! SB

ennek eredményeként egy 10 bájtos karakterlánc egy bájttal elmozdul a memóriacímek növekedése felé.

Az! SB parancs kényelmes a karakterláncokkal való munkához (emlékezzünk arra, hogy minden karakter egy bájtba van kódolva). Lehetővé teszi például egy explicit módon meghatározott literális karakterlánc értékének hozzárendelését egy bájttömbhöz. Egy ilyen karakterlánc megadásához használjon szöveges literált, azaz. idézőjelbe tett karaktersorozat, például „SZÖVEG SZÓRÓ”. Ez a konstrukció, ha egy programban találkozik, az idézőjelbe zárt szöveget tartalmazó bájtkarakterlánc kezdőcímét és hosszát a verembe tolja. Ezeket a paramétereket ezután az SB parancs használhatja. Például a "TABLE" 0 "TN! SB fragmentum a TABLE literált elküldi a TN tömbnek.

Az SRCHB parancs egy karakterláncban keres egy megadott bájtot. Paraméterek:, ahol b az a bájt, amelynek első előfordulását kell megtalálni, a és n a keresési karakterlánc kezdetének címét, illetve hosszát adja meg. Ha n> 0, akkor a keresés a címről a + n-1 címre történik (a címek növekedésének irányában), ha n<0, то поиск ведется с адреса a до адреса a+n+1 (в сторону убывания адресов). В результате выполнения этой команды в стеке оказывается значение d, равное смещению относительно адреса a до первого вхождения байта b. Если такое вхождение не обнаружено, то d=n. Примеры:

#T "SZÖVEG" SRCHB

#A "SZÖVEG" SRCHB

#E "SZÖVEG" [# E, a, 4] 1- + -4 [# E, a + 3, -4] SRCHB [-2]

Befejezve az adatokkal való munkavégzés eszközeinek mérlegelését, térjünk ki az adatok számítógép külső memóriájában való tárolásának kérdésére, pl. mágneslemezeken. A PARADISE nyelvben van egy SAVE parancs<имя файла>a rendszer fő memóriájának másolatának lemezre mentéséhez a felhasználó által definiált objektumokkal együtt. Ebben az esetben a VAR, VCTR, ARR műveletek által az adatok számára lefoglalt memóriaterületek nem jelennek meg a lemezen. Ennek eredményeként a mentett rendszer lemezről történő indításakor a megadott adatok értékei nincsenek meghatározva (a program végrehajtása során kell meghatározni). A legtöbb esetben ez indokolt, hiszen nem kell lemezmemóriát költeni a munkaváltozók, pufferek stb. tárolására. Vannak azonban olyan adatok, amelyek értékét közvetlenül a rendszer lemezről történő elindítása után kell meghatározni. Példa erre egy olyan változó, amely valamilyen külső eszközzel való adatcsere sebességét tárolja. Más árfolyamra váltáskor elegendő ennek a változónak az értékét megváltoztatni anélkül, hogy a programon bármiféle javítást végeznénk.

Egy jelzés a processzor számára, hogy bizonyos adatszerkezet elemeinek értékeit a SAVE paranccsal a lemezre kell kiadni, például a szerkezetdefiníció előtt elhelyezett FIX előtag, pl.

FIX VAR SPEED 20 FIX BYTE VCTR TÁBLÁZAT

Az így definiált adatstruktúrákkal végzett munka nem különbözik a szokásos módon definiált struktúrákkal való munkavégzéstől.

Processzorvezérlő parancsok

A PARADISE nyelvben van egy kis parancscsoport, amely a DSPP processzort, vagy inkább a DSPP processzor emulátorát vezérli.

Az RESTART parancs a processzor újraindítását idézi elő. Ebben az esetben a verem törlődik, az üzenet kiadásra kerül

DSSP verzió XX.XX.XX

Ingyenes XXXXXW

és a processzor parancsbeviteli készenléti módba lép. Ez a parancs hasznos a programok hibakeresésekor. Akkor is végrehajtódik, ha hibaállapot lép fel: az index túllépi a tömb határait, a szabad memória kimerült stb.

A \ G parancs a program végrehajtásának folytatására szolgál, miután egy meghatározatlan szónál megállt. Ha egy eljárás végrehajtása során a processzor egy nem definiált szóra való hivatkozást talál, üzenetet ad ki:

állj meg nem tudom<слово> .

ahol a pont a DSPP-processzor meghívása, jelezve, hogy a processzor leállított állapotban van egy meghatározatlan szóra. Ebben a módban bármilyen processzorparancsot végrehajthat, csakúgy, mint a normál módban, amikor a csillag a prompt. Kétféleképpen lehet kilépni ebből a módból - vagy a \ G parancs végrehajtásával (ekkor a processzor folytatja a megszakított eljárás végrehajtását, kihagyva a nem definiált szót), vagy a RESTART paranccsal.

Az EXEC egy olyan eljárás végrehajtására utasítja a processzort, amelynek címe a verem tetején található. Az eljárás címének lekéréséhez használja a "" parancsot (két aposztróf), majd írja be az eljárás nevét. Például a parancs hatására

az ABS eljárás címe a verembe kerül. Ezek a parancsok lehetővé teszik, hogy egy eljárást paraméterként adjon át egy másik eljárásnak.

A már említett SAVE művelet a processzorvezérlő parancsok csoportjába tartozik.<имя файла>, amely előírja a rendszer másolatának lemezre mentését, valamint parancsokat, amelyek meghatározzák a processzor bemenetére továbbított szöveges információ beviteli forrását. Az elsődleges forrás a kijelző billentyűzete.

LOAD parancs<имя файла>átkapcsolja a bemenetet a megadott nevű lemezfájlra. PF parancs – parancsokat ír elő a szövegszerkesztő pufferéből. A TEXEC parancs egy szöveges karakterláncot ad át a processzor bemenetének, melynek paraméterei a veremen vannak beállítva. A megadott forrásokban található parancsok végrehajtásakor a bevitel automatikusan átvált a kijelző billentyűzetére.

Szótár parancsok

A processzor által észlelt bemeneti utasításfolyam különösen tartalmazhat utasításokat a belső reprezentációba fordítást előidéző ​​eljárások és adatok meghatározására és az eljárástörzs tárolására vagy a megadott adatokhoz memória lefoglalására, valamint a lefordított nevének megadására. eljárást vagy adatstruktúrát a DSPP szótárba.

A szótár megfeleltetést hoz létre a külső (a program szövegében használt) nevek és a belső reprezentációban az ezeknek a neveknek megfelelő objektumok címei között. Egy eljárás definíciójának vagy egy megnevezett adott leírásának feldolgozásakor a feldolgozó szótárt épít fel, amelyben egy új szótári bejegyzést képez, amely tartalmazza az eljárás nevét (pontosabban a név első 7 betűjét) és címét. test vagy adatleíró, amely ehhez a névhez van hozzárendelve.

A felülről lefelé irányuló programozásban az eljárástestek hivatkozásokat tartalmazhatnak még nem definiált objektumokra. Ebben az esetben a szótárban szótári bejegyzések (fejlécek) keletkeznek, kétértelműség jellel jelölve. Az UNDEF parancs az összes nem definiált név megjelenítésére szolgál a képernyőn.

A szótár felépítése során lehetőség nyílik alszótárak - elnevezett szótári bemeneti gyűjtemények - kialakítására. Az alszótár általában egy feladathoz kapcsolódó eljárásokat és adatstruktúrákat kombinál. Az alszótárak és más programobjektumok nevei közötti összetéveszthetőség elkerülése érdekében az alszótár nevének $ karakterrel kell kezdődnie. Az alszótárak kiterjesztése vagy használata speciális parancsokkal nyitható meg és zárható be, amelyek a következőket tartalmazzák (a $ v név bármely érvényes alszótárat jelent).

GROW $ v - növelje a $ v alszótárt, azaz amíg másként nem rendelkezik, írja be az összes összeállított eljárás és adat nevét a $ v alszótárba;

USE $ v - megnyitja használatra (nevek kereséséhez benne) az alszótárat $ v;

SHUT $ v - zárja be a $ v alszótár használatának lehetőségét;

CSAK $ v - csak a $ v alszótár legyen elérhető;

MÉGSEM – CSAK az utolsó törlése.

Létezik még a? $ Parancs, amely a kijelzőre írja ki az állapotukhoz tartozó összes alszótár nevét – az alszótár nyitva vagy zárva van a kereséshez. A szótár, amelynek neve felül van nyomtatva, mindig növekszik.

A PRSP alapeljárásai egy $ PRIME nevű alszótárat alkotnak, amely alapértelmezés szerint nyitva áll a használatra és a bővítésre, vagyis ha nem volt parancs, amely egy másik alszótár kiterjesztését írja elő.

Tegyük fel például a műveletet? $ Kinyomtatta az alszótárak következő állapotát.

$ PRG nyitva

$ PRIME nyitva

$ EDIT lezárva

$ PRIME nyitva

A RENDSZER zárva

Ez azt jelenti, hogy a $ PRG jelenleg bővíthető és használható, a $ PRIME csak használható, a $ EDIT és a SYSTEM pedig nem elérhető. Vegye figyelembe, hogy egy alszótár több azonos nevű szakaszból állhat.

Vannak parancsok a szótár bemeneteinek egy adott halmazának törlésére a szótárból, és esetleg a kapcsolódó belső objektumokról. Például a FORGET $ v parancs a GROW $ v parancs utolsó végrehajtása után a szótárba beírt összes nevet (nem csak a $ v alszótárban) törli az ezekkel a nevekkel jelzett objektumokkal együtt, és törli a szótár bővítését. az általa beállított $ v alszótár. A PROGRAM $ v parancs ugyanazt teszi, mint a szekvenciális FORGET $ v GROW $ v parancsok. Egy ilyen parancs jelenléte bármely program elején azt eredményezi, hogy a program újrafordításakor a régi másolata törlődik, és szótár jön létre a program új példányának objektumainak tárolására. Például, ha végrehajtjuk a FORGET $ PRIME műveletet egy szótáron, amelynek állapota fent volt látható, egy új állapotot kapunk:

$ EDIT lezárva

$ PRIME nyitva

A RENDSZER zárva

A FORGET parancs végrehajtása során a törölni kívánt szakaszok nevei jelennek meg.

Vegye figyelembe, hogy a SYSTEM alszótár neve nem $-lal kezdődik. Ez megengedhető, de azt eredményezi, hogy a FORGET és RPOGRAM parancsok alkalmazása ebben az alszótárban nem okoz semmilyen műveletet (a SYSTEM alszótár eleve nem létezik számukra).

Tekintettel arra, hogy az elkészült programban az eljárások túlnyomó többségénél nincs szükség külső névvel történő fellebbezésre, lehetőség van nevük törlésére a szótárból a hozzájuk tartozó belső objektumok megőrzése mellett. A CLEAR $ v parancs eltávolítja az összes nevet a $ v alszótár minden szakaszából, kivéve azokat, amelyeket a programszövegben (meghatározásukkor) a :: (két kettőspont) előtag előz meg. Például annak eredményeként, hogy a processzor végrehajtja a következő programrészletet:

::: X + Y + X;

CLEAR $ EXAM csak az X és X + nevek maradnak meg a $ EXAM alszótárban, az Y szótárbejegyzés törlődik (bár a belső ábrázolásban az Y szónak megfelelő változó megmarad).

I / O parancsok

A felhasználó és a DSPP közötti interakció fő eszköze a terminál, amely általában egy katódsugárzó billentyűzettel ellátott kijelző. A terminál a kezdeti bevitelre, a programok szerkesztésére és hibakeresésére, az adatok előkészítésére és az összes rendszerkezelésre szolgál. A programokat és az adatokat, valamint magát a forgácslapot a rendszer fájlként menti lemezre, és kinyomtathatja őket egy nyomtatón. A következő eszközök állnak rendelkezésre az I / O vezérléséhez a PRSP alapvető eljárásaiban.

A terminál működésének programozását a számok, egyedi betűk és betűsorozatok (sorok) bevitelére és kiadására szolgáló parancsok, valamint néhány további parancs biztosítja.

A TIB (Terminal Input Byte) parancs a terminál billentyűzetén egy gombnyomásra váró ciklust kezdeményez. Egy billentyű lenyomásakor a megfelelő betű 8 bites kódja a verembe kerül, mint a csúcs legkevésbé jelentős bájtja, a legjelentősebb 3 bájt pedig nullákat tartalmaz. Az így beírt betű másolata megjelenik a kijelzőn. Létezik még egy TRB (Terminal Read Byte) parancs, amely abban különbözik a TIB-től, hogy a beírt betű kódjának a verembe tolását nem kíséri ennek a betűnek a megjelenítése a kijelzőn.

A TIN (Terminal Input Number) parancs egy ciklust indít el, amelyben belép a verembe, és megjeleníti a billentyűzetről beírt számot a kijelzőn. A beírt számnak egy számsorozatnak kell lennie, amely mínuszjellel kezdődhet és végződhet ... Az I/O módtól függően a számokat a processzor hexadecimális, decimális, oktális vagy bináris értékként értelmezi. Ha egy hexadecimális szám egy betűvel jelölt számjeggyel kezdődik, akkor előtte egy 0 számjegy kerül beírásra. A beírt szám egy bináris komplement kódra kerül lefordításra, amely egy 32 bites egész értékként kerül a verembe. hosszú szó, pl a 2 súlytól balra elhelyezkedő bitek levágásával a legjelentősebb bit 31 hatványára.

Minden TIN parancs egy számot ír be. Ha egy sorba kell beírni egy számsort, akkor azokat a gomb megnyomásával el kell választani , és a TIN parancsot újra végre kell hajtani a programban szereplő egyes számok beviteléhez.

A billentyűzetről beírt, n karakterből álló szekvencia a TIS (Terminal Input String) paranccsal bekerül a számítógép memóriájába n bájt formájában, amelyek szekvenciálisan növekvő címeken helyezkednek el, az a címtől kezdve a TIS (Terminal Input String) paranccsal, amely előtt az a cím és a az n betűket a verembe tolják... Például legyen deklarálva egy megfelelő hosszúságú X bájtvektor. 9 karaktert kell beírnia, értékeit hozzárendelve ennek a vektornak az elemeihez, a nulla elemtől kezdve:

Hasonlóképpen, a TOS parancs egy n bájtból álló karaktersorozat kimenetét állítja be a kezdőcímmel:

A programban közvetlenül szereplő szöveges elemek terminálra történő kimenetét a konstrukció biztosítja

."<текст>"

Például, hogy a program egy bizonyos töredéke végrehajtásakor az ENTER VARIANT NUMBER szöveg jelenjen meg a kijelzőn, a töredéknek tartalmaznia kell az "ENTER VARIANT NUMBER" bejegyzést.

A TON (Terminal Output Number) parancs megjeleníti az alveremből előugró számot, és felül kell megadni a kimeneti mező hosszát. A megjelenített szám a mező jobb széléhez igazodik, a bal oldali szabad helyeket szóközökkel töltjük ki, és ha a szám hossza meghaladja a megadott mezőhosszt, akkor a bal oldalt levágjuk. Tizedes I/O módban a negatív számok mínuszjellel kezdődnek.

A TOB (terminál kimeneti bájt) parancs azt a betűt írja ki, amelynek kódját a verem tetejének alsó bájtja határozza meg. A köteg mélysége 1-gyel csökken.

Vannak olyan parancsok is, amelyek közvetlenül vezérlik a kurzort:

CR - ugrás egy új sor elejére,

SP - szóköz, azaz mozgassa egy pozíciót jobbra.

A BELL parancs rövid sípolást ("bell") ad.

Néha a terminállal való kommunikáció során ellenőrizni kell, hogy a billentyűt lenyomták-e már, és hogy a kijelző teljesítette-e már az előző kimeneti parancsot. Ezt a TTI (Terminal Test Input) és a TTO (Terminal Test Output) parancsokkal lehet megtenni, amelyek 1-et hagynak a veremen, ha a megadott esemény megtörtént, és 0-t egyébként.

A nyomtatókimeneti parancsok hasonlóak a terminálkimeneti parancsokhoz, és hasonló emlékeztetőn alapulnak, amelyben az LP (Line Printer) karakterek vagy a TO helyére kerültek, vagy bevezetőként kerültek hozzáadásra. Például LPCR - ugrás egy új sor elejére, LPSP - szóköz, LPN - számot ad ki az alsorból a csúcs által meghatározott mezőben, LPB - egy karaktert, LPS - egy karakterláncot ad ki. Létezik még az [N] LPT parancs, amely a nyomtatófejet a nyomtatott sor N pozíciójába mozgatja, valamint az LPFF parancs, amely egy papírlapot adagol. Ha kifejezetten meghatározott szöveget szeretne nyomtatni, kényelmesen használható szövegliterál és LPS parancs, például:

"FUNKCIÓÉRTÉKEK TÁBLÁZATA" LPS

Megszakítások és kivételek kezelése

A perifériák programozása során szükségessé válik a megszakítások kezelése. A DSPP-ben ez a feldolgozás a következőképpen van programozva. A megszakítások kezelésére szolgáló program egy normál PRSP eljárás, melynek definíciója előtt van egy INT előtag, például INT: A!1+ I; Az INT előtag biztosítja, hogy a processzor állapota a megszakítás során mentésre kerüljön, és a megszakítás feldolgozása után visszaálljon.

Ha egy alkatrészprogramot egy adott megszakításhoz szeretne kapcsolni, használja a LINK parancsot:

<адрес вектора>LINK<имя процедуры>végrehajtásakor a megszakításkezelő rutin hívása a megfelelő vektor mentén íródik. A LINK parancs végrehajthatja az eljárás statikus összekapcsolását megszakítással, amely a program fordításakor történik, és dinamikusan a program végrehajtása során.

A processzor megszakítása az a mód, ahogyan a rendszer értesül a külvilágban bekövetkezett eseményről. Azonnali feldolgozást igénylő események is előfordulhatnak a programban. Ezeket kivételes helyzeteknek nevezzük. Példák ilyen helyzetekre: osztás nullával, kommunikációs hiba az eszközzel, a bemeneti fájl vége stb.

A DSPP-ben a kivételek rögzítése parancsmegszakításokkal történik. A parancsmegszakítás egy elnevezett művelet, amely válaszeljárást hív meg, és a következőképpen deklarálható:

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

Például:

TRAP S1. "S1 helyzet."

Az első esetben az X eljárás a végső reakció az S megszakításra, a második esetben, amikor S1 megszakítás történik, a terminál üzenetet kap: S1 helyzet.

Az a program, amelynek végrehajtása során a megszakítás előfordulhat, az intercept paranccsal beállíthatja rá a reakcióját. A DSSP kétféle elfogást biztosít: ON és EON. Az elfogási parancsok csak eljárásokon belül használhatók, és a következő formátumúak:

TOVÁBB<имя прерывания> <реакция>

EON<имя прерывания> <реакция>Például:

: A ... ON S. "Megszakítás S" ...;

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

Az ON és az EON különböző típusú reakciókat állít be. Ha az ON paranccsal új reakciót állítunk be, akkor megszakítás esetén egy reakcióeljárás fut le, amely után a megszakított program fut tovább. Ha a reakciót az EON paranccsal állítjuk be, akkor az operandusverem először azt a mélységet veszi fel, amivel az EON végrehajtás pillanatában rendelkezett, majd végrehajtódik a reakció, majd annak befejezése után az az eljárás végrehajtása, amelyben az EON parancs volt. használat azonnal megszűnik.

Nézzünk néhány példát. Az M eljárás karaktereket ír be a terminál billentyűzetéről, és ellenőrzi, hogy számjegy-e. Ha a beírt karakter nem számjegy, az ND megszakítás megemelkedik. TRAP ND. "Egy számjegyet sem." : M RP M1; : M1 TRB [B] C # 0< C2 #9 >& 0 IF + ND [B] TOB;

Az ND megszakításra adott végső válasz a következő üzenet: Nem számjegy.

Ha M-et a P1 eljárásból hívjuk, amelynek saját válasza van az ND megszakításra: P1 ON ND PR1 M; : PR1 [B] CR. „Hiba”. D # 0 [# 0]; majd egy nem digitális karakter beírásakor az ND megszakítást az ON típusú PR1 reakcióprogram dolgozza fel, ami miatt a következő üzenet jelenik meg egy új sorból: Error. A beírt betű helyére a 0 betű lép, ezután az M tovább működik.

Ha M meghívásra kerül a P2 eljárásból: P2 EON ND PR2 M; : PR2 CR "Hiba. Bejegyzés vége." ; majd egy nem digitális karakter beírásakor az ND megszakítást az EON típusú PR2 reakcióprogram dolgozza fel, ami miatt a következő üzenet jelenik meg egy új sorból: Error. Bemenet vége, majd a P2 kilép. Ekkor az operandus verem üres lesz.

Szükség esetén a reakcióprogramban ismét megszakítás emelhető, így kiterjesztve a magasabb szintű programokra. Ebben az esetben a megszakítást vagy a befoglaló eljárásban az elfogási parancsban megadott program, vagy a végső reakció kezeli. Például, ha a következőképpen módosítja a PR2-t: PR2 CR "Hiba. Bejegyzés vége." ND; akkor a terminálnak kiadott üzenet a következő lesz: Error. Belépés vége. Nem szám.

A DSPP-be több beépített parancsmegszakítás is van, amelyekre a reagálás felhasználói programokban biztosítható.



 
Cikkek tovább téma:
ItemPhysic Full Mod – valósághű fizika a Minecraftban
Mod Realistic Item Drops - valósághűbbé teszi az elejtett cseppet (tárgyat), most már nem a levegőben fog forogni, hanem a földön fog feküdni, mint egy normál eldobott tárgy, a felvételhez rá kell kattintani .
Hogyan kell inni a
A menstruációs ciklus megsértése gyakori probléma a nőgyógyászatban. Pár napos késéssel nem szabad radikális módszerekhez folyamodni, mert számos tényező kiválthatja: a munkahelyi stressztől a megfázásig. De ha a menstruáció hiánya
Tulajdonságok a sikerhez
Milyen tulajdonságokra van szükség a sikerhez. A sikerhez bizonyos emberi tulajdonságokra van szükség. Nikolai Kozlov hivatásos pszichológus a sikeres ember tíz tulajdonságáról beszél. 1. A test egészséges és energikus. 2. Örömteli
Az aranyhorda alkotója és uralkodója
Az Arany Horda (Ulus Jochi, törökül Ulu Ulus – "Nagy Állam") egy középkori állam Eurázsiában. Enciklopédiai YouTube 1/5✪ Mi az az Arany Horda? ✪ Arany Horda. Oktatóvideó Oroszország történetéről, 6. osztály ✪ Mongol invázió és arany