Kas araabia keel on paradiisi keel? Paradiisi keel Lisatoimingud andmete ja mäluga töötamiseks

18. detsember on ülemaailmne araabia keele päev. Puhkuse kehtestas ÜRO 2010. aastal ja see on üks kuuest ÜRO ametlikust keelest. Viimastel andmetel on maailmas 300 miljonit inimest, kes räägivad araabia keelt ja selle dialekte. Veelgi enam, 240 miljoni inimese jaoks on see kohalik. Araabia keel ja islami religioon on omavahel lahutamatult seotud. Üks on mõeldamatu ilma teiseta, sest poolteist aastatuhandet on maailma moslemid lugenud viis korda päevas araabiakeelseid palveid. Sellel ilmutati Püha Koraan ja prohvet Muhammed (rahu olgu temaga) rääkis.

Groznõi vaimulikud tähistasid seda tähtpäeva omal moel. Tšetšeenia südame mošee imaam Magomed Dadakhaev pöördus linnaelanike poole. Ta selgitas araabia keele rolli moslemi elus:

Ilma araabia keelt rääkimata ei saa inimene islamist aru. Seetõttu on see keel olnud moslemite seas väga austatud juba ammusest ajast. Prohveti (rahu olgu temaga) religiooni uurimise vajalik tingimus on araabia tekstide analüüs, mis peaaegu kõik on kirjutatud väga kaua aega tagasi. Tänapäeva araabia keeles on üle 12 miljoni sõna (võrdluseks – vene keeles on neid 131 000, inglise keeles umbes miljon...). See on väga rikas ja keeruline keel. Kui õppisin Süürias islamiülikoolis, tõi meie filoloogist õpetaja meile järgmise näite: araabia keeles ulatub vaid ühe sõna “kaamel” sünonüümide arv kuue tuhandeni! Selle grammatika on samuti väga keeruline ja mitmetahuline. Selle õppimine nõuab parajal määral intellektuaalset ja tahtlikku pingutust. Seetõttu pole prohveti (rahu olgu temaga) Koraani ja Hadithi tõlgendajate hulgas amatööre. On peaaegu võimatu mõista püha teksti tähendust ilma kindla araabia keele sõnavarata ja selle keele süntaksi, semantika ja foneetika tundmiseta. Mõnikord kohtate inimesi, kes nimetavad end Koraani asjatundjateks. Nad tsiteerivad Kõigevägevama Sõnumit ja annavad inimestele nõu. Kui aga küsida neilt teadmiste allika kohta, saate vastuseks: "Ma lugesin tõlget." Sellised inimesed on islami jaoks väga ohtlikud, sest teadmata, mida nad teevad, on nad võimelised tekitama segadust ja ebatäpsusi Kõigevägevama sõnumi tõlgendamisel. Islami õppeasutustes kasutatakse laialdaselt järgmist õpetamismetoodikat: algklasside õpilased õpivad mitu aastat eranditult araabia filoloogiat. Ja alles pärast seda, kui nad on piisavalt omandanud vajaliku mahu materjali, saavad nad juurdepääsu Koraani tekstide uurimisele. Seega on araabia keel omamoodi hüppelaud islami kohta teabe omandamiseks. Pealegi on araabia keel, mida paradiisi elanikud räägivad. Au Jumalale, et Ta meid moslemiks lõi! Mida ilus ja rikkalik araabia keel meile oma tahte mõistmiseks on andnud!

1. See on lugu sellest, kuidas inimesed lakkasid üksteisest mõistmast ja ilmusid arvukad kaasaegse maailma keeled. Kui populaarne on see müüt erinevate rahvaste seas ja millised on selle tõlgendused?

2. Paabeli torni müüt ei põhine ainult veendumusel, et algselt rääkis kogu inimkond ühte keelt, vaid ka asjaolul, et see keel oli “ideaalne”: esemete nimetused andsid edasi nende tõelise olemuse. Kas teiste kultuuride esindajad jagavad neid seisukohti ja kas nad usuvad, et nende keel on originaalile kõige lähedasem?

Esimesele küsimusele pakub vastus Vana Testamendi 1. Moosese raamat 11:1-9, mis räägib, et Jumal otsustas inimkonda karistada, pannes selle peale keelte segaduse needuse. Vastuse teisele küsimusele võib leida kirjakohast 1. Moosese 2:19. Selles osas tõi Jumal kõik loomad ja linnud Aadama juurde, et nad kuuleksid, kuidas Aadam neid nimetab, ja „milleks inimene igat elavat hinge nimetab, see on selle nimi”. Ekspromptne ringkäik erinevatesse kultuuridesse võimaldab meil näha, kuidas neid probleeme käsitletakse. Neist esimese osas nõustuvad paljud Vana Testamendiga: keelte mitmekesisus on Issanda karistus või vähemalt mõne ebasoodsa teguri tagajärg.

Ühe Austraalia hõimu legend räägib vanade inimeste söömisest. Hõimud, kes sõid keha ise, rääkisid "puhast" keelt ja need, kes sõid siseorganeid, rääkisid "ebapuhast" keelt. Aafrika kabillased usuvad, et konflikti tagajärjel hakkasid inimesed rääkima eri keeli. Ühe Assami hõimu sõnul oli keelte segaduse põhjuseks asjaolu, et kolm last jahtisid kord rotti. Üks Amazonase hõimudest on arvamusel, et Jumal eraldas inimesed ja nende keeled, et nad muutuksid Temale kuulekamaks. Ameerika põliselanike, Maidu hõimu (California) seas arvatakse, et alguses räägiti sama keelt, kuid ühel päeval matusetseremoonial lakkas see keel olemast ühtlane. Irokeesid usuvad, et keelte eraldumise põhjuseks oli peretüli, milles hukkus laps. Kuid oletus, et mitmekeelsed keeled on needus, ei ole nii laialt levinud, kui tundub. Maailmas on palju versioone, mille kohaselt jagunemine toimus looduslike protsesside tulemusena.

Vana-India püha hümn "Rig Veda" mainib, et kunagi oli Vak ("sõna") ja jumalad jagasid selle mitmeks vormiks. Indohiina poolsaare rahvad räägivad kuuest rassist, millest igaühel oli oma keel kõrvitsast välja roniva varre kujul. Quiché hõimul (Guatemala) on müüt, et inimesed elasid koos ja rääkisid sama keelt, kuni nad rühmadeks jagunesid. Igaüks valis endale jumala ja hakkas rääkima oma keelt.

Lõuna-Ameerika navahode loomismüüt räägib "muutuvast naisest" ja tõeliste rahvaste esilekerkimisest, kes kõnelesid tema keelt. Niisiis lõi ta naaberrahvad - pueblod, Mehhiko aborigeenid ja teised ning nad rääkisid oma keeli, levitades neid erinevates suundades. Islamis õpetab Koraan, et Aadam ei mõelnud välja nimesid ega midagi muud, vaid Jumal õpetas talle kõike. Keelte mitmekesisus on täiesti loomulik ja on Allahi väe ilming. Kõik inimesed on võimelised mõistma Koraani ilmutusi, olenemata sellest, mis keeles need on kirjutatud.

Paljude maailma rahvaste mütoloogilisel süsteemil pole seletust keelte segadusele, mis on lihtsalt iseenesestmõistetav ja seetõttu ei saa see vastata meie küsimusele. Peaaegu kõigis maailma kultuurides mainitakse aga “ideaalset” keelt (2. küsimus). Eespool mainisime Austraalia hõimu, kes usub, et mõned inimesed (kes toituvad inimkehast) räägivad "puhast" keelt, mis annab edasi asjade tõelist olemust. Vanade egiptlaste arvates andis jumal Ptah kõigele nimed, nii sai keelest jumalate kingitus. Hiinas õpetasid "õiget" keelt müütilised keisrid. Koraan käsitleb keelte mitmekesisust ühe keele jagunemisena, mis hõlmab kõiki teisi.

Kõikjal püüavad inimesed aru saada, kuidas objekti nimi selle olemust paljastab. Eeldatakse, et kas “ideaalne” keel, mis kirjeldab subjekti tõelist olemust, eksisteerib tänapäeval või on see minevik. Teine eeldus toimib tõe ja harmoonia otsimise eelduseks maailmas. Tundub, et meie teadvusesse on kinnistunud ideed keele seostest reaalse maailma ja inimeksistentsiga. Sellega seoses kerkib küsimus, mis kõlas esmakordselt Platoni dialoogis “Cratylus” ja mis on sellest ajast alates olnud pideva arutelu objektiks: kas seos nime ja asjade objektiivse olemuse vahel on loomulik (tekib emakeelena kõneleja subjektiivses teadvuses). ) või on see seos tingimuslik ja juhuslik?

Keel on märgisüsteem, mis võimaldab liikuda mõiste tähenduse ja tähenduse juurest selle määramiseni.

Inimene on verbaalne olend ja erinevalt loomadest suhtleb omasugustega keelt kasutades. Mõnikord räägitakse "loomade keelest", kuid on selge, et selline väljend on tinglik - oma rikkuse ja võimaluste poolest ei sarnane loomade keel inimese keelega. Inglid ei vaja suhtlemiseks üldse keelt – neid on raske ette kujutada vene või inglise keelt rääkimas.

Keele funktsioonid võivad olla erinevad – lisaks info edastamisele aitab see väljendada tundeid ja hinnanguid.

Kas Pühakirja saab tõlkida?

Kiriku keel on palve, jumalateenistuse ja pühakirja keel.

Mõnes religioonis eksisteerivad pühad tekstid esialgu ühes keeles ja neid peetakse põhimõtteliselt tõlkimatuks. Seega koostati moslemi Koraan algselt araabia keeles. Pealegi usuvad moslemid, et just nii see raamat aegade alguses loodi.

Juudi kirjatundjad kaldusid ka idee poole, et pühad tekstid on võimalikud ainult heebrea keeles. Kristliku Pühakirja puhul see nii ei olnud.

3. sajandil eKr. Valmis nn seitsmekümne tõlge - Septuaginta - Vana Testamendi tõlge kreeka keelde. Veelgi enam, mõned uurijad usuvad, et just Septuaginta mängis Pühakirja rolli intertestamentaalsetel aegadel.

Just Septuaginta olemasolu sai peamiseks argumendiks Pühakirja põhimõttelise tõlgitavuse kasuks. Siiski on veel tugevam. Nüüd peetakse tõestatuks, et Kristus rääkis apostlitega aramea keeles. Kuid evangeeliumide koostajad edastasid need vestlused kahtlemata kreeka keeles.

Nüüd on teaduslik suund – keelelised rekonstruktsioonid. Nende koostajad püüavad mõista, kuidas need dialoogid originaalis kõlasid. Kuid see on endiselt teadusliku uurimistöö objekt.

Kas see on tõesti taevas?Külm?

Keele tõlkimisel keelde tekivad mõnikord probleemid, kuna keeled ei ole grammatiliselt identsed. Erinevate keelte sõnade tähendused ja varjundid on samuti erinevad.

Näiteks väljend “paradiis on roheline ja jahe koht” näitab selgelt, et Pühakiri on loodud kuuma kliimaga riikides, kus “jahedus” on pigem meeldiv. Vene keeles selliseid assotsiatsioone vaevalt tekiks. Ja tegusõna “chill out” tähenduses “lõõgastuda”, “head aega veeta” tuli vene keelde jälituspaberina heebrea keelest kreeka keeleni.

Kas kõik slaavlased said Piiblist aru?

Meie esivanematele ei toodud Pühakirja vene keeles. Cyril ja Methodius – Thessaloniki kreeklased – töötasid välja uue kirjakeele, mis põhines Thessaloniki slaavlaste kõnekeelel.

Maailmas on palju rahvaid, kes kasutavad keeli, millel pole kirjakeelt. Kuni me räägime igapäevaelust, pole probleeme. Kuid niipea, kui religioosne tekst või filosoofiline traktaat on vaja sellesse keelde tõlkida, tuleb keelt parandada, mida Cyril ja Methodius ka tegid.

Kui eeldame, et slaavi hõimudel oli mitu tuhat aastat tagasi lihtsam omavahel kokku leppida kui tänapäevastel slaavi rahvastel, siis on meil õigus - keeled olid lähemal. Kuid see ei tähenda, et Cyrili ja Methodiuse tehtud Pühakirja tõlge oleks Kiievi ja Novgorodi elanikele arusaadavam – kirjalik kirjakeel oli erinev.

Võib-olla on see Venemaa olukorra eripära, kuna vene kirjakeel on lähemal kirikuslaavi keelele kui Moskva murdele. Tegelikult läks kogu kirikuslaavi keel vene keelde kui "kõrge rahu". Näiteks moodustuvad isegi tänapäevased osasõnad - nagu nutt, jooksmine - täpselt kirikuslaavi mudeli järgi - vanas vene keeles oleks see "nutt", "jooksmine".

Mõnikord jäeti vanavene analoogid üldse välja - "hea" ja "bologoe" nimes "Bologoe"; “shelom”, mis on erinevalt “kiivrist” ainult eepostes.

Keeled on lähedased ja... paralleelsed

Vana-Venemaal valitses diglossia olukord. See ei ole sama mis "kakskeelsus". Diglossia on kahe keele paralleelne kasutamine ühiskonnas. Näiteks 19. sajandil kasutati nii vene kui prantsuse keelt. Prantsuse keel oli kõrgseltskonna keel, kuid põhimõtteliselt võis tõlkida mis tahes teksti.

Diglossias keeled oma kasutusvaldkonnas ei kattu. Nad rääkisid vana vene keeles ja oskasid igapäevaseid märkmeid kirjutada vanas vene keeles. Kuid nad palvetasid kirikuslaavi keeles.

Selline olukord oli juba enne Peetrust, 18. sajandil lagunes see järk-järgult. Nüüd võivad teadus ja kirjandus areneda vene keeles, kuid kirikuslaavi keeles on endiselt alles ainult palved. Tõlgi reklaam kirikuslaavi keelde ja see näeb välja nagu nali või jumalateotus.

Preester või karjane?

Me elame ainulaadsel ajastul. Tsaari-Venemaal sai Piiblit lugeda vene keeles, Vana-Venemaal kirikuslaavi keeles. Kuid enamik inimesi oli kirjaoskamatud või polnud piisavalt haritud, et Pühakirja lugeda ja mõista.

Nõukogude ajal said kõik kirjaoskajad, aga Pühakirja teksti polnud.

Nüüd on kirjaoskus endiselt säilinud ja tekstid on kättesaadavad.

Lisaks Pühakirjale endale kutsutakse meid valdama teatud arvu slaavi tekste - palvetest jumalateenistuseni. Tõsi, olemasolev tõlge vene keelde on mõnevõrra raskesti mõistetav. 19. sajandil kandsid tõlkijad slaavisme sageli tõlkes, kuna neil polnud analooge.

Nii tõlgiti fraas "Mina olen hea karjane". Ja siin on mõningaid raskusi. Sõnasõnaline tõlge kreeka keelest oleks: "Ma olen hea karjane", kuid sellist tõlget peetakse madalaks. Teisest küljest tajub lihtne kuulaja nüüd ülevat "karjast" pigem "preestrina". Siiski tuleb tunnistada, et paljude piibliütluste sõnasõnaline tõlge vene keelde on võimatu - fraasi "lapse huulte kaudu räägib tõde" ei tajuta filosoofilise ütlusena.

Aga üldiselt takistab slaavikeelse piibliteksti tajumist pigem tähenduse mittemõistmine, mitte sõnadest.

Omaette raskuseks on grammatilised struktuurid. Näiteks on mitmeid täiustusi, mis pärinevad kreeka keelest. "Anna andeks patud ja üleastumised" tähendab lihtsalt kõigi patud andeks andmist. Sellised konstruktsioonid nagu "Ma olin vihast vihane" ja "Ma armastasin armastusega" on sarnased.

Probleemid tekivad ka pühade tekstide tõlkimisel teistesse keeltesse (kuigi rahvad, kelle keelde pole Pühakirja veel tõlgitud, moodustavad ehk 5℅ Maa elanikkonnast). See tähendab, et töö, mida Cyril ja Methodius slaavlaste heaks tegid, jätkub.

Cyril ja Methodius polnud esimesed – enne seda olid tõlked etioopia ja gooti keelde. Pärast Cyrilist ja Methodiust tõlkis Stefan Permist Pühakirja zyryani keelde.

Tõlked pühad ja profaansed

Kas iga tõlget peetakse pühaks tekstiks? Ei, aga ainult niivõrd, kuivõrd see on kirikukogukondades aktsepteeritud. Näiteks sinodaali tõlge liturgilise tõlkena ei ole keelatud, kuid seda ei aktsepteerita. Kuid sellisena kasutavad seda protestandid, näiteks Venemaa baptistid.

On isegi kaasaegseid protestantismi liikumisi, mis usuvad, et piiblitekst peaks olema kõigile kättesaadav. Samuti avaldatakse piiblilugudel põhinevaid koomikseid.

Uue Testamendi tekstiga probleeme pole – selle allikas on kreeka keeles teada. Kuid Vana Testamendi sinodaalse tõlke aluseks oli heebrea tekst. Fragmendid kreekakeelsest tõlkest lisati alles siis, kui lahknevused olid olulised.

Kaasaegses versioonis oleks tore, kui oleks kaks tõlget – nii juudi masoreetlikest tekstidest kui ka kreeka keelest. See oleks mugav neile, kes ei oska mõlemat keelt.

Vastused küsimustele

Pärast kõnet esitati peapreester Aleksandrile mitu küsimust:

Mis keelt Aadam rääkis?

- Raske öelda. Ühest küljest muutub keel elus olles. Kuid keegi ei tea, kas see oli keelte uus omadus, mis ilmus pärast Paabeli torni ehitamist.

Kuid igal juhul erines Aadama keel ilmselt ühestki teisest olemasolevast keelest, sealhulgas heebrea keelest.

Kas praegu käib arutelu jumalateenistuste vene keelde tõlkimise üle?

– Seda ideed arutati juba enne revolutsiooni ja renoveerijad selle osaliselt kompromiteerisid. Nad kõik ei teeninud vene keeles, kuid ideed toetasid nemad.

