Mados stilius

Rojaus kalba. Kuriama adaptyvi kalba interaktyviajai programavimo sistemai DSSP. Vertimai šventi ir profaniški

Rojaus kalba.  Kuriama adaptyvi kalba interaktyviajai programavimo sistemai DSSP.  Vertimai šventi ir profaniški

1. Tai istorija apie tai, kaip žmonės nustojo suprasti vienas kitą ir atsirado daugybė šiuolaikinio pasaulio kalbų. Kiek šis mitas populiarus tarp skirtingų tautų ir kokios jo interpretacijos?

2. Mitas apie Babelio bokštą remiasi ne tik įsitikinimu, kad iš pradžių visa žmonija kalbėjo ta pačia kalba, bet ir tuo, kad ši kalba buvo „ideali“: daiktų pavadinimai perteikė tikrąją jų esmę. Ar kitų kultūrų atstovai laikosi šio požiūrio ir ar jie tiki, kad jų kalba yra artimiausia originalui?

Atsakymas į pirmąjį klausimą pateikiamas Senojo Testamento Pradžios knygoje 11:1-9, kurioje pasakojama, kad Dievas nusprendė nubausti žmonių giminę, uždėdamas jai kalbų sumaišties prakeiksmą. Atsakymą į antrąjį klausimą galima rasti Pradžios 2:19. Šioje dalyje Dievas atvedė visus gyvūnus ir paukščius pas Adomą, kad išgirstų, kaip Adomas juos vadins, ir „kaip žmogus vadins kiekvieną gyvą sielą, toks yra jos vardas“. Ekskursija po skirtingas kultūras leis mums pamatyti, kaip šios problemos aptariamos. Kalbant apie pirmąjį iš jų, daugelis sutinka su Senuoju Testamentu: kalbų įvairovė yra Viešpaties bausmė arba bent jau kokio nors nepalankaus veiksnio pasekmė.

Legenda apie vieną iš Australijos genčių pasakoja apie senų žmonių valgymą. Gentys, kurios valgė patį kūną, kalbėjo „gryna“ kalba, o tie, kurie valgė vidaus organus, kalbėjo „nešvaria“. Afrikos kabilai mano, kad dėl konflikto žmonės pradėjo kalbėti skirtingomis kalbomis. Pasak genties iš Asamo, kalbų painiavos kilo dėl to, kad trys vaikai kartą sumedžiojo žiurkę. Viena iš Amazonės genčių laikosi nuomonės, kad Dievas atskyrė žmones ir jų kalbas, kad jie taptų Jam paklusnesni. Tarp vietinių Amerikos gyventojų, Maidu genties (Kalifornija), manoma, kad iš pradžių žmonės kalbėjo ta pačia kalba, tačiau vieną dieną, per laidotuvių ceremoniją, kalba nustojo būti vienoda. Irokėzai mano, kad kalbų atskyrimas įvyko dėl šeimos kivirčo, kurio metu žuvo vaikas. Tačiau prielaida, kad daugiakalbės kalbos yra prakeiksmas, nėra tokia plačiai paplitusi, kaip atrodo. Pasaulyje yra daugybė versijų, pagal kurias padalijimas įvyko dėl natūralių procesų.

Senovės indėnų šventoje giesmėje „Rig Veda“ minima, kad kadaise egzistavo Vak („žodis“), o dievai jį suskirstė į daugybę formų. Indokinijos pusiasalio tautos pasakoja apie šešias rases, kurių kiekviena turėjo savo liežuvį iš moliūgo išlipusio stiebo pavidalu. Quiché gentis (Gvatemala) turi mitą, kad žmonės gyveno kartu ir kalbėjo ta pačia kalba, kol išsiskirstė į grupes. Kiekvienas išsirinko sau dievą ir pradėjo kalbėti savo kalba.

Pietų Amerikos navahų kūrimo mitas pasakoja apie „Besikeičiančią moterį“ ir tikrų tautų, kurios kalbėjo jos kalba, atsiradimą. Taigi ji sukūrė kaimynines tautas – pueblos, Meksikos aborigenus ir kitus, ir jie kalbėjo savo kalbomis, skleisdami jas įvairiomis kryptimis. Islame Koranas moko, kad Adomas nesugalvojo vardų ar dar ko nors, bet visko išmokė Alachas. Kalbų įvairovė yra visiškai natūrali ir yra Allaho galios apraiška. Visi žmonės sugeba suprasti Korano apreiškimus, nesvarbu, kokia kalba jie parašyti.

Daugelio pasaulio tautų mitologinė sistema neturi paaiškinimo dėl kalbų painiavos, kuri yra tiesiog savaime suprantama, todėl negali atsakyti į mūsų klausimą. Tačiau beveik visose pasaulio kultūrose minima „ideali“ kalba (2 klausimas). Aukščiau paminėjome Australijos gentį, kuri tiki, kad kai kurie žmonės (kurie maitinasi žmogaus kūnu) kalba „gryna“ kalba, perteikiančia tikrąją dalykų esmę. Senovės egiptiečių teigimu, dievas Ptahas viskam davė pavadinimus, todėl kalba tapo dievų dovana. Kinijoje „teisingo“ kalbos mokė mitiniai imperatoriai. Koranas kalbų įvairovę vertina kaip vienos kalbos, apimančios visas kitas, padalinius.

Visur žmonės bando suprasti, kaip daikto pavadinimas atskleidžia jo esmę. Daroma prielaida, kad šiandien egzistuoja „ideali“ kalba, apibūdinanti tikrąją dalyko esmę, arba tai jau praeitis. Antroji prielaida yra būtina sąlyga ieškant tiesos ir harmonijos pasaulyje. Panašu, kad mūsų sąmonėje yra įsišaknijusios idėjos apie kalbos ryšį su realiu pasauliu ir žmogaus egzistencija. Šiuo atžvilgiu iškyla klausimas, pirmą kartą išsakytas Platono dialoge „Cratylus“ ir dėl kurio nuo to laiko nuolatos diskutuojama: ar ryšys tarp pavadinimo ir daiktų objektyvios esmės yra natūralus (kylantis subjektyvioje gimtosios kalbos sąmonėje). ) ar šis ryšys sąlyginis ir atsitiktinis?

Kalba yra ženklų sistema, leidžianti pereiti nuo sąvokos reikšmės ir prasmės prie jos pavadinimo.

Žmogus yra žodinė būtybė ir, skirtingai nei gyvūnai, su savo rūšimi bendrauja naudodamas kalbą. Kartais jie kalba apie „gyvūnų kalbą“, tačiau akivaizdu, kad tokia išraiška yra sąlyginė - savo turtingumu ir galimybėmis gyvūnų kalba nėra panaši į žmonių. Angelams bendravimui kalbos visiškai nereikia – sunku įsivaizduoti, kad jie kalba rusiškai ar angliškai.

Kalbos funkcijos gali būti įvairios – be informacijos perdavimo, ji padeda išreikšti jausmus, vertinimus.

Ar galima išversti Šventąjį Raštą?

Bažnyčios kalba yra maldos, garbinimo ir Šventojo Rašto kalba.

Kai kuriose religijose šventieji tekstai iš pradžių egzistuoja viena kalba ir laikomi iš esmės neišverčiamais. Taigi musulmonų Koranas iš pradžių buvo sudarytas arabų kalba. Be to, musulmonai tiki, kad taip ši knyga buvo sukurta laikų pradžioje.

Žydų raštininkai taip pat buvo linkę į mintį, kad šventieji tekstai gali būti tik hebrajų kalba. Iš pradžių to nebuvo krikščionių Šventojo Rašto atveju.

III amžiuje prieš Kristų. Buvo baigtas vadinamasis „septyniasdešimties vertimas“ – Septuaginta – Senojo Testamento vertimas į graikų kalbą. Be to, kai kurie tyrinėtojai mano, kad tarptestamentiniais laikais Šventojo Rašto vaidmenį atliko Septuaginta.

Būtent Septuagintos egzistavimas tapo pagrindiniu argumentu už esminį Šventojo Rašto verčiamumą. Tačiau yra ir dar stipresnis. Dabar manoma, kad įrodyta, kad Kristus apaštalams kalbėjo aramėjiškai. Tačiau Evangelijų rengėjai, be jokios abejonės, šiuos pokalbius perteikė graikiškai.

Dabar yra mokslinė kryptis – kalbinės rekonstrukcijos. Jų sudarytojai bando suprasti, kaip šie dialogai skambėjo originale. Tačiau tai vis dar yra mokslinių tyrimų objektas.

Ar tai tikrai danguje?Šalta?

Verčiant kalbą į kalbą, kartais kyla problemų, nes kalbos gramatiškai nėra tapačios. Skirtingų kalbų žodžių reikšmės ir atspalviai taip pat skiriasi.

Pavyzdžiui, frazė „rojus yra žalia ir vėsi vieta“ aiškiai parodo, kad Šventasis Raštas buvo sukurtas karšto klimato šalyse, kur „vėsa“ yra gana maloni. Rusų kalba tokios asociacijos vargu ar kiltų. O veiksmažodis „atsipalaiduoti“ reikšme „atsipalaiduoti“, „gerai praleisti laiką“ į rusų kalbą atėjo kaip atsekamasis popierius nuo hebrajų iki graikų kalbos.

Ar visi slavai suprato Bibliją?

Šventasis Raštas mūsų protėviams nebuvo atneštas rusų kalba. Kirilas ir Metodijus – Salonikų graikai – sukūrė naują rašytinę kalbą, paremtą Salonikų slavų šnekamąja kalba.

Pasaulyje yra daug tautų, kurios vartoja kalbas, kurios neturi rašytinės kalbos. Kol kalbame apie kasdienybę, problemų nėra. Bet kai tik religinį tekstą ar filosofinį traktatą reikia išversti į tokią kalbą, kalbą reikia tobulinti, ką padarė Kirilas ir Metodijus.

Jei manysime, kad slavų gentims prieš kelis tūkstančius metų buvo lengviau susitarti tarpusavyje nei šiuolaikinėms slavų tautoms, tada būsime teisūs - kalbos buvo artimesnės. Bet tai nereiškia, kad Kirilo ir Metodijaus atliktas Šventojo Rašto vertimas buvo suprantamesnis Kijevo ir Novgorodo gyventojams – rašytinė literatūrinė kalba skyrėsi.

Galbūt tai yra Rusijos situacijos bruožas, nes rusų literatūrinė kalba yra artimesnė bažnytinei slavų kalbai nei Maskvos tarmei. Tiesą sakant, visa bažnytinė slavų kalba į rusų kalbą įėjo kaip „didelė ramybė“. Pavyzdžiui, net ir šiuolaikiniai dalyviai - tokie kaip verksmas, bėgimas - formuojami būtent pagal bažnytinį slavų modelį - senojoje rusų kalboje tai būtų „verkimas“, „bėgimas“.

Kartais senieji rusiški analogai buvo visiškai išbraukti - „geras“ ir „bologoe“ pavadinime „Bologoe“; „Shelom“, kuris yra tik epuose, priešingai nei „šalmas“.

Kalbos artimos ir... lygiagrečios

Senovės Rusijoje buvo diglosijos situacija. Tai nėra tas pats, kas „dvikalbystė“. Diglosija yra dviejų kalbų vartojimas lygiagrečiai visuomenėje. Pavyzdžiui, XIX amžiuje buvo vartojamos ir rusų, ir prancūzų kalbos. Prancūzų kalba buvo aukštuomenės kalba, bet iš esmės bet koks tekstas galėjo būti išverstas.

Diglosijoje kalbos nesutampa jų vartojimo sferoje. Jie kalbėjo senąja rusų kalba ir galėjo rašyti kasdienius užrašus senąja rusų kalba. Bet jie meldėsi bažnytine slavų kalba.

Tokia padėtis egzistavo iki Petro, XVIII amžiuje ji pamažu žlugo. Dabar mokslas ir literatūra galėjo vystytis rusų kalba, tačiau bažnytine slavų kalba tebeegzistuoja tik maldos. Išverskite skelbimą į bažnytinę slavų kalbą ir jis atrodys kaip pokštas ar šventvagystė.

Kunigas ar piemuo?

Mes gyvename unikaliame amžiuje. Carinėje Rusijoje Bibliją buvo galima skaityti rusiškai, Senovės Rusijoje – bažnytine slavų kalba. Tačiau dauguma žmonių buvo neraštingi arba nebuvo pakankamai išsilavinę, kad galėtų skaityti ir suprasti Šventąjį Raštą.

Sovietmečiu visi tapo raštingi, bet Šventojo Rašto teksto nebuvo.

Dabar raštingumas vis dar išsaugotas, o tekstai yra prieinami.

Be paties Šventojo Rašto, esame kviečiami įvaldyti tam tikrą skaičių slaviškų tekstų – nuo ​​maldų iki pamaldų. Tiesa, esamas vertimas į rusų kalbą yra kiek sunkiai suprantamas. XIX amžiuje, neturėdami analogų, vertėjai slavizmus dažnai perkeldavo į vertimą.

Taip posakis „Aš esu gerasis ganytojas“ buvo išverstas į vertimą. Ir čia yra tam tikrų sunkumų. Pažodinis vertimas iš graikų kalbos būtų toks: „Aš esu geras ganytojas“, tačiau toks vertimas suvokiamas kaip žemas. Kita vertus, dabar paprastas klausytojas supras didingą „ganytoją“ veikiau kaip „kunigą“. Tačiau reikia pripažinti, kad pažodinis daugelio Biblijos posakių vertimas į rusų kalbą yra neįmanomas - frazė „vaiko lūpomis kalba tiesa“ nebus suvokiama kaip filosofinis posakis.

Tačiau apskritai suvokti slavišką Biblijos tekstą labiau trukdo prasmės, o ne žodžių nesuvokimas.

Atskiras sunkumas yra gramatinės struktūros. Pavyzdžiui, yra keletas patobulinimų, kilusių iš graikų kalbos. „Atleisk nuodėmes ir nusižengimus“ tiesiog reiškia atleisti visas nuodėmes. Tokios konstrukcijos kaip „pykau iš pykčio“ ir „myliu su meile“ yra panašios.

Iškyla problemų ir verčiant šventuosius tekstus į kitas kalbas (nors tautos, į kurių kalbas Šventasis Raštas dar neišverstas, yra gal 5℅ Žemės gyventojų). Tai yra, darbas, kurį Kirilas ir Metodijus padarė slavams, tęsiasi.

Kirilas ir Metodijus nebuvo pirmieji – prieš tai buvo vertimų į etiopų ir gotų kalbas. Po Kirilo ir Metodijaus Stefanas iš Permės išvertė Šventąjį Raštą į zyrių kalbą.

Vertimai šventi ir profaniški

Ar kiekvienas vertimas laikomas šventu tekstu? Ne, bet tik tiek, kiek tai priimta bažnytinėse bendruomenėse. Pavyzdžiui, sinodalinis vertimas kaip liturginis vertimas nėra draudžiamas, bet nepriimamas. Tačiau jį kaip tokį naudoja protestantai, pavyzdžiui, Rusijos baptistai.

Yra net šiuolaikinių protestantizmo judėjimų, kurie tiki, kad Biblijos tekstas turi būti prieinamas visiems. Taip pat leidžiami komiksai pagal Biblijos istorijas.

Dėl Naujojo Testamento teksto problemų nėra – jo šaltinis žinomas graikų kalba. Tačiau sinodalinio Senojo Testamento vertimo pagrindas buvo hebrajiškas tekstas. Graikiško vertimo fragmentai buvo įterpti tik tada, kai neatitikimai buvo esminiai.

Šiuolaikinėje versijoje būtų gerai, kad būtų du vertimai – ir iš žydų masoretų tekstų, ir iš graikų kalbos. Tai būtų patogu tiems, kurie nemoka abiejų kalbų.

Atsakymai į klausimus

Po kalbos arkivyskupas Aleksandras uždavė keletą klausimų:

Kokia kalba kalbėjo Adomas?

- Sunku pasakyti. Viena vertus, kalba keičiasi, kol ji gyva. Tačiau niekas nežino, ar tai buvo nauja kalbų savybė, atsiradusi pastačius Babelio bokštą.

Bet kokiu atveju Adomo kalba tikriausiai buvo nepanaši į jokią kitą esamą kalbą, įskaitant hebrajų.

Ar šiuo metu vyksta diskusijos dėl dieviškų pamaldų vertimo į rusų kalbą?

– Ši idėja buvo kalbėta dar prieš revoliuciją, iš dalies buvo sukompromituota renovatorių. Visi jie tarnavo ne rusiškai, bet idėją palaikė.

Išversti Bibliją į rusų kalbą nebuvo lengva, nors metropolito Filareto mintis, kad reikia versti ir iš hebrajų, ir iš graikų kalbų, buvo išmintingas sprendimas. Nors tai nedavė mums mokslinių vertimų iš abiejų kalbų.

Yra pavienių rusų kalbos vartojimo atvejų - Optinos vyresniųjų malda ir akatistas „Garbė Dievui už viską“ iš pradžių buvo parašyti rusų kalba.

Kitų vertimų yra tiek daug, o juos atliekant atsiras tiek niuansų, kad lengviau tekstus šiek tiek rusifikuoti nei išversti.

Šis procesas jau ilgą laiką vyksta spontaniškai. Kartais pasitaiko incidentų: pavyzdžiui, „Vestuvių apeigoje“ dvigubas skaičius kartais netikėtai pakeičiamas daugiskaita, o šiuolaikiniuose akatistuose jis vartojamas nenuosekliai.

Kaip Dieviškoji Apvaizda dalyvauja formuojant skirtingas kalbas?

– Kalba egzistuoja už žmogaus valios ribų. Žmogus gali kurti esperanto kalbą, tačiau natūralios kalbos egzistuoja pagal savo įstatymus.

Kirilas ir Metodijus į bažnytinę slavų kalbą išvertė įkvėpti iš viršaus, bet ir pagal tuo metu egzistavusį modelį.

Iš viršaus įkvėpti, rašydami evangelijas graikų kalba, apaštalai iškėlė idėją, kad Evangelija yra verčiama.

Parengė Daria Mendeleeva

Dmitrijaus Kuzmino nuotrauka

Interaktyvios programavimo sistemos DSSP adaptyviosios kalbos RAYA kūrimas Maskvos valstybinio universiteto Kompiuterinės matematikos ir kibernetikos fakultetas N. P. Brusentsovas, V. B. Zacharovas, I. A. Rudnevas, S. A. Sidorovas, N. A. Chanyshevas Maskva, 1987 m.

Bendras ROJAUS kalbos apibūdinimas

Kalbos ugdymo tikslas ir tikslas