Piibli vene keelde tõlkimine ei olnud lihtne, kuigi metropoliit Philareti mõte, et tõlkida tuleb nii heebrea kui ka kreeka keelest, oli tark otsus. Kuigi see ei andnud meile mõlemast keelest teaduslikke tõlkeid.

Vene keele kasutamise kohta on üksikuid juhtumeid - Optina vanemate palve ja akatistlik "Au Jumalale kõige eest" kirjutati algselt vene keeles.

Teisi tõlkeid on nii palju ja nende sooritamisel tekib nii palju nüansse, et kergem on tekste veidi venestada kui tõlkida.

See protsess on spontaanselt kestnud juba pikka aega. Mõnikord juhtub vahejuhtumeid: näiteks “Pulmariituses” asendatakse topeltnumber mõnikord ootamatult mitmusega ja tänapäeva akatistides kasutatakse seda ebajärjekindlalt.

Kuidas jumalik ettenägelikkus osaleb erinevate keelte kujunemises?

– Keel eksisteerib väljaspool inimese tahet. Inimene võib esperanto keelt luua, kuid loomulikud keeled eksisteerivad vastavalt nende enda seadustele.

Cyril ja Methodius tõlkisid kirikuslaavi keelde ülalt saadud inspiratsioonil, aga ka tol ajal eksisteerinud mudeli järgi.

Ülalt saadud inspiratsioonil, kirjutades evangeeliumid kreeka keeles, panid apostlid paika evangeeliumi tõlgitavuse idee.

Valmistas Daria Mendelejeva

Foto Dmitri Kuzmin

KÜSIMUS: Assalamualaikum jah!

Sattusin selle artikli peale. Kui ma ei eksi, siis sa kirjutasid vastupidist. Kui see pole keeruline, võite seda artiklit uuesti kommenteerida.

moslem.

Araabia keel on Koraani keel. See valiti kõigi maailma keelte hulgast ja sellel on erakordsed omadused. See keel on ka prohvet Muhamedi keel (rahu ja Allaahi õnnistused olgu temaga). See keel on rikas ja ükski maailma keel ei suuda sellega võistelda. Sellel on keele rääkijale vaimne ja füüsiline mõju.

Varem korraldasid araablased luulevõistlusi, kuid kui prohvet (s.h.) Ilmutuse sai, olid araablased nii imelise keele väljendusrikkuse üle imestunud ja isegi mõned arvasid, et Koraanil on inimesele maagiline mõju. Kui keegi soovib üht sõna või tähte Koraanist parandada, katkeb kogu jumaliku raamatu harmoonia. Koraanis ei tohiks ühtegi sõna muuta, vastasel juhul muutub tähendus ja foneetika.

Teame, et mõned sõnad kipuvad aja jooksul aeguma, ja me ei kasuta neid. Ja koraani keel pole oma aktuaalsust kaotanud juba 1439 aastat...

Olen Koraani õpetanud rohkem kui 10 aastat ja tänaseni pole ma kunagi näinud, et üks mu õpilasi küsiks minult: „Miks me Koraani uurime? Kust see tuli? Mis kasu sellest on? Mille poolest see erineb vasakult paremale lugemisest? Päevast päeva kasvab nende inimeste arv, kes soovivad õppida araabia tähestikku ja tazhuidi reegleid, et seejärel originaalist Koraani lugeda. Kuid vähesed inimesed mõtlevad ülaltoodud küsimustele vastusele. Ja lõpuks, kui ma selgitan neile Koraani eeliseid, selle eeliseid, hakkavad paljud sellesse süvenema.

Araabia keeles on 29 tähte. Helid tekivad kõri piiril, kõri keskosas, rindkeres, keelejuure ja suuõõne vahel. Araabia keele helid "puhastavad" suuõõne ja on haigustele vähem vastuvõtlikud. Samuti on araabia keel hea logopeed. See ravib lipsi ja "r"-tähe vale hääldust. See keel aitab ka nägemispuudega inimesi. Sest araabiakeelse teksti vasakult paremale lugemine parandab inimese visuaalset aparaati ja lõdvestab. Psüühikale mõjub hästi ka tähtede ovaalne ja ümar kuju.

Kõigil araabia tähestiku tähtedel on kaashäälikud. Vokaalhelide tähistamiseks pole spetsiaalseid tähti. Seal on lühikesed ja pikad vokaalid. Lühikesi täishäälikuid edastatakse kirjalikult vokaalide – üla- ja alaindeksi märkide – abil. Samuti on 28 tähest 22 tähte ühendatud mõlemal küljel ja 6 tähte on ühendatud ainult paremal.

Koraan on meieni moonutamata jõudnud 23 aastat. Koraan on viimane jumalik raamat ja pärast seda pole enam ühtegi teist raamatut. See saadeti kogu inimkonnale. Koraani seadused jäävad kehtima kuni kohtuotsuse päevani ega muutu. Koraan on Prohvet Muhamedile (s.h.) antud kõigevägevama igavene, suur ime. Koraani lugemine on jumalateenistuse vorm. Soovitan kõigil seda võrreldamatult imelist raamatut iga päev lugeda ja teada selle tähendust. Kiirusta, et õppida lugema ja oma Loojaga rääkima. Andku Allah meile olla Janna elanikud ja rääkida araabia keelt, mille ta ise valis.

Dilyar Bektaeva,

ustaz Aktobe piirkondlik

keskmošee "Nur Gasyr"

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

VASTUS: wa alaikum kui salaam vend!

Temasugused, kodukasvatatud ja asjatundmatud “vale Ustaz”, tuleb moslemitest eemale tõrjuda, et neid endaga mitte eksitada. Kuna Aktobe mošee levitab sellist jama ja hoiab võhiklikke õpetajaid, siis võib-olla seetõttu on selles linnas nii palju äärmuslikke sektante. Koraanis ega sunnas pole isegi mitte ühtegi vihjet, et araabia keel saab olema kõigi paradiisielanike ühine keel. Mõelge ise, kuidas hakkavad paradiisis teiste rahvuste esindajad omavahel suhtlema, kui nad araabia keelt ei oska?!!

Varem vastas sarnasele küsimusele:

Interaktiivse programmeerimissüsteemi DSSP adaptiivse keele RAYA arendamine Moskva Riikliku Ülikooli Arvutusmatemaatika ja Küberneetika teaduskond N. P. Brusentsov, V. B. Zahharov, I. A. Rudnev, S. A. Sidorov, N. A. Chanyshev Moskva, 1987

PARADIisi keele üldkirjeldus

Keele arendamise eesmärk ja eesmärk

RAYA (Evolving Adaptive Language) on Dialogue Structured Programming System DSSP baaskeel. Põhiline tähendab, et see on aluseks kõikidele edasistele DSSP-s tehtavatele konstruktsioonidele, arendades (laiendades, tugevdades) põhikeelt ja võib-olla kohandades nii loodud keelevahendeid konkreetse rakendusega. Erinevalt nn kõrgetasemelistest keeltest ei paku PAYA valmis andmetüüpe ja -operatsioone, vaid ainult elemente ja primitiive vajalike tüüpide tõhusaks määratlemiseks. Näiteks algsed andmevormingud on 8-bitine bait, 16-bitine sõna ja 32-bitine pikksõna, mida tõlgendatakse olenevalt nendega tehtud toimingutest täisarvudena, Boole'i ​​vektoritena, märgikoodidena, tõeväärtuste, andmete ja protseduuride osutitena. Sel juhul on võimalik ühelt poolt manipuleerida üksikute baitide ja sõnade bittidega ning teisest küljest moodustada liitandmeühikuid (mitme pikkusega sõnad, vektorid, massiivid, tekstiread jne). , seades neile ühe või teise tõlgenduse sobivate operatsioonide sissejuhatuse. Seega saab sisestada vajaliku pikkusega ja väärtusvahemiku reaalarvud, kompleksarvud ja muud objektid ning antud rakendusele keskendunud keeleversioon sisaldab sellele rakendusele iseloomulikke objekte ja tööriistu ning ei sisalda midagi, mis ei sisalda rakendatakse sellele, - keel kohandatakse (kohandatakse) kasutamiseks. DSSP arenduse eesmärk oli luua laialdaselt kättesaadav ja tõhus mikroarvuti programmeerimisvahend, s.o. mikroprotsessoritele ehitatud arvutid. Mikroprotsessori arhitektuuri oluliseks tunnuseks on andmetüüpide ja operatsioonide elementaarsus, mis tähendab ühelt poolt universaalsust, teisalt aga töömahukat programmeerimist. Tänu oma mitmekülgsusele on mikroprotsessoritel ja nende baasil loodud mikroarvutitel potentsiaalselt piiramatud kasutusvõimalused. Nende võimaluste praktilist rakendamist piirab aga eelkõige vajalike rakendusprogrammide väljatöötamise keerukus. Veelgi enam, rahuldavaid rakendusprogramme saab luua vaid sügavate ja peente teadmistega vastavate rakenduste spetsiifikast, s.t. Neid peaksid välja töötama mitte ainult programmeerijad, vaid teatud valdkonna kõrgelt kvalifitseeritud spetsialistid. Seetõttu peaks programmeerimissüsteem mitte ainult oluliselt suurendama programmeerija töö produktiivsust, vaid olema ka nii lihtne, et seda saaksid hallata ja tõhusalt kasutada ka mitteprofessionaalsed programmeerijad.

Selle probleemi radikaalne lahendus näib olevat arvutiarhitektuuri oluline lihtsustamine. Kuid kahjuks areneb mikroarvutite arhitektuur diametraalselt vastupidises suunas - keerukuse ja keerukuse suurenemise teel, nii et professionaalsel programmeerijal pole tänapäeval lihtne mikroarvutite komplekteerimiskeelt täiuslikult omandada. Süsteemi programmeerimiskeeled nagu C või PL/M on vähendanud programmide arendamise töömahukust teatud (kuigi kaugeltki mitte piisava) ulatuses, kuid vaevalt saab neid soovitada inimestele, kes pole programmeerimises kogenud. Laialdaselt kättesaadav keel peaks loomulikult olema lihtsam ja loomulikum ning põhinema nii palju kui võimalik igapäevastel tuttavatel ideedel programmeerimise olemuse ja tehnika kohta.

Lisaks juurdepääsetavusele ja programmiarenduse töömahukuse olulisele vähenemisele võrreldes assemblerkeeles programmeerimisega, nõuti DSSP-lt keele universaalsust, mis on samaväärne montaažikeele omaga, masina kõrget efektiivsust (st koodi kompaktsust ja kiirust). ), loodud programmide kontrollitavuse usaldusväärsus ning hooldatavus ja muudetavus, samuti süsteemi ja selles arendatud programmide mobiilsus (portatiivsus) erineva arhitektuuriga masinatesse.

Protseduuriline programmeerimine

Programmeerimine PARADISE keeles on üsna sarnane sellistele laialt levinud inimtegevuse tüüpidele nagu omavahel seotud toimingute, tööde, protsesside planeerimine ja organiseerimine või keerukate materiaalsete objektide – masinate, üksuste, struktuuride – projekteerimine. Nagu disainer, kes realiseerib oma ideed selle komponentide (plokid, sõlmed, osad) liitmise teel, sünteesib programmeerija keele pakutavatest lihtsatest toimingutest vajaliku keeruka toimingu. Võime ka öelda, et programmeerimine (disain) seisneb realiseeritava objekti järkjärgulises lagunemises (dekomponeerimises) järjest väiksemateks komponentideks.

PARADIISI keeles on peamine “konstruktsioon” protseduur - nimega toiming. Keel põhineb piiratud hulgal lihtsatel protseduuridel (primitiivid), mida esindavad nende enda nimed (tähistused). Näiteks: + tähendab "lisa", NEG tähendab "muutmismärki", VCTR tähendab "loo vektorit". Eelkõige on primitiivid: ja; (koolon ja semikoolon), mis võimaldab teil tutvustada uut protseduuri, näiteks nimega P, määratledes selle protseduuride jadana P1, P2, ..., PN kujul

: P P1 P2 ... PN ;

Kui protseduur P tähistab toimingut, mida loodud programm peaks läbi viima, taandatakse selle programmi koostamine PAYA keele vahendeid kasutades protseduuride P1, P2, ..., PN järjestikusele detailiseerimisele. See tähendab, et kõik need protseduurid peavad olema määratletud väiksemate protseduuride jadaga, mis seejärel defineeritakse veelgi väiksemate protseduuride jadadega jne, kuni saadakse definitsioonid, mis koosnevad ainult primitiividest.

Sellist programmi ülesehitust, mis algab etteantud eesmärgist ja lõhub järk-järgult kasutatavad protseduurid põhiliste keeletööriistade tasemele, nimetatakse ülalt-alla programmeerimiseks. See on peamine viis saada PARA-keeles programme üksikute, täpselt määratletud probleemide lahendamiseks. Vastupidine on alt-üles programmeerimine – süsteemikeele põhivahenditel põhinev järk-järgult suurendatud protseduuride konstrueerimine, mis keskenduvad teatud probleemsele valdkonnale. Nii arendatakse ja kohandatakse keelt konkreetse rakendusega.

Mõlemal juhul on hädavajalik loodud programmide hoolikas struktureerimine: iga programm ja iga programmi osa peab koosnema väikesest arvust eraldiseisvatest osadest, millest igaüks täidab kindlat funktsiooni ja võimaldab autonoomset kontrollimist. PARA keele puhul tähendab see eelkõige seda, et protseduuride definitsioonid peaksid olema lühikesed: defineeriv jada ei tohi reeglina sisaldada rohkem kui 5-7 terminit. Struktureerimine tagab, et programm on arusaadav, kontrollitav ja muudetav ning vähendab oluliselt selle loomise ja hooldamise keerukust.

Protseduuri P ülaltoodud näitemääratlus on lihtsustatud. Tegelikult võib defineeriv jada liikmetena sisaldada mitte ainult protseduurinimesid, vaid ka rohkem kui ühest sõnast koosnevaid lauseid (käske). Protseduuri nimi, kui seda kasutatakse väljaspool teiste sõnade kombinatsiooni, on käsk selle määratud protseduuri täitmiseks. Protseduuride nimede jada määrab, et need protseduurid täidetakse järjekorras, milles nende nimed üksteise järel ilmuvad (lineaarses järjekorras). Teiste täitmisjadade täpsustamiseks pakub RAYA spetsiaalseid sõnu (eesliiteid), mis määravad sõltuvalt määratud tingimusest nende kombinatsioonis nimetatud protseduuride täitmise, aga ka protseduuri korduva (tsüklilise) täitmise.

Näiteks lineaarjada P0 P1 käivitab protseduuri P0 ja seejärel protseduuri P1. Kui protseduuri P1 ei ole vaja alati täita, vaid ainult tingimusel, et P0 täitmise tulemusena saadakse positiivne arv, siis kirjutage täitmiskäsk P1 asemel tingimuse järgi: KUI+ P1, s.o. P0 P1 asemel on P0 IF+ P1. RAYA sisaldab tingimuslike eesliidete komplekti, mis võimaldavad teil tõhusalt väljendada täitmist tingimuse alusel, samuti valida kahe, kolme või enama protseduuri vahel.

Protseduuri korduv täitmine määratakse RP prefiksi abil. Seega põhjustab RP P käsk protseduuri P täitmist ikka ja jälle, kuni luuakse tingimused, mille korral käivitatakse selle protseduuri kehas sisalduv EX - tsüklist väljumine, mille järel täidetakse järgmine käsk lineaarses järjekorras. Silmust väljumise tingimuseks võib olla näiteks mõne muutuja X võrdsus nulliga, mida väljendatakse järgmiselt:

Protseduur, mille nimi sisaldub teise protseduuri määratluses, on väidetavalt selle sees pesastatud. Pesastatud protseduur, kui ta pole primitiivne, võib omakorda sisaldada pesastatud protseduure, s.t. pesa võib olla mitu. Lisaks ei keela RAY keele reeglid lisada definitsioonisse omanimelist protseduuri ega seda nime sisaldavat protseduuri nimetust, s.o. RAYA võimaldab rekursiooni.

Korduvalt teostatava protseduuri saab pesastada ka korduvalt teostatavasse protseduuri. Sel juhul toimub silmuspesastumine. PARA võimaldab mitut ahelate pesastamist.

Lineaarne käskude jada, pesastamine, protseduuride tingimuslik ja tsükliline pesastamine – see ammendab PARA-keeles programmide konstrueerimise võimalused. Nende vahendite nappus, homogeensus ja loomulikkus on keele valdamise ja kasutamise lihtsuse võti. Samas on tegemist range struktuuriga programmeerimiskeelega, mis tagab arenduse töömahukuse ja programmi töökindluse olulise vähenemise.

Protseduurid ja andmed

Kõik seni öeldu on iseloomulik PARA keelele kui toimingute ettekirjutamise vahendile, mis konstrueerib primitiivsete tehtete lõplikust hulgast suvalisi toiminguid. Keele teine ​​pool koosneb objektide kujutamise vahenditest, millega tegevusi sooritatakse – andmete esitamise ja korrastamise vahenditest.

Äärmiselt lihtne andmeelement on kahe väärtusega element – ​​bitt. Kõik muud vormingud ja andmetüübid on üles ehitatud bittidest. RAYA keeles on põhivormingud 8-bitine bait, 16-bitine sõna ja 32-bitine pikk sõna. Sõltuvalt nendega tehtavatest toimingutest võimaldavad baidid, sõnad ja pikad sõnad paljusid tõlgendusi, s.t. võib olla aluseks erinevat tüüpi andmetele. Lisaks on need lähteelemendid liitvormingute ja tüüpide moodustamisel.

Tegelikult ei sisalda RAYA ei lihtsaid ega liitandmetüüpe – on ainult põhivormingud (bait, sõna, pikk sõna) ja nendest liitvormingute koostamise tööriistad: vektorid ja mitmemõõtmelised massiivid. Sel juhul tõlgendatakse samu baite (sõnu, pikki sõnu) olenevalt nendega sooritatavatest toimingutest bitivektoritena või märgistatud ja märgita kahendtäisarvudena või sisend/väljundtähestiku märkidena vms. Andmetüüpe ja nendega seotud piiranguid ja kontrolle saab tutvustada keele probleemipõhistes laiendustes.

Andmenimede deklareerimine täidab baaskeeles vaid andmetele nimelise juurdepääsu võimaldamise funktsiooni: nimi on seotud deklaratsioonis nõutavate mälurakkude arvu ja neile juurdepääsu mehhanismiga. Testimis- ja teisendustoiminguid ei rakendata otse nimega andmetele. Need toimingud on määratletud operandivirnas, mis on 32-bitiste sõnade jada (virnaelemendid), mida muudetakse dünaamiliselt, lisades (tõugates) selle lõppu uusi elemente, samuti eemaldades samast otsast elemente ( virnast hüppamine). Üksused eemaldatakse nende saatmise vastupidises järjekorras: esimesena eemaldatakse viimati saadetud. Testitavad või teisendatavad andmed saadetakse pinu, kus tehakse nendega ettenähtud toimingud, misjärel saab töötlustulemused pinust eemaldada.

Näiteks kui muutuja X on deklareeritud 32-bitise sõnana, saab sellega otse teha ainult kaks toimingut:

1) selle väärtuse lükkamine virna, mis toimub automaatselt iga kord, kui mainitakse nime X,

2) selle määramine meeskonnale! X on virnast eemaldatud viimase (ülemise) elemendi väärtus.

Kui soovite näiteks X-i väärtust kahekordistada, lisades selle endale, saate seda teha, käivitades üksteise järel järgmised käsud:

Kaks koopiat väärtusest X lükatakse virna, siis + käsk eemaldab need, lisab ja lükkab saadud summa virna, misjärel käsk! X võtab selle summa ja määrab selle väärtuse muutujale X.

Ülaltoodud näite tavapärane salvestamine kujul X:=X+X kõrgetasemeliste keelte jaoks on programmeerijale tuttavam, kuid see ei peegelda otseselt protsessori poolt täidetavate käskude jada, vaid on omamoodi matemaatiline valem. See on mugav arvutusülesannete programmeerimisel, kuid põhikeeles tundub üheselt mõistetav vastavus täidetavate käskudega olulisem, kuna programmi käskude kaupa saab kontrollida otse programmeerimiskeeles ja puudub vajadus oskama mõnda muud keelt peale protsessori keele.

Kuid virnastatud andmetöötluse eriti väärtuslik eelis on see, et testimis- ja teisendusprotseduure saab määratleda ja rakendada sõltumata andmetest, millele neid rakendatakse. Testimis- ja teisendusoperatsioonid formuleeritakse mitte seoses andmeidentifikaatoritega (või konstantide ja muutujate nimedega, formaalsete parameetritega), vaid seoses virnaelementidega, millele tuleb toimingu sooritamise ajaks määrata operandi väärtused. Näiteks kahe arvu liitmise operatsioon, mida tehakse + (add) käsuga, seisneb kahe ülemise elemendi (tipu ja alamtipu) liitmises virust, nende summa arvutamises ja selle virnale lükkamises. Kahe numbri lisamiseks peate lükkama nende väärtused virna ja täitma käsu +, tulemus on virna ülaosas.

Suvalise arvu sisend- ja väljundparameetritega test-teisendusprotseduuri saab sel viisil defineerida lihtsalt nimega toiminguna (ilma parameetrite loendita), mis viiakse läbi argumendi väärtusi sisaldaval pinul, mis on paigutatud ettenähtud järjekorras ja pärast seda. täitmine, tulemuse väärtused. Sellise protseduuri rakendamiseks teatud konkreetsete andmete kogumile peate need andmed vastavas järjestuses virna suruma. Pärast nende tarbimist jätab protseduur oma tulemused virnale (asub samuti teatud järjestuses).

Teisisõnu kasutatakse RAY-keeles protseduurinimesid samamoodi nagu tehtemärke ja need on sisuliselt suvalise arvu operandidega tehte sümbolid. Vastavalt viru tööpõhimõttele kirjutatakse tehted postfix kujul, s.o. toimingu nimi asetatakse selle operandide nimede või väärtuste järele. Näiteks kui tähistame kolme arvu summa saamise operatsiooni sümboliga ++, siis arvude A, 5 ja B summat väljendatakse järgmiselt:

Võimalik oleks kehtestada postfix keele formaalsed reeglid ja neist juhinduda programmide kirjutamisel, kuid inimesel on lihtsam ja usaldusväärsem tegeleda mitte reeglitega, vaid pinuprotsessori mudeliga, s.t. masina mudeliga, mille jaoks programmid luuakse ja mis neid käivitab. PARA keele puhul on selliseks masinaks DSSP protsessor – seadmete ja programmide komplekt, mis teostab selles keeles ettenähtud toiminguid.

DSSP protsessor

Füüsiliselt saab DSSP protsessorit realiseerida lihtsa ja tõhusalt programmeeritava arhitektuuriga mikroprotsessori kujul, mis võimaldaks mikroarvutite tarkvaraseadmete probleemi parimal võimalikul viisil lahendada. Kuid sellist mikroprotsessorit pole veel loodud ja selle arhitektuuri tuleb olemasolevates mikroarvutites emuleerida, et parandada nende programmeeritavust. Loomulikult on emuleerimine seotud kuludega – see nõuab mälu ja arvutiaega, kuid DSSP protsessori emuleerimise puhul on need kulud suhteliselt väikesed.

Programmeerija seisukohalt on protsessori tunnuseks selle arhitektuur, s.t. infot selle kohta, mis on antud protsessor andmetöötlusvahendina, millised on võimalused andmete esitamiseks sisendis ja protsessori sees, millised testimise ja andmete teisendamise toimingud on olemas, kuidas on korraldatud protsessori enda mälu, samuti ligipääs põhi- ja välismälu, millised on juhtimisvahendid programmi käik, suhtlemine väliskeskkonnaga, reageerimine erakorralistele sündmustele jne. Arhitektuuri valdamine on mõtestatud (mitteametliku) programmeerimise vajalik tingimus, mis vähendab oluliselt vigade arvu ja tõstab programmide töökindlust.

DSSP protsessori keskseks lüliks on juba mainitud operandipinn. Tegelikult toimub töötlemine virna peal ja reeglina saadetakse andmed läbi virna. Virnas olevaid üksikuid käske ja lühikesi käskude jadasid saab täita, edastades need protsessori sisendisse otse terminali klaviatuurilt. Sel juhul simuleerib DSSP-protsessor postfix-kalkulaatori tööd. Klaviatuurilt sisestatud numbrid ja operatsioonimälukoodid on eraldatud tühikutega. Sisestatud tekst kuvatakse terminali ekraanil reana. Sisestuse lõpu signaal ja protsessorile antav käsk "Käivita sisestatud korraldus" on klahvivajutus , tähistatud ka , . Protsessori sisendisse saabuvad numbrid salvestatakse pinu ja käsklused täidetakse pinus. Pinna ülaosas saadud arvutustulemuse saab käsuga kopeerida terminali ekraanile. (punkt).

Näiteks avaldise (2-5)*3 hindamiseks ja saadud tulemuse kuvamiseks sisestage:

2 5 - 3 * .

Pärast klahvi vajutamist protsessor annab tulemuse, nii et kogu rida näeb välja selline

* 2 5 - 3 * . -90

Rea alguses oleva tärni annab protsessor signaalina, et ta ootab sisendit.

Vaadeldavas näites tajus ja töötles protsessor sisendnumbreid kümnendtäisarvudena. Tegelikkuses teisendati need numbrid sisestamisel binaarseks komplementkoodiks ja väljastamisel teisendati need tagasi kümnendsüsteemi. DSSP protsessor võimaldab kasutada ka kahend-, kaheksand- ja kuueteistkümnendsüsteemi sisend-/väljundrežiime. Soovitud režiimi lülitumiseks peate täitma ühe käskudest B2, B8, B10, B16.

Klahvivajutused põhjustavad koodide saatmise protsessori sisendisse, mis tähistavad nendel klahvidel näidatud märke (tähed, numbrid, kirjavahemärgid, operatsioonisümbolid). Sisestatud märgijada moodustab sisendstringi – baitide ahela, mis sisaldab märgikoode, üks bait märgi kohta. Sisendstringi maksimaalne pikkus on 80 liitrit.

Sisendstringi töötlemisel isoleerib protsessor selles olevad sõnad - üksteisest tühikutega eraldatud märkide kombinatsioonid ja tõlgendab neid. Kui töödeldav sõna on toimingu (protseduuri) või töötlejale teadaolevate andmete nimi, siis töötleja sooritab toimingud, mida see nimi peaks definitsiooni järgi kutsuma. Kui sõna pole protsessorile teada, siis proovib ta seda tõlgendada numbrina, võttes arvesse seatud I/O režiimi.

Numbrid on sõnad, mis koosnevad antud numbrisüsteemis aktsepteeritavatest numbritest ja võivad sisaldada esimese tähena miinusmärki. Kuueteistkümnendsüsteemis I/O režiimis sisaldavad kehtivad tähed koos numbritega ka ladina tähti A, B, C, D, E, F. Saadud number teisendatakse binaarse kahe komplementkoodiks ja lükatakse operandi virna. 32-bitine sõna. Veelgi enam, kui arvu väärtus on väljaspool esindatavate väärtuste vahemikku -2147483648: 2147483647, siis asendatakse see sellest vahemikust võrreldava väärtusega moodul 2**32.

Juhul, kui töödeldav sõna pole töötlejale teada ja seda ei saa numbrina aktsepteerida, kuvab protsessor terminali ekraanil teate: "Ma ei tea"<обрабатываемое слово>" ja ootab edasiste juhiste sisestamist.

Andmesisestus suvalise teksti kujul (bait-literaalide jada) tehakse tekstiliteraalidena, mis on jutumärkidega ümbritsetud tekst, näiteks: “Tekstiliteraal”. Tekstiliteraali saabumine protsessori sisendisse põhjustab jutumärkide vahele jääva teksti kirjutamise põhimällu baitliteraalide ahela kujul. Sel juhul lükatakse virna esimese baidi aadress ja baitide arv (teksti pikkus). Protsessor tajub tekstiliteraali, millele eelneb punkt, kui käsku "näidata terminali ekraanil jutumärkide vahel olevat teksti". Näiteks märgikombinatsiooni “Mälu puudub” saatmisel protsessori sisendisse ilmub ekraanile teade: Mälu puudub.

Üksiku märgi kood lükatakse virna tipu madalaima baidina, kui see märk võetakse vastu protsessori sisendis koos sellele eelneva märgiga #. Näiteks märgikombinatsioon #L saadab virna L-tähe koodi, märgikombinatsioon #5 saadab numbri 5 koodi. TOB-käsk baidi terminali väljastamiseks kuvab tähe, mille kood on sisaldub virna ülaosa madalas baidis.

Isegi käskude otsese täitmise režiimis ületab DSSP protsessor tunduvalt tavapärase kalkulaatori võimalused, pakkudes kasutajale lisaks andmetöötlustoimingutele ka vahendid nimeandmete deklareerimiseks ja protseduuride määratlemiseks, mida saab seejärel kasutada koos põhitoimingud. Andmete nimede deklareerimine ja protseduuride määratlemine toimub spetsiaalsete käskude abil.

Näiteks 16-bitise muutuja nimega TEMP loomiseks peaksite tippima klaviatuuril ja rakendama klahvi protsessori sisendile meeskond

VAR TEMP

Koos deklaratsiooniga saate muutujale määrata algväärtuse, näiteks 0:

VAR TEMP 0! TEMP

Nüüd tingib nime TEMP saabumine protsessori sisendisse selle muutuja hetkeväärtuse virnasse lükkamise ja sellele saab uue pinust eemaldatud väärtuse omistamise teha käsuga! TEMP.

Protseduuri definitsioon sisestatakse käsuga: (koolon), mis sisaldab määratletava protseduuri nime ja defineerivat käsuahelat koos tähega; (semikoolon) kui definitsiooni lõppmärk. Demonstreerime protseduuride määratlust ja kasutamist naturaalarvu N faktoriaali arvutamise näitel valemi abil

N!=N*(N-1)*(N-2)*...*2*1, s.o. N-1 korrutamine.

Soovitud tulemuse saamiseks peab FCT protseduur korrutama antud arvu N järjestikku kahanevate arvudega, alustades N-1-st 1-ni, s.o. ainult N-1 korda. PARA keeles on see programmeeritud, käivitades protseduuri P t korda: DO P, kus P on protseduuri nimi, t on praegune väärtus virna ülaosas, mis näitab, mitu korda protseduuri P on vaja täita.

Oletame, et enne FCT protseduuri rakendamist lükatakse arv N virnale ja asub selle ülaosas. Protseduuri arusaadavamaks muutmiseks kujutame ette muutuja K muudetud kordajat:

Tutvustame FCT protseduuri määratlust järgmisel kujul:

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

Kommentaarid on antud nurksulgudes, kajastades operandivirna hetkeseisu. Meeskond! Määratletud protseduuri käivitav K omistab muutujale K pinust võetud arvu N väärtuse. Seejärel lükatakse K kaks korda pinu ja lahutades virna ülaosas olevast 1, saab korduvate toimingute arvu. moodustub protseduur F, mis on võrdne N-1-ga. Järgmisena tuleb käsk DO F, mis määrab tsükli, mille lõppedes sisaldab virna ülaosa soovitud faktoriaali väärtust - N!. Meeskond. (punkt) prindib selle väärtuse koopia terminali ekraanile. Jääb defineerida protseduur F, mis muudab K väärtust lahutades 1 ja korrutab virnas sisalduva arvutuse R osalise tulemuse K-ga:

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

Mõlema protseduuri õigsust kontrollitakse nende definitsioonide käskluse haaval täitmisega, kuvades pärast iga käsklust terminali ekraanil operandi pinu sisu ja muutuja väärtust K. FCT protseduuri lõpetamisel peab pinu ülaosa sisaldavad väärtust N! ja muutuja K väärtus peab olema võrdne 1-ga.

Kontrollitud ja parandatud (kui verifitseerimisprotsessi käigus tuvastati vigu) protseduure testitakse, rakendades neid arvu N üksikutele väärtustele. Kuna protseduur F on FCT-sse sisse lülitatud, toimub selle testimine automaatselt viimase testimise käigus. . Tuleb meeles pidada, et tulemusväärtused ei tohiks ületada maksimaalset positiivset arvu, mis on esitatud kahe komplementkoodis 32-bitise sõnana: 2147483647, s.o. FCT annab õigeid tulemusi ainult N=1, ..., 13 korral.

FCT kasutamine ei erine protsessori enda juhiste kasutamisest: tulemuse saamiseks peate määrama operandi väärtuse ja sisestama protseduuri nime:

5 FCT 120

7 FCT 5040

FCT protseduuri ülaltoodud teostus eeldas abimuutuja K sisseviimist, kuid funktsionaalselt samaväärse protseduuri saab realiseerida ilma abimuutujata, kasutades operatsiooni C, mis surub selle ülaosa koopia pinu, ning tehteid E2 ja E3, mis vahetavad ülaosa vastavalt virna teise ja kolmanda elemendiga. Selle protseduuri määratlus on järgmine.

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

: FA C E3 * E2 1-;

Sellise “puhta pinu” protseduuri eeliseks on see, et see on täiesti autonoomne: nagu ka põhilised protsessori pinu toimingud, teostatakse seda ainult operandi pinu peal, ilma et see nõuaks muud mälu ega põhjustaks muudatusi teistes protsessori komponentides.

Määratletud protseduuride ja deklareeritud andmete nimed sisestatakse protsessori sõnastikku, mis loob ühenduse nende nimede ja nimega objektide vahel, st põhimälus asuvate protseduurikehadega ja selle mälu elementidega, mis on eraldatud deklareeritud andmete salvestamiseks. Sisendvoost järgmise sõna töötlemisel vaatab protsessor sõnastikku läbi ja, olles leidnud sealt sobiva sõna, sooritab selle sõnaga seotud toimingud. Kui otsing ebaõnnestub, siis, nagu juba mainitud, üritatakse antud sõna numbriliselt tõlgendada ja kui see ebaõnnestub, siis ilmub teade, et sõna pole protsessorile teada.

Protseduuridefinitsiooni koostamise tulemusena kantakse sõnastikku selle protseduuri nimi ja selle keha osuti (aadress), mis on definitsiooni moodustavate protseduuride ja andmete osutajate jada. Teisisõnu saadakse protseduuri keha sisemine esitus, asendades selle definitsioonis protseduuride ja andmete nimetused vastavate kehade osutitega, mis omakorda on samad osutite jadad ning primitiivide puhul masinakäskude ahelad. Nimetame seda programmi protseduurikoodi sisemist esitust.

Kui koos protseduuri P definitsiooni koostamisega kompileeritakse ka kõigi protsessorile senitundmatute pesastatud protseduuride definitsioonid, moodustub täielik osutite hierarhia, mis võimaldab teostada protseduuri P, saates protsessori sisendisse ainult selle nime . Samas pole mõtet P definitsiooniga seoses koostatud pesastatud protseduuride nimetusi talletada, kui pole vajadust nendele protseduuridele eraldi ligi pääseda. Paljudel juhtudel osutub soovitavaks sulgeda juurdepääs ühele või teisele sõnastiku osale, jättes võib-olla võimaluse teha vaid mõnda protseduuri.

Selliste nõuete täitmiseks realiseeritakse sõnastik alamsõnastike kogumina, mille üle määratletakse toimingud, mis võimaldavad luua ja hävitada alamsõnastikke ja nende osi, kustutada nimesid, sulgeda ja avada juurdepääsu teatud alamsõnastike juurde. Igal alamsõnastikul on nimi, mida kasutatakse sellega seotud käskudes. Alamsõnastiku nimed peavad algama tähega $, näiteks: $PRIME, $EDIT, $FLOAT, $TEXTPROC, $GRAPHICS.