RAYA (besivystanti prisitaikanti kalba) yra pagrindinė Dialogue Structured Programming System DSSP kalba. „Pagrindinis“ reiškia, kad jis yra visų tolesnių DSSP konstrukcijų, kuriant (plečiant, stiprinant) pagrindinę kalbą, ir, galbūt, pritaikant taip sukurtas kalbos priemones konkrečiai programai, pagrindas. Priešingai nei vadinamosiose aukšto lygio kalbose, PAYA nepateikia paruoštų duomenų tipų ir operacijų, o tik elementus ir primityvus, leidžiančius efektyviai apibrėžti reikiamus tipus. Pavyzdžiui, pradiniai duomenų formatai yra 8 bitų baitų, 16 bitų žodžio ir 32 bitų ilgio žodžiai, interpretuojami atsižvelgiant į su jais atliktas operacijas kaip sveikieji skaičiai, Būlio vektoriai, simbolių kodai, loginės reikšmės, duomenų ir procedūrų rodyklės. Šiuo atveju galima, viena vertus, manipuliuoti atskirais baitų ir žodžių bitais, kita vertus, sudaryti sudėtinius duomenų vienetus (kelių ilgių žodžius, vektorius, masyvus, teksto eilutes ir kt.) , nustatant jiems vienokią ar kitokią interpretaciją atitinkamų operacijų įvedimas. Taigi gali būti įvesti reikiamo ilgio ir reikšmių diapazono realieji skaičiai, kompleksiniai skaičiai ir kiti objektai, o į tam tikrą programą orientuota kalbos versija apims šiai programai būdingus objektus ir įrankius ir neapims nieko, kas nėra jai taikyti, – kalba bus pritaikyta (pritaikyta) vartojimui. Kuriant DSSP buvo siekiama sukurti plačiai prieinamą ir efektyvų mikrokompiuterių programavimo įrankį, t.y. kompiuteriai, sukurti ant mikroprocesorių. Esminis mikroprocesorių architektūros bruožas yra elementarus duomenų tipų ir operacijų pobūdis, kuris, viena vertus, reiškia universalumą, o iš kitos – daug darbo reikalaujantį programavimą. Dėl savo universalumo mikroprocesoriai ir jų pagrindu sukurti mikrokompiuteriai turi potencialiai neribotas pritaikymo galimybes. Tačiau praktinį šių galimybių įgyvendinimą pirmiausia riboja būtinų taikomųjų programų kūrimo sudėtingumas. Be to, patenkinamas taikomųjų programų programas galima sukurti tik giliai ir subtiliai išmanant atitinkamų programų specifiką, t.y. Juos turėtų kurti ne tik programuotojai, bet aukštos kvalifikacijos tam tikros srities specialistai. Todėl programavimo sistema turėtų ne tik labai padidinti programuotojo darbo produktyvumą, bet ir būti tokia paprasta, kad ją galėtų įvaldyti ir efektyviai naudoti neprofesionaliems programuotojams.

Atrodytų, radikalus šios problemos sprendimas būtų reikšmingas kompiuterių architektūros supaprastinimas. Tačiau, deja, mikrokompiuterių architektūra vystosi diametraliai priešinga kryptimi – didėjančio sudėtingumo ir rafinuotumo keliu, todėl profesionaliam programuotojui šiandien nėra lengva puikiai įvaldyti mikrokompiuterių surinkimo kalbą. Sistemos programavimo kalbos, tokios kaip C arba PL/M, sumažino programų kūrimo darbo intensyvumą iki tam tikro (nors toli gražu nepakankamo) masto, tačiau vargu ar jas galima rekomenduoti žmonėms, neturintiems programavimo patirties. Plačiai prieinama kalba, žinoma, turėtų būti paprastesnė ir natūralesnė bei, kiek įmanoma, paremta kasdienėmis, pažįstamomis idėjomis apie programavimo esmę ir techniką.

Be prieinamumo ir žymiai sumažinto programų kūrimo darbo intensyvumo, palyginti su programavimu asamblėjos kalba, DSSP buvo reikalaujama, kad kalba būtų universali, tokia pati kaip asamblėjos kalba, didelis mašinos efektyvumas (ty kompaktiškumas ir kodo greitis). ), sukurtų programų patikrinamumo patikimumą bei jų prižiūrimumą ir modifikavimą, taip pat sistemos ir joje sukurtų programų mobilumą (perkeliamumą) į skirtingos architektūros mašinas.

Procedūrinis programavimas

Programavimas PARADISE kalba yra gana panašus į tokias plačiai paplitusias žmogaus veiklos rūšis kaip tarpusavyje susijusių veiksmų, darbų, procesų planavimas ir organizavimas ar sudėtingų materialių objektų – mašinų, mazgų, konstrukcijų projektavimas. Kaip dizaineris, kuris įgyvendina savo idėją sujungdamas savo sudedamąsias dalis (blokus, mazgus, dalis), programuotojas sintezuoja reikalingą sudėtingą veiksmą iš paprastų veiksmų, kuriuos suteikia kalba. Taip pat galime sakyti, kad programavimas (projektavimas) susideda iš laipsniško realizuojamo objekto skaidymo (suskaidymo) į vis mažesnius komponentus.

ROJAUS kalba, pagrindinis „konstruktas“ yra procedūra – įvardytas veiksmas. Kalba remiasi ribotu paprastų procedūrų (primityvų) rinkiniu, pavaizduotu jų pačių pavadinimais (žymėjimais). Pavyzdžiui: + reiškia „pridėti“, NEG reiškia „pakeisti ženklą“, VCTR reiškia „sukurti vektorių“. Visų pirma, yra primityvų: ir; (dvitaškis ir kabliataškis) leidžia įvesti naują procedūrą, pavyzdžiui, pavadinimu P, apibrėžiant ją kaip procedūrų seką P1, P2, ..., PN formoje

: P P1 P2 ... PN ;

Jei procedūra P reiškia veiksmą, kurį turėtų atlikti sukurta programa, šios programos konstravimas naudojant PAYA kalbos priemones sumažinamas iki procedūrų P1, P2, ..., PN nuoseklaus detalizavimo. Tai reiškia, kad kiekviena iš šių procedūrų turi būti apibrėžta mažesnių procedūrų seka, kurios vėliau apibrėžiamos dar mažesnių procedūrų sekomis ir panašiai, kol gaunami apibrėžimai, susidedantys tik iš primityvų.

Tokio tipo programų kūrimas, pradedant nuo konkretaus tikslo ir palaipsniui suskaidant naudojamas procedūras iki pagrindinių kalbos įrankių lygio, yra žinomas kaip programavimas iš viršaus į apačią. Tai pagrindinis būdas gauti programas PARA kalba, skirtas individualioms, aiškiai apibrėžtoms problemoms spręsti. Priešingai yra programavimas iš apačios į viršų – pagrindinėmis sistemos kalbos priemonėmis pagrįstas palaipsniui plečiamų procedūrų, orientuotų į tam tikrą probleminę sritį, konstravimas. Tokiu būdu kalba vystoma ir pritaikoma konkrečiai programai.

Abiem atvejais būtinas kruopštus kuriamų programų struktūrizavimas: kiekviena programa ir kiekviena programos dalis turi susidėti iš nedidelio skaičiaus atskirų dalių, kurių kiekviena atlieka tam tikrą funkciją ir leidžia atlikti savarankišką patikrinimą. Kalbant apie PARA kalbą, tai visų pirma reiškia, kad procedūrų apibrėžimai turi būti trumpi: apibrėžiamojoje sekoje, kaip taisyklė, neturėtų būti daugiau nei 5-7 terminai. Struktūrizavimas užtikrina, kad programa būtų suprantama, patikrinama ir modifikuojama, ir žymiai sumažina jos kūrimo ir priežiūros sudėtingumą.

Pirmiau pateiktas P procedūros apibrėžimo pavyzdys yra supaprastintas. Tiesą sakant, apibrėžiamojoje sekoje kaip nariai gali būti ne tik procedūrų pavadinimai, bet ir teiginiai (komandos), susidedantys iš daugiau nei vieno žodžio. Procedūros pavadinimas, naudojamas ne kartu su kitais žodžiais, yra komanda, skirta atlikti jos paskirtą procedūrą. Procedūrų pavadinimų seka nurodo, kad šios procedūros atliekamos tokia tvarka, kokia jų pavadinimai atsiranda vienas po kito (tiesine tvarka). Kitoms vykdymo sekoms nurodyti RAYA pateikia specialius žodžius (priešdėlius), nurodančius kartu su jais įvardytų procedūrų vykdymą, priklausomai nuo nurodytos sąlygos, bei pakartotinį (ciklinį) procedūros vykdymą.

Pavyzdžiui, tiesinė seka P0 P1 sukelia procedūrą P0, o po to – procedūrą P1. Jei procedūrą P1 reikia vykdyti ne visada, o tik su sąlyga, kad vykdant P0 gaunamas teigiamas skaičius, tai vietoj P1 vykdymo komandą rašykite pagal sąlygą: JEI+ P1, t.y. vietoj P0 P1 bus P0 IF+ P1. RAYA apima sąlyginių priešdėlių rinkinį, leidžiantį efektyviai išreikšti vykdymą pagal sąlygą, taip pat dviejų, trijų ar daugiau procedūrų pasirinkimą.

Pakartotinis procedūros vykdymas nurodomas naudojant RP priešdėlį. Taigi, RP P komanda sukelia procedūros P vykdymą vėl ir vėl, kol susidaro sąlygos, kurioms esant suveikia šios procedūros turinyje esantis EX - išėjimas iš ciklo, po kurio vykdoma kita komanda linijine tvarka. Išėjimo iš ciklo sąlyga gali būti, pavyzdžiui, kokio nors kintamojo X lygybė nuliui, kuri išreiškiama taip:

Sakoma, kad procedūra, kurios pavadinimas įtrauktas į kitos procedūros apibrėžimą, yra joje įdėta. Įdėtoji procedūra, jei ji nėra primityvi, savo ruožtu gali turėti įdėtųjų procedūrų, t.y. lizdai gali būti keli. Be to, RAY kalbos taisyklės nedraudžia į apibrėžimą įtraukti savo pavadinimą ar procedūros pavadinimą, kuriame yra šis pavadinimas, t.y. RAYA leidžia rekursiją.

Pakartotinai vykdoma procedūra taip pat gali būti įtraukta į pakartotinai vykdomą procedūrą. Tokiu atveju susidaro kilpos lizdai. PARA leidžia sujungti kelis kilpų lizdus.

Linijinė komandų seka, lizdas, sąlyginis ir ciklinis procedūrų įdėjimas – tai išsemia galimybes kurti programas PARA kalba. Šių priemonių trūkumas, homogeniškumas ir natūralumas yra raktas į kalbos įvaldymo ir vartojimo lengvumą. Kartu tai griežtos struktūros programavimo kalba, užtikrinanti ženklų kūrimo darbo intensyvumo ir programos patikimumo sumažėjimą.

Procedūros ir duomenys

Viskas, kas iki šiol buvo pasakyta, būdinga PARA kalbai, kaip priemonė nusakyti veiksmus, konstruoti savavališkus veiksmus iš baigtinės primityvių operacijų aibės. Kitą kalbos pusę sudaro priemonės atvaizduoti objektus, su kuriais atliekami veiksmai – duomenų atvaizdavimo ir tvarkymo priemonės.

Itin paprastas duomenų elementas yra dviejų reikšmių elementas – bitas. Visi kiti formatai ir duomenų tipai yra sukurti iš bitų. RAYA kalboje pagrindiniai formatai yra 8 bitų baitų, 16 bitų žodžio ir 32 bitų ilgio žodžio. Priklausomai nuo su jais atliekamų operacijų, baitai, žodžiai ir ilgi žodžiai leidžia interpretuoti daugybę, t.y. gali būti įvairių tipų duomenų pagrindas. Be to, jie yra pradiniai elementai formuojant sudėtinius formatus ir tipus.

Tiesą sakant, RAYA nėra nei paprastų, nei sudėtinių duomenų tipų - yra tik pagrindiniai formatai (baitas, žodis, ilgas žodis) ir įrankiai, skirti iš jų sudaryti sudėtinius formatus: vektorius ir daugiamačius masyvus. Tokiu atveju tie patys baitai (žodžiai, ilgi žodžiai), priklausomai nuo su jais atliekamų operacijų, interpretuojami kaip bitų vektoriai, arba kaip pasirašyti ir beženkliai dvejetainiai sveikieji skaičiai, arba kaip įvesties/išvesties abėcėlės simboliai ir pan. Duomenų tipus ir su jais susijusius apribojimus bei patikras galima įtraukti į konkrečios problemos kalbos plėtinius.

Bazinėje kalboje duomenų pavadinimų deklaravimas atlieka tik prieigos prie duomenų pagal pavadinimą suteikimo funkciją: pavadinimas siejamas su deklaracijoje reikalingų atminties langelių skaičiumi ir prieigos prie jų mechanizmu. Testavimo ir transformavimo operacijos nėra tiesiogiai taikomos įvardintiems duomenims. Šios operacijos apibrėžiamos operandų krūvoje, kuri yra 32 bitų ilgio žodžių (dėmenų elementų) seka, kuri dinamiškai modifikuojama pridedant (stumiant) naujų elementų į jos pabaigą, taip pat pašalinant elementus iš to paties galo ( iššokęs iš kamino). Prekės pašalinamos atvirkštine tvarka, kuria buvo išsiųstos: pirmiausia pašalinamas paskutinis išsiųstas. Duomenys, kuriuos reikia tikrinti ar konvertuoti, siunčiami į steką, kur su jais atliekamos nustatytos operacijos, po kurių apdorojimo rezultatai gali būti pašalinti iš dėklo.

Pavyzdžiui, jei yra kintamasis X, deklaruotas kaip 32 bitų ilgio žodis, tada tiesiogiai su juo galima atlikti tik dvi operacijas:

1) jo vertės perkėlimas į krūvą, o tai įvyksta automatiškai kiekvieną kartą, kai minimas vardas X,

2) priskyrimas komandai! X yra paskutinio (viršutinio) elemento, pašalinto iš krūvos, reikšmė.

Jei, tarkime, norite padvigubinti X reikšmę, pridėdami ją prie savęs, tai galite padaryti vykdydami šias komandas vieną po kitos:

Dvi X reikšmės kopijos bus įstumtos į krūvą, tada + komanda jas pašalins, pridės ir gautą sumą nustums į krūvą, o po to komanda! X paims šią sumą ir priskirs jos reikšmę kintamajam X.

Įprastas aukščiau pateikto pavyzdžio įrašymas forma X:=X+X aukšto lygio kalboms yra labiau pažįstamas programuotojui, tačiau tai nėra tiesioginis procesoriaus vykdomų komandų sekos atspindys, bet yra savotiška matematinė formulė. Tai patogu programuojant skaičiavimo užduotis, tačiau bazine kalba svarbiau atrodo nedviprasmiškas atitikimas vykdomoms komandoms, nes programos patikrinimas komandomis gali būti atliekamas tiesiogiai programavimo kalba ir nereikia mokėti kitą kalbą nei procesoriaus kalba.

Tačiau ypač vertinga sudėtinio duomenų apdorojimo nauda yra ta, kad testavimo ir transformavimo procedūras galima apibrėžti ir įgyvendinti nepriklausomai nuo duomenų, kuriems jos taikomos. Testavimo ir konvertavimo operacijos formuluojamos ne atsižvelgiant į duomenų identifikatorius (arba konstantų ir kintamųjų pavadinimus, formalius parametrus), o su kamino elementais, kuriems iki operacijos vykdymo turi būti priskirtos operandų reikšmės. Pavyzdžiui, dviejų skaičių pridėjimo operacija, atliekama naudojant + (pridėti) komandą, susideda iš dviejų viršutinių elementų (viršūnės ir posūkio) paėmimo iš krūvos kaip priedų, apskaičiuojant jų sumą ir įstumiant į krūvą. Norėdami pridėti du skaičius, turite įstumti jų reikšmes į krūvą ir vykdyti + komandą, rezultatas bus krūvos viršuje.

Bandymo transformavimo procedūra su savavališku įvesties ir išvesties parametrų skaičiumi gali būti apibrėžta tokiu būdu tiesiog kaip įvardintas veiksmas (be parametrų sąrašo), atliekamas su kaminu, kuriame yra argumentų reikšmės, išdėstytos nustatyta tvarka ir po to. vykdymą, rezultato reikšmes. Norėdami pritaikyti tokią procedūrą tam tikram konkrečių duomenų rinkiniui, turite įstumti šiuos duomenis atitinkama seka į krūvą. Jas sunaudojus, procedūra paliks rezultatus ant krūvos (taip pat išsidėsčiusi tam tikra seka).

Kitaip tariant, procedūrų pavadinimai RAY kalba naudojami taip pat, kaip operacijos ženklai ir iš esmės yra operacijų su savavališku operandų skaičiumi simboliai. Vadovaujantis kamino veikimo principu, operacijos rašomos postfix forma, t.y. operacijos pavadinimas dedamas po jos operandų pavadinimų ar reikšmių. Pavyzdžiui, jei trijų skaičių sumos gavimo operaciją žymime simboliu ++, tada skaičių A, 5 ir B suma bus išreikšta taip:

Būtų galima nustatyti formalias postfix kalbos taisykles ir jomis vadovautis rašant programas, tačiau žmogui lengviau ir patikimiau susitvarkyti ne su taisyklėmis, o su stack procesoriaus modeliu, t.y. su modeliu mašinos, kuriai kuriamos programos ir kuri jas vykdys. PARA kalbos atveju tokia mašina yra DSSP procesorius – įrangos ir programų rinkinys, įgyvendinantis šioje kalboje nurodytus veiksmus.

DSSP procesorius

Fiziškai DSSP procesorius gali būti įgyvendintas kaip paprastos ir efektyviai programuojamos architektūros mikroprocesorius, kuris leistų kuo puikiausiai išspręsti mikrokompiuterių programinės įrangos problemą. Tačiau toks mikroprocesorius dar nesukurtas ir jo architektūra turi būti imituojama esamuose mikrokompiuteriuose, siekiant pagerinti jų programuojamumą. Žinoma, emuliacija siejama su išlaidomis – tam reikia atminties ir kompiuterio laiko, tačiau DSSP procesoriaus emuliavimo atveju šios išlaidos yra palyginti nedidelės.

Programuotojo požiūriu procesoriaus charakteristika yra jo architektūra, t.y. informacija apie tai, kas yra konkretus procesorius kaip duomenų apdorojimo įrankis, kokios yra duomenų pateikimo galimybės įvestyje ir procesoriaus viduje, kokios yra testavimo ir duomenų konvertavimo operacijos, kaip sutvarkyta paties procesoriaus atmintis, taip pat prieiga prie pagrindinė ir išorinė atmintis, kokie yra valdymo įrankiai programos eiga, sąveika su išorine aplinka, reagavimas į išskirtinius įvykius ir kt. Architektūros įvaldymas yra būtina prasmingo (neformalaus) programavimo sąlyga, o tai žymiai sumažina klaidų skaičių ir padidina programų patikimumą.

Centrinė DSSP procesoriaus grandis yra jau minėta operandų krūva. Tiesą sakant, apdorojimas atliekamas dėtuvėje ir, kaip taisyklė, duomenys siunčiami per krūvą. Atskiros komandos ir trumpos komandų sekos krūvoje gali būti vykdomos perduodant jas į procesoriaus įvestį tiesiai iš terminalo klaviatūros. Šiuo atveju DSSP procesorius imituoja postfix skaičiuotuvo veikimą. Skaičiai ir operacijų mnemoniniai kodai, įvesti iš klaviatūros, yra atskirti tarpais. Įvestas tekstas terminalo ekrane pasirodo kaip eilutė. Įvesties pabaigos signalas ir komanda procesoriui „Vykdyti įvestą užsakymą“ yra klavišo paspaudimas , taip pat žymimas , . Skaičiai, gaunami į procesoriaus įvestį, yra saugomi krūvoje, o komandos vykdomos krūvoje. Skaičiavimo rezultatą, gautą krūvos viršuje, galima nukopijuoti į terminalo ekraną su komanda. (taškas).

Pavyzdžiui, norėdami įvertinti išraišką (2-5)*3 ir parodyti gautą rezultatą, įveskite:

2 5 - 3 * .

Paspaudus klavišą procesorius sukuria rezultatą, todėl visa eilutė atrodys

* 2 5 - 3 * . -90

Žvaigždutę eilutės pradžioje procesorius išduoda kaip signalą, kad laukia įvesties.

Nagrinėtame pavyzdyje procesorius suvokė ir apdorojo įvesties skaičius kaip sveikuosius dešimtainius skaičius. Tiesą sakant, įvedant šie skaičiai buvo konvertuojami į dvejetainį komplemento kodą, o išvedant jie buvo konvertuojami atgal į dešimtainę sistemą. DSSP procesorius taip pat leidžia dvejetainius, aštuntainius ir šešioliktainius įvesties/išvesties režimus. Norėdami persijungti į norimą režimą, turite vykdyti atitinkamai vieną iš komandų B2, B8, B10, B16.

Paspaudus klavišus į procesoriaus įvestį siunčiami kodai, atspindintys šiuose klavišuose nurodytus simbolius (raides, skaičius, skyrybos ženklus, operacijų simbolius). Įvesta simbolių seka sudaro įvesties eilutę – baitų grandinę, kurioje yra simbolių kodai, po vieną baitą kiekvienam simboliui. Maksimalus įvesties eilutės ilgis yra 80 litrų.

Apdorojant įvesties eilutę, procesorius išskiria joje žodžius – simbolių derinius, atskirtus vienas nuo kito tarpais, ir juos interpretuoja. Jei apdorojamas žodis yra procesoriui žinomos operacijos (procedūros) arba duomenų pavadinimas, tai procesorius atlieka veiksmus, kuriuos šis pavadinimas turėtų vadinti pagal apibrėžimą. Jei žodis procesoriui nežinomas, jis bando jį interpretuoti kaip skaičių, atsižvelgdamas į nustatytą I/O režimą.

Skaičiai yra žodžiai, sudaryti iš skaitmenų, priimtinų tam tikroje skaičių sistemoje ir, galbūt, kurių pirmoji raidė yra minuso ženklas. Šešioliktainio įvesties/išvesties režimu galiojančios raidės kartu su skaičiais taip pat apima lotyniškas raides A, B, C, D, E, F. Gautas skaičius konvertuojamas į dvejetainį dviejų komplemento kodą ir įstumiamas į operandų krūvą kaip 32 bitų ilgio žodis. Be to, jei skaičiaus reikšmė nepatenka į reprezentuojamų reikšmių diapazoną -2147483648: 2147483647, tada ji pakeičiama verte, palyginama modulo 2**32 iš šio diapazono.

Tuo atveju, kai apdorojamas žodis procesoriui nėra žinomas ir negali būti priimtas kaip skaičius, procesorius terminalo ekrane parodo pranešimą: „Aš nežinau“.<обрабатываемое слово>“ ir laukia tolesnių nurodymų.

Duomenų įvedimas savavališko teksto pavidalu (baitų-literalių seka) atliekamas teksto literalių pavidalu, tai yra tekstas su dvigubomis kabutėmis, pavyzdžiui: „Teksto literatas“. Teksto pažodžiui patekus į procesoriaus įvestį, tekstas, esantis tarp kabučių, įrašomas į pagrindinę atmintį baitinių raidžių grandinės forma. Tokiu atveju pirmojo baito adresas ir baitų skaičius (teksto ilgis) įstumiami į krūvą. Teksto literatūrą, prieš kurią yra taškas, procesorius suvokia kaip komandą, skirtą „terminalo ekrane rodyti tekstą tarp kabučių“. Pavyzdžiui, į procesoriaus įvestį išsiuntus simbolių derinį „Nėra atminties“, ekrane pasirodys pranešimas: Nėra atminties.

Atskiro simbolio kodas įstumiamas į krūvą kaip žemiausias viršūnės baitas, kai šis simbolis gaunamas procesoriaus įvestyje kartu su # ženklu prieš jį. Pavyzdžiui, simbolių kombinacija #L išsiųs L raidės kodą į krūvą, simbolių kombinacija #5 atsiųs numerio 5 kodą. TOB komanda, skirta išvesti baitą į terminalą, rodo raidę, kurios kodas yra esančiame krūvos viršaus žemajame baite.

Net ir tiesioginio komandų vykdymo režimu DSSP procesorius gerokai viršija įprasto skaičiuotuvo galimybes, suteikdamas vartotojui, be duomenų apdorojimo operacijų, deklaruoti įvardintus duomenis ir apibrėžti procedūras, kurios vėliau gali būti naudojamos kartu su pagrindinės operacijos. Duomenų pavadinimų deklaravimas ir procedūrų apibrėžimas atliekamas naudojant specialias komandas.

Pavyzdžiui, norėdami sukurti 16 bitų kintamąjį, pavadintą, tarkime, TEMP, turėtumėte įvesti klaviatūrą ir pritaikyti klavišą procesoriaus įvestiei. komanda

VAR TEMP

Kartu su deklaracija kintamajam galite priskirti pradinę reikšmę, pavyzdžiui, 0:

VAR TEMP 0! TEMP

Dabar, kai į procesoriaus įvestį patenka pavadinimas TEMP, dabartinė šio kintamojo reikšmė bus įstumta į krūvą, o naujai iš kamino pašalintos reikšmės priskyrimas gali būti atliktas komanda! TEMP.

Procedūros apibrėžimas įvedamas komanda: (dvitaškis), kuriame yra apibrėžiamos procedūros pavadinimas ir apibrėžianti komandų grandinė su raide; (kabliataškis) kaip galutinis apibrėžimo simbolis. Parodykime procedūrų apibrėžimą ir naudojimą, naudodamiesi natūraliojo skaičiaus N faktorialo skaičiavimo formule

N!=N*(N-1)*(N-2)*...*2*1, t.y. N-1 daugyba.

Norint gauti norimą rezultatą, FCT procedūra turi padauginti nurodytą skaičių N iš nuosekliai mažėjančių skaičių, pradedant nuo N-1 iki 1, t.y. tik N-1 kartas. PARA kalba tai užprogramuojama vykdant procedūrą P t kartus: DO P, kur P yra procedūros pavadinimas, t yra dabartinė vertė krūvos viršuje, nurodanti, kiek kartų reikia atlikti procedūrą P.

Tarkime, kad prieš taikant FCT procedūrą skaičius N įstumiamas į krūvą ir yra jo viršuje. Kad procedūra būtų suprantamesnė, įsivaizduokime modifikuotą kintamojo K daugiklį:

Pateikiame FCT procedūros apibrėžimą tokia forma:

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

Komentarai pateikiami laužtiniuose skliaustuose, atspindintys esamą operandų krūvos būseną. Komanda! K, kuris pradeda apibrėžtą procedūrą, kintamajam K priskiria iš krūvos paimto skaičiaus N reikšmę. Tada K du kartus įstumiamas į krūvą ir krūvos viršuje atėmus 1 pasikartojančių paleidimų skaičių. susidaro procedūra F, lygi N-1. Toliau ateina komanda DO F, kuri nurodo kilpą, kurią užbaigus krūvos viršuje bus norima faktorialo reikšmė - N!. Komanda. (taškas) išspausdina šios reikšmės kopiją terminalo ekrane. Belieka apibrėžti procedūrą F, kuri pakeičia K reikšmę atimant 1 ir dalinį skaičiavimo R rezultatą, esantį krūvoje, padaugina iš K:

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

Abiejų procedūrų teisingumas tikrinamas komanda po komandos vykdant jų apibrėžimus, terminalo ekrane po kiekvienos komandos pateikiant operandų krūvos turinį ir kintamojo K reikšmę. Užbaigus FCT procedūrą, krūvos viršus turi turi reikšmę N!, o kintamojo K reikšmė turi būti lygi 1.

Patikrintos ir ištaisytos (jei patikrinimo metu buvo nustatytos klaidos) procedūros testuojamos pritaikant jas atskiroms skaičiaus N reikšmėms. Kadangi procedūra F yra įdėta į FCT, jos testavimas atliekamas automatiškai pastarojo testavimo metu. . Reikėtų nepamiršti, kad rezultato reikšmės neturi viršyti didžiausio teigiamo skaičiaus, pavaizduoto dviejų komplemento kode kaip 32 bitų ilgio žodis: 2147483647, t.y. FCT pateikia teisingus rezultatus tik esant N=1, ..., 13.

FCT naudojimas nesiskiria nuo paties procesoriaus instrukcijų naudojimo: norėdami gauti rezultatą, turite nustatyti operando reikšmę ir įvesti procedūros pavadinimą:

5 FCT 120

7 FCT 5040

Aukščiau pateiktam FCT procedūros įgyvendinimui reikėjo įvesti pagalbinį kintamąjį K, tačiau funkciškai lygiavertė procedūra gali būti įgyvendinta be pagalbinio kintamojo, naudojant operaciją C, kuri išstumia jos viršaus kopiją į krūvą, ir operacijas E2 ir E3, kurios atitinkamai keičia viršutinę dalį su antruoju ir trečiuoju krūvos elementais. Šios procedūros apibrėžimas yra toks.

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

: FA C E3 * E2 1- ;

Tokios „grynosios dėtuvės“ procedūros pranašumas yra tas, kad ji yra visiškai autonomiška: kaip ir pagrindinės procesoriaus krūvos operacijos, ji atliekama tik operandų dėtuvėje, nereikalaujant jokios kitos atminties ir nekeičiant kitų procesoriaus komponentų.

Apibrėžtų procedūrų ir deklaruojamų duomenų pavadinimai įvedami į procesoriaus žodyną, kuris užmezga ryšį tarp šių pavadinimų ir įvardintų objektų, tai yra su pagrindinėje atmintyje esančiais procedūrų korpusais ir su šios atminties elementais, skirtais deklaruotiems duomenims saugoti. Apdorodamas kitą žodį iš įvesties srauto, procesorius peržiūri žodyną ir, radęs jame atitinkantį žodį, atlieka su šiuo žodžiu susijusius veiksmus. Jei paieška nepavyksta, tuomet, kaip jau minėta, bandoma skaitiniu būdu interpretuoti duotą žodį, o jei nepavyksta, pasirodo pranešimas, kad žodis procesoriui nežinomas.

Sudarant procedūros apibrėžimą, į žodyną įrašomas šios procedūros pavadinimas ir jos kūno rodyklė (adresas), kuri yra apibrėžimą sudarančių procedūrų ir duomenų rodyklės seka. Kitaip tariant, procedūros kūno vidinis vaizdas gaunamas apibrėžime procedūrų ir duomenų pavadinimus pakeitus atitinkamų kūnų rodyklėmis, kurios savo ruožtu yra tos pačios rodyklių sekos, o primityvų atveju mašinų komandų grandinės. Tai vadiname vidiniu programos procedūriniu kodu.

Kai kartu su procedūros P apibrėžimu sudaromi ir visų anksčiau procesoriui nežinomų įdėtųjų procedūrų apibrėžimai, susidaro pilna rodyklių hierarchija, leidžianti vykdyti procedūrą P siunčiant tik jos pavadinimą į procesoriaus įvestį. . Tuo pačiu metu nėra prasmės saugoti įdėtųjų procedūrų, sudarytų atsižvelgiant į P apibrėžimą, pavadinimus, jei nereikia prieiti prie šių procedūrų atskirai. Kai kuriais atvejais patartina uždaryti prieigą prie vienos ar kitos žodyno dalies, paliekant, ko gero, galimybę atlikti tik kai kurias procedūras.

Tokiems reikalavimams tenkinti žodynas realizuojamas kaip subžodynų rinkinys, per kurį apibrėžiamos operacijos, leidžiančios kurti ir sunaikinti subžodynus bei jų dalis, ištrinti pavadinimus, uždaryti ir atverti prieigą prie tam tikrų subžodynų. Kiekvienas antrinis žodynas turi pavadinimą, kuris naudojamas su juo susijusiose komandose. Subžodynų pavadinimai turi prasidėti raide $, pavyzdžiui: $PRIME, $EDIT, $FLOAT, $TEXTPROC, $GRAPHICS.

Požodynas $PRIME, kuriame yra pagrindinis DSSP žodžių rinkinys, procesoriui paleidus, yra atviras ir prieigai prie jame esančių žodžių, ir naujų žodžių papildymui. Jei reikia, į jį įvestus naujus žodžius galima ištrinti kartu su jais susijusiais objektais naudojant komandą FORGET $PRIME. Po to galimybė toliau įvesti žodžius į šį požodyną užtikrinama vykdant komandą GROW $PRIME, kuri leidžia dar kartą išplėsti $PRIME antrinį žodyną, o viską, kas įvesta į jį, vėl galima ištrinti komanda FORGET $PRIME ir t.t. . Šiuo režimu DSSP naudojamas eksperimentuojant su mažais programų fragmentais, atskirais pavyzdžiais, įvertinimais, taip pat, jei reikia, įtraukiant naujus žodžius į $PRIME požodyną sistemos kalbos kūrimo tvarka.

Kurdami atskirą programą, jie sukuria jai savo antrinį žodyną ir tai pasiekiama programos tekstą paleidus komanda

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

Žmogus šią komandą suvokia kaip antraštę, po kurios laužtiniuose skliaustuose turėtų būti parašytas komentaras, keliais žodžiais apibūdinantis programos įgyvendinamą funkciją. Procesoriaus atveju tai prilygsta komandų sekai

PAmirškite $<имя>AUGINTI $<имя>

Todėl kiekvienas programos teksto patekimas į procesoriaus įvestį ištrina ankstesnę jos versiją ir atidaromas subžodynas, taip išvalytas, kad būtų galima įvesti naują programos versiją tuo pačiu pavadinimu. Tai patogu atliekant kuriamos programos taisymus, taip pat ją modifikuojant ateityje.

Kuriamos programos tekstas į procesoriaus įvestį įvedamas ne tiesiai iš klaviatūros, o generuojamas teksto rengyklės buferyje. E komanda (Edit) nustatomas redagavimo režimas, kai klaviatūra įvestus žodžius procesorius nebesuvokia kaip komandas, kurios turi būti nedelsiant vykdomos, o yra tiesiog tekstas, įrašytas į buferį ir tuo pačiu metu rodomas ekrane. Naudojant specialius mygtukus, valdančius esamos padėties indikatoriaus (žymeklio) judėjimą ekrane, taip pat redaguojant komandas, duodamas paspaudus kitus klavišus, įvestą tekstą galima taisyti ir keisti, atliekant trynimus ir įterpimus, perkeliant jo fragmentus iš vienos vietos į kitą. vieta ir kt.

Baigus įvesti ir redaguoti tekstą, redaktorius išjungiamas paspaudus E klavišą vienu metu su (tiksliau, su anksčiau paspaustu) klavišu , ir sistema pereina į pagrindinį DSSP komandų režimą. Panašų veiksmą sukelia tiesiog paspaudus klavišą . Šiuo režimu redaktoriaus buferio turinys gali būti išvestas į procesoriaus įvestį su komanda PF (PerForm - execute). Tokiu atveju bus vykdomos visos tekste esančios komandos, ypač komanda PROGRAM $<имя>ištrins į subžodyną įvestą $<имя>nuo paskutinio karto, kai ši komanda buvo vykdoma, duomenų ir procedūrų pavadinimai, taip pat atitinkami objektai, iš naujo atveriant šį subžodyną plėtrai. Duomenų deklaravimo ir procedūrų apibrėžimo komandos įves įvestus pavadinimus kartu su nuorodomis į tais pavadinimais nurodytus duomenis ir procedūrų įstaigas, sudarytas pagal apibrėžimus.

Kai įkėlimas baigtas, procedūros ir duomenys yra prieinami nuorodai pagal jų klaviatūros pavadinimus, o programos teisingumą galima patikrinti atliekant procedūras didėjančia tvarka, t.y. pradedant nuo tų, kurių apibrėžimuose nėra nepatikrintų procedūrų. Prieš pradedant tikrinti, tikslinga įsitikinti, kad programa nenaudoja neapibrėžtų pavadinimų. Procesorius rodo juos ekrane naudodamas komandą UNDEF. Norėdami papildyti programos tekstą šių pavadinimų apibrėžimais, taip pat ištaisyti kitas tikrinimo proceso metu aptiktas klaidas, turite naudoti komandą E, kad iškviestumėte redaktorių ir atliktumėte atitinkamą šaltinio programos teksto, esančio redaktoriaus buferyje, modifikaciją. , tada perjunkite procesorių į pagrindinį režimą ir įkelkite buferio turinį naudodami PF komandą.

Patikrinus ir išbandžius programą, jos šaltinio tekstą galima nukopijuoti iš redaktoriaus buferio į diską naudojant komandą OE f, kur f – failo, kuriame programa bus įrašyta į diską, pavadinimas. Ateityje failo turinį bus galima įkelti į procesoriaus įvestį naudojant komandą LOAD f, taip pat nukopijuoti į redaktoriaus buferį kaip teksto priedą naudojant komandą IE f. Pagal numatytuosius nustatymus failų plėtinys yra .DSP. Buferį pirmiausia galima išvalyti naudojant KE komandą. Taip pat galima atspausdinti buferio turinį naudojant LPE komandą.

Įkėlus vykdyti paruoštą programą, galima išvalyti jai sukurtą požodyną $<имя>CLEAR $ komanda<имя>. Vykdydamas šią komandą, procesorius pašalina nefiksuotus pavadinimus iš pavadinto požodyno, t.y. visi vardai, išskyrus tuos, kurių apibrėžimų pradžioje yra fiksuojantis priešdėlis:: (du dvitaškiai). Tokiu atveju ištrinami tik patys pavadinimai (žodyno įrašai), o su jais susiję procedūrų organai ir duomenys išsaugomi ir pasiekiami programos vykdymo metu per kompiliavimo metu sukurtas vidines nuorodas, tačiau iš išorės jie nebepasiekiami. Norėdami atkurti prieigą iš išorės, pavyzdžiui, jei reikia kompiliuoti papildymą ar pakeitimą, turite iš naujo atsisiųsti programos šaltinio kodą.

Vardai gali būti iš išorės neprieinami, nepašalinant jų iš žodyno naudojant komandą SHUT $<имя>, kuri blokuoja prieigą prie visų jame įvardyto požodyno žodžių. Požodyno atidarymas, norint naudoti jo žodžius, atliekamas naudojant komandą USE $<имя>. Taip pat yra komanda ONLY $<имя>, kuri uždaro visus subžodynus, išskyrus įvardytą, ir komandą CANCEL, kuri atšaukia šį apribojimą. Išvardintos komandos leidžia valdyti žodyno naudojimą kompiliavimo metu ir apriboti programos vartotojui prieinamą vardų rinkinį iki reikiamo minimumo.

Vardo paieška žodyne atliekama ieškant jo žodžių atvirkštine tvarka, kuria jie buvo įrašyti žodyne, t.y. pradedant nuo paskutinio įvesto. Todėl daugiau nei vieną kartą žodyne apibrėžtam vardui galios naujausias apibrėžimas. Jei požodynas, kuriame yra šis paskutinis apibrėžimas, uždaromas, paieška tęsiama iki pirmojo turimo žodyno įrašo su nurodytu pavadinimu ir bus naudojamas to įrašo nurodytas apibrėžimas.

Keletas žodžių apie duomenų įvedimą ir išvedimą. Kaip jau buvo minėta, procesorius bando žodyne nerandamą vykdomosios programos žodį interpretuoti kaip skaičių ir, jei pavyks, šio skaičiaus dvejetainį atitikmenį įstumia į krūvą. Skaičius į krūvą galima įvesti naudojant TIN komandą, kuriai reikia įvesti įvesties numerį klaviatūra. Taip pat yra komandų, dėl kurių klaviatūra įvestas simbolis įstumiamas į krūvą: TIB – su ekranu, TRB – šio simbolio nerodant ekrane. Šiuo atveju simbolio kodas yra vaizduojamas žemu 32 bitų žodžio baitu, įstumtu į krūvą, kurio didžiausi 3 baitai yra lygūs nuliui.

Viršutinės krūvos turinį galima įvesti atitinkamai kaip skaičių arba kaip raidę. Komanda TON sukelia skaitinės poviršio reikšmės atvaizdavimą ekrane išvesties lauke, kurio plotį nurodo viršūnė, jos vykdymo metu sukurtoje skaičių vaizdavimo sistemoje. Komanda TOB rodo simbolį, kurio kodas yra apatiniame krūvos viršaus baite. Abiem atvejais prie išvesties pridedami argumentai, kurie pašalinami iš kamino.