Alamsõnastik $PRIME, mis sisaldab DSSP-sõnade põhikomplekti, on pärast protsessori käivitumist avatud nii selles sisalduvatele sõnadele juurdepääsuks kui ka uute sõnade lisamiseks. Sinna sisestatud uusi sõnu saab vajadusel koos nendega seotud kehadega kustutada käsuga FORGET $PRIME. Pärast seda tagab sellesse alamsõnastikku sõnade edasise sisestamise võimalus käsu GROW $PRIME käivitamisega, mis võimaldab alamsõnastikku $PRIME uuesti laiendada ja kõik sinna sisestatu saab uuesti kustutada käsuga FORGET $PRIME jne. . Selles režiimis kasutatakse DSSP-d väikeste programmide fragmentide, üksikute näidete, hinnangutega katsetamisel ning vajadusel ka uute sõnade lisamisel $PRIME alamsõnastikku süsteemikeele arendamise järjekorras.

Eraldi programmi loomise puhul loovad nad selle jaoks oma alamsõnastiku ja see saavutatakse programmi teksti käivitamisel käsuga

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

Inimene tajub seda käsku pealkirjana, millele peaks järgnema nurksulgudes olev kommentaar, mis iseloomustab mõne sõnaga programmi rakendatavat funktsiooni. Protsessori jaoks on see samaväärne käskude jadaga

UNUSTA $<имя>KASVADA $<имя>

Seetõttu põhjustab iga programmi teksti saabumine protsessori sisendisse selle eelmise versiooni kustutamise ja avab seega tühjendatud alamsõnastiku, et sisestada programmi uus versioon, mis kannab sama nime. See on mugav nii loodavas programmis paranduste tegemisel kui ka selle edaspidi muutmisel.

Koostatava programmi teksti ei sisestata protsessori sisendisse otse klaviatuurilt, vaid see genereeritakse tekstiredaktori puhvris. E käsk (Edit) seab redigeerimisrežiimi, kus klaviatuuril sisestatud sõnu ei tajuta enam protsessori poolt kohe täidetavate käskudena, vaid need on lihtsalt puhvrisse kirjutatud ja samaaegselt ekraanil kuvatavad tekstid. Spetsiaalsete klahvide abil, mis juhivad praeguse asukoha indikaatori (kursori) liikumist üle ekraani, samuti muude klahvide vajutamisega antud käsklusi redigeerides saab sisestatud teksti parandada ja muuta, tehes kustutamisi ja sisestusi, liigutades selle fragmente ühest kohast teise koht jne.

Pärast teksti sisestamise ja redigeerimise lõpetamist lülitatakse redaktor välja, vajutades klahvi E samaaegselt klahviga (või õigemini varem vajutatud klahviga). ja süsteem läheb DSSP-käskude põhirežiimi. Sarnase toimingu põhjustab lihtsalt klahvi vajutamine . Selles režiimis saab redaktori puhvri sisu väljastada protsessori sisendisse käsuga PF (PerForm - execute). Sel juhul täidetakse kõik tekstis sisalduvad käsud, eriti käsk PROGRAM $<имя>kustutab alamsõnastikku sisestatud $<имя>alates selle käsu viimasest käivitamisest on andmete ja protseduuride nimed, samuti vastavad kehad, avades selle alamsõnastiku uuesti kasvuks. Andmete deklaratsiooni ja protseduuride määratlemise käsud sisestavad sisestatud nimed koos viitega nende nimedega määratud andmetele ja definitsioonide kohaselt koostatud protseduuriorganitele.

Kui laadimine on lõppenud, on protseduurid ja andmed viitamiseks kättesaadavad nende klaviatuurinimede järgi ning programmi õigsust saab kontrollida, sooritades protseduure kasvavas järjekorras, s.t. alustades neist, kelle definitsioonid ei sisalda testimata protseduure. Enne kontrollima asumist on paslik veenduda, et programm ei kasutaks määratlemata nimesid. Protsessor kuvab need ekraanil, kasutades käsku UNDEF. Programmi teksti täiendamiseks nende nimede definitsioonidega ja muude kontrollimise käigus avastatud vigade parandamiseks tuleb redaktori kutsumiseks kasutada käsku E ja teha redaktori puhvris asuva lähteprogrammi teksti vastav muudatus. ja seejärel lülitage protsessor põhirežiimile ja laadige puhvri sisu käsuga PF.

Pärast programmi kontrollimist ja testimist saab selle lähteteksti kopeerida redaktori puhvrist kettale, kasutades käsku OE f, kus f on faili nimi, milles programm kettale kirjutatakse. Edaspidi saab faili sisu laadida protsessori sisendisse käsuga LOAD f ning IE f käsuga kopeerida ka redaktori puhvrisse selles oleva teksti lisandina. Vaikimisi on failide laiend .DSP. Puhvri saab esmalt tühjendada käsuga KE. Puhvri sisu on võimalik printida ka LPE käsu abil.

Pärast täitmiseks valmis programmi laadimist on võimalik puhastada selle jaoks loodud alamsõnastik $<имя>CLEAR $ käsk<имя>. Selle käsu täitmisel eemaldab protsessor nimega alamsõnastikust fikseerimata nimed, st. kõik nimed, välja arvatud need, mille määratlustele eelneb fikseeriv eesliide:: (kaks koolonit). Sel juhul kustutatakse ainult nimed ise (sõnastikukirjed) ning protseduuride kehad ja nendega seotud andmed salvestatakse ja on kompileerimise käigus loodud siselinkide kaudu programmi täitmisel ligipääsetavad, kuid väljastpoolt neile enam ligi ei pääse. Väljast ligipääsu taastamiseks, näiteks kui on vaja kompileerida mõni täiendus või muudatus, tuleb programmi lähtekood uuesti alla laadida.

Nimesid saab muuta väliselt kättesaamatuks ilma neid sõnastikust eemaldamata, kasutades käsku SHUT $<имя>, mis blokeerib juurdepääsu kõikidele selles nimetatud alamsõnastiku sõnadele. Alamsõnastiku avamine selle sõnade kasutamiseks toimub käsuga USE $<имя>. Samuti on käsk ONLY $<имя>, mis sulgeb kõik alamsõnastikud, välja arvatud nimega, ja käsk CANCEL, mis tühistab selle piirangu. Loetletud käsud võimaldavad kontrollida sõnastiku kasutamist koostamise ajal ja piirata programmi kasutajale saadaolevate nimede komplekti vajaliku miinimumini.

Nime otsimine sõnastikust toimub nii, et otsitakse selle sõnu sõnastikku sisestamise järjekorras vastupidises järjekorras, s.t. alustades viimasest sisestatust. Seetõttu kehtib sõnastikus rohkem kui korra määratletud nime puhul uusim määratlus. Kui seda viimast definitsiooni sisaldav alamsõnastik suletakse, jätkatakse otsingut esimese saadaoleva eesnimega sõnastikukirjeni ja kasutatakse selle kirjega näidatud definitsiooni.

Paar sõna andmete sisestamise ja väljastamise kohta. Nagu juba mainitud, proovib protsessor tõlgendada käivitatava programmi sõna, mida sõnastikust ei leidu, arvuna ja kui see õnnestub, surub selle numbri binaarse ekvivalendi virna. Numbri virnasse sisestamist saab teha käsuga TIN, mis nõuab sisestatud numbri sisestamist klaviatuuril. Samuti on olemas käsud, mis panevad klaviatuurilt sisestatud märgi virnasse lükkama: TIB - kuvaga, TRB - ilma seda märki ekraanil kuvamata. Sel juhul tähistab märgikoodi virna surutud 32-bitise sõna madalam bait, mille kõrgeimad 3 baiti on võrdsed nulliga.

Virna ülaosa sisu saab sisestada vastavalt numbri või tähena. Käsk TON tingib alamtipu arvväärtuse kuvamise ekraanil väljundväljal, mille laius on tipuga määratud, selle täitmise hetkel loodud arvude esitussüsteemis. Käsk TOB kuvab tähemärgi, mille kood asub virna ülaosas madalas baidis. Mõlemal juhul kaasneb väljundiga argumendid, mis eemaldatakse virust.

DSSP-protsessoril on aparaat väliste ja sisemiste (käskude) katkestuste jaoks ning see pakub nende töötlemiseks järgmisi vahendeid. Välise katkestuse käsitlemiseks mõeldud protseduur on määratletud samamoodi nagu tavaline protseduur, kuid eesliide INT lisatakse käärsoole ette. Sellise protseduuri nimi on seotud katkestusvektori aadressiga käsuga:

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

Käsu katkestus on nimega toiming, mis kutsub välja vastuse rutiini. Selle toimingu nime määrab käsk TRAP, mis seob sellega nn lõpliku vastuse protseduuri, mis käivitatakse juhul, kui lõplikku vastust ei asendata mõne muu vastuse protseduuriga, kasutades käsku ON või EON. Kõigil kolmel käsul on sama vorming:

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

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

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

EON-käsuga kõne nimega seotud protseduur täidetakse EON-käsku sisaldava protseduuri põhiosast väljumisega ja EON-i täitmise ajal eksisteerinud operandi virna osuti väärtusega.

RAYA keele süntaks

RAY keele tähestik sisaldab ladina ja vene keelt, väike- ja suurtähti, kümnendnumbreid, matemaatilisi ja muid erimärke. Tähestiku elemente (liikmeid) nimetatakse tähtedeks. Tähe väline esitus on selle trükitud kujutis (prinditud märk). DSSP protsessori sees tähistab iga trükitud tähemärki bait, mille väärtus on selle märgi kahendkood. Välise esituse teisendamine sisemiseks ja vastupidi toimub sisend-/väljundseadmega (klaviatuur, ekraan, printer). Mugavuse huvides väljendatakse koodi arvväärtust kümnend-, kuueteist- või kaheksandsüsteemis, nimetades vastavat numbrit kümnend-, kuueteist- või kaheksandsüsteemi kooditäheks.

Kõik RAYA keele objektid on konstrueeritud tähemärkidest ja kujutavad endast piiratud pikkusega tähemärkide lineaarseid ahelaid, mida nimetatakse sõnadeks. Üksteisele järgnevate sõnade eraldajaks on mitteprinditav märk (tühik). Tühikute jada võrdub ühe tühikuga. Lisaks täidab sõna eraldaja funktsiooni käsk "Mine järgmise rea algusesse", mis on sisendseadmete klaviatuuridel tähistatud sümboliga või ja koos tähtedega, millel on sisemine esitus baitkoodina. Seega ei ole vaja rea ​​alguses ja lõpus tühikuid eraldada.

Näidissõnad: CLEAR NOP STACK2 & 1+ -366 X Probe.

DSSP-protsessor eristab sõnu esimese seitsme tähe järgi, tuvastades need sõnaraamatu sõnadega polüliteraalse võrdluse teel. Sõnastik sisaldab sõnu, mis on protsessori enda operatsioonide nimetused (tähistused), mida nimetatakse põhioperatsioonideks või primitiivideks ja mida saab täiendada kasutaja poolt määratletud objektide (andmete, protseduuride) nimedega. Seega on sõnastikus sisalduvad sõnad kas toimingute (toimingud, protseduurid) või andmete (konstandid, muutujad, massiivid) nimetused.

Kui identifitseeritavat sõna sõnastikus pole, proovib protsessor määrata selle ühele järgmistest juhtudest:

    numbriline literaal, st. numbrijada, mis võib alata miinusmärgiga, näiteks: 0, 4096, -25;

    literaalliteraal: sõna, mis algab märgiga #, mille tulemusel saab protsessor etteantud koodina kohe järgmise literaali, näiteks: #A - ladina suure tähe A literaal, #5 - numbri 5 literaal, # - tühiku sõnasõna, ## - tähed #;

    text literal: suvaline tekst, mis on ümbritsetud jutumärkidega ja eraldatud sõnade eraldajatega, näiteks: "Tekst", "Sisendfail N3";

    käsk tekstsõnumi kuvamiseks: kuvatava sõnumi tekst, mis on vasakult piiritletud märgikombinatsiooniga punkt-kaksjutuaal ja paremal pool jutumärkidega ning eraldatud sõnade eraldajatega, näiteks: “Pinn on tühi”;

    kommentaar: suvaline tekst, mis on suletud nurksulgudesse ja eraldatud eraldusmärkidega, näiteks: .

Literaalid ja ekraanil sõnumi kuvamise käsk toimivad DSSP keele objektidena koos sõnastikust tuvastatud sõnadega, samas kui DSSP protsessor ignoreerib kommentaare täielikult – need on mõeldud inimesele, mitte masinale. Kui sõna sõnastikust ei leia ja see ei ole seotud loetletud konstruktsioonidega, kuvab protsessor teate: "Ma ei tea<неопознанное слово>".

Tähtede #, "ja kombinatsiooni" erilise tähenduse tõttu. sõna alguses, s.o. pärast eraldajat, samuti tähte " eraldaja ees, ei tohiks neid kasutada sõnastikku lisamiseks määratud sõnades määratud positsioonides.

Protsessori sisendis olevat sõnade jada tõlgendatakse protsessori poolt täidetavate juhiste jadana. Sõnu on kolme tüüpi:

1) sooritatud iseseisvalt, s.o. ühesõnaliste käskude (monosõnade) esitamine;

2) sooritatakse koos ühe või mitme järgneva sõnaga, s.o. on kahe-, kolme- või mitmesõnaliste käskude algussõnad (eesliited);

3) käsule eelnev erilise täitmisviisi täpsustus või märge (eesliited).

Monosõnad hõlmavad literaale, andmenimesid, enamikku I/O-operatsioone, pinus testimist ja andmete teisendamist ning kasutaja määratud protseduure. Näiteks: 1987 – numbriline literaal, #5 – numbri 5 literaal, "Skeemiloend" - tekstiliteraal, LENGTH - muutuja nimi, TOB, NEG, +, &,<, = - имена (обозначения) операций, SORT, CONVERT, ЧИСТКА, СНЯТЬ - имена процедур пользователя.

Eesliited on omane käskudele andmete kirjeldamiseks ja protseduuride määratlemiseks, samuti nimeandmetega manipuleerimiseks, protseduuride tingimuslikuks ja korduvaks täitmiseks ning sõnastiku haldamiseks. Näited eesliidetega käskudest:

VAR SUM – loo muutuja SUM,

: paaritu [x] 1 & ; - luua paaritu protseduur, mis asendab paaritu arvu 1-ga, paarisarvu 0-ga,

0 X - määrake muutujale X väärtus 0,

BR+ P1 P2 - kui selle pinust võetud ülaosa väärtus on positiivne, siis käivitage P1, muidu käivitage P2,

RP CHECK – korrake KONTROLLI protseduuri ikka ja jälle,

USE $REAL – avage kasutamiseks alamsõnastik $REAL.

Tavaliselt nõuab konkreetne eesliide selle järel teatud arvu sõnu. Nii et äsja toodud näidetes nõuavad eesliited VAR, !0 ja USE kumbki ühte sõna ning eesliide BR+ kahte sõna. Eesliide: (koolon) võimaldab aga luua mis tahes pikkusega käsu, alustades kolmest sõnast. Käsu lõpp on sõna; (semikoolon). Suvaline pikkus on iseloomulik ka konstantse deskriptori käsule CNST A1 ... AJ ; ja protseduuri mitmikvaliku käsk BR A1 P1 ... AJ PJ ELSE PN.

Eesliited on spetsiaalsed sõnad, mis käsu etteotsa lisamisel muudavad selle sisu või määratlevad spetsiaalse täitmisrežiimi. Näiteks käsk VAR X ilma eesliiteta on juhend 16-bitise muutuja X loomiseks. Kui lisate sellele eesliite BYTE, saate käsu BYTE VAR X, mis annab korralduse luua 8-bitine muutuja. muutuja (bait) nimega X. Kui kasutate LONG eesliidet, siis saame LONG VAR X - juhise luua 32-bitine muutuja nimega X.

Teist tüüpi eesliide, nimelt:: (kaks koolonit) muudab käsu tulemuse vastupidavaks protseduurile CLEAR, mis eemaldab sõnastikust lahtised sõnad. Andmekirjelduse ja protseduuride määratlemise käskudega programmi koostamise käigus sõnastikku sisestatud nimed saab pärast programmi loomist ja testimist sõnastikust eemaldada, välja arvatud mõned, mis on vajalikud valmis programmi hooldamiseks. Eemaldamine toimub käsuga CLEAR $<имя подсловаря>, mis käsib kustutada programmiga seotud alamsõnastiku, jättes sinna ainult need sõnad, mille definitsioonid sisaldavad eesliidet ::. Näited käskudest, mis genereerivad kustutamatuid sõnu:

:: BAYTE CNST LITCODE # #0 #A ;

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

Nagu näitab teine ​​näide, mis sisaldab eesliiteid :: ja BYTE, võib käsul olla rohkem kui üks eesliide.

Seega võib käsk DSSP-s olla kas üks sõna (monosõna) või fraas (fraas), mis algab eesliitega ja sisaldab sellele eesliitele määratud sõnade arvu ning kui eesliide võimaldab suvalise arvu sõnu, piirav sõna lõpus või see võib olla fraas, mida on ees täiendatud spetsiaalsete eesliidetega.

DSSP põhikeel ei sisalda keerukamaid süntaktilisi konstruktsioone kui käsk ja üldiselt ei sisalda see muid konstruktsioone peale ülalkirjeldatute. Isegi sellised programmeerimiskeeltes hädavajalikud asjad nagu väljend ja funktsioon puuduvad baaskeeles ja neid saab vajadusel kasutusele võtta alles selle arendamise käigus.

Põhikeele programm on lihtsalt käskude kogum, mis täidetakse nende tekstis esinemise järjekorras. Veelgi enam, iga käsk, välja arvatud need, mis sisaldavad ainult primitiive, hõlmab selle täitmise ajal käskude jada, mis määratlevad selles sisalduvad sõnad. Kaasatud käsud võivad omakorda sisaldada käsuahelaid tähistavaid sõnu, mis võivad sisaldada ka nendega seotud ahelatele viitavaid sõnu jne. kuni tasemeni, kus käsud sisaldavad ainult primitiive.