DSSP procesorius turi išorinių ir vidinių (komandų) pertraukimų aparatą ir suteikia šias priemones jiems apdoroti. Procedūra, skirta apdoroti išorinį pertraukimą, apibrėžiama taip pat, kaip ir įprasta procedūra, tačiau prieš dvitaškį pridedamas priešdėlis INT. Tokios procedūros pavadinimas yra susietas su pertraukimo vektoriaus adresu su komanda:

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

Komandos pertraukimas yra pavadinta operacija, kuri iškviečia atsakymo procedūrą. Šios operacijos pavadinimą lemia komanda TRAP, kuri su ja susieja vadinamąją galutinio atsakymo procedūrą, kuri vykdoma, jei galutinis atsakymas nepakeičiamas kita atsakymo procedūra naudojant ON arba EON komandą. Visos trys komandos turi tą patį formatą:

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

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

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

Procedūra, susieta su iškvietimo pavadinimu pagal EON komandą, vykdoma preliminariai išėjus iš procedūros, kurioje yra EON instrukcija, ir naudojant operandų dėklo rodyklės vertę, kuri egzistavo EON vykdymo metu.

RAYA kalbos sintaksė

RAY kalbos abėcėlė apima lotynų ir rusų, mažąsias ir didžiąsias raides, dešimtainius skaičius, matematinius ir kitus specialiuosius simbolius. Abėcėlės elementai (nariai) vadinami raidėmis. Išorinis raidės atvaizdas yra jos atspausdintas vaizdas (spausdintas ženklas). DSSP procesoriaus viduje kiekvienas išspausdintas simbolis yra pavaizduotas baitu, kurio reikšmė yra dvejetainis šio simbolio kodas. Išorinio atvaizdavimo konvertavimas į vidinį ir atvirkščiai atliekamas įvesties/išvesties įrenginiu (klaviatūra, ekranu, spausdintuvu). Kad būtų patogiau, kodo skaitinė reikšmė išreiškiama dešimtaine, šešioliktaine arba aštuntaine sistemomis, atitinkamą skaičių vadinant dešimtaine, šešioliktaine arba aštuntaine kodo raide.

Visi RAYA kalbos objektai yra sudaryti iš simbolių ir vaizduoja tiesines baigtinio ilgio simbolių grandines, vadinamas žodžiais. Vienas po kito einančių žodžių skyriklis yra nespausdinamas simbolis (tarpas). Tarpų eilutė atitinka vieną tarpą. Be to, žodžių skyriklio funkciją atlieka komanda „Eiti į kitos eilutės pradžią“, kuri įvesties įrenginių klaviatūrose nurodoma simboliu arba ir kartu su raidėmis turintis vidinį baitų kodą. Taigi, nereikia atskirti tarpų eilutės pradžioje ir pabaigoje.

Žodžių pavyzdžiai: CLEAR NOP STACK2 & 1+ -366 X Probe.

DSSP procesorius skiria žodžius pagal pirmąsias septynias raides, atpažįsta juos poliliteriniu lyginimu su žodyne esančiais žodžiais. Žodyne yra žodžiai, kurie yra paties procesoriaus operacijų pavadinimai (pavadinimai), vadinami pagrindinėmis operacijomis arba primityvais ir gali būti papildyti vartotojo apibrėžtais objektų (duomenų, procedūrų) pavadinimais. Taigi žodyne esantys žodžiai yra veiksmų (operacijų, procedūrų) arba duomenų pavadinimai (konstantos, kintamieji, masyvai).

Kai identifikuojamo žodžio žodyne nėra, procesorius bando priskirti jį vienam iš šių atvejų:

    skaitinis literalas, t.y. skaičių seka, galbūt prasidedanti minuso ženklu, pavyzdžiui: 0, 4096, -25;

    pažodinis pažodinis: žodis, prasidedantis simboliu #, dėl kurio procesorius kaip duotą kodą gauna iš karto po jo einantį pažodinį žodį, pavyzdžiui: #A - didžiosios lotyniškos raidės A raidė, #5 - skaičiaus 5 pažodinė raidė, # - tarpo raidė, ## - raidės #;

    teksto pažodinis: savavališkas tekstas, parašytas dvigubomis kabutėmis ir atskirtas žodžių skyrikliais, pvz.: "Tekstas", "Įvesties failas N3";

    komanda tekstiniam pranešimui rodyti: rodomo pranešimo tekstas, kairėje atskirtas simbolių kombinacija taškas-dvigubos kabutės ir dvigubos kabutės dešinėje ir atskirtos žodžių skyrikliais, pvz.: "Stekas tuščias";

    komentaras: savavališkas tekstas, įrašytas laužtiniuose skliaustuose ir atskirtas skiriamaisiais ženklais, pavyzdžiui: .

Literatai ir komanda rodyti pranešimą ekrane veikia kaip DSSP kalbos objektai kartu su žodžiais, identifikuotais iš žodyno, o komentarus DSSP procesorius visiškai ignoruoja – jie skirti žmogui, o ne mašinai. Jei žodžio nerastas žodyne ir jis nesusijęs su išvardytomis konstrukcijomis, procesorius parodo pranešimą: „Nežinau<неопознанное слово>".

Dėl ypatingos reikšmės, priskiriamos raidėms #, „ir derinys“. žodžio pradžioje, t.y. po skyriklio, taip pat raidė " prieš skyriklį, jie neturėtų būti vartojami nurodytose pozicijose žodžiuose, apibrėžtuose įtraukimui į žodyną.

Žodžių seka procesoriaus įvestyje interpretuojama kaip procesoriaus vykdomų instrukcijų seka. Yra trys žodžių tipai:

1) atliekami savarankiškai, t.y. atstojančios vieno žodžio komandas (monožodžius);

2) atliekami kartu su vienu ar keliais vėlesniais žodžiais, t.y. yra dviejų, trijų ar kelių žodžių komandų pradiniai žodžiai (priešdėliai);

3) prieš komandą kaip specialaus vykdymo režimo paaiškinimą ar nurodymą (priešdėlius).

Monožodžiai apima pažodinius žodžius, duomenų pavadinimus, daugumą įvesties / išvesties operacijų, testavimą ir duomenų konvertavimą dėtuvėje bei vartotojo nustatytas procedūras. Pavyzdžiui: 1987 – skaitinis pažodinis, #5 – skaičiaus 5 pažodinis, "Schemų sąrašas" - teksto literalas, LENGTH - kintamojo pavadinimas, TOB, NEG, +, &,<, = - имена (обозначения) операций, SORT, CONVERT, ЧИСТКА, СНЯТЬ - имена процедур пользователя.

Priešdėliai yra būdingi komandoms, skirtoms duomenims aprašyti ir procedūroms apibrėžti, taip pat manipuliuoti įvardintais duomenimis, sąlyginiam ir pakartotiniam procedūrų vykdymui ir žodyno valdymui. Komandų su priešdėliais pavyzdžiai:

VAR SUM – sukurkite kintamąjį SUM,

: nelyginis [x] 1 & ; - sukurti nelyginę procedūrą, kuri nelyginį skaičių pakeičia 1, lyginį skaičių 0,

0 X – kintamajam X priskirkite reikšmę 0,

BR+ P1 P2 - jei jo viršaus vertė, paimta iš kamino, yra teigiama, tada vykdykite P1, kitu atveju vykdykite P2,

RP CHECK – pakartotinai atlikite CHECK procedūrą,

NAUDOTI $REAL – atidarykite $REAL antrinį žodyną.

Paprastai konkretus priešdėlis reikalauja tam tikro žodžių skaičiaus po jo. Taigi, ką tik pateiktuose pavyzdžiuose priešdėliai VAR, !0 ir USE reikalauja vieno žodžio, o priešdėlis BR+ – du. Tačiau priešdėlis: (dvitaškis) leidžia sukurti bet kokio ilgio komandą, pradedant nuo trijų žodžių. Komandos pabaiga yra žodis; (kabliataškis). Savavališkas ilgis taip pat būdingas pastovaus deskriptoriaus komandai CNST A1 ... AJ ; ir procedūros daugkartinio pasirinkimo komanda BR A1 P1 ... AJ PJ ELSE PN.

Priešdėliai yra specialūs žodžiai, kurie, pridėjus prie komandos, pakeičia jos turinį arba apibrėžia specialų vykdymo režimą. Pavyzdžiui, komanda VAR X be priešdėlio yra nurodymas sukurti 16 bitų kintamąjį X. Jei prie jo pridėsite BYTE priešdėlį, gausite komandą BYTE VAR X, kuri nurodo sukurti 8 bitų prefiksą. kintamasis (baitas) pavadintas X. Jei naudojate LONG priešdėlį, tada gauname LONG VAR X – nurodymą sukurti 32 bitų kintamąjį pavadinimu X.

Kito tipo priešdėlis, būtent:: (du dvitaškiai) daro komandos rezultatą atsparų procedūrai CLEAR, kuri pašalina laisvus žodžius iš žodyno. Pavadinimai, įvesti į žodyną programos kūrimo metu duomenų aprašymo ir procedūrų apibrėžimo komandomis, gali būti pašalinti iš žodyno sukūrus ir išbandžius programą, išskyrus keletą, kurie yra būtini baigtai programai prižiūrėti. Pašalinimas atliekamas naudojant komandą CLEAR $<имя подсловаря>, kuris nurodo išvalyti su programa susietą požodyną, išsaugant jame tik tuos žodžius, kurių apibrėžimuose yra priešdėlis ::. Komandų, kurios generuoja neištrinamus žodžius, pavyzdžiai:

:: BYTE CNST LITCODE # #0 #A ;

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

Kaip rodo antrasis pavyzdys, kuriame yra :: ir BYTE priešdėliai, komanda gali turėti daugiau nei vieną priešdėlį.

Taigi, komanda DSSP gali būti arba vienas žodis (monožodis) arba frazė (frazė), prasidedanti priešdėliu ir turinti šiam priešdėliui nustatytą žodžių skaičių, o jei priešdėlis leidžia savavališką žodžių skaičių, tada ribojantis žodis pabaigoje arba tai gali būti frazė, priekyje papildyta specialiais priešdėlio žodžiais.

Pagrindinėje DSSP kalboje nėra sudėtingesnių sintaksinių konstrukcijų nei komanda ir paprastai nėra jokių konstrukcijų, išskyrus aptartas aukščiau. Netgi tokių dalykų, kurie yra būtini programavimo kalbose, kaip išraiška ir funkcija, pagrindinėje kalboje nėra ir, jei reikia, juos galima įvesti tik ją kuriant.

Programa bazine kalba yra tiesiog komandų rinkinys, vykdomas tokia tvarka, kokia jos pasirodo tekste. Be to, kiekviena komanda, išskyrus tas, kuriose yra tik primityvų, vykdymo metu apima komandų seką, apibrėžiančią į ją įtrauktus žodžius. Dalyvaujančiose komandose savo ruožtu gali būti žodžių, žyminčių komandų grandines, kuriose taip pat gali būti žodžių, nurodančių su jomis susijusias grandines ir pan. iki tokio lygio, kai komandose yra tik primityvūs.

Bendrasis PARA kalbos aprašymas, sudaręs šio skyriaus turinį, buvo skirtas šios kalbos struktūros ypatybėms ir pagrindiniam (pradiniam) jos komandų rinkiniui, kuris yra integruotų komandų (primityvų) rinkinys. DSSP procesoriaus. Tolesnis kalbos tobulinimas ir atitinkamas procesoriaus galimybių didinimas vykdomas diegiant naujas procedūras, komandas, formatus ir duomenų tipus, sukonstruotus naudojant pagrindinius įrankius. Paprastai toks kūrimas yra orientuotas į problemas ir yra vykdomas procedūrų paketų forma, įkeliami į procesoriaus įvestį, be pagrindinės sistemos.

Kita vertus, bazinė sistema gali būti papildyta specialiomis jos pagrindu įdiegtomis priemonėmis, siekiant padidinti DSSP programų mašinos efektyvumą. Šios funkcijos apima galimybę apibrėžti atskiras procedūras tiesiogiai naudojamos mašinos komandų kode. Procedūros apibrėžimo būdas neturi jokios įtakos tolesniam jos naudojimui: visų procedūrų pavadinimai įrašomi į bendrą žodyną ir yra visiškai vienodi. Daugybė bibliotekos programų leidžia naudoti procedūras arba visas programas, parašytas kitomis kalbomis.

Operacijų ir komandų aprašymas

Ant rietuvės atliekamos operacijos

Operandų krūva yra vienas iš pagrindinių DSSP procesoriaus architektūros elementų. Dauguma procesoriaus instrukcijų naudoja krūvą, sunaudoja iš jos reikalingus operandus ir perkelia rezultatus į jį. Duomenų apie krūvą interpretacija priklauso nuo sprendžiamos problemos esmės, t.y., galiausiai už tai atsako programuotojas. Dėl to, kad į krūvą įstumta reikšmė iš tikrųjų praranda pavadinimą, iš programos teksto sunku nustatyti, kuriems operandams taikoma konkreti operacija ir kokie jos rezultatai. Todėl komentarai naudojami norint aiškiai nurodyti operandus ir procedūrų rezultatus RAYA kalba. Tokiu atveju nebūtina (ir ne visada įmanoma) aprašyti viso krūvos turinio. Būtina pakomentuoti viršutinę kamino dalį, kuriai daro įtaką joje atliekama procedūra, nes be to prarandamas programos aiškumas ir sunku ją patikrinti.

Norint pasiekti programos vienodumą, šie komentarai turėtų būti parašyti atsižvelgiant į keletą paprastų taisyklių. Kaip ir bet kuris komentaras, dėklo duomenų aprašymas yra laužtiniuose skliaustuose. Šis aprašymas yra operandų, esančių tam tikrame programos taške, sąrašas. Kiekvienas sąrašo elementas apibūdina vienos krūvos pozicijos turinį; kablelis naudojamas kaip skyriklis. Krūvos padėties reikšmės pateikiamos iš kairės į dešinę, pradedant giliausiu elementu ir baigiant krūvos viršumi. Atskiro operando aprašymas gali būti skaičius, pavadinimas, išraiška arba bet koks kitas reikšmingas įrašas, paaiškinantis krūvoje esančios reikšmės reikšmę. Kartais yra kelios galimos krūvos pozicijos vertės. Tokiu atveju reikšmės pateikiamos atskirtos pasviruoju brūkšniu.

Štai komentaro, atspindinčio operandų krūvos būseną, pavyzdys:

[pradžios adresas, N+1,1/0]

Programos taške, kuriame yra šis komentaras, operandų krūvoje turi būti bent trys pozicijos, kurių viršuje yra 1 arba 0, skaitinė reikšmė lygi N+1 apačioje ir kai kurie skaičiai po juo. , interpretuojamas kaip pradžios adresas.

Kad būtų patogiau nurodyti reikiamą kamino padėtį, naudosime gylio sąvoką. Darysime prielaidą, kad krūvos viršus yra 1 gylyje, apatinė dalis – 2 gylyje ir t. t. Visų pirma, vertė, pavyzdyje pažymėta kaip "start.address". guli 3 gylyje.

Pradėsime pagrindinės DSSP kalbos tyrimą su komandomis, skirtomis reikšmėms perkelti į krūvą. Paprasčiausia (ir dažniausiai naudojama) šio tipo komanda yra skaitinis literalas, tai yra aiškus konstantos, kuri turėtų būti įstumta į krūvą, nuoroda. Pavyzdžiui, į krūvą norime įstumti skaičius 28, -5 ir 11. Norėdami tai padaryti, turime įvesti eilutę iš klaviatūros:

28 -5 11 ir paspauskite klavišą (vežimas atgal). Procesorius atpažins įvestus skaičius ir po vieną įstums juos į krūvą, kad viršuje būtų 11. Norėdami tai patikrinti, ekrane tiesiog atspausdinkite krūvos viršaus reikšmę. Norėdami tai padaryti, naudokite komandą DSSP su pavadinimu. (taškas). Klaviatūra įvesdami raidę "taškas" ir paspausdami , ekrane gauname atsakymą: 11, kuris atitinka paskutinę į krūvą įstumtą reikšmę. Dar kartą paleidus „tašką“, gaunamas tas pats rezultatas – ši komanda atvaizduoja tik viršūnę, nekeičiant krūvos būsenos.

Kad ekrane būtų rodomas visas krūvos turinys, DSSP turi komandą .. (du taškai). Tai įvykdę, ekrane gauname eilutę:

Kaip matote, spaudinio forma atitinka dėklo būsenos komentavimo taisykles (išskyrus tai, kad vietoj kablelio naudojamas tarpas). Komanda .. nekeičia krūvos turinio.

32 bitų žodis (4 baitai) naudojamas vienai krūvos vietai įrenginio atmintyje pavaizduoti; skaičiai pateikiami dviejų komplemente. Atitinkamai, DSSP procesorius gali teisingai suvokti tik sveikuosius skaičius, esančius diapazone nuo -2147483648 iki 2147483647. Jei įvestas skaičius negali būti pavaizduotas 32 bitais (atsižvelgiant į ženklą), tada reikšmingiausi bitai, kurie netelpa, yra atmetami. .

Nagrinėjamuose pavyzdžiuose buvo daroma prielaida, kad DSSP procesorius yra dešimtainio įvesties/išvesties režimu. Norėdami nustatyti šį režimą PARA kalba, yra komanda B10.

Daugelyje užduočių apdorotus duomenis reikia interpretuoti ne kaip skaičius, o kaip dvejetainius kodus, tai yra, 32 komponentų bitų vektorius. DSSP turi galimybę dirbti su kodais, pateiktais dvejetainėje, aštuntainėje arba šešioliktainėje skaičių sistemoje. Norint nustatyti norimą režimą, pakanka įvykdyti vieną iš trijų komandų: B2, B8 arba B16, po kurių procesorius priims ir išspausdins visus įvestus kodus nurodytoje skaičių sistemoje.

Šią funkciją galima naudoti norint konvertuoti dešimtainius skaičius į skaičių sistemas su 2, 8 ir 16 bazėmis. Pavyzdžiui, norėdami konvertuoti skaičių 29, turite įvesti ir vykdyti šią eilutę:

B10 29 B2. B8. B16. Dėl to procesorius ekrane parodys skaičių seriją: 00000000035 0000001D, kurios yra dešimtainio skaičiaus 29 atvaizdai trijose nurodytose skaičių sistemose. Atkreipkite dėmesį, kad kodai spausdinami pagal jų mašininį atvaizdą, t. y. su nuliais priekyje ir be ženklų „+“, „-“. Vykdant eilutę B10 -2 B8 . pateiks skaičių 37777777776, kuris yra dviejų komplemento aštuntainis atvaizdas -2.

Dirbant su šešioliktainiais kodais, gali įvykti skaitinių literalių ir DSSP procesoriaus komandų pavadinimų susidūrimai. Pavyzdžiui, žodis B8 šešioliktainio įvesties/išvesties režimu gali būti interpretuojamas kaip aštuntainio režimo komanda ir kaip šešioliktainė konstanta. Kad išvengtumėte dviprasmybių, skaitinius literatus turėtumėte pradėti nereikšmingu nuliu, pavyzdžiui, 0B8.

DSSP procesoriaus komandų sistemos pagrindas yra kamino duomenų konvertavimo operacijos. Bendra taisyklė, reglamentuojanti šių operacijų veikimą, yra ta, kad kiekviena operacija sunaudoja (pašalina) operandus, kurių jai reikia iš dėklo, ir stumia rezultatų reikšmes (jei yra) į jų vietą.

Panagrinėkime procesoriaus instrukcijas, kurios įgyvendina keturias aritmetines operacijas: sveikųjų skaičių sudėtį, atimtį, daugybą ir padalijimą. Norint juos pavaizduoti ROJAUS kalba, naudojami žodžiai: +, -, * ir /, atitinkamai. Norėdami gauti dviejų krūvoje esančių skaičių sumą, pavyzdžiui, 123 ir 45, turite įstumti šiuos skaičius į krūvą ir vykdyti + komandą. Norėdami tai padaryti, tiesiog įveskite šią eilutę iš klaviatūros (darant prielaidą, kad nustatytas dešimtainis įvesties / išvesties režimas):

123 45 +

Jei dabar ekrane rodysite krūvos turinį (naudodami komandą ..), pamatysite papildymo rezultatą:

Komutacinė daugybos operacija veikia panašiai.

Atliekant nekomutuojamąsias atimties ir dalybos operacijas, krūvos poviršis imamas kaip minuend (dalomasis), o viršus – kaip pogrupis (daliklis). Pavyzdžiui, norėdami apskaičiuoti skirtumą 151-68, turite įvykdyti eilutę:

151 68 -

Programa, skirta atlikti aritmetinį veiksmą PARA kalba, pasižymi tuo, kad operacija yra po atitinkamų operandų. Šis aritmetinių išraiškų žymėjimas vadinamas postfiksiniu (arba lenkišku atvirkštiniu) žymėjimu ir plačiai naudojamas kamino mikroskaičiuotuvuose. Pavyzdžiui, reikia apskaičiuoti aritmetinės išraiškos reikšmę ((127+81)*15-(31+117)*21)*3

Postfix žymėjime ši išraiška atrodys taip:

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

Ši eilutė (kurioje žodžiai yra atskirti vienas nuo kito tarpais) yra paruošta programa, skirta mūsų išraiškai apskaičiuoti DSSP procesoriumi.

Padalinimas / komanda skiriasi nuo kitų aritmetinių operacijų tuo, kad jo rezultatas yra dvi reikšmės - koeficientas ir liekana. Dalinys atsiduria krūvos apačioje, o likutis – viršuje. Dalinys yra neigiamas, jei dividendas ir daliklis turi skirtingus ženklus. Likusi dalis visada turi dividendo ženklą. Štai keletas padalijimo komandos naudojimo pavyzdžių.

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

Atliekant skaičiavimus, gali susidaryti klaidų situacijos: perpildymas ir padalijimas iš nulio. DSSP procesorius niekaip į juos nereaguoja (ypač dalijant iš nulio, krūvos turinys nesikeičia), o teisingo operacijų panaudojimo kontrolė tenka programuotojui.

Programuojant dažnai tenka padidinti arba sumažinti reikšmės reikšmę 1 arba 2. Į PARA kalbą buvo įvestos specialios komandos, kurios atlieka nurodytus veiksmus krūvos viršuje. Jie žymimi žodžiais: 1+, 1-, 2+, 2-. Šių komandų vykdymas prilygsta reikiamos konstantos (1 arba 2) įstumimui į krūvą ir reikiamos aritmetinės operacijos (+ arba -) atlikimui. Pavyzdžiui, 2+ atitinka žodžių porą 2+. Šių komandų įvedimas į kalbą buvo nulemtas efektyvumo sumetimų.

Be to, siekiant padidinti efektyvumą, pagrindinėje DSSP procesoriaus kalboje yra komandos T0 ir T1, kurios dėklo viršuje esančią reikšmę pakeičia atitinkamai 0 ir 1, nepriklausomai nuo to, kokia reikšmė buvo viršuje prieš nurodytą komandą. Pavyzdžiai:

NEG, ABS ir SGN komandos taip pat skirtos darbui su skaitmeniniais duomenimis. NEG komanda pakeičia krūvos viršaus ženklą, ABS pakeičia krūvos viršaus reikšmę savo moduliu, SGN sunaudoja skaitinę reikšmę iš krūvos viršaus ir įdeda ištraukto skaičiaus ženklą į jo vietą: -1 - jei skaičius neigiamas, 1 - jei teigiamas, 0 - jei lygus nuliui. Pavyzdžiui:

5 NEG [-5] ABS SGN

Pagrindinės kalbos komandos MIN ir MAX leidžia rasti mažiausią ir didžiausią du sveikuosius skaičius. Šių instrukcijų operandai yra du skaičiai, esantys krūvos viršuje ir apačioje. Komanda MIN palieka minimalų parametrų skaičių ant krūvos, MAX - didžiausią iš jų. Pavyzdžiui:

5 0 15 MIN [-5,0] MAKS

Norėdami rasti mažiausią (maksimalų) skaičių iš trijų krūvoje esančių skaičių, tiesiog du kartus naudokite komandą MIN (MAX):

MIN MIN [-2]

SEG komanda patikrina, ar skaičius, esantis krūvos viršuje, patenka į nurodytą diapazoną nuo a iki b (įskaitant ribas), ir palieka krūvoje ženklą: 1, jei skaičius yra diapazone, ir 0, jei ne:

Pavyzdžiui, SEG [ženklas]:

Be komandų, skirtų darbui su skaitmeniniais duomenimis, DSSP procesoriaus komandų rinkinys apima daugybę operacijų, skirtų 32 bitų kodams konvertuoti. Šios operacijos dėklo elementą traktuoja kaip 32 komponentų bitų vektorių, kurio komponentai numeruojami iš dešinės į kairę taip, kad kairysis bitas būtų sunumeruotas 31, o dešinysis bitas – 0. Komponentų numeracija mažėjanti seka mašininio žodžio bitai, pritaikyti daugeliui mikroprocesorių.

Komandos, atliekamos bitų vektoriams, pirmiausia apima bitines Būlio algebros operacijas:

    INV krūvos viršaus bitų apvertimas, keičiant kiekvieno viršutinės dalies bito reikšmę, t.y., 0 pakeičiant 1, o 1 - 0;

    dėklo & viršūnės ir poviršio bitų jungtis, nustatant i-ąjį rezultato bitą, i=31,30,...,0, į reikšmę 1, jei abiejų operandų i-ieji bitai yra lygūs 1, o kitais atvejais nustatant i-ąjį bitą lygų 0;

    dėklo &0 viršūnės ir poviršio bitų disjunkcija, nustatant i-ąjį rezultato bitą, i=31,30,...,0, į reikšmę 0, jei abiejų operandų i-ieji bitai lygūs 0, o kitais atvejais nustatant i-ąjį bitą lygų 1;

    viršūnės ir poviršio sudėjimas bitais (neekvivalentiškumas) „+“, nustatant i-ąjį rezultato bitą į 0, jei abiejų operandų i-ieji bitai turi tokias pačias reikšmes, ir nustatant i-ąjį rezultato bitą. rezultatas iki 1, jei operandų i-ųjų bitų reikšmės skiriasi.

525 INV 722 & 136 & 0 325 "+"

Bitų jungtis dažnai naudojama norint iš naujo nustatyti (išvalyti) žodžio bitus. Norėdami tai padaryti, jie atlieka pradinio žodžio jungtį su kauke, kurioje yra nuliai tuose bituose, kuriuos reikia išvalyti, ir vienetus likusiuose bituose. Pavyzdžiui, jei reikia iš naujo nustatyti 3–5 bitus kokiame nors žodyje X, turite atlikti jo bitų ryšį su kauke 37777777707. Jei X=235, gauname:

Bitinis disjunkcija gali būti naudojama norint įdėti norimą bitų derinį į anksčiau išvalytą žodžio bitų grupę. Pavyzdžiui, dvejetainį derinį 010 reikia sudėti į 3–5 žodžio, likusio krūvoje, kaip paskutinio pavyzdžio, bitus. Tai galima padaryti taip:

Bitų manipuliavimo operacijos taip pat apima logines poslinkio komandas:

    kairysis poslinkis SHL – kiekvienas krūvos viršaus bitas, pradedant nuo 31-ojo, mažėjančia tvarka įgauna sekančiojo reikšmę, o paskutinis, nulinis bitas – 0;

    dešinysis poslinkis SHR – kiekvienas krūvos viršaus bitas, pradedant nuo 0, įgauna kito reikšmę didėjančia tvarka, o 31-asis bitas – 0;

    poslinkis viršuje SHT - viršutinis elementas pašalinamas iš krūvos ir traktuojamas kaip sveikasis skaičius N, nurodantis, kiek poslinkių ir kokia kryptimi reikia atlikti krūvos viršuje: kai N>0 poslinkis į kairę , kai N<0 - вправо.

B8 125 SHR SHL -2 SHT

Poslinkio į kairę operacijas galima padauginti skaičius iš 2 iki N laipsnio, kur N yra natūralusis skaičius, apibrėžiantis poslinkių skaičių. Pavyzdžiui, skaičių -5 galima padauginti iš 8, perkeliant skaičių 3 vietomis į kairę:

B10 -5 3 SHT [-40]

Reikia atsižvelgti į perpildymo galimybę.

Poslinkis į dešinę gali būti naudojamas kaip dalijimas iš 2 iki N laipsnio tik teigiamiems skaičiams, nes reikšmingiausias (ženklo) bitas poslinkio į dešinę metu nustatomas į nulį. Pavyzdžiui:

kadangi

Komandos cikliškai perkelti krūvos viršų 1 bitu į dešinę ROR ir kairę ROL yra panašios į loginio poslinkio komandas, išskyrus tai, kad išstumtas tolimiausias bitas nedingsta, o yra nustumiamas į laisvą erdvę priešingame stulpelio gale. 32 bitų ilgio žodis. Pavyzdžiui (šešioliktainiai skaičiai):

DSSP procesoriaus komandos SWB ir SWW taip pat skirtos dvejetainiams kodams apdoroti. SWB funkcija yra sukeisti žemos eilės dėklo viršaus pusės baitus, o SWW funkcija – sukeisti krūvos viršaus puses. Pavaizduokime, kaip šios komandos veikia naudojant šešioliktainį įvesties/išvesties režimą (šiuo režimu kiekvienas baitas pavaizduotas dviem šešioliktainiais skaitmenimis):

B16 0ABCD SWB SWB

0ABCDEF12 SWW SWB

Kamino manipuliavimo komandos vaidina svarbų vaidmenį PARA kalboje. Jie nekeičia duomenų, esančių dėtuvėje, reikšmių, o tik pakeičia jų vietą, todėl lengviau pasiekti operandus, esančius giliai krūvoje.

Yra trys dėklo elementų trynimo komandos: D, DD, DS (Drop). Komanda D pašalina vieną (viršutinį) elementą iš krūvos, DD pašalina du elementus, pavyzdžiui:

D DD D DS pašalina visus elementus iš krūvos (išvalo krūvą):

Komanda kopijuoti krūvos viršų C (Kopijuoti) įstumia dabartinės jo viršaus vertės kopiją į krūvą. Tai prilygsta viršutinio kamino elemento kopijavimui: senoji viršūnė tampa subvertex, o jos kopija tampa nauja viršutine dalimi. Pavyzdys:

Parodykime šios komandos naudojimą naudodamiesi daugianario p(x)=3*x**2+4*x-5 apskaičiavimo pavyzdžiu pagal Hornerio schemą: p(x)=(3*x+4)*x- 5. Darome prielaidą, kad reikšmė x yra krūvos viršuje.

[x] C 3 * 4 + * 5 -

Kartu su komanda kopijuoti kamino viršų, PARA kalba taip pat turi komandas C2, C3, C4, kurios kopijuoja elementus, esančius 2, 3, 4 gylyje. Jų darbą galima paaiškinti šiais pavyzdžiais:

C2 C4

Taip pat yra CT komanda, skirta kopijuoti elementą, esantį kamino viršuje nurodytame gylyje. Atlikdamas KT, procesorius pašalina viršutinį elementą iš krūvos, naudoja jo reikšmę kaip nukopijuoto elemento gylio indikatorių ir pastarojo kopiją įstumia į krūvą. Taigi, 5 gylyje esančio elemento kopijavimas nurodomas 5 CT komandų pora, kurias vykdydamas procesorius nustums skaičių 5 į krūvą ir įvykdys CT komandą. CT vykdymas su parametrais 1, 2, 3, 4 prilygsta komandoms C, C2, C3, C4 atitinkamai.

Keitimosi komandomis E2, E3, E4 (Keisti) pirmasis (viršutinis) krūvos elementas atitinkamai perskirstomas į 2, 3, 4, t. y. elementą, esantį 2, 3, 4 gylyje. Pavyzdžiui:

E3 E2

Norėdami keistis į didesnį gylį, naudokite ET komandą, kuri, kaip ir CT, naudoja krūvos viršaus reikšmę kaip elemento, kuris keičiamas su pirmuoju elementu, gylio rodiklį. Pavyzdžiui:

5 ET

ET komanda su 2, 3, 4 parametrais yra lygiavertė komandoms E2, E3, E4.

Norėdami iliustruoti kopijavimo ir bendrinimo komandų naudojimą, apsvarstykite mokymosi užduotį. Ant krūvos pateikti trys skaičiai. Privaloma gauti ant rietuvės: . Galite pasiūlyti tokią programą, kurios prasmė aiški iš komentarų.

C3 C3 C3+

E4+E4

Šis pavyzdys gerai parodo, koks svarbus yra komentarų vaidmuo, atspindintis operandų krūvos būseną.

Programose dažnai reikia palyginti skaitines reikšmes tarpusavyje ir atlikti įvairias procedūras, priklausomai nuo palyginimo rezultatų. RAYA kalba turi palyginimo komandas<, =, >. Jie apibrėžiami skaičiais ir dėl to gaunamos skaitinės reikšmės 0 ir 1. Taigi, komanda< потребляет из стека два элемента и засылает в стек число 1, если значение нижнего элемента оказалось меньше значения верхнего, а в противном случае засылает 0. Например, в результате выполнения последовательности 5 -20 < в стек будет заслан 0. Команда = засылает 1 в случае равенства потребленных ею элементов. Команда >siunčia 1, kai apatinis elementas yra didesnis nei viršutinis. Norint užprogramuoti negriežtus palyginimus (mažiau arba lygūs, didesni arba lygūs), naudojama NOT instrukcija, kuri krūvos viršuje esančią reikšmę, kuri nėra lygi nuliui, pakeičia nuliu, o lygi nuliui – vienetu. Pavyzdžiui, loginės išraiškos x>=5, kur x yra koks nors skaičius, esantis krūvos viršuje, įvertinimas gali būti nurodytas taip:

[x] 5< NOT

Tolesnis sąlygų programavimo galimybių išplėtimas užtikrinamas naudojant kartu su palyginimo komandomis logines konjunkcijos & (loginis AND) ir disjunkcijos &0 (loginis ARBA) operacijas. Tarkime, kad jūs norite gauti 1 krūvoje, jei skaičius x viršūnėje priklauso pusei segmento C 5< NOT C2 10 <

&E2 2 = &0

Programos valdikliai, priklausantys nuo palyginimo rezultatų, bus aptarti vėliau.

Procedūrų apibrėžimas

Kaip pagrindinė programavimo technika, DSSP suteikia vartotojui galimybę apibrėžti įvardintas operacijų sekas, vadinamas procedūromis. Pavyzdžiui, reikia apskaičiuoti kvadratinio trinalio 3*x**2-4*x+9 reikšmes nurodytoms x reikšmėms. Tokiu atveju turėtumėte apibrėžti procedūrą, kuri įgyvendina trinario formulę ir išveda rezultatą į terminalą, o tada pritaikykite šią procedūrą konkrečioms x reikšmėms. Reikalinga procedūra, pavadinkime ją PX, apibrėžiama taip: PX [x] C 3 * 4 - * 9 + . D ; Dvitaškis nurodo operaciją „apibrėžti procedūrą“, o po procedūros pavadinimo yra dvitaškis po skiriamojo tarpo. Apibrėžiančioji komandų seka (procedūros dalis) yra po procedūros pavadinimo ir baigiasi kabliataškiu. Trumpai tariant, procedūra apibrėžiama tokia forma:

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

RAYA kalba reikalauja komentuoti operandų krūvos būseną procedūros pradžioje ir pabaigoje. Procedūros tekste komentarai pateikiami programuotojo nuožiūra sunkiai suprantamose vietose.

Komentarai padeda žmonėms suprasti ir naudoti procedūrą; procesorius tiesiog nepaiso nieko, kas yra skliausteliuose. Todėl iš terminalo įvedant individualios procedūros apibrėžimą, komentarų galima praleisti.

Įvedus procedūros apibrėžimą ir paspaudus mygtuką procesorius informuojamas apie įvesties pabaigą, terminalo ekrane pasirodo žvaigždutė, signalizuojanti komandos „apibūdinti procedūrą“ vykdymą ir procesoriaus pasirengimą tęsti dialogą. Dabar galite taikyti PX procedūrą klaviatūroje nurodytoms x reikšmėms, pavyzdžiui, 2, 3, 4 (procesoriaus sukurtas pabrauktas):

* 2 pikseliai 13

*3 PX 24

* 4 pikselių 41

Apibrėžkime bendresnę a2*x**2+a1*x+a0 formos trinario apskaičiavimo tvarką, kuri leidžia nurodyti ir x, ir a0, a1, a2 reikšmes. Pavadinkime tai PXA:

: PXA C E4 E3 * + * + ;

Naudojant PXA, vertės a0, a1, a2, x turi būti reikiama seka krūvoje. Pavyzdžiui: a0=1, a1=2, a2=-3, x=4

* 1 2 - 3 4 PXA . D -39

Procedūros turinyje kartu su pagrindinėmis procesoriaus operacijomis gali būti vartotojo apibrėžtų procedūrų. Pavyzdžiui, galite apibrėžti procedūrą P, kuri, be PXA atliekamų skaičiavimų, išspausdins rezultato kopiją į terminalą ir pašalins rezultatą iš kamino.

:PXA. D ;

Visų pirma, procedūros turinys gali apimti pačios apibrėžiamos procedūros pavadinimą, tai yra, procedūra gali būti rekursinė. Pavyzdžiui:

: LAIKAS [t] 1- TIME ;

Ši procedūra sumažina krūvos viršaus reikšmę 1 ir vėl nurodo save, t. y. ji veikia kaip laiko skaitiklis.

LAIKO skaitiklis iš principo negali sustoti: procesoriui veikiant vieno atėmimo procedūra bus atliekama vėl ir vėl. Tačiau DSSP yra įrankių, leidžiančių kontroliuoti proceso eigą priklausomai nuo gautų rezultatų – programos eigos valdymo operacijos.

Sąlyginis vykdymas ir pakartojimas

Programa, kuri yra komandų seka, vykdoma tokia tvarka, kokia jos pasirodo viena po kitos, vadinama tiesine. Kad programa būtų lengvai matoma (perskaitoma) ir suprantama, ji suskirstyta į įvardintas dalis, turinčias tam tikrą reikšmę – procedūras, kurių kiekviena apibrėžiama sava procedūrų seka, kurios savo ruožtu apibrėžiamos mažesnių procedūrų sekomis ir pan. procedūroms, kurias tiesiogiai nustato DSSP komandų sekos. Tokia programa, parašyta kaip procedūrų apibrėžimų hierarchija, vadinama struktūrizuota. Struktūrinės programos konstravimo metodas, kurį sudaro sprendžiamos problemos laipsniškas skaidymas į vis mažesnes dalis, vadinamas struktūriniu programavimu.

Sukurti ne tik linijines, bet ir bet kokias programas naudojant struktūrinio programavimo metodą galima, jei yra procedūros atlikimo pagal sąlygą, procedūros kartojimo ir išėjimo iš kartotinės procedūros operacijos. Tokio tipo komandų rinkinys, esantis DSSP, suteikia galimybę struktūriškai sukurti savavališką programą.