Selle peatüki sisu moodustanud PARA keele üldkirjeldus oli pühendatud selle keele struktuuri omadustele ja selle käskude põhikomplektile (algsele) komplektile, milleks on sisseehitatud käskude (primitiivide) komplekt. DSSP protsessorist. Keele edasiarendamine ja sellele vastav protsessori võimekuse suurendamine toimub uute protseduuride, käskude, vormingute ja põhitööriistade abil konstrueeritud andmetüüpide juurutamisega. Reeglina on selline arendus oma olemuselt probleemikeskne ja toimub lisaks baassüsteemile protsessori sisendisse laaditavate protseduuripakettide kujul.

Teisalt saab põhisüsteemi täiendada selle baasil juurutatud erivahenditega, et tõsta DSSP programmide masina efektiivsust. Need funktsioonid hõlmavad võimalust määratleda üksikuid protseduure otse kasutatava masina käsukoodis. Protseduuri defineerimise meetod ei mõjuta selle edasist kasutamist: kõigi protseduuride nimed kantakse ühisesse sõnastikku ja on täiesti võrdsed. Mitmed raamatukoguprogrammid võimaldavad kasutada protseduure või terveid programme, mis on kirjutatud teistes keeltes.

Toimingute ja käskude kirjeldus

Virna peal tehtud toimingud

Operandipinn on DSSP protsessori arhitektuuri üks peamisi elemente. Enamik protsessori käske kasutab pinu, tarbides sellest vajalikud operandid ja surudes tulemused sinna. Pinnas olevate andmete tõlgendamine sõltub lahendatava probleemi olemusest, st see on lõppkokkuvõttes programmeerija vastutus. Kuna virna surutud väärtus kaotab tegelikult oma nime, on programmi tekstist raske kindlaks teha, millistele operandidele konkreetne tehing rakendatakse ja millised on selle tulemused. Seetõttu kasutatakse RAYA keele protseduuride operandide ja tulemuste selgesõnaliseks näitamiseks kommentaare. Sel juhul ei ole vaja (ja mitte alati võimalik) kogu virna sisu kirjeldada. Kindlasti on vaja kommenteerida virna ülemist osa, mida sellel läbiviidav protseduur mõjutab, kuna ilma selleta kaob programmi selgus ja selle kontrollimine muutub keeruliseks.

Programmi ühtsuse saavutamiseks tuleks need kommentaarid kirjutada, võttes arvesse mõnda lihtsat reeglit. Nagu iga kommentaar, on ka virna andmete kirjeldus nurksulgudes. See kirjeldus on loend operandidest, mis on virnas programmi antud punktis. Iga loendi element iseloomustab ühe virna positsiooni sisu, eraldajana kasutatakse koma. Virna asukoha väärtused on loetletud vasakult paremale, alustades sügavaimast elemendist ja lõpetades virna ülaosaga. Üksiku operandi kirjeldus võib olla arv, nimi, avaldis või mõni muu tähenduslik kirje, mis selgitab virnas asuva väärtuse tähendust. Mõnikord on virna positsioonil mitu võimalikku väärtust. Sel juhul on väärtused loetletud kaldkriipsuga eraldatuna.

Siin on näide kommentaarist, mis kajastab operandivirna olekut:

[aadress, N+1,1/0]

Programmi punktis, kus see kommentaar asub, peab operandipinn sisaldama vähemalt kolme positsiooni, mille ülaosas on 1 või 0, alamülaosas arvväärtus, mis on võrdne N+1-ga ja selle all mõni number. , tõlgendatakse algusaadressina.

Vajaliku virna asukoha näitamise mugavuse huvides kasutame sügavuse mõistet. Eeldame, et virna ülemine osa asub sügavusel 1, alamülaosa sügavusel 2 jne. Eelkõige väärtus, mis on näites tähistatud kui "start.aadress". asub sügavusel 3.

Alustame DSSP põhikeele uurimist käskudega väärtuste virnasse surumiseks. Lihtsaim (ja kõige sagedamini kasutatav) seda tüüpi käsk on numbriline literaal, st selgesõnaline märge konstandi kohta, mis tuleks virnasse lükata. Olgu näiteks, et me tahame virnasse lükata numbrid 28, -5 ja 11. Selleks peame klaviatuurilt sisestama rea:

28 -5 11 ja vajutage klahvi (vankri tagasi). Protsessor tunneb sisestatud numbrid ära ja lükkab need ükshaaval virnale, nii et ülemine osa oleks 11. Selle kontrollimiseks printige lihtsalt ekraanile virna ülaosa väärtus. Selleks kasutage nimega käsku DSSP. (punkt). Sisestades klaviatuuril tähe "punkt" ja vajutades , saame ekraanile vastuse: 11, mis vastab viimasele virna lükatud väärtusele. "Punkti" uuesti käivitamine annab sama tulemuse - see käsk renderdab ainult tipu ilma virna olekut muutmata.

Kogu virna sisu kuvamiseks ekraanil on DSSP-l käsk .. (kaks punkti). Pärast selle täitmist saame ekraanile rea:

Nagu näete, järgib väljatrüki vorm virna oleku kommenteerimise tavasid (välja arvatud see, et koma asemel kasutatakse tühikut). Käsk .. ei muuda virna sisu.

32-bitist sõna (4 baiti) kasutatakse ühe virna positsiooni tähistamiseks masina mälus; numbrid on esitatud kahe täienduses. Sellest lähtuvalt suudab DSSP protsessor õigesti tajuda ainult täisarve vahemikus -2147483648 kuni 2147483647. Kui sisestatud numbrit ei saa esitada 32 bitiga (märki arvesse võttes), siis jäetakse ära kõige olulisemad bitid, mis ei sobi. .

Vaadeldavates näidetes eeldati, et DSSP protsessor on kümnendkoha sisend-/väljundrežiimis. Selle režiimi seadistamiseks PARA keeles on käsk B10.

Paljude ülesannete puhul on vaja töödeldud andmeid tõlgendada mitte numbrite, vaid kahendkoodidena, see tähendab 32-komponendiliste bitivektoritena. DSSP-l on võimalus töötada kahend-, kaheksand- või kuueteistkümnendsüsteemis esitatud koodidega. Soovitud režiimi seadistamiseks piisab ühe kolmest käsust: B2, B8 või B16, mille järel protsessor aktsepteerib ja prindib kõik sisestatud koodid määratud numbrisüsteemis.

Seda funktsiooni saab kasutada kümnendarvude teisendamiseks arvusüsteemideks, mille alused on 2, 8 ja 16. Näiteks arvu 29 teisendamiseks peate sisestama ja täitma järgmise rea:

B10 29 B2. B8. B16. Selle tulemusena kuvab protsessor ekraanil numbrite seeria: 00000000035 0000001D, mis on kümnendarvu 29 esitused kolmes määratud numbrisüsteemis. Pange tähele, et koodid trükitakse nende masinaesituses, st eesolevate nullidega ja ilma märkideta "+", "-". Rea B10 -2 B8 täitmisel. annab numbri 37777777776, mis on kahe komplemendi kaheksandkuju -2.

Kuueteistkümnendkoodidega töötamisel võib esineda kokkupõrkeid numbriliste literaalide ja DSSP protsessori käskude nimede vahel. Näiteks sõna B8 kuueteistkümnendsüsteemis I/O režiimis saab tõlgendada kaheksandrežiimi käsuna ja kuueteistkümnendsüsteemi konstandina. Mitmetähenduslikkuse vältimiseks tuleks numbrilisi literaale alustada mitteolulise nulliga, näiteks 0B8.

DSSP protsessori käsusüsteemi aluseks on pinus asuvate andmete teisendamise toimingud. Nende toimingute toimimist reguleeriv üldreegel on see, et iga toiming tarbib (eemaldab) virust vajalikud operandid ja lükkab tulemusväärtused (kui neid on) nende asemele.

Vaatleme protsessori käske, mis teostavad nelja aritmeetilist operatsiooni: liitmine, lahutamine, korrutamine ja jagamine täisarvudes. Nende kujutamiseks PARADIISI keeles kasutatakse vastavalt sõnu +, -, * ja /. Kahe virna arvu, näiteks 123 ja 45, summa saamiseks peate need numbrid virna lükkama ja täitma + käsu. Selleks sisestage lihtsalt klaviatuurilt järgmine rida (eeldusel, et kümnendkoha sisend/väljundrežiim on seatud):

123 45 +

Kui nüüd kuvada virna sisu ekraanile (kasutades käsku ..), näete lisamise tulemust:

Kommutatiivne korrutustehte töötab sarnaselt.

Lahutamise ja jagamise mittekommutatiivsete toimingute tegemisel võetakse virna alamtipp minuendiks (jagunemiseks) ja ülemine osaks (jagajaks). Näiteks erinevuse 151-68 arvutamiseks peate täitma rea:

151 68 -

PARA-keeles aritmeetilise tehte sooritamise programmi iseloomustab asjaolu, et tehe asub sellele vastavate operandide järel. Seda aritmeetiliste avaldiste tähistust nimetatakse postfiksiks (või poola pöördmärgistuseks) ja seda kasutatakse laialdaselt virna mikrokalkulaatorites. Näiteks peame arvutama aritmeetilise avaldise väärtuse ((127+81)*15-(31+117)*21)*3

Postfiksi tähistuses näeb see väljend välja järgmine:

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

See rida (kus sõnad on üksteisest tühikutega eraldatud) on valmis programm meie avaldise arvutamiseks DSSP protsessori poolt.

Jagamine / käsk erineb teistest aritmeetilistest toimingutest selle poolest, et selle tulemuseks on kaks väärtust - jagatis ja jääk. Jagatis jõuab virna alumisse ossa ja ülejäänud osa ülaossa. Jagatis on negatiivne, kui dividendil ja jagajal on erinevad märgid. Ülejäänud osal on alati dividendi märk. Siin on mõned näited jagamise käsu kasutamisest.

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

Arvutuste tegemisel võivad tekkida veaolukorrad: ületäitumine ja nulliga jagamine. DSSP-protsessor ei reageeri neile kuidagi (eriti nulliga jagamisel ei muutu virna sisu) ja kontroll toimingute õige kasutamise üle jääb programmeerijale.

Programmeerimisel tuleb sageli väärtuse väärtust suurendada või vähendada 1 või 2 võrra. PARA keelde on sisse viidud spetsiaalsed käsud, mis teevad pinu ülaosas määratud toiminguid. Neid tähistatakse sõnadega: 1+, 1-, 2+, 2-. Nende käskude täitmine võrdub nõutava konstandi (1 või 2) virnasse lükkamisega ja seejärel vajaliku aritmeetilise toiminguga (+ või -). Näiteks 2+ on samaväärne sõnapaariga 2+. Nende käskude kasutuselevõtt keelde oli ajendatud tõhususe kaalutlustest.

Samuti sisaldab DSSP protsessori baaskeel efektiivsuse suurendamiseks käske T0 ja T1, mis asendavad pinu ülaosas oleva väärtuse vastavalt 0 ja 1-ga, olenemata sellest, milline väärtus oli ülaosas enne määratud käsku. Näited:

NEG, ABS ja SGN käsud on mõeldud ka arvandmetega töötamiseks. Käsk NEG muudab virna ülaosa märgi ümber, ABS asendab virna ülaosa väärtuse oma mooduliga, SGN tarbib virna ülaosast arvväärtust ja asetab selle asemele eraldatud numbri märgi: -1 - kui arv on negatiivne, 1 - kui positiivne, 0 - kui võrdub nulliga. Näiteks:

5 NEG [-5] ABS SGN

Põhikeele käsud MIN ja MAX võimaldavad leida kahe täisarvu miinimum- ja maksimumarvu. Nende juhiste operandid on kaks numbrit, mis asuvad virna üla- ja alaülaosas. Käsk MIN jätab virnale minimaalse arvu parameetreid, MAX - neist maksimaalse. Näiteks:

5 0 15 MIN [-5,0] MAX

Kolmest virnast minimaalse (maksimaalse) arvu leidmiseks kasutage lihtsalt käsku MIN (MAX) kaks korda:

MIN MIN [-2]

SEG-käsk kontrollib, kas virna ülaosas olev arv langeb määratud vahemikku a kuni b (kaasa arvatud piirid) ja jätab selle tulemusel virnale märgi: 1, kui arv on vahemikus ja 0, kui mitte:

SEG [märk] näiteks:

Lisaks arvandmetega töötamisele keskendunud käskudele sisaldab DSSP-protsessori käsukomplekt mitmeid toiminguid, mis on mõeldud 32-bitiste koodide teisendamiseks. Need toimingud käsitlevad pinuelementi 32-komponendilise bitivektorina, mille komponendid nummerdatakse paremalt vasakule nii, et kõige vasakpoolsem bitt on nummerdatud 31-ga ja kõige parempoolseim bitt on nummerdatud 0-ga. Komponentide kahanev nummerdamine järgib nummerdamist paljude mikroprotsessorite jaoks vastu võetud masinasõnabitid.

Bitivektoritega tehtavad käsud hõlmavad peamiselt bitipõhiseid Boole'i ​​algebra toiminguid:

    INV-virna ülaosa bitipõhine ümberpööramine, muutes iga ülemise biti väärtust, st asendades 0 1-ga ja 1 asendades 0-ga;

    pinu & ülemise ja alamtipu bitipõhine konjunktsioon, seades tulemuse i-nda biti i=31,30,...,0 väärtusele 1, kui mõlema operandi i-ndad bitid on võrdsed 1 ja muudel juhtudel määrates i-nda biti väärtuseks 0;

    pinu &0 ülemise ja alamtipu bitipõhine disjunktsioon, seades tulemuse i-nda biti, i=31,30,...,0, väärtuseks 0, kui mõlema operandi i-ndad bitid on võrdsed 0 ja muudel juhtudel määrates i-nda biti väärtuseks 1;

    tipu ja alamtipu bitipõhine liitmine (mitteekvivalentsus) "+", tulemuse i-ndaks bitiks seadmine 0-ks, kui mõlema operandi i-ndal bitil on samad väärtused, ja i-nda biti seadmine tulemuseks 1, kui operandide i-nda biti väärtused on erinevad.

525 INV 722 & 136 & 0 325 "+"

Bitipõhist sidet kasutatakse sageli sõna bittide lähtestamiseks (tühjendamiseks). Selleks ühendavad nad algse sõna maskiga, mis sisaldab nulli nendes bittides, mis tuleb kustutada, ja ühtesid ülejäänud bittides. Näiteks kui teil on vaja lähtestada mõne sõna X bitid 3 kuni 5, peate teostama selle bitipõhise ühenduse maskiga 37777777707. X=235 korral saame:

Bitipõhist disjunktsiooni saab kasutada soovitud bitikombinatsiooni paigutamiseks eelnevalt kustutatud sõnabittide rühma. Olgu näiteks, et kahendkombinatsioon 010 tuleb panna viimase näite tulemusel virna jäänud sõna bittidesse 3 kuni 5. Seda saab teha järgmiselt:

Bittide manipuleerimise operatsioonid hõlmavad ka loogilisi nihkekäske:

    vasak nihe SHL - iga pinu ülaosa bitt, alates 31.-st, võtab järgmise väärtuse kahanevas järjekorras ja viimane, nullbitt saab väärtuse 0;

    parem nihe SHR - iga pinu ülaosa bitt alates 0-st võtab järgmise väärtuse kasvavas järjekorras ja 31. bitt saab väärtuse 0;

    nihe ülaosas SHT - ülemine element eemaldatakse virust ja seda käsitletakse täisarvuna N, mis näitab, mitu nihet ja mis suunas tuleks virna ülaosas teha: kui N>0 tehakse nihe vasakule , kui N<0 - вправо.

B8 125 SHR SHL -2 SHT

Vasakpoolse nihke tehteid saab kasutada arvude korrutamiseks 2-ga N astmeni, kus N on naturaalarv, mis määrab nihete arvu. Näiteks saab arvu -5 korrutada 8-ga, nihutades arvu 3 kohta vasakule:

B10 -5 3 SHT [-40]

Arvestada tuleb ülevoolu võimalusega.

Parempoolset nihet saab kasutada 2-ga jagamiseks N astmega ainult positiivsete arvude puhul, kuna parempoolse nihke ajal seatakse kõige olulisem (märgi)bitt nulliks. Näiteks:

kusjuures

Käsud pinu ülaosa tsükliliseks nihutamiseks 1 biti võrra paremale ROR-ile ja vasakule ROL-ile on sarnased loogiliste nihkekäskudega, välja arvatud see, et tõrjutud äärmine bitt ei kao, vaid lükatakse vabasse ruumi virna vastasotsas. 32-bitine sõna. Näiteks (kuueteistkümnendarvud):

DSSP protsessori käsud SWB ja SWW on samuti mõeldud kahendkoodide töötlemiseks. SWB-funktsioon on virna ülaosa madalama järgu poole baitide vahetamine ja SWW-funktsioon on virna ülaosa poolte vahetamine. Illustreerime, kuidas need käsud töötavad kuueteistkümnendsüsteemis I/O režiimis (selles režiimis on iga bait esindatud kahe kuueteistkümnendkohanumbriga):

B16 0ABCD SWB SWB

0ABCDEF12 SWW SWB

Virnaga manipuleerimise käsud mängivad PARA keeles olulist rolli. Need ei muuda virnas asuvate andmete väärtusi, vaid muudavad ainult nende asukohta, hõlbustades juurdepääsu virna sügaval asuvatele operandidele.

Virnaelementide kustutamiseks on kolm käsku: D, DD, DS (Drop). Käsk D eemaldab virnast ühe (ülemise) elemendi, DD eemaldab kaks elementi, näiteks:

D DD D DS eemaldab virnast kõik elemendid (tühjendab virna):

Käsk virna ülaosa kopeerimiseks C (Copy) surub virnasse selle ülaosa praeguse väärtuse koopia. See on samaväärne virna ülemise elemendi dubleerimisega: vanast ülemisest saab alamtipp ja selle koopiast saab uus tipp. Näide:

Näitame selle käsu kasutamist polünoomi p(x)=3*x**2+4*x-5 arvutamise näitel Horneri skeemi järgi: p(x)=(3*x+4)*x- 5. Eeldame, et väärtus x sisaldub virna ülaosas.

[x] C 3 * 4 + * 5 -

Paralleelselt virna ülaosa kopeerimise käsuga on PARA keeles ka käsud C2, C3, C4, mis kopeerivad sügavustel 2, 3, 4 paiknevaid elemente. Nende tööd saab selgitada järgmiste näidetega:

C2 C4

Samuti on olemas CT-käsk virna ülaosas määratud sügavusel asuva elemendi kopeerimiseks. CT sooritamisel eemaldab protsessor pinust ülemise elemendi, kasutab selle väärtust kopeeritava elemendi sügavuse indikaatorina ja lükkab viimase koopia virna. Seega määrab sügavusel 5 asuva elemendi kopeerimine 5 CT-käsu paariga, mille täitmisel surub protsessor virna numbri 5 ja täidab seejärel CT-käsu. CT täitmine parameetritega 1, 2, 3, 4 on samaväärne vastavalt käskudega C, C2, C3, C4.

Vahetuskäsud E2, E3, E4 (Exchange) paigutavad virna esimese (ülemise) elemendi ümber vastavalt 2., 3., 4. elemendiga, st elemendiga, mis asub sügavusel 2, 3, 4. Näiteks:

E3 E2

Suuremale sügavusele vahetamiseks kasutage käsku ET, mis sarnaselt CT-ga kasutab virna ülaosa väärtust esimese elemendiga vahetatava elemendi sügavuse indikaatorina. Näiteks:

5 ET

ET käsk parameetritega 2, 3, 4 on samaväärne käskudega E2, E3, E4.

Kopeerimis- ja jagamiskäskude kasutamise illustreerimiseks kaaluge õppeülesannet. Virnale on antud kolm numbrit. Virnale vastuvõtmiseks nõutav: . Võite soovitada järgmist programmi, mille tähendus kommentaaridest selgub.

C3 C3 C3+

E4+E4

See näide näitab hästi, kui oluline on kommentaaride roll, peegeldades operandivirna olekut.

Programmides on sageli vaja arvulisi väärtusi omavahel võrrelda ja sõltuvalt võrdluse tulemustest teha erinevaid protseduure. RAYA keeles on võrdluskäsud<, =, >. Need on defineeritud arvude alusel ja annavad tulemuseks arvväärtused 0 ja 1. Niisiis, käsk< потребляет из стека два элемента и засылает в стек число 1, если значение нижнего элемента оказалось меньше значения верхнего, а в противном случае засылает 0. Например, в результате выполнения последовательности 5 -20 < в стек будет заслан 0. Команда = засылает 1 в случае равенства потребленных ею элементов. Команда >saadab 1, kui alumine element on suurem kui ülemine element. Mitterangete võrdluste (väiksem või võrdne, suurem või võrdne) programmeerimiseks kasutatakse käsku NOT, mis asendab virna ülaosas oleva väärtuse, mis ei võrdu nulliga, nulliga ja nulliga võrdse väärtuse ühega. Näiteks loogilise avaldise x>=5, kus x on mingi virna ülaosas asuv arv, hinnangu saab määrata järgmiselt:

[x] 5< NOT

Tingimuste programmeerimisvõimaluste edasise laiendamise tagab konjunktsiooni & (loogiline JA) ja disjunktsiooni &0 (loogiline VÕI) loogiliste operatsioonide kasutamine koos võrdluskäskudega. Olgu näiteks, et sa tahad virnale saada 1, kui arv x tipus kuulub poolsegmenti C 5< NOT C2 10 <

&E2 2 = &0

Võrdlustulemustest sõltuvaid programmide juhtelemente arutatakse hiljem.

Protseduuride määratlemine

Põhilise programmeerimistehnikana annab DSSP kasutajale võimaluse määratleda nimega toimingute jadasid, mida nimetatakse protseduurideks. Näiteks peate arvutama ruuttrinoomi 3*x**2-4*x+9 väärtused antud x väärtuste jaoks. Sel juhul peaksite määratlema protseduuri, mis rakendab kolmikvalemit ja väljastab tulemuse terminalile, ning seejärel rakendage seda protseduuri x konkreetsete väärtuste jaoks. Nõutav protseduur, nimetagem seda PX-iks, on defineeritud järgmiselt: PX [x] C 3 * 4 - * 9 + . D ; Käärsool tähistab toimingut "määratle protseduur", kusjuures protseduuri nimele järgneb eraldava tühiku järel koolon. Määrav käskude jada (protseduuri põhiosa) asub protseduuri nime järel ja lõpeb semikooloniga. Lühidalt, protseduur on määratletud kujul:

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

RAYA keel nõuab operandi virna oleku kommenteerimist protseduuri alguses ja lõpus. Protseduuri sisus paigutatakse kommentaarid programmeerija äranägemisel raskesti mõistetavatesse kohtadesse.

Kommentaarid aitavad inimestel protseduuri mõista ja kasutada; protsessor lihtsalt ignoreerib sulgudes olevaid asju. Seetõttu võib terminalist üksiku protseduuri definitsiooni sisestamisel kommentaarid ära jätta.

Pärast protseduuri määratluse sisestamist ja klahvi vajutamist protsessorit teavitatakse sisendi lõppemisest, terminali ekraanile ilmub tärn, mis annab märku käsu "define procedúra" täitmisest ja protsessori valmisolekust dialoogi jätkamiseks. Nüüd saate PX-protseduuri rakendada klaviatuurilt määratud x väärtustele, näiteks 2, 3, 4 (protsessori toodetud on alla joonitud):

* 2 pikslit 13

*3 PX 24

* 4 pikslit 41

Määratleme üldisema protseduuri trinoomi kujul a2*x**2+a1*x+a0 arvutamiseks, mis võimaldab määrata nii x kui ka a0, a1, a2 väärtused. Nimetagem seda PXA-ks:

: PXA C E4 E3 * + * + ;

PXA kasutamisel peavad väärtused a0, a1, a2, x olema virnas vajalikus järjestuses. Näiteks: a0=1, a1=2, a2=-3, x=4

* 1 2 - 3 4 PXA . D -39

Protseduuri põhiosa võib koos protsessori põhitoimingutega sisaldada kasutaja määratud protseduure. Näiteks saab defineerida protseduuri P, mis lisaks PXA tehtud arvutustele prindib tulemuse koopia terminali ja eemaldab tulemuse pinust.

:PXA. D ;

Eelkõige võib protseduuri sisu sisaldada määratletava protseduuri nimetust, st protseduur võib olla rekursiivne. Näiteks:

: AEG [t] 1- AEG ;

See protseduur vähendab virna ülaosa väärtust 1 võrra ja viitab taas iseendale, st töötab ajaloendurina.

AJA loendur ei saa põhimõtteliselt peatuda: ühe lahutamise protseduuri tehakse protsessori töötamise ajal ikka ja jälle. Kuid DSSP-s on tööriistu, mis võimaldavad teil protsessi edenemist sõltuvalt saadud tulemustest juhtida - programmi edenemise kontrollimise toiming.

Tingimuslik täitmine ja kordamine

Programmi, mis on käskude jada, mis täidetakse nende tähistuses üksteise järel ilmumise järjekorras, nimetatakse lineaarseks. Et programm oleks kergesti nähtav (loetav) ja arusaadav, jagatakse see nimelisteks osadeks, millel on kindel tähendus - protseduurideks, millest igaüks on määratletud oma protseduuride jadaga, mis omakorda on määratletud väiksemate protseduuride järjestustega jne. protseduuridele, mille määravad otseselt DSSP-käskude jadad. Sellist programmi, mis on kirjutatud protseduuride definitsioonide hierarhiana, nimetatakse struktureeritud. Struktureeritud programmi koostamise meetodit, mis seisneb lahendatava probleemi järkjärgulises jaotamises järjest väiksemateks alamülesanneteks, nimetatakse struktureeritud programmeerimiseks.

Struktureeritud programmeerimismeetodil on võimalik luua mitte ainult lineaarseid, vaid ka mis tahes programme, kui on toimingud protseduuri teostamiseks vastavalt tingimusele, protseduuri kordamiseks ja korduvast protseduurist väljumiseks. DSSP-s saadaolev seda tüüpi käskude komplekt annab võimaluse suvalise programmi struktureeritud koostamiseks.

Protseduuri teostamise või mittekäivitamise tingimused on sõnastatud vastavalt arvu märgile, täpsemalt selle väärtuse märgile, mis hetkel pinu ülaosas on. Peamine tingimusliku protseduuri täitmiskäsk - BRS (BRanch on Sign) juhendab täitma ühte kolmest BRS-i järgi nimetatud protseduurist olenevalt virna ülaosa hetkeväärtuse märgist. BRS-i käivitamisel eemaldab protsessor pinust ülemise elemendi, testib selle väärtust ja kui see on negatiivne, siis sooritab neist protseduuridest esimese, kui see on null, siis teise ja kui see on positiivne, siis kolmandaks. Nii et meeskond

põhjustab ühe elemendi eemaldamise virust ja protseduuri N täitmise, kui eemaldatud väärtus on negatiivne, protseduuri P täitmise, kui see on positiivne, ja protseduuri Z, kui see on null.

BRS-käsu kasutamise näide on järgmine SGN-protseduuri definitsioon

: SGN [X] BRS -1 0 1;

See protseduur asendab virna ülaosas oleva väärtuse X numbriga -1, kui X<0, числом 0, если X=0, и числом 1, если X>0. SGN-protseduur on DSSP-s saadaval protsessori põhitoiminguna.

BRS-käsk koos ühe protseduuri valimisega kolmest andmest annab võimaluse rakendada kahe väärtusega lauseid kujul IF-THEN ja IF-THEN-ELSE. Näiteks lause kui x>0 siis P1 muidu P0 vastab käsule BRS P0 P0 P1 ja lausele kui x<>0 siis P - käsk BRS P NOP P, milles NOP on tühja toimingu nimi. Kuid DSSP-s on tõhusam kahe väärtusega tingimuste rakendamine - käsud IF-, IF0, IF+, BR-, BR0, BR+.

IF-rühma käsud vastavad lausele IF-THEN. Näiteks käsk IF-P annab korralduse eemaldada pinust ülemine element ja testida selle märki ning kui sellel elemendil on miinusmärk, siis käivitada protseduur P. Käsud IF0 P ja IF+ P annavad vastavalt käsu käivitada protseduur P. , juhul kui eemaldatud element on võrdne nulliga ja juhul, kui selle väärtus on positiivne.

IF-rühma käskude kasutamist illustreeriva näitena anname ABS-i baaskeeles käsu definitsiooni, mis arvutab virna ülaosa mooduli.

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

Käsud BR-, BR0 ja BR+ vastavad lausele IF-THEN-ELSE, andes korralduse valida üks kahest nende järgi nimetatud protseduurist. Kui virust eemaldatud elemendi märk langeb kokku käsutähistuses olevaga, siis käivitatakse esimesena nimetatud protseduur ja kui see ei ühti, siis teine ​​protseduur. Näiteks käsk BR0 P0 P1 käsib käivitada protseduuri P0 juhul, kui virust eemaldatud element on võrdne nulliga ja kui see tingimus ei ole täidetud, siis käivitada protseduur P1.

Vaatlusalused käsud võimaldavad säästlikult programmeerida protseduuri täitmist sõltuvalt nendest tingimustest. Vormi x levinumad tingimused<0, x=0, x>0 rakendatakse otse IF-rühma juhiste abil. Tingimused x<=0, x<>0, x>=0 programmeeritakse käskude BR-, BR0, BR+ abil, kasutades esimese protseduurina tühja NOP-operatsiooni. Näiteks if x klausel<=0 then P соответствует команда BR+ NOP P. Примером использования команд группы BR может служить следующая реализация команды базового языка NOT, заменяющей нулевое значение вершины стека единицей, а ненулевое - нулем.

: EI [x] BR0 1 0 ;

Programmi hargnemine toimub sageli pärast võrdluskäske (<, =, >), mis annab loogilise väärtuse 1 või 0, sõltuvalt kahe arvu võrdlemise tulemusest. Näiteks MAX põhikeele käsu saab programmeerida järgmiselt:

: MAX C2 C2< IF+ E2 D ;

Hargnevate käskude rühm sisaldab ka BR-i valikukäsku, mis on kirjutatud kujul:

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

Selle käsu rakendamisel käivitab protsessor esmalt osutiprotseduuri A1 ja võrdleb virnasse lükatud väärtust selle all oleva väärtusega pinu eelmisest ülaosast. Kui väärtused ühtivad, eemaldatakse virust kaks ülemist elementi ja käivitatakse osutiga A1 seotud protseduur P1, mille järel minnakse üle BR-käsku järgivale käsule (st ülaltoodud tähistuses üks, mis järgneb programmi tekstis sõnale P0). Kui võrreldavad väärtused ei ühti, eemaldatakse virnast ülemine element (st A1 tulemus) ja samad toimingud tehakse paariga A2 P2, siis kui vastet pole, siis paar A3 P3 jne. kuni AN PN (kaasa arvatud). Kui ükski katsetest ei andnud vastet, käivitatakse sõna ELSE järgi nime saanud protseduur P0. Tavaliselt toimivad arvkonstandid osutiprotseduuridena, näiteks:

[x] C BR 5 NEG -3 ABS 0 MITTE MUU T0 [y]

Selle rea täitmise tulemusena saadakse pinu ülaossa väärtus y=-5, kui x=5; y = 3, kui x = -3; y=1, kui x=0 ja y=0 kõigil muudel juhtudel.

Üldiselt võib osutiprotseduur olla mitte ainult arvkonstant, vaid ka muutuja või mis tahes muu protseduur, mis rahuldab lihtsat nõuet, et see ei hüppa pinust midagi välja ja lükkab virnale ühe väärtuse.

Et illustreerida, kuidas tingimusliku protseduuri täitmistoiminguid kasutatakse, muutkem eelmises jaotises protseduuri TIME nii, et loendur peatub antud tingimuse ilmnemisel:

: AEG [t] 1- C KUI+ AEG ;

Nüüd kutsub see TIME protseduur end välja ainult siis, kui virna ülaosa on positiivne. Loendur töötab täpselt N korda, kui TIME esimese täitmise alguses sisaldab tipp positiivset arvu N. Näiteks 7 tehte saamiseks tuleb määrata

7 AEG<ВК>

Kuna IF+ TIME definitsioonis, nagu iga tingimuslik tehe, eemaldab testitava elemendi virust ja see element on vajalik järgmisteks operatsioonideks, tuleb see dubleerida, asetades C (Copy) operatsiooni IF+ ette.

Rekursioon ei ole peamine vahend protseduuri mitmekordseks täitmiseks. Tsüklite programmeerimiseks PARA keeles on käsud RP (Korda - korda) ja DO (Do - do, execute).

Käsk RP W annab teile korralduse sooritada protseduuri W ikka ja jälle piiramatu arv kordi. Korduste peatumiseks peab protseduuri W keha sisaldama EX (Exit) operatsiooni, mis täidetakse antud tingimusel. EX-operatsioon läheb üle protseduuri täitmisele, mis järgneb programmi tekstis seda EX-toimingut sisaldavale korduvale protseduurile. Seega saab ülaltoodud rekursiivse protseduurina TIME realiseeritud loenduri programmeerida kordama protseduuri W, mis on määratletud järgmiselt:

: W [t] 1- CIF0EX;

Selleks, et loendur töötaks 25 korda, peate rea täitma

Koos EX-operatsiooniga, mida kasutatakse tingimuskäskudes, on ka tingimuslikud väljumistoimingud EX-, EX0, EX+, mis annavad sama efekti kui käsud IF-EX, IF0 EX, IF+ EX, st tarbivad ülemist elementi. , testides selle märki ja väljudes, kui märk vastab toimingu tähises määratule. Tehteid EX, EX-, EX0, EX+ saab kasutada mitte tingimata korduva protseduuri kehas (meie puhul W), vaid ka protseduurides, millele see viitab.

Vaatleme näiteks kahe naturaalarvu suurima ühisjagaja leidmise probleemi Eukleidese meetodi abil. Meetodi olemus seisneb selles, et peate lahutama suuremast arvust väiksema arvu, kuni arvud muutuvad üksteisega võrdseks. Kui võrdsus on saavutatud, leitakse suurim ühine jagaja.

Programmeerimine toimub ülalt-alla arendusmeetodil. Esiteks määratleme GCD protseduuri, mis fikseerib algoritmi üldise skeemi. Selle protseduuri parameetrid on virnal kaks arvu M ja N, mille jaoks leitakse suurim ühisjagaja. GCD protseduuri põhiosa peab määrama virna väärtuste teisendamiseks tsüklilise protsessi. Selle protsessi tulemusena peaks pinu jääma kaks võrdset arvu - ükskõik millist neist võib võtta suurima ühisjagajana. Neid kaalutlusi arvesse võttes saab GCD protseduuri määratleda järgmiselt.

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

Nüüd on vaja programmeerida iteratiivse protsessi üks samm, s.o. määratleda STEP-protseduur. Selle parameetrid on virnal kaks numbrit. Peate neid numbreid võrdlema ja tsüklist väljuma, kui need on võrdsed, vastasel juhul lahutage väiksem suuremast. Seda saab teha näiteks järgmiselt:

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

Nüüd pole programmis ühtegi määratlemata protseduuri jäänud ja saate seda kontrollima hakata. Kontrollimine peaks toimuma alt üles, st kõigepealt peate veenduma, et STEP-protseduur töötab õigesti ja alles seejärel - GCD.

Põhikeele DO toiming põhjustab selle järgi nimetatud protseduuri kordamise N korda, kus N on virna ülaosas olev arv DO täitmise ajal. Näiteks selleks, et protseduuri P saaks teostada 8 korda, tuleb seadistada

8 DO P

Kui protseduuri P kehas on vähemalt üks väljumistehte ja selle täitmise tingimus on täidetud enne, kui määratud korduste arv on toimunud, lõpetatakse kordused protseduurist väljumisega samamoodi nagu seda tehakse operatsioon RP. Näiteks kui DO kordab ülaltoodud W protseduuri, mille definitsioon sisaldab IF0 EX, põhjustab [T] 30 DO W kirjutamine 30 W kordust, kui väärtus T>=30. Kui 0