Procedūros vykdymo ar nevykdymo sąlygos suformuluotos atsižvelgiant į skaičiaus ženklą, tiksliau, atsižvelgiant į vertės ženklą, kurį šiuo metu turi krūvos viršus. Pagrindinė sąlyginių procedūrų vykdymo komanda – BRS (BRanch on Sign) nurodo atlikti vieną iš trijų procedūrų, pavadintų BRS vardu, priklausomai nuo krūvos viršaus esamos reikšmės ženklo. Vykdydamas BRS, procesorius pašalina viršutinį elementą iš kamino, patikrina jo reikšmę ir, jei ji yra neigiama, atlieka pirmąją iš šių procedūrų, jei lygi nuliui, tada antrą, o jei teigiama, tada trečias. Taigi komanda

bus pašalintas vienas elementas iš kamino, o procedūra N bus vykdoma, jei pašalinta reikšmė yra neigiama, procedūra P bus vykdoma, jei ji teigiama, ir procedūra Z bus vykdoma, jei ji yra nulis.

BRS komandos naudojimo pavyzdys yra toks SGN procedūros apibrėžimas

: SGN [X] BRS -1 0 1 ;

Ši procedūra pakeičia X reikšmę krūvos viršuje skaičiumi -1, jei X<0, числом 0, если X=0, и числом 1, если X>0. SGN procedūra galima DSSP kaip pagrindinė procesoriaus operacija.

BRS komanda kartu su vienos procedūros pasirinkimu iš trijų duomenų suteikia galimybę įgyvendinti dviejų reikšmių IF-THEN ir IF-THEN-ELSE formų sakinius. Pavyzdžiui, sakinys, jei x>0, tada P1 else P0 atitinka komandą BRS P0 P0 P1, o sakinys, jei x<>0, tada P - komanda BRS P NOP P, kurioje NOP yra tuščios operacijos pavadinimas. Tačiau DSSP yra efektyvesnis dviejų reikšmių sąlygų įgyvendinimas - komandos IF-, IF0, IF+, BR-, BR0, BR+.

IF grupės komandos atitinka IF-THEN sakinį. Pavyzdžiui, komanda IF-P nurodo pašalinti viršutinį elementą iš krūvos ir patikrinti jo ženklą, o jei šis elementas turi minuso ženklą, tada vykdyti procedūrą P. IF0 P ir IF+ P komandos nurodo atitinkamai vykdyti procedūrą P. , tuo atveju, kai pašalintas elementas yra lygus nuliui, ir tuo atveju, kai jo reikšmė yra teigiama.

Kaip pavyzdį, iliustruojantį IF grupės komandų naudojimą, pateikiame komandos apibrėžimą ABS bazine kalba, kuri apskaičiuoja krūvos viršaus modulį.

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

Komandos BR-, BR0 ir BR+ atitinka sakinį IF-THEN-ELSE, nurodydamos pasirinkti vieną iš dviejų procedūrų, pavadintų jomis. Jei elemento, pašalinto iš kamino, ženklas sutampa su komandos žymėjimu, tada atliekama procedūra, pavadinta pirma, o jei ji nesutampa, vykdoma antra procedūra. Pavyzdžiui, komanda BR0 P0 P1 nurodo atlikti procedūrą P0 tuo atveju, kai elementas, pašalintas iš kamino, yra lygus nuliui, o jei ši sąlyga netenkinama, tada atlikti procedūrą P1.

Apsvarstytos komandos leidžia ekonomiškai užprogramuoti procedūros vykdymą priklausomai nuo šių sąlygų. Dažniausios formos x sąlygos<0, x=0, x>0 yra tiesiogiai įgyvendinami IF grupės instrukcijomis. Sąlygos x<=0, x<>0, x>=0 užprogramuojami naudojant instrukcijas BR-, BR0, BR+, naudojant tuščią NOP operaciją kaip pirmą procedūrą. Pavyzdžiui, jei x sąlyga<=0 then P соответствует команда BR+ NOP P. Примером использования команд группы BR может служить следующая реализация команды базового языка NOT, заменяющей нулевое значение вершины стека единицей, а ненулевое - нулем.

: NE [x] BR0 1 0 ;

Programos šakojimas dažnai atliekamas po palyginimo komandų (<, =, >), sukuriant loginę reikšmę 1 arba 0, priklausomai nuo dviejų skaičių palyginimo rezultato. Pavyzdžiui, MAX pagrindinės kalbos komandą galima užprogramuoti taip:

: MAX C2 C2< IF+ E2 D ;

Į šakojimosi komandų grupę taip pat įeina BR pasirinkimo komanda, parašyta tokia forma:

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

Įgyvendindamas šią instrukciją, procesorius pirmiausia vykdo rodyklės procedūrą A1 ir lygina reikšmę, kurią jis nustūmė į krūvą, su reikšme po juo iš ankstesnio krūvos viršaus. Jei reikšmės sutampa, tada du viršutiniai elementai pašalinami iš krūvos ir vykdoma procedūra P1, susieta su rodykle A1, po kurios pereinama prie BR nurodymo sekančios instrukcijos (t. y. aukščiau pateiktame užraše vieną po žodžio P0 programos tekste). Jei palygintos reikšmės nesutampa, tada viršutinis elementas pašalinamas iš krūvos (ty A1 rezultatas) ir tie patys veiksmai atliekami su pora A2 P2, tada, jei nėra atitikimo, tada su pora A3 P3 ir kt. iki AN PN imtinai. Jei nė vienas bandymas nesutampa, vykdoma P0 procedūra, pavadinta žodžiu ELSE. Paprastai skaitinės konstantos veikia kaip rodyklės procedūros, pavyzdžiui:

[x] C BR 5 NEG -3 ABS 0 NE KITA T0 [y]

Vykdant šią eilutę, krūvos viršuje bus gauta reikšmė y=-5, jei x=5; y = 3, jei x = -3; y=1, jei x=0 ir y=0 visais kitais atvejais.

Apskritai rodyklės procedūra gali būti ne tik skaitinė konstanta, bet ir kintamasis arba bet kuri kita procedūra, kuri tenkina paprastą reikalavimą, kad ji nieko neišstumtų iš krūvos ir įstumtų vieną reikšmę į krūvą.

Norėdami parodyti, kaip naudojamos sąlyginės procedūros vykdymo operacijos, pakeiskime procedūrą TIME ankstesniame skyriuje, kad skaitiklis sustotų, kai įvyksta nurodyta sąlyga:

: LAIKAS [t] 1- C JEI+ LAIKAS ;

Dabar ši TIME procedūra išsikviečia tik tada, kai krūvos viršus yra teigiamas. Skaitiklis veiks tiksliai N kartų, jei pirmojo TIME vykdymo pradžioje viršūnėje yra teigiamas skaičius N. Pavyzdžiui, norint gauti 7 operacijas, reikia nustatyti

7 KATAS<ВК>

Kadangi IF+ TIME apibrėžime, kaip ir bet kuri sąlyginė operacija, bandomą elementą pašalina iš kamino, o šis elementas yra būtinas tolimesnėms operacijoms, jį reikia dubliuoti, prieš IF+ įdedant operaciją C (Copy).

Rekursija nėra pagrindinis būdas atlikti procedūrą kelis kartus. Programuoti ciklus PARA kalba yra komandos RP (Pakartokite - kartokite) ir DO (Do - do, execute).

RP W komanda nurodo atlikti W procedūrą vėl ir vėl neribotą skaičių kartų. Kad pasikartojimai nutrūktų, procedūros W korpuse turi būti EX (Išeiti) operacija, kuri vykdoma tam tikromis sąlygomis. EX operacija pereina prie procedūros, kuri programos tekste seka pakartotinę procedūrą su šia EX operacija. Taigi skaitiklis, įdiegtas aukščiau kaip rekursinė procedūra TIME, gali būti užprogramuotas taip, kad kartotų W procedūrą, kuri apibrėžiama taip:

: W [t] 1- C IF0 EX ;

Kad skaitiklis veiktų 25 kartus, turite įvykdyti eilutę

Kartu su EX operacija, kuri naudojama sąlyginio vykdymo komandose, yra sąlyginės išėjimo operacijos EX-, EX0, EX+, kurios sukuria tokį patį poveikį kaip ir komandos IF-EX, IF0 EX, IF+ EX, t.y. sunaudoja viršutinį elementą. , išbandydamas savo ženklą ir išeidamas, jei ženklas atitinka nurodytą operacijos pavadinime. Operacijos EX, EX-, EX0, EX+ gali būti naudojamos nebūtinai pačios kartojamos procedūros turinyje (mūsų atveju W), bet ir procedūrose, į kurias ji kalba.

Kaip pavyzdį apsvarstykite dviejų natūraliųjų skaičių didžiausio bendro daliklio radimo Euklido metodu problemą. Metodo esmė ta, kad iš didesnio skaičiaus reikia atimti mažesnį skaičių, kol skaičiai taps lygūs vienas kitam. Pasiekus lygybę, bus rastas didžiausias bendras daliklis.

Programavimas bus vykdomas kūrimo metodu „iš viršaus į apačią“. Pirmiausia apibrėžiame GCD procedūrą, kuri užfiksuoja bendrą algoritmo schemą. Šios procedūros parametrai yra du skaičiai M ir N ant krūvos, kuriems randamas didžiausias bendras daliklis. GCD procedūros turinys turi nurodyti ciklinį dėklo verčių konvertavimo procesą. Dėl šio proceso krūvoje turėtų likti du vienodi skaičiai - bet kuris iš jų gali būti laikomas didžiausiu bendruoju dalikliu. Atsižvelgiant į šias aplinkybes, GCD procedūrą galima apibrėžti taip.

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

Dabar reikia užprogramuoti vieną iteracinio proceso žingsnį, t.y. apibrėžti STEP procedūrą. Jo parametrai yra du skaičiai ant krūvos. Turite palyginti šiuos skaičius ir išeiti iš kilpos, jei jie yra lygūs, priešingu atveju atimkite mažesnį iš didesnio. Tai galima padaryti, pavyzdžiui, taip:

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

Dabar programoje neliko neapibrėžtų procedūrų ir galite pradėti ją tikrinti. Patikrinimas turėtų būti atliekamas iš apačios į viršų, t.y. pirmiausia turite įsitikinti, kad STEP procedūra veikia tinkamai ir tik tada - GCD.

Atlikus pagrindinės kalbos DO operaciją, jos vardu pavadinta procedūra pakartojama N kartų, kur N yra skaičius, esantis krūvos viršuje tuo metu, kai vykdoma DO. Pavyzdžiui, norint, kad procedūra P būtų vykdoma 8 kartus, reikia nustatyti

8 DO P

Jei procedūros P korpuse yra bent viena išėjimo operacija ir jos vykdymo sąlyga įvykdoma prieš įvykstant nurodytam pakartojimų skaičiui, pasikartojimai bus nutraukti išėjus iš procedūros tokiu pačiu būdu, kaip tai daroma operacija RP. Pavyzdžiui, kai DO pakartoja aukščiau pateiktą W procedūrą, kurios apibrėžime yra IF0 EX, parašius [T] 30 DO W, W pakartos 30, jei reikšmė T>=30. Jei 0

Jei iki DO operacijos vykdymo krūvos viršuje yra nulis arba neigiama reikšmė, tada DO procedūra nebus vykdoma net vieną kartą.

Norėdami iliustruoti DO operacijos naudojimą, apibrėžiame procedūrą NUM, kuri skaičiuoja nenulinių bitų skaičių 32 bitų žodyje x, pateiktame krūvos viršuje.

Vienetų skaičiaus skaitiklį pastatysime krūvos posūkyje. Skaičiavimo vienetai susideda iš NUMI procedūros pakartojimo 32 kartus, kai išnagrinėsime vieną žodžio x bitą. Išėjus iš kilpos, reikiamas skaičius turėtų būti krūvos viršuje.

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

Norėdami suskaičiuoti nulinius bitus, naudojame faktą, kad vienas reikšmingiausiame (31-ame) žodžio bite yra neigiamo skaičiaus ženklas. Jei tiriamas žodis yra neigiamas, jį reikia pridėti prie N. Pasibaigus NUMI procedūrai, tiriamą žodį reikia perkelti vienu bitu į kairę.

: NUMI C IF- N+ SHL ;

N+ procedūros įgyvendinimas yra gana paprastas: reikia pridėti vieną prie krūvos apatinės dalies, nekeičiant viršaus.

: N+ E2 1+ E2 ;

Pasikartojančiose procedūrose gali būti atliekamos RP ir DO operacijos, kurios veda į įdėtas kilpas, todėl leidžiamas bet koks įdėjimo gylis. Šiuo atveju atliekama EXT operacija, skirta išeiti iš įdėtos kilpos, nurodanti įdėjimo gylį krūvos viršuje. Pavyzdžiui, išėjimas iš dviejų įdėtų kilpų gali būti nurodytas taip:

Reikėtų nepamiršti, kad naudojant komandą EXT reikia daugiau atsargumo, nes keičiant programą gali pasikeisti kilpų įdėjimo gylis ir reikės pakeisti atitinkamą konstantą prieš EXT.

Vardiniai duomenys

Operandų krūva yra pagrindinis, bet ne vienintelis DSSP duomenų manipuliavimo mechanizmas. Taip pat kartu su procedūrų apibrėžimais galima deklaruoti elementus ir standartiškai organizuotus duomenų elementų rinkinius (vadinamus struktūras), kuriuos vėliau galima naudoti savo pavadinimais. Įdiegęs duomenų deklaracijas, procesorius rezervuoja joms saugoti reikalingą atmintį ir suteikia reikalingus šios atminties prieigos mechanizmus.

Pagrindinėje DSSP kalboje yra keletas toliau aptartų direktyvinių žodžių, skirtų kintamiesiems ir masyvams deklaruoti. Siekiant išplėsti sistemos kalbą, į ją galima įvesti kitus tokio pobūdžio žodžius ir atitinkamai kitus elementus bei duomenų struktūras.

Žodis VAR deklaruoja 16 bitų skaitmeninį kintamąjį. Pavyzdžiui, įrašyti

deklaruoja kintamąjį X, tai yra, jis nurodo procesoriui, kad pavadinimas X yra kintamojo pavadinimas. Procesorius su šiuo pavadinimu susieja 16 bitų atminties langelį, kuriame bus saugoma šio kintamojo reikšmė. Instrukcija, kaip priskirti kintamąjį X vertei, esančiai operandų krūvos viršuje, turi tokią formą

Vykdydamas šią komandą, procesorius pašalina viršutinį elementą iš krūvos ir įrašo jo reikšmę į langelį, skirtą kintamajam X.

Komanda, kurią sudaro tik kintamojo pavadinimas, be raidės !, šio kintamojo reikšmė perkeliama į krūvą, o stūmimas atliekamas nukopijuojant atitinkamos atminties langelio turinį, t.y. kintamasis lieka nepakitęs. Taigi, bet koks kintamojo pavadinimo X įvykis programoje, nebent prieš jį būtų žodis, nurodantis kitą veiksmą, dabartinė šio kintamojo reikšmė bus perkelta į krūvą, kaip ir tiesiogiai pateikti skaičiai (skaitiniai literalai) yra įstumiami į krūvą. .

Kaip pavyzdį pateikiame kitą aukščiau aptartą GCD procedūros versiją, kurioje naudojami du darbiniai kintamieji.

: NAD! X! Y RP X ŽINGSNIS [GCD] ;

: ŽINGSNIS X Y = EX+ X Y BR+ X-Y Y-X ;

: X-Y X Y - ! X ;

: Y-X Y X - ! Y ;

Kaip matote, programa šiek tiek pailgėjo, tačiau jos matomumas išaugo.

Žodis VCTR deklaruoja vienmatį 16 bitų langelių masyvą (vektorių), kurio didžiausio šio masyvo elemento skaičius nurodomas viršūnės verte. Pavyzdžiui, dėl įrašymo

9 VCTR ROW, procesorius rezervuoja 10 nuosekliai adresuojamų 16 bitų atminties žodžių, sudarydamas ROW(0:9) vektorių. Pirmiausia skaičius 9 įstumiamas į krūvą, o tada vykdoma VCTR procedūra, naudojant viršutinį krūvos elementą, kad būtų nustatytas kuriamo ROW vektoriaus ilgis.

Stumiant j-ojo ROW vektoriaus elemento reikšmę į krūvą, 0<=j<=9, задается командой

[j]EILUTĖ

Naudojant elemento numerį krūvoje kaip parametrą, ROW vektoriaus pavadinimas priverčia tą skaičių pakeisti atitinkamo elemento reikšme. Jei žodis! yra prieš pat vektoriaus ROW pavadinimą, tada viršūnės nurodytam šio vektoriaus elementui priskiriama poviršio reikšmė, o krūvos gylis sumažinamas 2. Pavyzdžiui, galite iš naujo nustatyti 5-asis ROW vektoriaus elementas yra toks:

Taip pat galima jungti pastovius vektorius, t.y. 16 bitų skaičių vektoriai, kurių reikšmės nustatomos paskelbus ir vėliau nesikeičia. Taigi, 16 bitų konstantų VC, kurių ilgis L+1, vektorius deklaruojamas naudojant žodį CNST tokia forma:

CNST VC k0 k1 ... kL ;

kur k0, k1, ... kL yra komandos, kurios stumia vieną reikšmę į krūvą. Dažniausiai tai yra tik skaitiniai literalai, tačiau gali būti ir kintamųjų pavadinimų, procedūrų, taip pat komandų, susidedančių iš žodžių porų, pavyzdžiui, toliau aptariama kintamojo „X“ adreso siuntimo komanda. Prieiga prie pastovaus vektoriaus elementų atliekama taip pat, kaip ir prie įprastų vektorių komponentų. Pavyzdžiui:

Daugiamatis 16 bitų žodžių masyvas deklaruojamas naudojant žodį ARR, prieš kurį nurodomos didžiausios kiekvieno dimensijos indekso vertės ir matmenų skaičius. Pavyzdžiui, trimatis masyvas TIR(0:8,0:2,0:24) deklaruojamas taip:

Skaičius 3 prieš pat ARR rodo deklaruojamo masyvo dydį.

Masyvo elementas įstumiamas į krūvą, nurodant to elemento indeksą ir masyvo pavadinimą. Pavyzdžiui, komanda elementą TIR(0,2,2) nustumti į krūvą išreiškiama kaip

Atitinkamai, šiam elementui priskiriant esamą krūvos viršaus reikšmę, nurodoma komanda

Visi nagrinėjami pavyzdžiai iliustravo struktūrų kūrimą iš 16 bitų žodžių. Tačiau kalba taip pat leidžia apibrėžti 32 bitų žodžių ir 8 bitų baitų struktūras. Norėdami tai padaryti, prieš žodį, apibrėžiantį struktūrą, atitinkamai dedamas priešdėlis LONG arba BYTE. Pavyzdžiui,

5 BYTE VCTR X - 6 komponentų baitų vektoriaus X apibrėžimas;

BYTE CNST Y 65 66 67 ; - 3 komponentų baitų vektoriaus konstantos Y apibrėžimas;

10 20 2 LONG ARR MTRX - ilgų žodžių matricos apibrėžimas MTRX(0:10,0:20).

Žodžių ir baitų struktūrų elementų skaitymas atliekamas taip pat, kaip ir 16 bitų žodžių struktūrų atveju. Jei elemento ilgis yra mažesnis nei 32 bitai, gaunama reikšmė dedama į žemesnįjį žodį arba baitą krūvos viršuje, o viršutinė dalis nustatoma į nulį. Žodžio ar baitų struktūros elementui priskirta reikšmė taip pat yra 32 bitų ilgio žodžio, esančio krūvoje, žemas žodis arba baitas.

Nors pagal numatytuosius nustatymus apibrėžiant duomenis naudojamas 16 bitų žodžio formatas, jis taip pat turi žymėjimą WORD. Patartina naudoti šį prefiksą, kai programą ketinama perkelti į kitus įrenginius, kuriuose taip pat įdiegtas DSSP ir numatytasis parametras gali skirtis.

Baitų duomenų struktūros dažniausiai naudojamos tekstinei informacijai saugoti ir apdoroti. Tai paaiškinama tuo, kad vienam simboliui koduoti kompiuterio atmintyje skiriamas vienas baitas. Simbolių kodams nurodyti RAYA kalba yra konstrukcija #l, kur l yra bet koks kompiuterio klaviatūros simbolis. DSSP procesorius suvokia šią konstrukciją kaip komandą įstumti l raidės kodą į krūvą. Pavyzdžiui:

Ši konstrukcija atlieka tuos pačius veiksmus, kaip ir skaitinis pažodinis, lygus nurodytos raidės kodui, tačiau jo naudojimas yra labiau pageidautinas, nes, pirma, jis išlaisvina jus nuo būtinybės atsiminti kodus ir, antra, programas daro labiau suprantamas. Konkrečiai, galime pateikti tokį pastovaus vektoriaus Y apibrėžimą:

BYTE CNST Y #A #B #C ;

Dažnai programoje patogu naudoti simbolinę skaitinės konstantos žymėjimą. Norint suteikti šią galimybę, yra kvalifikatorius VALUE:

Ši komanda iškelia viršutinį elementą iš krūvos ir sudaro žodį, kurio pavadinimas iškart po VALUE. Šio žodžio vartojimas prilygsta skaitinės konstantos vartojimui. Pavyzdžiui:

Darbas su atmintimi pagal fizinius adresus

Nagrinėjami įrankiai suteikia galimybę pavadinti duomenis ir manipuliuoti duomenimis nepriklausomai nuo kompiuterio adresų sistemos. Tačiau pagrindinėje kalboje taip pat yra įrankių, leidžiančių manipuliuoti atminties elementų adresais. Kintamojo arba masyvo elemento X adresas įstumiamas į krūvą su komanda

Masyvo elemento atveju prieš šią komandą nurodoma indekso (-ų) reikšmė.

Pagrindinės kalbos @ komanda pakeičia ilgo atminties žodžio viršutinės dalies adresą reikšme, kurioje yra tas žodis. Pavyzdžiui, kintamojo Y reikšmė gali būti įstumta į krūvą vykdant šią eilutę:

@B instrukcija pakeičia adresą atitinkamo baito reikšme, aukštus baitus krūvos viršuje nustatydama į nulį, o @L instrukcija pakeičia adresą 32 bitų žodžiu.

Taip pat yra komandos, skirtos įrašyti reikšmes į atmintį. Instrukcija!T įrašo 16 bitų antrinės dalies reikšmę į adresą, pašalintą iš kamino viršaus. Komanda!TB sukelia panašų poviršio žemojo baito įrašymą į viršūnės adresuotą baitą, o!TL įrašo 32 bitų poviršio žodį į viršūnės adresuotą žodį. Pavyzdžiui, penktajam baitų vektoriaus BV(0:5) elementui galite priskirti reikšmę 15 šiomis komandomis:

15 5" BV!TB

Poreikis dirbti su atmintimi fiziniais adresais dažniausiai iškyla kuriant programas, kurios priklauso nuo konkretaus kompiuterio architektūros, pavyzdžiui, kuriant I/O tvarkykles.

Papildomos operacijos su duomenimis ir atmintimi

Siekiant didesnio programų efektyvumo ir kompaktiškumo, į PARA kalbą įvestos šios operacijos:

0 <имя переменной>- iš naujo nustatyti kintamąjį;

1 <имя переменной>- kintamajam priskirti vienetą;

1- <имя переменной>- sumažinti kintamojo reikšmę vienu;

1+ <имя переменной>- padidinti kintamojo reikšmę vienu;

!- <имя переменной>- iš kintamojo atimkite krūvos viršaus reikšmę;

!+ <имя переменной>- prie kintamojo pridėkite krūvos viršaus reikšmę.

Kiekviena iš šių operacijų yra lengvai užprogramuojama naudojant kintamąsias skaitymo ir rašymo komandas. Pavyzdžiui,

0 X yra lygus 0! X

1+ X atitinka X 1+! X

X yra lygiavertis X E2 - ! X

Šių operacijų naudojimas padidina programų efektyvumą ir matomumą.

Praktikoje dažnai norima priskirti vieną reikšmę visiems masyvo elementams. Tam tikslui yra operacija ROJAUS kalba!!!<имя массива>. Jo poveikis yra priskirti krūvos viršaus reikšmę visiems nurodyto masyvo komponentams. Operacija!!! taikomas masyvams su bet kokio formato elementais.

Naudojimo pavyzdys:

Erdvės kodas įrašomas į visus BUF baitų masyvo komponentus.

Dažnai reikia gauti informacijos iš programos apie duomenų struktūrą, esančią už pavadinimo. Tam yra keletas SIZE komandų? - rodyti duomenų elemento formatą: 1, 2 arba 4 baitai ir DIM? - rodyti duomenų elementų skaičių struktūroje. Pavyzdžiui, jei duomenys deklaruojami

3 4 2 ILGAS ARR Z

tada, kai joms bus pritaikytos šios komandos, bus pateiktas toks rezultatas (dešimtainiai skaičiai):

DYDIS? X DYDIS? Y DYDIS? Z

DIM? X DIM? Y DIM? Z

DSSP procesoriaus komandų rinkinį sudaro keturios komandos, leidžiančios nuskaityti ir įrašyti atskirus kompiuterio atminties elementų bitus. Tai yra komandos @BI, !BI, !BI0, !BI1. Kiekvieno iš jų parametrai yra krūvoje esančio atminties žodžio adresas ir šio žodžio bito numeris (atminkite, kad bitai numeruojami iš dešinės į kairę, pradedant nuo nulio). Komanda!BI taip pat daro prielaidą, kad krūvoje yra bitų reikšmė, kurią reikia įrašyti. Komanda @BI pakeičia nurodytus parametrus pasirinkto bito reikšme (0 arba 1), komandos!BI0 ir!BI1 nustato pasirinktą bitą atitinkamai į 0 ir 1, pašalindamos jų parametrus iš krūvos, o!BI komanda nustato pasirinktą bitą į mažiausiai reikšmingo trečiojo krūvos elemento bito reikšmę ir pašalina visus tris jo parametrus iš krūvos. Pavyzdžiui, jei kintamojo X reikšmė yra dvejetainis skaičius 101101, tada išvardytų operacijų rezultatai bus tokie:

" X [add.X] 3 @BI - trečiasis X bitas, 0 " X 3 !BI - X yra 100101,

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

" X [add.X] 1 !BI1 - X yra lygus 100110.

PARA kalba taip pat turi įrankių, skirtų darbui su atmintyje esančiomis baitų eilutėmis. Norėdami nurodyti baitų eilutę, į krūvą įstumiami du parametrai: eilutės pradžios adresas (ty pirmojo baito adresas) ir eilutės ilgis (baitų skaičius joje).

Komanda!!!MB naudojama visiems eilutės baitams priskirti vieną reikšmę (nurodyta krūvoje). Tai sunaudoja tris krūvos parametrus: , kur b yra priskirta reikšmė, a ir l yra atitinkamai pradinis adresas ir baitų eilutės ilgis. Pavyzdžiui, reikia iš naujo nustatyti elementus nuo 3 iki 10 baitų masyvo TXT(0:20). Norėdami tai padaryti, galite atlikti šią eilutę:

0 3 "TXT 8!!!MB

dėl to aštuoni iš eilės einantys nurodyto masyvo elementai, pradedant nuo 3-iojo, gaus reikšmę 0. Panaši komanda!!!MW skirta užpildyti 16 bitų žodžių seką ta pačia reikšme (žodžių skaičiumi yra nurodyta krūvos viršuje), o komanda! !!M - užpildyti ilgų žodžių seką.

Komanda!SB atlieka baitų eilutės perdavimą. Jo parametrai yra: , kur a1 ir l yra persiųstos eilutės pradžios adresas ir ilgis, a2 yra eilutės, į kurią atliekamas persiuntimas, pradžios adresas. Vykdant komandą!SB, atmintyje bus l ilgio baitų eilutė iš adreso a2, kuri yra tiksli eilutės, esančios adresu a1 prieš atliekant perdavimą, kopija. Šaltinio ir paskirties eilutės gali sutapti. Pavyzdžiui, baitų masyvo M(0:10) elementus norite perkelti taip: M(10):=M(9), M(9):=M(8), ..., M(1):= M(0). Norėdami tai padaryti, galite naudoti komandą !SB:

0 " M 10 C2 1+ !SB

Dėl to 10 baitų eilutė bus perkelta vienu baitu, kad padidėtų atminties adresai.

Komanda!SB patogi dirbant su simbolių krūvomis (atminkite, kad kiekvienas simbolis yra užkoduotas vienu baitu). Tai leidžia, pavyzdžiui, baitų masyvei priskirti aiškiai nurodytos pažodinės eilutės reikšmę. Norėdami nurodyti tokią eilutę, naudokite tekstinį literalą, t.y. simbolių seka kabutėse, pavyzdžiui, "TEXT LITERAL". Ši konstrukcija, kai ji aptinkama programoje, baitų eilutės, kurioje yra cituojamas tekstas, pradžios adresas ir ilgis perkeliamas į krūvą. Šiuos parametrus gali naudoti komanda!SB. Pavyzdžiui, fragmentas "LENTELĖ" 0 " TN !SB pažodinė "LENTELĖ" bus perduota į TN masyvą.

SRCHB komanda ieško nurodyto baito eilutėje. Parametrai: , kur b yra baitas, kurio pirmasis įvykis turi būti rastas, a ir n atitinkamai nurodo pradžios adresą ir eilutės, kurioje atliekama paieška, ilgį. Jei n>0, tada paieška vykdoma nuo adreso a iki adreso a+n-1 (adresų didėjimo kryptimi), jei n<0, то поиск ведется с адреса a до адреса a+n+1 (в сторону убывания адресов). В результате выполнения этой команды в стеке оказывается значение d, равное смещению относительно адреса a до первого вхождения байта b. Если такое вхождение не обнаружено, то d=n. Примеры:

#T „TEKSTAS“ SRCHB

#A „TEKSTAS“ SRCHB

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

Baigdami svarstymą apie darbo su duomenimis priemones, apsistokime ties duomenų saugojimu išorinėje kompiuterio atmintyje, t.y. magnetiniuose diskuose. PARA kalba yra komanda SAVE<имя файла>, kuri nurodo išsaugoti sistemos pagrindinės atminties kopiją diske kartu su vartotojo nustatytais objektais. Šiuo atveju atminties sritys, skirtos duomenims pagal VAR, VCTR, ARR operacijas, neišvedamos į diską. Dėl to, įkeliant išsaugotą sistemą iš disko, nurodytų duomenų reikšmės neapibrėžiamos (jos turi būti nustatytos programos vykdymo metu). Daugeliu atvejų tai pateisinama, nes nereikia eikvoti disko atminties darbiniams kintamiesiems, buferiams ir pan. Tačiau yra duomenų, kurių reikšmės turi būti nustatytos iškart paleidus sistemą iš disko. Pavyzdys yra kintamasis, kuriame saugomas duomenų apsikeitimo su kokiu nors išoriniu įrenginiu greitis. Perjungiant į kitą valiutos kursą, užtenka pakeisti šio kintamojo reikšmę neatliekant jokių programos taisymų.

Nurodymas procesoriui, kad tam tikros duomenų struktūros elementų reikšmės turi būti išvestos į diską naudojant komandą SAVE, yra priešdėlis FIX, dedamas prieš struktūros apibrėžimą, pvz.

FIX VAR SPEED 20 FIX BYTE VCTR LENTELĖ

Darbas su tokiu būdu apibrėžtomis duomenų struktūromis nesiskiria nuo darbo su įprastu būdu apibrėžtomis struktūromis.

Procesoriaus valdymo komandos

PARA kalba turi nedidelę komandų grupę, skirtą valdyti DSSP procesorių, tiksliau, DSSP procesoriaus emuliatorių.

Komanda RESTART iš naujo paleidžia procesorių. Tokiu atveju krūva išvaloma ir rodomas pranešimas

DSSP versija XX.XX.XX

Galima įsigyti XXXXXW

ir procesorius pereina į budėjimo režimą komandų įvedimui. Ši komanda gali būti naudinga derinant programas. Jis taip pat vykdomas, kai atsiranda klaidų: indeksas peržengia masyvo ribas, išeikvojama laisva atmintis ir pan.

Komanda \G naudojama tęsti programos vykdymą sustojus prie neapibrėžto žodžio. Jei vykdydamas procedūrą procesorius susiduria su nuoroda į neapibrėžtą žodį, jis pateikia pranešimą:

sustoti nežinau<слово> .

kur taškas yra DSSP procesoriaus raginimas, signalizuojantis, kad procesorius yra sustabdytas, kai neapibrėžtas žodis. Šiuo režimu galite vykdyti bet kokias procesoriaus komandas, kaip ir įprastu režimu, kai rodoma žvaigždutė. Yra du būdai išeiti iš šio režimo – arba vykdant komandą \G (tada procesorius ir toliau vykdys nutrauktą procedūrą, praleisdamas neapibrėžtą žodį), arba naudojant komandą RESTART.

Komanda EXEC nurodo procesoriui vykdyti procedūrą, kurios adresas yra krūvos viršuje. Norėdami gauti procedūros adresą, naudokite komandą "" (du apostrofus), po kurios nurodykite procedūros pavadinimą. Pavyzdžiui, dėl komandos vykdymo

ABS procedūros adresas bus įstumtas į krūvą. Šios komandos leidžia perduoti procedūrą kaip parametrą kitai procedūrai.

Procesoriaus valdymo komandų grupėje yra jau minėta SAVE operacija<имя файла>, kuri nurodo išsaugoti sistemos kopiją diske, taip pat komandas, kurios nustato tekstinės informacijos, tiekiamos į procesoriaus įvestį, įvesties šaltinį. Iš pradžių šis šaltinis yra ekrano klaviatūra.

LOAD komanda<имя файла>perjungia įvestį į disko failą nurodytu pavadinimu. PF komanda – nurodo įvesti komandas iš teksto rengyklės buferio. Komanda TEXEC į procesoriaus įvestį perduoda teksto eilutę, kurios parametrai nurodomi ant krūvos. Vykdant komandas, esančias nurodytuose šaltiniuose, įvestis automatiškai persijungia į ekrano klaviatūrą.

Žodyno valdymo komandos

Įvesties komandų sraute, kurį suvokia procesorius, visų pirma gali būti komandos, skirtos procedūroms ir duomenims apibrėžti, todėl procedūros korpusas sudaromas į vidinį atvaizdą ir saugomas arba skiriama atmintis nurodytiems duomenims, taip pat įvesti pavadinimą. sudarytos procedūros ar duomenų struktūros į DSSP žodyną.

Žodynas nustato atitikimą tarp išorinių (vartojamų programos tekste) pavadinimų ir šiuos pavadinimus atitinkančių objektų adresų vidinėje atvaizde. Tvarkydamas procedūros apibrėžimą ar įvardintų duomenų aprašą, tvarkytojas išplečia žodyną, sudarydamas jame naują žodyno įrašą, kuriame yra pavadinimas (tiksliau, pirmieji 7 pavadinimo ženklai) ir procedūros dalies adresas arba su šiuo pavadinimu susietas duomenų aprašas.

Programuojant iš viršaus į apačią, procedūrų dalyse gali būti nuorodų į dar neapibrėžtus objektus. Šiuo atveju žodyne formuojami žodyno įrašai (antraštės), pažymėti neapibrėžtumo ženklu. Norėdami ekrane rodyti visus neapibrėžtus vardus, naudokite komandą UNDEF.

Plečiant žodyną, galima formuoti požodynus – vardinius žodyno įrašų rinkinius. Požodynas paprastai sujungia procedūras ir duomenų struktūras, susijusias su ta pačia užduotimi. Kad požodynų ir kitų programos objektų pavadinimai nebūtų painiojami, požodyno pavadinimas turi prasidėti raide $. Prieiga prie antrinių žodynų, norint juos išplėsti ar naudoti, gali būti atidaryta ir uždaryta specialiomis komandomis, kurios apima šias komandas (vardas $v reiškia bet kokį galiojantį požodyną).

GROW $v - išplėskite $v subžodyną, tai yra, kol nenurodyta kitaip, į $v subžodyną įveskite visų sudarytų procedūrų ir duomenų pavadinimus;

USE $v - atviras naudojimui (vardų paieškai jame) subžodynas $v;

SHUT $v - uždaro galimybę naudoti požodyną $v;

ONLY $v - padaryti prieinamą tik subžodyną $v;

ATŠAUKTI – atšaukti TIK paskutinę.

Taip pat yra komanda?$, kuri ekrane atspausdina visų subžodynų pavadinimus ir jų būseną – ar subžodynas atidarytas ar uždarytas paieškai. Antraštinis žodynas, kurio pavadinimas spausdinamas viršuje, visada išplečiamas.

Pagrindinės DSSP procedūros sudaro antrinį žodyną pavadinimu $PRIME, pagal numatytuosius nustatymus atviras naudoti ir išplėsti, tai yra, jei nebuvo komandos, nurodančios išplėsti kitą antrinį žodyną.

Pavyzdžiui, naudokite operaciją?$, kad išspausdintumėte kitą subžodynų būseną.

$PRG atidaryta

$PRIME dirba

$EDIT uždaryta

$PRIME dirba

SISTEMA uždaryta

Tai reiškia, kad šiuo metu subžodynas $PRG yra atviras plėtrai ir naudojimui, $PRIME skirtas tik naudoti, o $EDIT ir SYSTEM nepasiekiami. Atminkite, kad požodyną gali sudaryti keli skyriai tais pačiais pavadinimais.

Yra komandos, skirtos ištrinti iš žodyno tam tikrą žodyno įrašų rinkinį ir, galbūt, su jais susijusius vidinius objektus. Taigi komanda FORGET $v ištrina visus vardus, įvestus į žodyną (ne tik $v subžodyną) nuo paskutinio komandos GROW $v vykdymo, kartu su šiais pavadinimais pažymėtais objektais ir atšaukia $v augimą. požodynas. Komanda PROGRAM $v atlieka tuos pačius veiksmus kaip FORGET $v GROW $v komandos, vykdomos nuosekliai. Tokios komandos buvimas bet kurios programos pradžioje lemia tai, kad perkompiliavus programą, senoji jos kopija bus ištrinta ir bus suformuotas subžodynas naujos programos kopijos objektams saugoti. Pavyzdžiui, atlikdami operaciją FORGET $PRIME žodyne, kurio būsena buvo parodyta aukščiau, gauname naują būseną:

$EDIT uždaryta

$PRIME dirba

SISTEMA uždaryta

Vykdant komandą FORGET, rodomi naikintinų sekcijų pavadinimai.

Atkreipkite dėmesį, kad SYSTEM subžodyno pavadinimas neprasideda raide $. Tai priimtina, tačiau tai lemia tai, kad komandų FORGET ir RPOGRAM taikymas šiam subžodynui nesukelia jokių veiksmų (atrodo, kad SISTEMA požodynas jiems neegzistuoja).

Dėl to, kad paruoštoje programoje didžiajai daugumai procedūrų prieiga išoriniu vardu nereikalinga, galima pašalinti jų pavadinimus iš žodyno išsaugant su jais susijusius vidinius objektus. Komanda CLEAR $v pašalina visus pavadinimus iš visų $v požodyno sekcijų, išskyrus tuos, kurie prieš programos tekstą (kai jie buvo apibrėžti) buvo priešdėliu:: (du dvitaškiai). Pavyzdžiui, procesoriui vykdant šį programos fragmentą:

:: : X+ Y !+ X ;