Kui DO-toimingu sooritamise ajaks on virna ülaosas null või negatiivne väärtus, siis DO-le järgnevat protseduuri ei teostata isegi üks kord.

Operatsiooni DO kasutamise illustreerimiseks defineerime protseduuri NUM, mis loendab virna ülaosas antud 32-bitise sõna x nullist erineva bittide arvu.

Asetame ühikute arvu loenduri virna alamtippu. Ühikute loendamine koosneb NUMI protseduuri kordamisest 32 korda, mille käigus uurime ühte bitti sõnast x. Silmust väljumisel peaks vajalik arv olema virna ülaosas.

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

Nullist erineva biti loendamiseks kasutame asjaolu, et sõna kõige olulisemas (31.) bitis üks on negatiivse arvu märk. Kui uuritav sõna on eitav, tuleb N-le lisada üks. NUMI protseduuri lõpus peate uuritavat sõna ühe biti võrra vasakule nihutama.

: NUMI C IF- N+ SHL ;

Protseduuri N+ rakendamine on üsna lihtne: peate selle lisama virna alamülaossa ilma ülaosa muutmata.

: N+ E2 1+ E2;

Korratavad protseduurid võivad oma kehades sisaldada RP- ja DO-operatsioone, mis viivad pesastatud silmusteni, ja mis tahes pesastussügavus on lubatud. Sel juhul on pesastatud tsüklist väljumiseks toiming EXT, mis näitab virna ülaosas pesastumise sügavust. Näiteks saab kahest pesastatud tsüklist väljumise määrata järgmiselt:

Tuleb meeles pidada, et käsu EXT kasutamine nõuab suuremat hoolt, kuna programmi muutmisel võib silmuste pesastussügavus muutuda ja vastavat konstanti enne EXT-i tuleb muuta.

Nimetatud andmed

Operandipinn on peamine, kuid mitte ainus mehhanism andmetega manipuleerimiseks DSSP-s. Samuti on võimalik koos protseduuride definitsioonidega deklareerida elemente ja standardselt organiseeritud elementide kogumeid (nn struktuure), mis on seejärel nende nimede järgi kasutamiseks kättesaadavad. Andmete deklaratsioonide rakendamisega reserveerib protsessor nende salvestamiseks vajaliku mälu ja pakub sellele mälule juurdepääsuks vajalikud mehhanismid.

DSSP põhikeel sisaldab mitmeid allpool käsitletavaid direktiivsõnu muutujate ja massiivide deklareerimiseks. Süsteemi keele laiendamiseks saab sellesse sisestada muid sedalaadi sõnu ja vastavalt ka muid elemente ja andmestruktuure.

Sõna VAR deklareerib 16-bitise numbrilise muutuja. Näiteks salvestada

deklareerib muutuja X, see tähendab, et see ütleb protsessorile, et nimi X on muutuja nimi. Protsessor seob selle nimega 16-bitise mäluelemendi, kuhu selle muutuja väärtus salvestatakse. Käsk muutuja X määramiseks operandivirna ülaosas olevale väärtusele on kujul

Selle käsu täitmisel eemaldab protsessor pinust ülemise elemendi ja kirjutab selle väärtuse muutuja X jaoks eraldatud lahtrisse.

Ainult muutuja nimest koosnev käsk, mille ees ei ole tähte !, sunnib selle muutuja väärtuse virnasse lükkama ja lükkamine toimub vastava mälulahtri sisu, s.o. muutuja jääb muutumatuks. Seega, iga muutuja nime X esinemine programmis, välja arvatud juhul, kui sellele vahetult eelneb sõna, mis täpsustab teistsugust tegevust, surub selle muutuja praeguse väärtuse pinu, nagu ka otse antud numbrid (numbrilised literaalid) lükatakse virna. .

Näitena toome ülalpool käsitletud GCD protseduuri teise versiooni, milles kasutatakse kahte töömuutujat.

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

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

: X-Y X Y - ! X ;

: Y-X Y X - ! Y ;

Nagu näete, on programm mõnevõrra pikenenud, kuid selle nähtavus on suurenenud.

Sõna VCTR deklareerib 16-bitiste rakkude ühemõõtmelist massiivi (vektorit), mille massiivi kõrgeima elemendi numbri annab tipu väärtus. Näiteks salvestuse tulemusena

9 VCTR ROW, jätab protsessor 10 järjestikuselt adresseeritavat 16-bitist sõna mälu, moodustades ROW(0:9) vektori. Kõigepealt lükatakse virna number 9 ja seejärel käivitatakse VCTR protseduur, kasutades virna ülemist elementi loodava ROW vektori pikkuse määramiseks.

ROW vektori j-nda elemendi väärtuse lükkamine virnasse, 0<=j<=9, задается командой

[j]RIDA

Kasutades parameetrina virna elemendi numbrit, asendab ROW vektori nimi selle numbri vastava elemendi väärtusega. Kui sõna! on vahetult enne ROW vektori nimetust, siis omistatakse selle tipuga tähistatud vektori elemendile alamtipu väärtus ja virna sügavust vähendatakse 2 võrra. Näiteks saate lähtestada ROW vektori 5. element on selline:

Samuti on võimalik kombineerida konstantseid vektoreid, s.t. 16-bitiste arvude vektorid, mille väärtused määratakse selle deklareerimisel ja ei muutu hiljem. Seega deklareeritakse 16-bitiste konstantide VC vektor pikkusega L+1, kasutades sõna CNST kujul:

CNST VC k0 k1 ... kL ;

kus k0, k1, ... kL on käsud, mis suruvad pinu ühe väärtuse. Enamasti on need lihtsalt numbrilised literaalid, kuid võib olla ka muutujate nimesid, protseduure, aga ka sõnapaaridest koosnevaid käske, nagu näiteks allpool käsitletav muutuja "X" aadressi saatmise käsk. Juurdepääs konstantse vektori elementidele toimub samamoodi nagu tavaliste vektorite komponentidele. Näiteks:

16-bitiste sõnade mitmemõõtmeline massiiv deklareeritakse sõna ARR abil, millele eelneb iga mõõtme maksimaalne indeksi väärtus ja mõõtmete arv. Näiteks kolmemõõtmeline massiiv TIR(0:8,0:2,0:24) deklareeritakse järgmiselt:

Arv 3 vahetult enne ARR-i näitab deklareeritud massiivi suurust.

Massiivi elemendi virnale surumine saavutatakse selle elemendi indeksi määramisega, millele järgneb massiivi nimi. Näiteks käsk elemendi TIR(0,2,2) virnasse lükkamiseks on väljendatud kujul

Vastavalt sellele määratakse käsuga sellele elemendile virna ülaosa praegune väärtus

Kõik vaadeldavad näited illustreerisid struktuuride loomist 16-bitistest sõnadest. Kuid keel võimaldab määratleda ka 32-bitise sõna ja 8-bitise baidi struktuure. Selleks asetatakse struktuuri määratleva sõna ette vastavalt eesliide LONG või BYTE. Näiteks,

5 BYTE VCTR X - 6-komponendilise baidivektori X määratlus;

BYTE CNST Y 65 66 67 ; - 3-komponendilise baidivektori konstandi Y määratlus;

10 20 2 LONG ARR MTRX - pikkade sõnade maatriksi definitsioon MTRX(0:10,0:20).

Sõna- ja baidistruktuuride elementide lugemine toimub samamoodi nagu 16-bitiste sõnastruktuuride puhul. Kui elemendi pikkus on alla 32 biti, asetatakse otsitav väärtus virna ülaosa madalasse sõna või baiti ja ülemise osa kõrgem osa nullitakse. Sõna või baidistruktuuri elemendile määratud väärtus on ka virna 32-bitise pikkuse sõna madal sõna või bait.

Kuigi andmete määratlemisel kasutatakse vaikimisi 16-bitist sõnavormingut, on sellel ka märge WORD. Seda eesliidet on soovitatav kasutada siis, kui programm on mõeldud ülekandmiseks teistele masinatele, kus on samuti juurutatud DSSP ja vaikeväärtus võib olla erinev.

Tekstiteabe salvestamiseks ja töötlemiseks kasutatakse kõige sagedamini baidiandmete struktuure. Seda seletatakse asjaoluga, et arvutimälus on eraldatud üks bait ühe märgi kodeerimiseks. Märgikoodide määramiseks RAYA keeles on konstruktsioon #l, kus l on mis tahes arvuti klaviatuuril saadaval olev märk. DSSP protsessor tajub seda konstruktsiooni kui käsku lükata l-tähe kood virna. Näiteks:

See konstruktsioon teeb samu toiminguid kui määratud tähe koodiga võrdne numbriline literaal, kuid selle kasutamine on eelistatavam, kuna esiteks vabastab see koodide meeldejätmise vajadusest ja teiseks muudab programmid arusaadavamaks. Täpsemalt saame anda konstantse vektori Y definitsiooni:

BYTE CNST Y #A #B #C ;

Sageli on programmis numbrilise konstandi jaoks mugav kasutada sümboolset tähistust. Selle võimaluse pakkumiseks on määratleja VALUE:

See käsk hüppab virna ülemise elemendi ja moodustab sõna, mille nimi on kohe VALUE järel. Selle sõna kasutamine on samaväärne arvkonstandi kasutamisega. Näiteks:

Töötamine mäluga füüsiliste aadresside järgi

Vaadeldavad tööriistad võimaldavad anda andmetele nimesid ja nendega manipuleerida sõltumata arvuti aadressisüsteemist. Kuid baaskeel sisaldab ka tööriistu, mis võimaldavad teil manipuleerida mäluelementide aadressidega. Muutuja või massiivi elemendi X aadress lükatakse käsuga pinu

Massiivielemendi puhul eelneb sellele käsule indeksi(te) väärtus.

Baaskeele @ käsk asendab pika mälusõna ülaosa aadressi seda sõna sisaldava väärtusega. Näiteks saab muutuja Y väärtuse virnasse lükata, käivitades järgmise rea:

@B käsk asendab aadressi vastava baidi väärtusega, määrates virna ülaosas olevad kõrged baidid nulliks ja @L käsk asendab aadressi 32-bitise sõnaga.

Samuti on käsud väärtuste mällu kirjutamiseks. Käsk!T kirjutab alamtopi 16-bitise väärtuse pinu ülaosast eemaldatud aadressile. Käsk!TB põhjustab alamtipu madala baidi sarnase kirjutamise tipu poolt adresseeritud baidiga ja!TL kirjutab alamtipu 32-bitise sõna tipu poolt adresseeritud sõnale. Näiteks saate baitvektori BV(0:5) viiendale elemendile määrata väärtuse 15 järgmiste käskudega:

15 5" BV!TB

Vajadus töötada mäluga füüsilistel aadressidel tekib tavaliselt siis, kui luuakse programme, mis sõltuvad konkreetse arvuti arhitektuurist, näiteks I/O draiverite loomisel.

Lisatoimingud andmete ja mäluga töötamiseks

Programmide suurema tõhususe ja kompaktsuse saavutamiseks on PARA keelde sisse viidud järgmised toimingud:

0 <имя переменной>- lähtestada muutuja;

1 <имя переменной>- määrata muutujale ühik;

1- <имя переменной>- vähendada muutuja väärtust ühe võrra;

1+ <имя переменной>- suurendada muutuja väärtust ühe võrra;

!- <имя переменной>- lahutada muutujast pinu ülaosa väärtus;

!+ <имя переменной>- lisage muutujale virna ülaosa väärtus.

Kõiki neid toiminguid on lihtne programmeerida muutuvate lugemis- ja kirjutamiskäskude abil. Näiteks,

0 X on võrdne 0-ga! X

1+ X on samaväärne X 1+ ! X

X on samaväärne X E2 - ! X

Nende toimingute kasutamine suurendab programmide tõhusust ja nähtavust.

Praktikas peate sageli määrama massiivi kõigile elementidele ühe väärtuse. Selleks on PARADIISI keeles operatsioon!!!<имя массива>. Selle tulemuseks on virna ülaosa väärtuse määramine määratud massiivi kõikidele komponentidele. Operatsioon!!! rakendatav mis tahes vormingus elementidega massiividele.

Kasutusnäide:

Ruumikood kirjutatakse kõikidele BUF-baidimassiivi komponentidele.

Sageli on vaja hankida programmist teavet nime taga oleva andmestruktuuri kohta. Kas selle jaoks on paar SIZE käsku? - kuvada andmeelemendi vorming: 1, 2 või 4 baiti ja DIM? - kuvada andmeelementide arv struktuuris. Näiteks kui andmed on deklareeritud

3 4 2 PIKK ARR Z

siis annavad need käsud neile rakendamisel järgmise tulemuse (kümnendarvud):

SUURUS? X SUURUS? SUURUS Y? Z

DIM? X DIM? Y DIM? Z

DSSP protsessori käsukomplekt sisaldab lisandina nelja käsku, mis võimaldavad lugeda ja kirjutada arvuti mälurakkude üksikuid bitte. Need on käsud @BI, !BI, !BI0, !BI1. Iga parameetri parameetrid on virnas oleva mälusõna aadress ja selle sõna biti number (pidage meeles, et bitid on nummerdatud paremalt vasakule, alustades nullist). Käsk!BI eeldab ka, et pinus on bitiväärtus, mis tuleb kirjutada. @BI käsk asendab määratud parameetrid valitud biti väärtusega (0 või 1), käsud!BI0 ja!BI1 seavad valitud biti väärtuseks vastavalt 0 ja 1, eemaldades nende parameetrid virust ning!BI käsk määrab valitud biti pinu kolmanda elemendi vähima tähtsusega biti väärtuseks ja eemaldab pinust kõik kolm selle parameetrit. Näiteks kui muutuja X väärtus on binaararv 101101, on loetletud toimingute tulemused järgmised:

" X [add.X] 3 @BI - X-i kolmas bitt, 0 " X 3 !BI - X on 100101,

" X [add.X] 0 !BI0 - X on 100100,

" X [add.X] 1 !BI1 - X võrdub 100110.

PARA keeles on ka tööriistad mälus asuvate baidistringidega töötamiseks. Baitide stringi määramiseks surutakse pinu kaks parameetrit: stringi algusaadress (st selle esimese baidi aadress) ja stringi pikkus (selles olevate baitide arv).

Käsku!!!MB kasutatakse stringi kõikidele baitidele ühe väärtuse määramiseks (määratud pinus). See kasutab virust kolme parameetrit: , kus b on määratud väärtus, a ja l on vastavalt algusaadress ja baidistringi pikkus. Näiteks peate lähtestama elemendid 3. kuni 10. baidimassiivist TXT(0:20). Selleks saate käivitada järgmise rea:

0 3 "TXT 8!!!MB

selle tulemusena saavad kaheksa järjestikust määratud massiivi elementi alates 3.-st väärtuse 0. Sarnane käsk!!!MW on mõeldud 16-bitiste sõnade jada täitmiseks sama väärtusega (sõnade arv on näidatud virna ülaosas) ja käsk! !!M - pikkade sõnade jada täitmiseks.

Käsk!SB teostab baidistringi ülekande. Selle parameetrid on: , kus a1 ja l on edastatava stringi algusaadress ja pikkus, a2 on stringi algusaadress, kuhu edastatakse. Käsu!SB täitmise tulemusena asub aadressilt a2 mällu l pikkusega baidistring, mis on enne edastust aadressil a1 asunud stringi täpne koopia. Lähtestring ja sihtstring võivad kattuda. Olgu näiteks, et soovid liigutada baidimassiivi M(0:10) elemente järgmiselt: M(10):=M(9), M(9):=M(8), ..., M(1):= M(0). Selleks saate kasutada käsku !SB:

0 "M 10 C2 1+ !SB

Selle tulemusena nihutatakse 10-baidist stringi ühe baidi võrra suuremate mäluaadresside suunas.

Käsk!SB on mugav märgivirnadega töötamiseks (pidage meeles, et iga märk on kodeeritud ühe baidiga). See võimaldab näiteks määrata baidimassiivile selgesõnaliselt määratud literaalse stringi väärtuse. Sellise stringi määramiseks kasuta tekstiliteraali, s.t. märkide jada jutumärkides, näiteks "TEXT LITERAL". Kui see konstruktsioon programmis kokku puutub, surutakse virnasse tsiteeritud teksti sisaldava baidistringi algusaadress ja pikkus. Neid parameetreid saab seejärel kasutada käsk!SB. Näiteks fragment "TABLE" 0 "TN !SB põhjustab literaali "TABEL" edastamise TN-massiivi.

Käsk SRCHB otsib stringist määratud baiti. Parameetrid: , kus b on bait, mille esimene esinemine tuleb leida, a ja n määravad vastavalt algusaadressi ja stringi pikkuse, milles otsitakse. Kui n>0, siis otsitakse aadressist a aadressini a+n-1 (aadresside suurendamise suunas), kui n<0, то поиск ведется с адреса a до адреса a+n+1 (в сторону убывания адресов). В результате выполнения этой команды в стеке оказывается значение d, равное смещению относительно адреса a до первого вхождения байта b. Если такое вхождение не обнаружено, то d=n. Примеры:

#T "TEKST" SRCHB

#A "TEKST" SRCHB

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

Andmetega töötamise tööriistade käsitlemise lõpetuseks peatume teemal, mis on seotud andmete salvestamisega arvuti välismällu, s.o. magnetketastel. PARA keeles on käsk SAVE<имя файла>, mis käsib salvestada süsteemi põhimälu koopia kettale koos kasutaja määratud objektidega. Sel juhul ei väljastata kettale VAR-i, VCTR-i, ARR-i toimingute jaoks andmete jaoks eraldatud mälualasid. Selle tulemusena ei ole salvestatud süsteemi kettalt laadimisel määratud andmete väärtusi määratletud (need tuleb määrata programmi täitmise ajal). Enamasti on see õigustatud, kuna töömuutujate, puhvrite jms salvestamiseks pole vaja kettamälu raisata. Siiski on andmeid, mille väärtused tuleb määrata kohe pärast süsteemi käivitamist kettalt. Näitena võib tuua muutuja, mis salvestab andmevahetuse kiiruse mõne välisseadmega. Teisele vahetuskursile üleminekul piisab selle muutuja väärtuse muutmisest ilma programmis parandusi tegemata.