CLEAR $EXAM Subžodyne $EXAM liks tik pavadinimai X ir X+, žodyno įrašas Y bus pašalintas (nors išliks kintamasis, atitinkantis žodį Y vidiniame atvaizdavime).

I/O komandos

Pagrindinė vartotojo sąveikos su DSSP priemonė yra terminalas, kuris dažniausiai yra katodinių spindulių ekranas su klaviatūra. Iš terminalo atliekamas pirminis įvedimas, programų redagavimas ir derinimas, duomenų paruošimas ir visas sistemos valdymas. Programos ir duomenys, taip pat ir pats DSSP, išsaugomi kaip failai diskuose ir gali būti spausdinami spausdintuvu. Norėdami valdyti įvestį / išvestį, pagrindinių DSSP procedūrų rinkinyje yra toliau aprašyti įrankiai.

Terminalo veikimo programavimą užtikrina skaičių įvedimo ir išvedimo komandos, atskiri simboliai ir simbolių sekos (stygos), taip pat kai kurios papildomos komandos.

Komanda TIB (Terminal Input Byte) inicijuoja ciklą, laukiantį, kol terminalo klaviatūroje bus paspaustas klavišas. Kai paspaudžiamas klavišas, atitinkamo simbolio 8 bitų kodas įstumiamas į krūvą kaip mažiausiai reikšmingas viršutinės dalies baitas, o didžiausiuose 3 baituose yra nuliai. Tokiu būdu įvesto simbolio kopija rodoma ekrane. Taip pat yra komanda TRB (Terminal Read Byte), kuri nuo TIB skiriasi tuo, kad siunčiant įvestos raidės kodą į krūvą, ši raidė nerodoma ekrane.

Komanda TIN (terminalo įvesties numeris) inicijuoja numerio įvedimo į krūvą ir klaviatūra įvesto skaičiaus ciklą. Įvedamas skaičius turi būti skaitmenų seka, kuri gali prasidėti minuso ženklu ir baigtis . Priklausomai nuo nustatyto įvesties/išvesties režimo, skaičiai procesoriaus suvokiami kaip šešioliktainis, dešimtainis, aštuntainis arba dvejetainis. Jei šešioliktainis skaičius prasideda skaitmeniu, žymimu raide, tada prieš jį pridedamas skaitmuo 0. Įvestas skaičius konvertuojamas į dvejetainį komplemento kodą, kuris įstumiamas į krūvą kaip 32 bitų ilgio žodžio sveikasis skaičius , t.y. su nupjovimo bitais, esančiais kairėje nuo svarbiausio bito, kurio svoris yra nuo 2 iki 31 laipsnio.

Kiekviena TIN komanda įveda vieną skaičių. Jei vienoje eilutėje reikia įvesti skaičių seką, jas reikia atskirti paspaudus klavišą , ir TIN komanda turi būti vykdoma dar kartą, kad programoje būtų įvestas kiekvienas skaičius.

Seka, kurioje yra n simbolių, įvestų iš klaviatūros, įvedama į kompiuterio atmintį n baitų pavidalu, išdėstytais nuosekliai didėjančiais adresais, pradedant adresu a, naudojant komandą TIS (Terminal Input String), prieš kurią adresas a ir skaičius simbolių n yra nustumiami į krūvą . Pavyzdžiui, tegul bus deklaruojamas pakankamo ilgio X baitų vektorius. Turite įvesti 9 simbolius, priskirdami jų reikšmes šio vektoriaus elementams, pradedant nuliniu elementu:

Panašiai, naudojant komandą TOS, nurodoma n baitų-litrų sekos su pradiniu adresu a išvestis:

Teksto elementų, tiesiogiai įtrauktų į programą, išvedimas į terminalą užtikrinamas dizainu

."<текст>"

Pavyzdžiui, kad vykdant tam tikrą programos fragmentą ekrane būtų rodomas tekstas ENTER OPTION NUMBER, fragmente turi būti įrašas „Įveskite PASIRINKIMO NUMERĮ“.

Komanda TON (Terminal Output Number) rodo skaičių, paimtą iš krūvos poviršio, o viršuje turi būti nurodytas išvesties lauko ilgis. Išvesties numeris sulygiuotas su dešiniuoju lauko kraštu, laisvos pozicijos kairėje užpildomos tarpais, o jei skaičiaus ilgis viršija nurodytą lauko ilgį, tada apkarpoma kairėje. Dešimtainio įvesties/išvesties režimu neigiami skaičiai prasideda minuso ženklu.

Komanda TOB (terminalo išvesties baitas) išspausdina simbolį, kurio kodas nurodytas žemesniu baitu kamino viršuje. Krūvos gylis sumažinamas 1.

Taip pat yra komandų, kurios tiesiogiai valdo ekrano žymeklį:

CR - eikite į naujos eilutės pradžią,

SP - erdvė, tai yra judėjimas viena padėtimi į dešinę.

Komanda BELL sukelia trumpą garso signalą („varpelis“).

Kartais, bendraujant su terminalu, reikia patikrinti, ar mygtukas jau buvo paspaustas ir ar ekranas jau apdorojo ankstesnę išvesties komandą. Tai galima padaryti naudojant TTI (Terminal Test Input) ir TTO (Terminal Test Output) komandas, kurios, jei įvyksta nurodytas įvykis, krūvoje palieka 1, o kitu atveju - 0.

Spausdintuvo išvesties komandos yra panašios į terminalo išvesties komandas ir yra pagrįstos panašia mnemonika, kurioje raidės LP (Line Printer) buvo pakeistos TO arba pridedamos kaip pirmieji simboliai. Pavyzdžiui, LPCR – perėjimas į naujos eilutės pradžią, LPSP – tarpas, LPN – skaičiaus išvedimas iš antrinės viršūnės viršūnės nurodytame lauke, LPB – simbolio išvestis, LPS – simbolių eilutės išvestis. . Taip pat yra [N] LPT komanda, kuri perkelia spausdinimo galvutę į spausdinamos eilutės N padėtį, ir LPFF komanda, kuri tiekia popieriaus lapą. Norint spausdinti aiškų tekstą, patogu naudoti teksto literalą ir komandą LPS, pavyzdžiui:

"FUNKCIJŲ VERČIŲ LENTELĖ" LPS

Pertraukimų ir išimčių tvarkymas

Programuojant periferinius įrenginius, tampa būtina tvarkyti pertraukimus. DSSP šis apdorojimas užprogramuotas taip. Programa, skirta tvarkyti pertraukimą, yra įprasta DSSP procedūra, prieš kurią apibrėžiant yra priešdėlis INT, pavyzdžiui INT: A !1+ I ; INT priešdėlis užtikrina, kad procesoriaus būsena būtų išsaugota pertraukimo metu ir atkurta, kai pertrauka apdorojama.

Norėdami susieti apdorojimo programą su konkrečiu pertraukimu, naudokite komandą LINK:

<адрес вектора>LINK<имя процедуры>kai vykdoma, iškvietimas į pertraukimo apdorojimo procedūrą įrašomas pagal atitinkamą vektorių. Komanda LINK gali atlikti ir statinį procedūros susiejimą su pertraukimu, kuris įvyksta programos kompiliavimo metu, ir dinaminį susiejimą programos vykdymo metu.

Procesoriaus pertraukimas – tai būdas sistemai pranešti apie įvykį, įvykusį išoriniame pasaulyje. Programoje taip pat gali atsirasti įvykių, kuriuos reikia nedelsiant apdoroti. Jos vadinamos išskirtinėmis situacijomis. Tokių situacijų pavyzdžiai: padalijimas iš nulio, ryšio su įrenginiu klaida, įvesties failo pabaiga ir kt.

DSSP išimčių situacijos įrašomos naudojant komandų pertraukimus. Komandos pertraukimas yra pavadinta atsakymo procedūros iškvietimo operacija ir deklaruojama taip:

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

Pavyzdžiui:

TRAP S1 "Situacija S1".

Pirmuoju atveju galutinė reakcija į pertraukimą S yra procedūra X, antruoju, įvykus pertraukimui S1, terminale bus rodomas toks pranešimas: Situacija S1.

Programa, kurios vykdymas gali sukelti pertraukimą, gali nustatyti savo atsaką į ją, naudodama pertraukimo komandą. DSSP siūlo dviejų tipų perėmimus: ON ir EON. Perėmimo komandos gali būti naudojamos tik atliekant procedūras ir jų formatas:

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

EON<имя прерывания> <реакция>Pavyzdžiui:

: A ... ON S "Pertraukti S" ... ;

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

ON ir EON nustato skirtingus reakcijos tipus. Jei komanda ON nurodoma nauja reakcija, tada, įvykus pertraukimui, yra vykdoma reakcijos procedūra, po kurios nutrūkusi programa veikia toliau. Jei reakciją nurodo EON instrukcija, tada pirmiausia operandų krūva įgyja tokį gylį, kokį turėjo EON komandos vykdymo metu, tada reakcija vykdoma, o užbaigus – atliekama procedūra, kurios metu EON instrukcija buvo panaudota nedelsiant sustoja.

Pažiūrėkime į pavyzdžius. Procedūra M įveda raides iš terminalo klaviatūros ir patikrina, ar tai skaičius. Jei įvestas simbolis nėra skaitmuo, ND pertraukimas pakeliamas. TRAP ND "Ne skaičius". : M RP M1 ; : M1 TRB [B] C #0< C2 #9 >&0 IF+ ND [B] TOB ;

Paskutinė reakcija į ND pertraukimą yra pranešimas: Ne skaičius.

Jei M iškviečiama iš procedūros P1, kuri turi savo atsaką į pertraukimą ND: P1 ON ND PR1 M ; : PR1 [B] CR "Klaida". D #0 [#0] ; tada, kai įvedamas neskaitmeninis simbolis, ND pertraukimą apdoros PR1 reakcijos programa, kurios tipas yra ĮJUNGTAs, todėl pranešimas bus išsiųstas naujoje eilutėje: Error. Įvestas simbolis bus pakeistas simboliu 0, po kurio M veiks toliau.

Jei M iškviečiamas iš procedūros P2: P2 EON ND PR2 M ; : PR2 CR "Klaida. Įvesties pabaiga." ; tada, kai įvedamas ne skaitmeninis simbolis, ND pertraukimas bus apdorotas PR2 tipo EON reakcijos programa, dėl kurios pranešimas bus išsiųstas naujoje eilutėje: Error. Įvesties pabaiga, po kurios P2 išeis. Operandų krūva bus tuščia.

Jei reikia, pertraukimas gali būti vėl pakeltas reakcijos programoje, taip išplečiant jį aukštesnio lygio programoms. Tokiu atveju pertraukimą tvarkys arba programa, nurodyta pertraukimo komandoje uždarymo procedūroje, arba galutinė reakcija. Pavyzdžiui, jei pakeisite PR2 taip: : PR2 CR "Klaida. Įvesties pabaiga." N.D.; tada terminale rodomas pranešimas bus toks: Error. Įėjimo pabaiga. Ne skaičius.

DSSP turi keletą įmontuotų komandų pertraukimų, į kuriuos atsakymą galima pateikti vartotojo programose.

Assalamu alaikum wa rohmatullahi wa barakatuhu!
„Arabų kalba yra Rojaus gyventojų kalba!“ (apytikslė reikšmė)
Mieli broliai, prašau jūsų paaiškinti klausimą dėl šio hadito, ar jis patikimas? Apskritai, ar šie žodžiai yra pranašo Mahometo žodžiai, alayhi salaam?
BarakAllahu fikum wa jazakumullahu khair!

Wa alaikum salaam wa rahmatullahi wa barakatuh!

At-Tabarani al-Ausate, remiantis Abu Hurairos žodžiais, praneša:
„Alacho pasiuntinys, tepalaimina jį ir suteikia jam ramybę, pasakė: „Aš esu arabas, Koranas yra arabų kalba, o Rojaus buveinių kalba bus arabų.

Šeichas al-Albani atvedė jį į Silsila al-Da'ifa numerį 161, sakydamas:

„Šis haditas yra fiktyvus (maudu). Realybėje nėra nei vieno patikimo hadito, kuris paaiškintų, kokia kalba kalbės Rojaus gyventojai, todėl būtina tylėti ir nesinerti į pokalbius šia tema, paliekant žinias apie tai Visagaliam Alachui ir užsiimti tik kas prives prie tų veiksmų, kurie atneš naudos kitam pasauliui!
Sheikh-ul-Islam Ibn Taymiyya, tepasigailėjo jo Alachas, buvo paklaustas: „Kokia kalba žmonės kalbės Prisikėlimo dieną? Ar Visagalis Alachas kreipsis į žmones arabiškai? Ir ar tiesa, kad pragaro gyventojų kalba yra persų, o dangaus gyventojų – arabų?
Į ką jis atsakė: „Šlovė Alachui, pasaulių Viešpačiui! Nežinia, kokia kalba tą dieną kalbės žmonės, kaip ir kokia kalba jiems kalbės didysis ir šlovingas Viešpats. Nei Visagalis Alachas, nei jo Pasiuntinys, ramybė ir palaima, mums nieko apie tai nesakė, taip pat nepatikima, kad pragaro gyventojų kalba bus persų, o Rojaus gyventojų – arabų. Ir mes nežinome, kad tarp Kompanionų būtų buvę kokių nors nesutarimų šiuo klausimu, tebūnie Allah jais patenkintas. Priešingai, jie to nedarė, nes apie tai kalbėti nenaudinga. Tačiau tarp vėlesnių kartų kilo nesutarimų šiuo klausimu. Vieni sakė, kad bendraus arabiškai, kiti sakė, kad tai netaikoma pragaro gyventojams, nes jie atsakys persiškai, o pragare tokia yra jų kalba. Trečia, žmonės bendraus asirų kalba, nes tai yra Adomo kalba, iš kurios kilo visos kitos kalbos. Ketvirta – tai netaikoma Rojaus gyventojams, nes jie bendraus arabiškai. Tačiau nė vienas iš jų neturi jokių įrodymų, patvirtinančių jų žodžius, nei iš proto, nei iš šariato šaltinių, tačiau tai tik teiginiai be jokių įrodymų. Visagalis Alachas žino geriau! Žr. Majmu'ul Fatawa 4/299.

Mokyklose mokytis algoritmizacijos pagrindų, vadinamųjų. mokyklos algoritminė kalba (edukacinė algoritminė kalba), vartodami moksleiviams suprantamus rusų kalbos žodžius. Skirtingai nuo daugelio programavimo kalbų, algoritminė kalba nėra susieta su kompiuterio architektūra ir joje nėra detalių, susijusių su mašinos struktūra.

Pavyzdžiai

Algoritminės kalbos algoritmas paprastai parašytas tokia forma:

alg algoritmo pavadinimas (argumentai ir rezultatai) duota algoritmo taikymo sąlygos būtina algoritmo tikslas pradžios tarpinių kiekių aprašymas | komandų seka (algoritmo dalis) con

Algoritmo įraše raktiniai žodžiai dažniausiai buvo pabraukti arba paryškinti. Loginiams blokams išryškinti buvo naudojamos įtraukos, o suporuoti bloko pradžios ir pabaigos žodžiai buvo sujungti vertikalia juosta.

Kvadratų sumos apskaičiavimo pavyzdys:

alg Kvadratų suma ( arg nepažeistas n, res nepažeistas S) duota| n > 0 būtina| S = 1*1 + 2*2 + 3*3 + … + n*n pradžios nepažeistas aš | įvestis n; S:=0 | nc i nuo 1 iki n | | S:= S + i * i | kts | išvada"S = ", S con

El. dirbtuvės

Siekdami paremti teorinį programavimo algoritmine kalba studijas, Maskvos valstybinio universiteto Mechanikos ir matematikos fakulteto specialistai 1985 m. sukūrė redaktorių-kompiliatorių. „El. dirbtuvės“(„E“ - Ershovo garbei), leidžianti įvesti, redaguoti ir vykdyti programas algoritmine kalba.

1986 m. „E. dirbtuvėms“ buvo išleistas edukacinių pasaulių (atlikėjų) rinkinys: „Robotas“, „Draugininkas“, „Dvikojis“, „Visureigis“, leidžiantis tiesiog pristatyti algoritmo sąvokos. „E-dirbtuvės“ buvo įdiegtos kompiuteriuose: Yamaha, Corvette, UKNC ir plačiai paplito.

Ši programavimo kalba buvo nuolat tobulinama ir 1990 metais vadovėlyje pasirodė vėlesnės „E-dirbtuvės“ versijos aprašymas. KuMir programavimo sistemą („Learning Worlds Set“), kuri palaiko šį vadovėlį, „InfoMir“ įmonė išleido 1990 m. Šios sistemos kalba taip pat vadinama „stabu“.

1995 m. Rusijos Federacijos švietimo ministerija rekomendavo „KuMir“ kaip pagrindinę mokomąją medžiagą kursui „Informatikos ir informatikos pagrindai“, remiantis A. G. Kušnirenkos, G. V. Lebedevo ir R. A. Svoreno vadovėliu. .

Kritika

Tačiau reikia pažymėti, kad algoritminė kalba, nesant detalių, tiesiogiai siejančių ją su kompiuterio architektūra, vis dėlto, remdamasi Algolo tipo kalbomis, netiesiogiai moko moksleivius remtis von Neumann mašinų architektūra. (Fon Neumann architektūra yra praktinis ankstesnės idėjos, vadinamos Tiuringo mašina, įgyvendinimas. Be Turingo idėjos, yra ir kitų idėjų. Populiariausia iš jų vadinama Lambda skaičiavimu: prie jos dirbo Alonzo Church. Lisp mašina yra architektūra, pagrįsta Lambda skaičiavimu.)

Nuorodos

  • A. P. Eršovas. Algoritminė kalba mokykliniame informatikos ir kompiuterių technologijų pagrindų kurse. 1985-05-07
  • Forumas apie rusų programavimo kalbas ir kūrimo priemones

Wikimedia fondas. 2010 m.

Pažiūrėkite, kas yra „rusų algoritminė kalba“ kituose žodynuose:

    Algoritminė kalba yra formali kalba, naudojama algoritmams rašyti, įgyvendinti ar tirti. Kiekviena programavimo kalba yra algoritminė kalba, bet ne kiekviena algoritminė kalba yra tinkama naudoti kaip kalba... ... Vikipedija

    Šis terminas turi kitas reikšmes, žr. Drakonas (reikšmės). Algoritmo blokinės schemos pavyzdys DRAGON kalbos drakonų diagramoje DRAGON (draugiška rusų algoritminė kalba, kuri užtikrina matomumą) vaizdinėje... ... Vikipedija

    Šis terminas turi kitas reikšmes, žr. Algoritminę kalbą. Akademinė algoritminė kalba yra formali kalba, naudojama algoritmams rašyti, įgyvendinti ir tirti. Skirtingai nuo daugelio programavimo kalbų, ji nėra susieta su ... Vikipedija

    Algoritminė kalba (taip pat rusų algoritminė kalba, RAYA) yra programavimo kalba, naudojama algoritmams rašyti ir tirti. Mokantis informatikos mokyklose, algoritmizacijos pagrindams studijuoti naudojamas vadinamasis algoritmas. mokyklos algoritminis... ... Vikipedija

    Mokomoji programavimo kalba – tai programavimo kalba, skirta mokyti programuoti specialistus. Tokia kalba turi atitikti pagrindinį reikalavimą – paprastumą. Kuo jis paprastesnis, tuo greičiau pradedantysis jį įvaldys. Tokios... ... Vikipedijos galimybės

    DRAGON kalbos algoritmo blokinės schemos pavyzdys Dragon diagrama DRAGON (draugiška rusų algoritminė kalba, kuri užtikrina matomumą) yra vaizdinė algoritminė kalba, sukurta kaip Buran erdvės programos dalis. Šios kalbos raida ... Vikipedija