Protsessorile annab märku, et mõne andmestruktuuri elementide väärtused tuleks käsuga SAVE kettale väljastada, on näiteks struktuuri definitsiooni ette asetatud eesliide FIX.

FIX VAR SPEED 20 FIX BYTE VCTR TABL

Sel viisil määratletud andmestruktuuridega töötamine ei erine tavapärasel viisil määratletud struktuuridega töötamisest.

Protsessori juhtimiskäsud

PARA keeles on väike rühm käske, mis on mõeldud DSSP protsessori või täpsemalt DSSP protsessori emulaatori juhtimiseks.

RESTART käsk paneb protsessori taaskäivitama. Sel juhul virn tühjendatakse ja kuvatakse teade

DSSP versioon XX.XX.XX

Saadaval XXXXXW

ja protsessor läheb käskude sisestamiseks ooterežiimi. See käsk võib olla kasulik programmide silumisel. See käivitatakse ka tõrkeolukordade ilmnemisel: indeks väljub massiivi piiridest, vaba mälu on ammendunud jne.

Käsku \G kasutatakse programmi täitmise jätkamiseks pärast määratlemata sõna juures peatumist. Kui protsessor kohtab protseduuri täitmisel viidet määratlemata sõnale, väljastab see teate:

lõpeta ma ei tea<слово> .

kus punkt on DSSP protsessori viip, mis annab märku, et protsessor on määratlemata sõna puhul peatuses. Selles režiimis saate täita mis tahes protsessori käske, nagu tavarežiimis, kui viip on tärn. Sellest režiimist väljumiseks on kaks võimalust – kas käivitades käsku \G (siis jätkab protsessor katkestatud protseduuri täitmist, jättes vahele määratlemata sõna) või kasutades käsku RESTART.

Käsk EXEC käsib protsessoril käivitada protseduuri, mille aadress on virna ülaosas. Protseduuri aadressi saamiseks kasutage käsku "" (kaks apostrofi), millele järgneb protseduuri nimi. Näiteks käsu täitmise tulemusena

ABS-protseduuri aadress lükatakse virna. Need käsud võimaldavad teil edastada protseduuri parameetrina teisele protseduurile.

Protsessori juhtimiskäskude rühm sisaldab juba mainitud SAVE-operatsiooni<имя файла>, mis juhendab salvestama süsteemi koopia kettale, samuti käske, mis määravad protsessori sisendisse edastatava tekstiteabe sisendallika. Esialgu on selleks allikaks kuvaklaviatuur.

LOAD käsk<имя файла>lülitab sisendi määratud nimega kettafaili. PF käsk – juhendab sisestama käske tekstiredaktori puhvrist. Käsk TEXEC edastab protsessori sisendisse tekstistringi, mille parameetrid on pinus määratud. Määratud allikates sisalduvate käskude täitmisel lülitub sisend automaatselt kuvaklaviatuurile.

Sõnastiku juhtkäsud

Protsessori poolt tajutav sisendkäsuvoog võib eelkõige sisaldada käske protseduuride ja andmete määratlemiseks, mis põhjustab protseduuri korpuse sisemise esituse ja salvestamise või määratud andmete jaoks mälu eraldamise, samuti nime sisestamise. kompileeritud protseduuri või andmestruktuuri kohta DSSP sõnastikku.

Sõnastik loob vastavuse väliste (programmitekstis kasutatavate) nimede ja neile nimedele vastavate objektide aadresside vahel siseesituses. Protseduurimääratluse või nimeandmete kirjelduse töötlemisel laiendab töötleja sõnastikku, moodustades sellesse uue sõnastikukirje, mis sisaldab nime (täpsemalt nimetuse 7 esimest tähemärki) ja protseduuri keha aadressi või selle nimega seotud andmete deskriptor.

Ülalt-alla programmeerimisel võivad protseduuri kehad sisaldada viiteid veel määratlemata objektidele. Sel juhul moodustatakse sõnastikus sõnaraamatukirjed (pealkirjad), mis on tähistatud määramatuse märgiga. Kõigi määratlemata nimede kuvamiseks ekraanil kasutage käsku UNDEF.

Sõnastiku laiendamise käigus on võimalik moodustada alamsõnastikke - nimelisi sõnaraamatukirjete kogusid. Alamsõnastik ühendab tavaliselt sama ülesandega seotud protseduure ja andmestruktuure. Alamsõnastiku ja muude programmiobjektide nimede segiajamise vältimiseks peab alamsõnastiku nimi algama tähega $. Juurdepääsu alamsõnaraamatutele nende laiendamiseks või kasutamiseks saab avada ja sulgeda spetsiaalsete käskudega, mis sisaldavad järgmist (nimi $v tähendab mis tahes kehtivat alamsõnastikku).

KASVATA $v - alamsõnastiku $v kasvatamine, st kuni pole teisiti juhitud, sisesta kõigi koostatud protseduuride ja andmete nimed $v alamsõnastikku;

USE $v - avatud kasutamiseks (sellest nimede otsimiseks) alamsõnastik $v;

SHUT $v - sulgeb alamsõnastiku $v kasutamise võimaluse;

AINULT $v - teeb kasutamiseks kättesaadavaks ainult alamsõnastiku $v;

TÜHISTA - tühista AINULT viimane.

Samuti on olemas käsk?$, mis prindib ekraanile kõigi alamsõnastike nimed ja nende oleku – kas alamsõnastik on otsimiseks avatud või suletud. Alasõnastikku, mille nimi on trükitud ülaossa, laiendatakse alati.

Põhilised DSSP protseduurid moodustavad alamsõnastiku nimega $PRIME, mis on vaikimisi kasutamiseks ja laienduseks avatud, st kui pole käsku, mis juhendaks teise alamsõnastiku laiendamist.

Kasutage näiteks toimingut?$ alamsõnastiku järgmise oleku printimiseks.

$PRG on avatud

$PRIME on avatud

$EDIT on suletud

$PRIME on avatud

SÜSTEEM on suletud

See tähendab, et hetkel on alamsõnastik $PRG avatud kasvuks ja kasutamiseks, $PRIME ainult kasutamiseks ning $EDIT ja SYSTEM pole saadaval. Pange tähele, et alamsõnastik võib koosneda mitmest sama nimega jaotisest.

On olemas käsud sõnastikust teatud sõnastikukirjete komplekti ja võib-olla nendega seotud sisemiste objektide kustutamiseks. Seega kustutab käsk FORGET $v kõik nimed, mis on sisestatud sõnastikku (mitte ainult alamsõnastikku $v) alates käsu GROW $v viimasest täitmisest, koos nende nimedega tähistatud objektidega ja tühistab $v kasvu. alamsõnastiku, mille see seadis. Käsk PROGRAM $v täidab samu toiminguid, mis järjestikku käivitatavad käsud FORGET $v GROW $v. Sellise käsu olemasolu mis tahes programmi alguses toob kaasa asjaolu, et programmi uuesti kompileerimisel kustutatakse selle vana koopia ja luuakse alamsõnastik programmi uue koopia objektide salvestamiseks. Näiteks tehes FORGET $PRIME toimingu FORGET $PRIME sõnastikus, mille olek oli ülal näidatud, saame uue oleku:

$EDIT on suletud

$PRIME on avatud

SÜSTEEM on suletud

Käsu FORGET täitmise ajal kuvatakse kustutatavate jaotiste nimed.

Pange tähele, et alamsõnastiku SÜSTEEM nimi ei alga tähega $. See on vastuvõetav, kuid see toob kaasa asjaolu, et käskude UNUSTAMINE ja RPOGRAM rakendamine sellele alamsõnastikule ei põhjusta tegevust (alamsõnastikku SÜSTEEM ei paista nende jaoks eksisteerivat).

Tulenevalt asjaolust, et valmisprogrammis pole enamiku protseduuride jaoks välise nimega juurdepääs vajalik, on võimalik nende nimed sõnastikust eemaldada, säilitades samal ajal nendega seotud sisemised objektid. Käsk CLEAR $v eemaldab kõik nimed alamsõnastiku $v kõikidest osadest, välja arvatud need, mille ees oli programmi tekstis (kui need olid määratletud) eesliide:: (kaks koolonit). Näiteks selle tulemusel, et protsessor käivitas järgmise programmifragmendi:

:: : X+ Y !+ X ;

CLEAR $EXAM Alamsõnastikku $EXAM jäävad alles vaid nimed X ja X+, sõnaraamatu kirje Y eemaldatakse (kuigi siseesituses sõnale Y vastav muutuja jääb alles).

I/O käsud

Peamine vahend kasutaja suhtlemiseks DSSP-ga on terminal, mis on tavaliselt klaviatuuriga katoodkiirekraan. Terminalist toimub esialgne sisestus, programmide redigeerimine ja silumine, andmete ettevalmistamine ja kogu süsteemihaldus. Programmid ja andmed, aga ka DSSP ise salvestatakse failidena ketastele ja neid saab printida printeriga. Sisendi/väljundi juhtimiseks sisaldab põhiliste DSSP protseduuride komplekt allpool kirjeldatud tööriistu.

Terminali töö programmeerimise tagavad käsud numbrite, üksikute märkide ja märgijadade (stringide) sisestamiseks ja väljastamiseks, samuti mõned lisakäsud.

TIB (Terminal Input Byte) käsk käivitab tsükli, mis ootab terminali klaviatuuril klahvi vajutamist. Klahvi vajutamisel lükatakse virna vastava märgi 8-bitine kood ülaosa vähima tähtsusega baidina, kusjuures kõrgeim 3 baiti sisaldavad nulle. Sel viisil sisestatud märgi koopia kuvatakse ekraanil. Samuti on olemas TRB (Terminal Read Byte) käsk, mis erineb TIB-st selle poolest, et sisestatud tähe koodi virna saatmisega ei kaasne selle tähe kuvamist ekraanile.

TIN (Terminal Input Number) käsk käivitab tsükli, mille käigus sisestatakse virna number ja kuvatakse klaviatuurilt sisestatud number. Sisestatav number peab olema numbrijada, mis võib alata miinusmärgiga ja lõppeda . Sõltuvalt seadistatud sisend-/väljundrežiimist tajub protsessor numbreid kuueteistkümnend-, kümnend-, kaheksand- või kahendarvuna. Kui kuueteistkümnendsüsteem algab tähega tähistatud numbriga, siis lisatakse selle ette number 0. Sisestatud arv teisendatakse kahendkoodiks komplementkoodiks, mis lükatakse virna 32-bitise sõna täisarvuna. , st. lõikebittidega, mis asuvad vasakul kõige olulisemast bitist, mille kaal on 2 kuni astmeni 31.

Iga TIN-käsk sisestab ühe numbri. Kui peate sisestama numbrijada ühele reale, tuleb need eraldada, vajutades klahvi , ja iga numbri sisestamiseks programmi tuleb uuesti käivitada käsk TIN.

Klaviatuurilt sisestatud n tähemärki sisaldav jada sisestatakse arvuti mällu n baidina, mis paiknevad järjest suurenevatel aadressidel, alustades aadressiga a, kasutades käsku TIS (Terminal Input String), mille ees aadress a ja number tähemärki n lükatakse virna . Näiteks olgu deklareeritud piisava pikkusega baitide X vektor. Peate sisestama 9 tähemärki, määrates nende väärtused selle vektori elementidele, alustades nullelemendist:

Samamoodi, kasutades käsku TOS, määratakse n bait-liitrise jada väljund lähteaadressiga a:

Otse programmi kuuluvate tekstielementide väljund terminali on tagatud disainiga

."<текст>"

Näiteks selleks, et teatud programmifragmendi täitmisel ilmuks ekraanile tekst SISESTAGE VALIKU NUMBER, peab fragment sisaldama kirjet „SISESTAGE VALIKU NUMBER”.

Käsk TON (Terminal Output Number) kuvab virna alampealt võetud arvu ja ülaosas tuleb määrata väljundvälja pikkus. Väljundnumber joondatakse välja parema servaga, vasakpoolsed vabad kohad täidetakse tühikutega ja kui numbri pikkus ületab määratud välja pikkust, siis toimub vasakult kärpimine. Kümnendsüsteemis I/O režiimis algavad negatiivsed arvud miinusmärgiga.

Käsk TOB (terminali väljundbait) prindib märgi, mille koodi määrab virna ülaosa madalam bait. Virna sügavust vähendatakse 1 võrra.

Samuti on käsud, mis juhivad otse kuvakursorit:

CR - minge uue rea algusesse,

SP - tühik, see tähendab ühe positsiooni liigutamine paremale.

Käsk BELL kutsub esile lühikese helisignaali ("kell").

Mõnikord tuleb terminaliga suheldes kontrollida, kas klahvi on juba vajutatud ja kas ekraan on eelmist väljundkäsku juba töödelnud. Seda saab teha käskudega TTI (Terminal Test Input) ja TTO (Terminal Test Output), mis jätavad määratud sündmuse korral pinu 1 ja muul juhul 0.

Printeri väljundkäsud on sarnased terminali väljundkäskudele ja põhinevad sarnasel märgukirjal, milles tähed LP (Line Printer) on kas asendatud TO või lisatud algusmärkidena. Näiteks LPCR - üleminek uue rea algusesse, LPSP - tühik, LPN - numbri väljund alamtipust tipu määratud väljal, LPB - märgi väljund, LPS - märgijada väljund . Samuti on olemas [N] LPT käsk, mis viib prindipea prinditava rea ​​asendisse N, ja LPFF käsk, mis söödab paberilehe. Selgesõnalise teksti printimiseks on mugav kasutada näiteks tekstiliteraali ja LPS-käsku:

"FUNKTSIOONIVÄÄRTUSTE TABEL" LPS

Katkestuste ja erandite käsitlemine

Välisseadmete programmeerimisel muutub vajalikuks katkestuste käsitlemine. DSSP-s on see töötlemine programmeeritud järgmiselt. Katkestuse käsitlemiseks loodud programm on tavaline DSSP protseduur, mille definitsioonile eelneb eesliide INT, näiteks INT: A !1+ I ; INT prefiks tagab, et protsessori olek salvestatakse katkestuse ajal ja taastatakse katkestuse töötlemisel.

Töötlemisprogrammi linkimiseks konkreetse katkestusega kasutage käsku LINK:

<адрес вектора>LINK<имя процедуры>täitmisel salvestatakse kõne katkestuste käsitlemise protseduurile mööda vastavat vektorit. Käsk LINK võib teostada nii katkestusega protseduuri staatilist linkimist, mis toimub programmi koostamise ajal, kui ka dünaamilist linkimist programmi täitmise ajal.

Protsessori katkestus on viis, kuidas süsteemi teavitatakse välismaailmas toimunud sündmusest. Programmis võib esineda ka sündmusi, mis nõuavad kohest töötlemist. Neid nimetatakse erandolukordadeks. Näited sellistest olukordadest: nulliga jagamine, side viga seadmega, sisendfaili lõpp jne.

DSSP-s salvestatakse erandolukorrad käsukatkestuste abil. Käsu katkestamine on nimega toiming vastuseprotseduuri kutsumiseks ja see deklareeritakse järgmiselt:

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

Näiteks:

TRAP S1 "Olukord S1."

Esimesel juhul on katkestuse S lõplik reaktsioon protseduur X, teisel juhul, kui katkestus S1, kuvatakse terminalis järgmine teade: Olukord S1.

Programm, mille täitmine võib põhjustada katkestuse, saab määrata sellele oma vastuse, kasutades intercept käsku. DSSP pakub kahte tüüpi pealtkuulamist: ON ja EON. Pealtkuulamiskäske saab kasutada ainult protseduurides ja nende vorming:

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

EON<имя прерывания> <реакция>Näiteks:

: A ... ON S "Katkestada S" ... ;

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

ON ja EON määravad erinevat tüüpi reaktsioone. Kui käsuga ON on määratud uus reaktsioon, siis katkestuse ilmnemisel käivitatakse reaktsiooniprotseduur, mille järel katkestatud programm jätkab töötamist. Kui reaktsioon on määratud EON-käsuga, omandab operandipinn esmalt selle sügavuse, mis tal oli EON-käsu täitmise ajal, seejärel täidetakse reaktsioon ja selle lõppemisel täitub protseduur, milles EON-käsu juhendit kasutati kohe peatub.

Vaatame näiteid. Protseduur M sisestab tähti terminali klaviatuurilt ja kontrollib, kas tegemist on numbriga. Kui sisestatud märk ei ole number, tõstetakse ND katkestus. TRAP ND "Mitte number." : M RP M1 ; : M1 TRB [B] C #0< C2 #9 >&0 IF+ ND [B] TOB ;

Viimane reaktsioon ND katkestusele on sõnum: mitte number.

Kui M kutsutakse protseduurist P1, millel on oma vastus katkestusele ND: P1 ON ND PR1 M ; : PR1 [B] CR "Viga." D #0 [#0] ; siis, kui sisestatakse mittedigitaalne märk, töötleb ND-katkestust PR1-tüüpi ON-tüüpi reaktsiooniprogramm, mis põhjustab sõnumi väljastamise uuel real: Error. Sisestatud märk asendatakse märgiga 0, misjärel jätkab M tööd.

Kui M kutsutakse protseduurist P2: P2 EON ND PR2 M ; : PR2 CR "Viga. Sisestuse lõpp." ; siis mittedigitaalse märgi sisestamisel töötleb ND-katkestust PR2 tüüpi EON reaktsiooniprogramm, mille tulemusel väljastatakse teade uuel real: Error. Sisestuse lõpp, mille järel P2 väljub. Operandi virn on tühi.

Vajadusel saab reaktsiooniprogrammis katkestuse uuesti tõsta, laiendades sellega seda ka kõrgema taseme programmidele. Sel juhul tegeleb katkestusega kas sulguri käskluses määratud programm või lõppreaktsioon. Näiteks kui muudate PR2 järgmiselt: : PR2 CR "Viga. Sisestuse lõpp." N.D.; siis terminalis kuvatav teade on järgmine: Error. Sisenemise lõpp. Mitte number.

DSSP-l on mitu sisseehitatud käsukatkestust, millele vastuse saab pakkuda kasutajaprogrammides.

Jaga