Ar arabų kalba yra rojaus kalba? Rojaus kalba Papildomos operacijos su duomenimis ir atmintimi

Gruodžio 18-oji yra Pasaulinė arabų kalbos diena. Šią šventę Jungtinės Tautos įsteigė 2010 m. ir ji yra viena iš šešių oficialių Jungtinių Tautų kalbų. Naujausiais duomenimis, arabų kalba ir jos tarmėmis kalbančių žmonių pasaulyje yra 300 mln. Be to, už 240 mln. Arabų kalba ir islamo religija yra neatsiejamai susijusios. Vienas neįsivaizduojamas be kito, nes jau pusantro tūkstantmečio pasaulio musulmonai penkis kartus per dieną skaito maldas arabų kalba. Šventasis Koranas buvo nusiųstas ant jo, o Pranašas Mahometas (ramybė jam) kalbėjo.

Grozno dvasininkai savaip pažymėjo reikšmingą datą. „Čečėnijos širdies“ mečetės imamas Magomedas Dadahajevas kreipėsi į miesto gyventojus. Jis paaiškino arabų kalbos vaidmenį musulmono gyvenime:

Nemokėdamas arabų kalbos žmogus negali išmokti islamo. Todėl tarp musulmonų ši kalba nuo neatmenamų laikų buvo labai gerbiama. Būtina sąlyga studijuojant Pranašo religiją (ramybė jam) yra arabiškų tekstų, beveik visų parašytų labai seniai, analizė. Šiuolaikinėje arabų kalboje yra daugiau nei 12 milijonų žodžių (palyginimui, rusų kalba yra 131 000, o angliškai - apie milijonas ...). Tai labai turtinga ir sudėtinga kalba. Kai studijavau Islamo universitete Sirijoje, mūsų mokytojas, filologas, pateikė tokį pavyzdį: arabų kalboje tik vieno žodžio „kupranugaris“ sinonimų skaičius siekia šešis tūkstančius! Jo gramatika taip pat labai sudėtinga ir daugialypė. Jo tyrimas reikalauja nemažai intelektualinių ir valingų pastangų. Todėl tarp Korano ir pranašo haditų (ramybė jam) aiškintojų nėra mėgėjų. Beveik neįmanoma įsigilinti į šventojo teksto prasmę, neturint solidaus arabiško žodyno ir nežinant šios kalbos sintaksės, semantikos ir fonetikos. Kartais yra žmonių, kurie save vadina Korano žinovais. Jie cituoja citatas iš Aukščiausiojo pranešimo, duoda žmonėms patarimų. Bet jei paklausi jų apie žinių šaltinį, gauni atsakymą: „Skaičiau vertimą“. Tokie žmonės islamui labai pavojingi, nes nežinodami, ką daro, geba įnešti painiavos ir netikslumų aiškinant Visagalio žinią. Islamo mokymo įstaigose plačiai taikoma tokia mokymo metodika: keletą metų pradinukai mokosi tik arabų filologijos. Ir tik pakankamai įsisavinę reikiamą medžiagos kiekį, jie gauna prieigą prie Korano tekstų studijų. Taigi arabų kalba yra savotiškas tramplinas įsisavinant informaciją apie islamą. Be to, arabų kalba kalbės rojaus gyventojai. Šlovė Alachui, kad Jis sukūrė mus musulmonus! Ką mums davė graži, turtinga arabų kalba, kad suvoktume savo valią!

1. Tai istorija, kad žmonės nustojo suprasti vieni kitus 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 pritaria tokioms pažiūroms ir ar jie tiki, kad jų kalba yra artimiausia originalui?

Atsakymas į pirmąjį klausimą pateikiamas Pradžios knygoje 11:1-9, kur pasakojama, kad Dievas nusprendė nubausti žmonių giminę, primesdamas jai kalbų painiavos 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 vadina kiekvieną gyvą sielą, toks buvo ir 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“, o valgančios vidaus organus – „nešvaria“. Afrikos kabilai tiki, kad dėl konflikto žmonės pradėjo kalbėti skirtingomis kalbomis. Anot genties iš Asamo, kalbų painiava kilo dėl to, kad kartą trys vaikai medžiojo žiurkę. Viena iš Amazonės genčių laikosi nuomonės, kad Dievas padalijo žmones ir jų kalbas, kad jie taptų Jam paklusnesni. Tarp vietinių Amerikos gyventojų, Maidu genties (Kalifornijoje), manoma, kad iš pradžių žmonės kalbėjo ta pačia kalba, tačiau kartą, per laidotuvių ceremoniją, kalba nustojo būti ta pati. Irokėzai mano, kad kalbų atskyrimas įvyko dėl šeimos kivirčo, pasibaigusio vaiko nužudymu. Tačiau prielaida, kad daugiakalbystė yra prakeiksmas, nėra tokia įprasta, kaip atrodo. Pasaulyje yra daugybė versijų, pagal kurias atsiskyrimas įvyko dėl natūralių procesų.

Senovės indėnų sakralinėje giesmėje „Rigveda“ minima, kad kažkada egzistavo Vak („žodis“), o dievai jį suskirstė į daugybę formų. Indokinijos pusiasalio tautos pasakoja apie šešias rases, kurių kiekviena turėjo savo kalbą – moliūgo stiebas. Quiche gentis (Gvatemala) turi mitą, kad žmonės gyveno kartu ir kalbėjo ta pačia kalba, kol išsiskirstė į grupes. Kiekvienas išsirinko savo dievą ir pradėjo kalbėti savo kalba.

Pietų Amerikos navajų genties 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, o visko išmokė Alachas. Kalbų įvairovė yra visiškai natūrali ir yra Allaho galios apraiška. Visi žmonės gali suprasti Korano apreiškimus, nesvarbu, kokia kalba jie parašyti.

Daugelio pasaulio tautų mitologinė sistema neturi paaiškinimo kalbų maišymui, kuris yra tiesiog savaime suprantamas dalykas, todėl negali atsakyti į mūsų klausimą. Tačiau beveik visose pasaulio kultūrose yra nuoroda į „idealią“ kalbą (2 klausimas). Aukščiau paminėjome australų gentį, kuri tiki, kad kai kurie žmonės (kurie valgo žmogaus kūną) 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, padalijimą.

Visur žmonės bando išsiaiškinti, kaip objekto pavadinimas atskleidžia jo esmę. Daroma prielaida, kad arba „ideali“ kalba, nusakanti tikrąją objekto esmę, egzistuoja šiandien, arba išliko praeityje. Antroji prielaida yra būtina sąlyga ieškant tiesos ir harmonijos pasaulyje. Atrodo, kad mūsų sąmonėje yra įsitvirtinusios idėjos apie kalbos ryšį su realiu pasauliu ir žmogaus egzistencija. Šiuo atžvilgiu kyla klausimas, pirmą kartą išsakytas Platono dialoge „Cratilus“ ir nuo tada nuolat diskutuojamas: 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 prasmės ir prasmės prie jos pavadinimo.

Žmogus yra žodinis padaras ir, skirtingai nei gyvūnai, su savo rūšimi bendrauja naudodamas kalbą. Kartais kalbama apie „gyvūnų kalbą“, tačiau aišku, kad toks išsireiškimas sąlyginis – savo turtais ir galimybėmis gyvūnų kalba nepanaši į žmonių. Kita vertus, angelams bendravimui kalbos visiškai nereikia – sunku įsivaizduoti, kad jie kalba rusiškai ar angliškai.

Kalbos funkcijos gali būti įvairios – be informacijos perteikimo, 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 tam tikra 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. To nebuvo krikščioniškajame Rašte nuo pat pradžių.

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

Būtent Septuagintos egzistavimas tapo pagrindiniu argumentu už principingą Šventojo Rašto verčiamumą. Tačiau yra ir dar stipresnis. Dabar manoma, kad įrodyta, kad Kristus kalbėjo apaštalams aramėjų kalba. Tačiau evangelijų rengėjai nedvejodami perteikė šiuos pokalbius graikų kalba.

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

Ar tikrai rojuješalta?

Verčiant kalbą į kalbą, kartais iš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ė „dangus yra karšta ir vėsi vieta“ aiškiai parodo, kad Šventasis Raštas buvo sukurtas karšto klimato šalyse, kur „vėsa“ yra gana maloni. Rusiškai tokios asociacijos vargu ar kiltų. O veiksmažodis „atšalti“ reikšme „pailsėti“, „gerai praleisti laiką“ į rusų kalbą pateko kaip atsekamasis popierius iš hebrajų kalbos per graikų kalbą.

Ar visi slavai suprato Bibliją?

Šventasis Raštas mūsų protėviams buvo atneštas ne rusišku būdu. Kirilas ir Metodijus – Solunsko graikai – sukūrė naują rašomąją kalbą, paremtą Solunsko slavų šnekamąja kalba.

Pasaulyje daugelis tautų 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ą, reikia patobulinti kalbą, ką padarė Kirilas ir Metodijus.

Jei darysime prielaidą, 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 „aukšta ramybė“. Pavyzdžiui, net ir šiuolaikiniai dalyviai – tokie kaip verksmas, bėgimas – formuojami būtent pagal bažnytinį slavų modelį – senojoje rusų kalboje tai bus „raudimas“, „bėgimas“.

Kartais senosios Rusijos kolegos iš viso atsisakydavo - „geras“ ir „bologo“ pavadinimu „Bologoye“; „Shelom“, kuris yra tik epuose, priešingai nei „šalmas“.

Kalbos yra artimos ir ... lygiagrečios

Senovės Rusijoje buvo diglosijos situacija. Tai nepanašu į 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 vartojimo atžvilgiu nesutampa. Kalbėjo senąja rusiškai, senąja rusiškai galėjo rašyti buitinį raštelį. 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, bet bažnytinėje slavų kalboje tebeegzistuoja tik maldos. Išverskite į bažnytinę slavų kalbą – ir tai atrodys kaip pokštas ar šventvagystė.

Kunigas ar Ganytojas?

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

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

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

Be paties Šventojo Rašto, kviečiame įvaldyti dar keletą slaviškų tekstų – nuo ​​maldų iki dieviškų pamaldų. Tiesa, esamas vertimas į rusų kalbą yra kiek sunkiai suprantamas. XIX amžiuje, neturėdami analogų, vertėjai slavizmus dažnai versdavo į vertimą.

Taigi frazė „Aš esu gerasis ganytojas“ persikėlė į vertimą. Ir čia yra keletas sunkumų. Pažodinis vertimas iš graikų kalbos skambėtų: „Aš esu geras ganytojas“, tačiau toks vertimas suvokiamas kaip žemas. Kita vertus, apie didingą „kleboną“ paprastas klausytojas dabar suvokia labiau kaip „kunigą“. Tačiau reikia pripažinti, kad pažodinis daugelio Biblijos posakių vertimas į rusų kalbą neįmanomas – frazė „vaiko burna kalba tiesą“ – kaip filosofinis posakis nebus suvokiamas.

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

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

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

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

Šventieji ir profaniški vertimai

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 srovių, kurios tiki, kad Biblijos tekstas turi būti prieinamas kiekvienam. Taip pat leidžiami komiksai Biblijos temomis.

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ų malonu turėti du vertimus – ir iš hebrajų masoretų tekstų, ir iš graikų kalbos. 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 nebuvo nauja kalbų savybė, atsiradusi pastačius Babelio bokštą.

Tačiau bet kuriuo atveju Adomo kalba tikriausiai buvo nepanaši į jokią iš esamų kalbų, įskaitant hebrajų.

Ar kyla ginčų dėl paslaugos vertimo į rusų kalbą?

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

Biblijos vertimas į rusų kalbą nebuvo lengvas, nors metropolito Filareto mintis, kad reikia versti ir iš hebrajų, ir iš graikų kalbos, 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 jų įgyvendinimo niuansų bus tiek daug, kad lengviau tekstus kažkiek rusifikuoti nei išversti.

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

Kaip Dieviškoji Apvaizda dalyvauja formuojant skirtingas kalbas?

– Kalba egzistuoja atskirai nuo žmogaus valios. Ž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į.

Įkvėpti iš viršaus, užrašydami evangelijas graikų kalba, apaštalai iškėlė idėją išversti Evangeliją.

Parengė Daria Mendeleeva

Dmitrijaus Kuzmino nuotrauka

KLAUSIMAS: Assalam alaikum aha!

Čia aš aptikau šį straipsnį. Jei neklystu, tu rašei atvirkščiai. Jei nesunku, galite dar kartą pakomentuoti šį straipsnį.

musulmonas.

Arabų kalba yra Korano kalba. Jis buvo išrinktasis tarp visų pasaulio kalbų ir turi nepaprastų savybių. Ši kalba taip pat yra pranašo Mahometo kalba (ramybė ir Alacho palaiminimai jam). Ši kalba yra turtinga ir nė viena pasaulio kalba negali su ja konkuruoti. Jis daro dvasinę ir fizinę įtaką šia kalba kalbančiajam.

Anksčiau arabai rengdavo poezijos konkursus, bet kai pranašas (s.a.s.) gavo Apreiškimą, arabai buvo taip nustebę dėl tokio nuostabaus kalbos išraiškingumo ir net kai kurie manė, kad Koranas turi magišką poveikį žmogui. Jei kas nors norės pataisyti vieną žodį ar raidę iš Korano, bus pažeista visa Dieviškosios knygos harmonija. Nereikėtų keisti nė vieno Korano žodžio, kitaip prasmė ir fonetika pasikeis.

Žinome, kad kai kurie žodžiai laikui bėgant pasensta, ir mes jų nevartojame. Ir Korano kalba neprarado savo aktualumo 1439 metus ...

Daugiau nei 10 metų dėstau apie Koraną ir iki šios dienos nesutikau nė vieno savo mokinio, kuris man užduotų klausimą: „Kodėl mes studijuojame Koraną? Iš kur jis atsirado? Kokią naudą ji turi? Kuo tai skiriasi nuo skaitymo iš kairės į dešinę? Kasdien daugėja norinčių mokytis arabų abėcėlės ir tadžvido taisyklių, kad vėliau galėtų skaityti Koraną iš originalo. Tačiau mažai žmonių galvoja apie atsakymą į aukščiau pateiktus klausimus. Ir galiausiai, kai aš jiems pasakoju apie Korano naudą, apie jo naudą, daugelis pradeda į tai gilintis.

Arabų kalba turi 29 raides. Garsai susidaro ties gerklų riba, gerklų viduryje, krūtinėje, tarp liežuvio šaknies ir burnos ertmės. Arabų kalbos garsai „išvalo“ burnos ertmę ir yra mažiau jautri ligoms. Be to, arabų kalba yra geras logopedas. Tai išgydo šlykštumą ir klaidingą „r“ raidės tarimą. Ši kalba padeda ir tiems, kurie turi regėjimo sutrikimų. Nes arabiško teksto skaitymas iš kairės į dešinę pagerina žmogaus regos aparatą ir atpalaiduoja. Ovali, apvali raidžių forma taip pat naudinga psichikai.

Visos arabų abėcėlės raidės yra priebalsės. Specialių raidžių balsių garsams nėra. Skiriamos trumposios ir ilgosios balsės. Trumposios balsės raštu perteikiamos naudojant balses – viršutinius ir apatinius. Taip pat iš 28 raidžių 22 raidės sujungtos iš abiejų pusių, o 6 raidės – tik dešinėje.

Koranas atėjo mums 23 metus be iškraipymų. Koranas yra paskutinė dieviškoji knyga, ir po jos nebebus kitų knygų. Jis buvo nusiųstas visai žmonijai. Korano įstatymai galios iki teismo dienos ir nesikeis. Koranas yra amžinas, didysis Visagalio stebuklas, duotas pranašui Mahometui (s.a.s.). Korano skaitymas yra garbinimas. Visiems patariu kasdien skaityti šią nepaprastai nuostabią knygą ir žinoti jos prasmę. Paskubėkite išmokti skaityti ir kalbėtis su savo Kūrėju. Alachas leis mums būti Jannat gyventojais ir kalbėti arabų kalba, kurią jis pats pasirinko.

Dilyar Bektayeva,

Aktobės regiono ustazas

centrinė mečetė "Nur Kasyr"

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

ATSAKYMAS: wa aleikum kaip salam brolis!

Tokias, kokias ji, naminius ir neišmanančius „netikrus ustazus“ reiktų atstumti nuo musulmonų, kad jų neklaidintų. Kartą Aktobės mečetėje skleidžiamos tokios nesąmonės ir laikomi neišmanėliai mokytojai, galbūt todėl šiame mieste tiek daug ekstremistų sektantų. Nei Korane, nei Sunoje nėra nė tolimos užuominos, kad arabų kalba bus bendra kalba visiems Rojaus gyventojams. Pagalvokite patys, kaip kitų tautybių atstovai bendraus vieni su kitais Rojuje, jei nemokės arabų kalbos ?!

Anksčiau atsakė į panašų klausimą:

Sukurta dialogo programavimo sistemos DSPP adaptyvioji kalba PARADISE Maskvos valstybinio universiteto Kompiuterinės matematikos ir kibernetikos fakultetas N.P.Brusencovas, V.B. Zacharovas, I.A.Rudnevas, S.A.Sidorovas, N.A.Chanyshevas Maskva, 1987 m.

Bendras ROJAUS kalbos aprašymas

Kalbos ugdymo tikslas ir paskirtis

PARADISE (Developable Adaptive Language) yra pagrindinė struktūrinio programavimo dialogo sistemos DSPP kalba. Bazinis reiškia, kad jis yra visų tolimesnių DSSP vykdomų konstrukcijų pagrindas plėtojant (plečiant, stiprinant) pagrindinę kalbą ir, galbūt, pritaikant tokiu būdu sukurtas kalbines priemones konkrečiai programai. Skirtingai nuo vadinamųjų aukšto lygio kalbų, PARADIS nepateikia paruoštų duomenų tipų ir operacijų, o tik elementus ir primityvus, kad būtų galima efektyviai apibrėžti reikiamus tipus. Pavyzdžiui, pradiniai duomenų formatai yra 8 bitų baitai, 16 bitų žodžiai ir 32 bitų ilgio žodžiai, interpretuojami atsižvelgiant į jais atliktas operacijas kaip sveikieji skaičiai, loginiai vektoriai, raidžių kodai, loginiai skaičiavimai, duomenų ir procedūrų rodyklės. Šiuo atveju, viena vertus, galima 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 galima įvesti reikiamo ilgio ir reikšmių diapazono tikrus skaičius, kompleksinius skaičius ir kitus objektus, o į šią programą orientuota kalbos versija apims objektus ir priemones, būdingus šiai programai, ir neįtrauks to, kas netaikoma tai, - kalba bus pritaikyta (pritaikyta) programai. Kuriant DSPP buvo siekiama sukurti plačiai prieinamą ir efektyvų programavimo įrankį mikrokompiuteriams, t.y. kompiuteriai, pagrįsti mikroprocesoriais. Esminis mikroprocesorių architektūros bruožas yra elementarus duomenų tipų ir operacijų pobūdis, kuris, viena vertus, reiškia universalumą, kita vertus, programavimo kruopštumą. Dėl savo universalumo mikroprocesoriai ir jų pagrindu sukurti mikrokompiuteriai turi potencialiai neribotas pritaikymo galimybes. Tačiau praktinis šių galimybių įgyvendinimas visų pirma priklauso nuo reikalingų taikomųjų programų kūrimo kruopštumo. Be to, tenkinančias taikomąsias programas galima sukurti tik giliai ir subtiliai išmanant atitinkamų programų specifiką, t.y. juos turėtų kurti ne šiaip programuotojai, bet aukštos kvalifikacijos vienos ar kitos 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 kompiuterio 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ų surinkėjo kalbą. Sistemų programavimo kalbos, tokios kaip C arba PL / M, tam tikru mastu (nors toli gražu nepakankamai) sumažino programų kūrimo sudėtingumą, tačiau vargu ar jas galima rekomenduoti žmonėms, neturintiems programavimo amato patirties. Plačiai prieinama kalba, žinoma, turėtų būti paprastesnė ir natūralesnė, turėtų būti pagrįsta kuo įprastomis, pažįstamomis idėjomis apie programavimo esmę ir techniką.

Be prieinamumo ir žymiai sumažinto programų kūrimo sudėtingumo, palyginti su programavimu asamblėjos kalba, DSPP reikalavo kalbos universalumo, tokio pat kaip asamblėjos kalbos, didelio mašinos efektyvumo (ty kompaktiškumo ir greičio). kodas), sukurtų programų testuojamumo patikimumą bei jų prižiūrėjimą.ir modifikuojamumą, taip pat sistemos ir joje sukurtų programų mobilumą (perkeliamumą) į skirtingos architektūros mašinas.

Procedūrinis programavimas

Programavimas ROJAUS 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ų konstravimas. Kaip dizaineris, įgyvendinantis savo idėją, sujungdamas jos sudedamąsias dalis (blokus, mazgus, dalis), programuotojas iš paprastų kalbos teikiamų veiksmų susintetina reikalingą kompleksinį veiksmą. Taip pat galime sakyti, kad programavimas (dizainas) – tai laipsniškas realizuojamo objekto skaidymas (išskaidymas) į vis mažesnius komponentus.

ROJAUS kalba, pagrindinis „konstruktas“ yra procedūra – įvardytas veiksmas. Kalba remiasi ribotu paprasčiausių procedūrų (primityvų) rinkiniu, pavaizduotu jų pačių pavadinimais (pavadinimais). 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žiantį į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 kūrimas naudojant PARADISE kalbą 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ų.

Toks programos dizainas, pradedant nuo nurodyto tikslo ir palaipsniui mažinant naudojamas procedūras iki kalbos šerdies, yra žinomas kaip programavimas iš viršaus į apačią. Tai pagrindinis būdas gauti programas PARADISE kalba sprendžiant individualias, aiškiai apibrėžtas problemas. Priešingai yra programavimas iš apačios į viršų – palaipsniui plečiamų procedūrų sistemos, paremtos pagrindinėmis kalbos priemonėmis, konstravimas, orientuotas į tam tikrą probleminę sritį. Tokiu būdu vykdomas kalbos vystymas ir pritaikymas 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 PARADISE 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 nariai. Struktūrizavimas suteikia programos aiškumo, patikrinamumo ir modifikavimo, žymiai sumažina jos kūrimo ir priežiūros sudėtingumą.

Aukščiau 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 instrukcijos (komandos), susidedančios 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 diktuoja šių procedūrų vykdymą jų pavadinimų eilės tvarka viena po kitos (tiesine tvarka). Kitoms vykdymo sekoms nurodyti PARADISE 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ūra P1 turi būti atliekama ne visada, o jei numatyta, kad atlikus P0 gaunamas teigiamas skaičius, tai vietoj P1 jie rašo vykdymo komandą pagal sąlygą: JEI + P1, t.y. vietoj P0 P1 bus P0 IF + P1. PARADISE apima priešdėlių sąlygų rinkinį, leidžiantį efektyviai išreikšti sąlyginį vykdymą, taip pat dviejų, trijų ar daugiau procedūrų pasirinkimą.

Daugkartinis procedūros vykdymas nurodomas naudojant RP priešdėlį. Taigi, komanda RP P vėl ir vėl iškviečia P procedūros vykdymą, kol bus sukurtos sąlygos, kurioms esant suaktyvinamas š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 yra kitos procedūros apibrėžime, 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, ROJAUS kalbos taisyklės nedraudžia į apibrėžimą įtraukti savo pavadinimą ar procedūros pavadinimą, kuriame yra šis pavadinimas, t.y. ROJAUS leidžia rekursiją.

Pakartotinai vykdoma procedūra taip pat gali būti įdėta į pakartotinai vykdomą procedūrą. Šiuo atveju kilpos yra įdėtos. PARADISE leidžia kelis kilpų lizdus.

Linijinė komandų seka, įdėjimas, sąlyginis ir ciklinis procedūrų įdėjimas – tai išsemia programų kūrimo PARADISE kalba galimybes. Šių priemonių trūkumas, vienalytiškumas ir natūralumas yra kalbos įsisavinimo ir vartojimo lengvumo garantas. Tuo pačiu metu tai yra griežtos struktūros programavimo kalba, kuri žymiai sumažina kūrimo darbo intensyvumą ir programos patikimumą.

Procedūros ir duomenys

Visa tai, kas iki šiol buvo pasakyta, būdinga ROJAUS kalbai, kaip priemonė nusakyti veiksmus, konstruoti savavališkus veiksmus iš baigtinės primityvių operacijų rinkinio. Kitą kalbos pusę reprezentuoja objektų, su kuriais atliekami veiksmai, vaizdavimo priemonės – duomenų pateikimo ir organizavimo priemonės.

Itin paprastas duomenų elementas yra dviženklis elementas – bitas. Visi kiti formatai ir duomenų tipai yra sukurti iš bitų. PARADISE kalboje 8 bitų baitas, 16 bitų žodis ir 32 bitų ilgio žodis priimami kaip pagrindiniai formatai. 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. Jie taip pat yra sudėtinių formatų ir tipų formavimo pradžios taškas.

Tiesą sakant, PARADISE nėra nei paprastų, nei sudėtinių duomenų tipų – yra tik pagrindiniai formatai (baitas, žodis, ilgas žodis) ir priemonės sudėtiniams formatams iš jų sudaryti: vektoriai ir daugiamačiai masyvai. 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 raidės ir pan. Duomenų tipus ir su jais susijusius apribojimus bei patikras galima įvesti į problemas orientuotus 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 įvardytiems duomenims. Šios operacijos apibrėžiamos operandų krūvelėje, kuri yra 32 bitų ilgio žodžių (dėmenų elementų) seka, dinamiškai modifikuojama pridedant (stumiant) naujų elementų iki galo, taip pat pašalinant elementus iš to paties galo (iššokant iš krūvos). ). Elementai išimami atvirkštine tvarka nei buvo išsiųsti: pirmiausia išimama tai, ką atsiuntė paskutinis. Duomenys, kuriuos reikia patikrinti ar konvertuoti, yra nustumiami į steką, kur su jais atliekamos nustatytos operacijos, po kurių apdorojimo rezultatai gali būti iškeliami iš krūvos.

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

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

2) paskyrimas jai pagal komandą! Paskutinio (viršutinio) elemento X reikšmė iššoko iš krūvos.

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

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

Įprasta aukšto lygio kalboms pateikto pavyzdžio žymėjimas forma X: = X + X yra labiau žinomas programuotojui, tačiau tai nėra tiesioginis procesoriaus vykdomų instrukcijų sekos atspindys, bet yra savotiška matematinė formulė. Tai patogu programuojant skaičiavimo užduotis, tačiau pagrindinėje kalboje svarbiau yra vienareikšmiškas vykdomų komandų atitikimas, nes programa gali būti patikrinta komanda tiesiogiai programavimo kalba ir nereikia mokėti kalbos visai kita nei procesoriaus kalba.

Tačiau ypač vertingas sukrautų duomenų apdorojimo pranašumas yra tas, kad testavimo ir transformavimo tvarkas galima apibrėžti ir įgyvendinti nepriklausomai nuo duomenų, kuriems jos taikomos. Testavimo ir transformavimo operacijos formuluojamos ne atsižvelgiant į duomenų identifikatorius (arba konstantų ir kintamųjų pavadinimus, formalius parametrus), o atsižvelgiant į krūvos elementus, kuriems operacijos metu turi būti priskirtos operandų reikšmės. atliekamas. Pavyzdžiui, dviejų skaičių pridėjimo operacija, atliekama + (pridėti) komanda, susideda iš dviejų viršutinių elementų (viršutinio ir papildomo) paėmimo iš krūvos kaip sumos, 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 įvardytas veiksmas (be parametrų sąrašo), atliekamas su kaminu, kuriame yra argumentų reikšmės nustatyta tvarka, ir po vykdymo. - rezultatų reikšmės. Norint pritaikyti tokią procedūrą tam tikram konkrečių duomenų rinkiniui, šiuos duomenis reikia atitinkama seka perkelti į krūvą. Juos suvartojus, procedūra paliks rezultatus ant krūvos (taip pat išdėstyti tam tikra seka).

Kitaip tariant, procedūrų pavadinimai PARADISE kalboje naudojami taip pat, kaip ir operacijų ž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ų sąrašo. Pavyzdžiui, jei trijų skaičių sumos gavimo operaciją pažymėsite 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 saugiau susitvarkyti ne su taisyklėmis, o su stack procesoriaus modeliu, t.y. su mašinos, kuriai kuriamos programos ir kuri jas vykdys, modeliu. PARADISE kalbos atveju tokia mašina yra DSPP procesorius – aparatinės įrangos ir programų rinkinys, įgyvendinantis šia kalba nurodytus veiksmus.

DSP procesorius

Fiziškai DSPP-procesorius gali būti įgyvendintas kaip tokios paprastos ir efektyviai programuojamos architektūros mikroprocesorius, kuris leistų geriausiai 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 kainuoja brangiai – jai įgyvendinti reikia atminties ir mašinos laiko, tačiau emuliuojant PRSP procesorių š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, kokios yra programos eigos, sąveikos su išorine aplinka valdikliai, reagavimas į išskirtinius įvykius ir kt. Architektūros įsisavinimas yra būtina prasmingo (neformalaus) programavimo sąlyga, o tai žymiai sumažina klaidų skaičių ir padidina programų patikimumą.

Centrinė DSPP procesoriaus grandis yra minėta operandų krūva. Pačiame dėtuve atliekamas apdorojimas, o duomenys paprastai perduodami per steką. Atskiros komandos ir trumpos komandų sekos per krūvą gali būti vykdomos perduodant jas į procesoriaus įvestį tiesiai iš terminalo klaviatūros. Šiuo atveju DSPP procesorius imituoja postfix skaičiuotuvo veikimą. Klaviatūra įvestų operacijų skaičiai ir mnemoniniai kodai yra atskirti tarpais. Įvestas tekstas rodomas kaip eilutė terminalo ekrane. Įvesties pabaigos signalas ir komanda procesoriui „Vykdyti įvestą receptą“ yra klavišo paspaudimas , taip pat žymimas , ... Skaičiai, patenkantys į procesoriaus įvestį, yra nustumiami į krūvą, o komandos vykdomos ant krūvos. Skaičiavimo rezultatą, gautą krūvos viršuje, komanda galima nukopijuoti į terminalo ekraną. (taškas).

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

2 5 - 3 * .

Paspaudus klavišą procesorius išveda rezultatą, todėl visa eilutė atrodys taip

* 2 5 - 3 * . -90

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

Nagrinėjamame pavyzdyje procesorius suvokė ir apdorojo įvesties skaičius kaip visas po kablelio skaitmenis. Tiesą sakant, įvedant šie skaičiai buvo konvertuojami į dvejetainį komplementą, o išvedant – atgal į dešimtainę sistemą. PRSP procesorius taip pat leidžia dvejetainius, aštuntainius ir šešioliktainius įvesties / išvesties režimus. Norint persijungti į norimą režimą, reikia atitinkamai įvykdyti vieną iš komandų B2, B8, B10, B16.

Paspaudus klavišus, procesorius pateikia kodus, vaizduojančius šiuose klavišuose nurodytas raides (raides, skaičius, skyrybos ženklus, operacijų simbolius). Įvesties simbolių seka sudaro įvesties eilutę – baitų grandinę, kurioje yra simbolių kodai, po vieną baitą kiekvienam simboliui. Didžiausias įvesties eilutės ilgis yra 80 simbolių.

Apdorojant įvesties eilutę, procesorius išskiria joje žodžius – tarpais atskirtus vienas nuo kito raidžių derinius ir juos interpretuoja. Jei apdorojamas žodis yra operacijos (procedūros) arba duotosios operacijos pavadinimas, žinomas procesoriui, tai procesorius atlieka veiksmus, kurie pagal apibrėžimą turi būti vadinami šiuo vardu. Jei procesorius nežino žodžio, jis bando jį interpretuoti kaip skaičių, atsižvelgdamas į nustatytą įvesties / išvesties režimą.

Skaičiai atpažįstami kaip žodžiai, sudaryti iš skaitmenų, leistinų tam tikroje skaičių sistemoje ir, galbūt, kurių pirmoji raidė yra minuso ženklas. Šešioliktainio įvesties / išvesties režimu kartu su skaičiais taip pat galioja lotyniškos raidės A, B, C, D, E, F. Gautas skaičius konvertuojamas į dvejetainio komplemento kodą ir 32 bitų ilgio įkeliamas į operandų krūvą. žodį. Tokiu atveju, jei skaičiaus reikšmė nepatenka į reprezentuojamų reikšmių diapazoną -2147483648: 2147483647, tada ji pakeičiama 2 ** 32 modulio reikšme iš šio diapazono.

Tuo atveju, kai apdorotas žodis procesoriui nežinomas ir negali būti priimtas kaip skaičius, procesorius terminalo ekrane parodo pranešimą: „Nežinau<обрабатываемое слово>“ ir laukia, kol bus išrašyti kiti receptai.

Duomenų įvedimas laisvo teksto pavidalu (baitų-raidžių seka) atliekamas teksto literalų forma, tai yra tekstas su dvigubomis kabutėmis, pvz.: "Teksto literatas". Teksto pažodžiui atėjus kaip įvestis į procesorių tekstas, esantis tarp kabučių, įrašomas į pagrindinę atmintį kaip baitų raidžių eilutė. Tokiu atveju pirmojo baito adresas ir baitų skaičius (teksto ilgis) įstumiami į krūvą. Teksto literalą, prieš kurį yra taškas, procesorius interpretuoja kaip komandą „tekstą tarp kabučių siųsti į terminalo ekraną“. Pavyzdžiui, įvedant simbolių derinį į procesoriaus įvestį. "Nėra atminties" ekrane pasirodys pranešimas: Nėra atminties.

Atskiro simbolio kodas įstumiamas į krūvą kaip mažiausiai reikšmingas viršūnės baitas, kai šis simbolis patenka į procesoriaus įvestį kartu su jam iš anksto atsiųstu # ženklu. Pavyzdžiui, #L simbolių derinys į krūvą išsiųs raidės L kodą, o # 5 simbolių derinys atsiųs kodą skaičių 5. Komanda TOB, išduodanti baitą į terminalą, rodo simbolį, kurio kodas yra žemoje baitas krūvos viršuje.

Net ir tiesioginio komandų vykdymo režimu PRSP procesorius gerokai pranoksta įprasto skaičiuotuvo galimybes, be duomenų apdorojimo operacijų, suteikdamas vartotojui įvardintų duomenų deklaravimo ir procedūrų apibrėžimo priemones, kurias vėliau galima naudoti kartu su pagrindinėmis. operacijos. Duomenų pavadinimai deklaruojami ir procedūros apibrėžiamos naudojant specialias komandas.

Pavyzdžiui, norėdami sukurti 16 bitų kintamąjį, pavadintą, tarkime, TEMP, įveskite klaviatūroje ir įveskite jį į procesoriaus įvestį naudodami klavišą komandą

VAR TEMP

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

VAR TEMP 0! TEMP

Dabar į procesoriaus įvestį patekus pavadinimui TEMP, dabartinė šio kintamojo reikšmė bus įstumta į krūvą, o naujos vertės, išėjusios iš krūvos, priskyrimas gali būti atliktas komanda! TEMP.

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

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

FCT procedūra norimam rezultatui gauti turi padauginti duotą skaičių N iš nuosekliai mažėjančių skaičių, pradedant nuo N-1 iki 1, t.y. tik N-1 kartas. PARADISE kalba tai užprogramuojama t-kartu vykdant procedūrą P: DO P, kur P yra procedūros pavadinimas, t yra dabartinė krūvos viršaus reikšmė, nurodanti, kiek kartų reikia procedūrai P. būti įvykdytas.

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

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

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

Komentarai laužtiniuose skliaustuose atspindi esamą operandų krūvos būseną. Komanda! K, su kuriuo prasideda apibrėžta procedūra, kintamajam K priskiria skaičiaus N, paimto iš krūvos, reikšmę. Tada K du kartus įstumiamas į krūvą, o atėmus 1 krūvos viršuje, įvykdomas susidaro pakartotinė procedūra F lygi N-1. Po to seka komanda DO F, kuri nurodo kilpą, po kurios krūvos viršuje bus reikalinga faktorinė 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 padaugina iš K dalinį R. apskaičiavimo rezultatą, esantį krūvelėje:

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

Abiejų procedūrų teisingumo patikrinimas atliekamas po vieną vykdant jų apibrėžimus, terminalo ekrane po kiekvienos komandos pateikiant operandų krūvos turinį ir kintamojo K reikšmę. Kai FCT procedūra baigiama, viršuje krūvoje turi būti reikšmė N !, o kintamojo K reikšmė turi būti lygi 1.

Patikrintos ir ištaisytos procedūros (jei patikros metu buvo aptiktos klaidos) testuojamos pritaikant jas atskiroms skaičiaus N reikšmėms. Kadangi F procedūra yra įdėta į FCT, ji tikrinama automatiškai paskutinio testavimo proceso metu. Reikėtų nepamiršti, kad rezultato reikšmės neturi viršyti maksimalaus teigiamo skaičiaus, kurį komplemento kode vaizduoja 32 bitų ilgio žodis: 2147483647, t.y. FCT pateikia teisingus rezultatus tik esant N = 1, ..., 13.

FCT naudojimas nesiskiria nuo paties procesoriaus instrukcijų naudojimo: norint gauti rezultatą, reikia 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ūrą galima atlikti be pagalbinio kintamojo, naudojant operaciją C, kuri išstumia savo viršūnės kopiją į krūvą, ir operacijas E2. ir E3, kurie atitinkamai keičia viršūnę 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 „grynai stack“ procedūros privalumas yra visiškas jos savarankiškumas: kaip ir pagrindinės procesoriaus dėtuvės operacijos, ji atliekama tik operandų dėtuvėje, nereikalaujant jokios kitos atminties ir nesukeliant jokių pakeitimų kituose procesoriaus komponentuose.

Apibrėžtų procedūrų pavadinimai ir deklaruojami duomenys įrašomi į procesoriaus žodyną, kuris nustato šių pavadinimų ryšį su įvardintais objektais, tai yra su pagrindinėje atmintyje esančiais procedūrų korpusais ir su šios atminties elementais, skirtais saugoti deklaruotus duomenis. 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 buvo nesėkminga, tada, kaip jau minėta, bandoma žodį interpretuoti skaitiniu būdu, o jei nepavyksta, tada pasirodo pranešimas, kad procesorius nežino žodžio.

Sudarius procedūros apibrėžimą, į žodyną įrašomas šios procedūros pavadinimas ir jos kūno rodyklė (adresas), kuri yra procedūrų ir duomenų, sudarančių apibrėžimą, rodyklių seka. Kitaip tariant, vidinis procedūrų korpuso atvaizdavimas 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 – grandinės. mašinos instrukcijas. Tai vadiname vidiniu programos procedūriniu kodu.

Kai kartu su P procedūros apibrėžimų sudarymu sudaromi visų procesoriui nežinomų įdėtųjų procedūrų apibrėžimai, susidaro visa rodyklių hierarchija, leidžianti vykdyti P procedūrą pateikiant tik jos pavadinimą. procesoriaus įvestis. Šiuo atveju įdėtųjų procedūrų pavadinimai, sudaryti atsižvelgiant į P apibrėžimą, jei nereikia nurodyti šių procedūrų atskirai, nėra prasmės jų saugoti žodyne. Kai kuriais atvejais patartina uždaryti prieigą prie vienos ar kitos žodyno dalies, paliekant, ko gero, galimybę atlikti tik kai kurias procedūras.

Siekiant patenkinti tokius reikalavimus, žodynas įgyvendinamas kaip subžodynų rinkinys, kuriame apibrėžiamos operacijos, leidžiančios kurti ir naikinti antrinius žodynus ir jų dalis, ištrinti pavadinimus, uždaryti ir atverti prieigą prie tam tikrų antrinių žodynų. . Kiekvienas antrinis žodynas turi pavadinimą, kuris naudojamas su juo susijusiose komandose. Papildomų žodynų pavadinimai turi prasidėti raide $, pavyzdžiui: $ PRIME, $ EDIT, $ FLOAT, $ TEXTPROC, $ GRAPHICS.

$ PRIME antrinis žodynas, kuriame yra pagrindinis DSPP žodžių rinkinys, paleidus procesorių, yra atviras ir prieigai prie jame esančių žodžių, ir papildymui naujais žodžiais. Į jį įvesti nauji žodžiai, jei reikia, gali būti ištrinti kartu su jais susijusiais elementais naudojant komandą FORGET $ PRIME. Po to galimybė toliau įvesti žodžius į šį antrinį žodyną suteikiama vykdant komandą GROW $ PRIME, kuri leidžia dar kartą padidinti $ PRIME antrinį žodyną, o viską, kas jame įvestą, vėl gali ištrinti FORGET $. PRIME komanda ir kt. Šiame režime PRIME naudojamas eksperimentuojant su mažais programų fragmentais, atskirais pavyzdžiais, įvertinimais, taip pat prireikus įtraukiant naujus žodžius į $ PRIME antrinį žodyną sistemos kalbos kūrimo tvarka.

Kurdami atskirą programą, jie sudaro jai savo žodyną, ir tai pasiekiama tuo, kad programos tekstas prasideda komanda

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

Žmogus šią komandą suvokia kaip antraštę, po kurios laužtiniuose skliaustuose pateikiamas komentaras, keliais žodžiais apibūdinantis programos įgyvendintą funkciją. Procesoriaus atveju tai prilygsta komandų sekai

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

Todėl kiekvieną kartą gavus programos tekstą į procesoriaus įvestį, ankstesnė jos versija bus ištrinta ir bus atidarytas tokiu būdu išvalytas antrinis žodynas, kad būtų galima įvesti naują programos versiją tuo pačiu pavadinimu. Tai patogu atliekant sukurtos programos taisymus, taip pat ją modifikuojant ateityje.

Sukurtos programos tekstas įvedamas ne tiesiai iš klaviatūros į procesoriaus įvestį, o formuojamas teksto rengyklės buferyje. Komanda E (Edit) nustato redagavimo režimą, 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. Specialių klavišų, valdančių esamos padėties indikatoriaus (žymeklio) judėjimą ekrane, bei kitų klavišų paspaudimu duodamų redagavimo komandų pagalba įvestą tekstą galima taisyti ir keisti, atliekant trynimus ir įterpimus, perkeliant jo fragmentus. iš vietos į vietą ir pan.

Teksto įvedimo ir redagavimo pabaigoje redaktorius išjungiamas paspaudus E klavišą vienu metu su (tiksliau, su anksčiau paspaustu) klavišu , ir sistema pereina į pagrindinį DSPP komandų režimą. Panašus veiksmas vadinamas tiesiog paspaudus klavišą ... Šiuo režimu redaktoriaus buferio turinys gali būti siunčiamas į procesoriaus įvestį komanda PF (PerForm - execute). Taip bus vykdomos visos tekste esančios komandos, ypač komanda PROGRAM $<имя>ištrins į antrinį žodyną įvestą $<имя>nuo paskutinio šios komandos vykdymo, duomenų ir procedūrų pavadinimai bei atitinkami elementai, iš naujo atidarant šį antrinį žodyną papildymui. Duomenų deklaravimo ir procedūrų apibrėžimo komandos įves įvestus pavadinimus kartu su nuorodomis į šiais pavadinimais nurodytus duomenis ir pagal apibrėžimus sudarytas procedūrų įstaigas.

Pasibaigus atsisiuntimui, procedūros ir duomenys pateikiami nuorodai pagal jų pavadinimus, surinktus iš klaviatūros, o programos teisingumą galite patikrinti vykdydami procedūras didėjančia tvarka, t.y. pradedant nuo tų, kurių apibrėžimuose nėra nepatikrintų procedūrų. Prieš pradedant tikrinimą, svarbu įsitikinti, kad programoje nenaudojami neapibrėžti pavadinimai. Procesorius rodo juos ekrane UNDEF komanda. Norėdami papildyti programos tekstą šių pavadinimų apibrėžimais, taip pat ištaisyti kitas tikrinimo proceso metu aptiktas klaidas, naudokite komandą E, kad iškviestumėte redaktorių ir atliktumėte atitinkamą programos šaltinio kodo modifikaciją redaktoriaus buferyje, o tada perjunkite procesorių į pagrindinį režimą ir įkelkite buferio turinį su PF komanda.

Patikrinus ir išbandžius programą, jos šaltinio kodą galima nukopijuoti iš redaktoriaus buferio į diską naudojant komandą OE f, kur f – failo, kurio forma programa bus įrašyta į diską, pavadinimas. Ateityje failo turinį bus galima įkelti į procesoriaus įvestį su komanda LOAD f, taip pat nukopijuoti į redaktoriaus buferį kaip priedą prie jame esančio teksto su komanda IE f. Pagal numatytuosius nustatymus failai turi .dsp plėtinį. Buferis gali būti išvalytas anksčiau naudojant KE komandą. Taip pat galima atspausdinti buferio turinį su LPE komanda.

Įkėlus programą, paruoštą vykdyti, galima išvalyti sukurtą žodyną $<имя>su komanda CLEAR $<имя>... Vykdydamas šią komandą, procesorius pašalina neįsipareigotus vardus iš įvardyto antrinio žodyno, t.y. visi vardai, išskyrus tuos, kurių priešdėlis yra :: (du dvitaškiai) prieš jų apibrėžimus. Tokiu atveju ištrinami tik patys pavadinimai (žodyno įrašai), o su jais susiję procedūrų ir duomenų korpusai yra išsaugomi ir pasiekiami programos vykdymo metu naudojant vidines nuorodas, sukurtas kompiliavimo metu, tačiau jos nebepasiekiamos iš išorės. Norėdami atkurti galimybę pasiekti iš išorės, pavyzdžiui, jei reikia kompiliuoti papildymą ar pakeitimą, turite iš naujo įkelti programos šaltinio kodą.

Vardai gali būti neprieinami iš išorės, nepašalinant jų iš žodyno naudojant komandą SHUT $<имя>, uždaro prieigą prie visų pavadinto antrinio žodyno žodžių. Žodynas, skirtas vartoti jo žodžius, atidaromas komanda USE $<имя>... Taip pat yra TIK $ komanda<имя>, kuri uždaro visus antrinius žodynus, išskyrus pavadintąjį, 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 žiūrint į jo žodžius atvirkštine tvarka nei jie buvo įrašyti žodyne, t.y. pradedant nuo paskutinio įvesto. Todėl žodyne daugiau nei vieną kartą apibrėžtam vardui galioja naujausias apibrėžimas. Jei antrinis žodynas, kuriame yra šis paskutinis apibrėžimas, uždaromas, paieška tęsiama iki pirmojo turimo žodyno įrašo su nurodytu pavadinimu ir šiame įraše nurodytas apibrėžimas.

Keletas žodžių apie duomenų įvedimą ir išvedimą. Kaip jau minėta, procesorius bando žodyne nerasta vykdomosios programos žodį interpretuoti kaip skaičių ir, jei pavyks, įstumia dvejetainį šio skaičiaus atitikmenį į krūvą. Skaičius į krūvą gali būti įvestas naudojant TIN komandą, kuriai reikia įvesti įvestą skaičių klaviatūra. Taip pat yra komandos, leidžiančios iš klaviatūros įvestą simbolį įstumti į krūvą: TIB - su ekranu, TRB - nerodant šio simbolio ekrane. Šiuo atveju raidės kodas vaizduojamas mažiausiai reikšmingu 32 bitų žodžio baitu, įstumtu į krūvą, iš kurio reikšmingiausi 3 baitai yra lygūs nuliui.

Viršutinės krūvos turinį galima įvesti atitinkamai kaip skaičių ir kaip raidę. Komanda TON išvesties lauke, kurios plotį nustato viršūnė, parodo skaitinę poeilės reikšmę jos vykdymo metu nustatytoje skaičių vaizdavimo sistemoje. Komanda TOB į ekraną atspausdina simbolį, kurio kodas yra apatiniame krūvos viršaus baite. Abiem atvejais išvestį lydi argumentų pašalinimas iš kamino.

DSPP procesorius turi išorinių ir vidinių (komandinių) pertraukimų aparatą ir suteikia šias jų apdorojimo priemones. Išorinio pertraukimo tvarkymo procedūra apibrėžiama panašiai kaip įprasta procedūra, tačiau prieš dvitaškį pridedamas INT priešdėlis. Tokios procedūros pavadinimas yra susietas su pertraukimo vektoriaus adresu su komanda:

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

Komandos pertraukimas yra pavadinta operacija, iškviečianti atsakymo procedūrą. Šios operacijos pavadinimą nustato komanda TRAP, kuri susieja ją su vadinamąja galutinio atsakymo procedūra, atliekama, 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 EON komandos iškvietimo pavadinimu, vykdoma preliminariai išėjus iš procedūros, kurioje yra EON komanda, ir naudojant operandų krūvos rodyklės reikšmę, kuri įvyko EON vykdymo metu.

ROJAUS sintaksė

ROJAUS kalbos abėcėlė apima lotynų ir rusų kalbas, didžiąsias ir mažąsias raides, dešimtainius skaitmenis, matematinius ir kitus specialiuosius simbolius. Abėcėlės elementai (nariai) vadinami raidėmis. Išorinis raidės atvaizdas yra atspausdintas jos vaizdas (spausdintas ženklas). PRSP procesoriaus viduje kiekvienas išspausdintas simbolis yra pavaizduotas baitu, kurio reikšmė yra dvejetainis šio simbolio kodas. Išorinį vaizdą paverčia vidiniu ir atvirkščiai įvesties / išvesties įrenginys (klaviatūra, ekranas, spausdintuvas). Kad būtų patogiau, kodo skaitinė reikšmė išreiškiama dešimtaine, šešioliktaine arba aštuntaine sistema, atitinkamą skaičių įvardijant dešimtainiu, šešioliktainiu arba aštuntainiu raidiniu kodu.

Visi ROJAUS kalbos objektai yra sukurti iš raidžių ir vaizduoja linijines baigtinio ilgio raidžių grandines, vadinamas žodžiais. Vienas po kito einančių žodžių skyriklis yra nespausdinamas simbolis (tarpas). Tarpų eilutė yra tokia pati kaip viena erdvė. Be to, žodžių skyriklio funkciją atlieka komanda „Eiti į kitos eilutės pradžią“, įvesties įrenginių klaviatūrose pažymėta simboliu arba ir kartu su raidėmis jis turi vidinį kodo baitų atvaizdavimą. Taigi eilutės pradžioje ir pabaigoje nereikia atskirti tarpų.

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

DSPP procesorius skiria žodžius pagal pirmąsias septynias raides, identifikuodamas juos polimeriniu 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ėžtų objektų (duomenų, procedūrų) pavadinimais. Taigi žodyne esantys žodžiai yra arba veiksmų (operacijų, procedūrų) pavadinimai, arba duomenų pavadinimai (konstantos, kintamieji, masyvai).

Kai žodyne nėra atpažįstamo žodžio, 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 simbolis: žodis, prasidedantis simboliu #, dėl kurio procesorius gauna iš karto sekantį simbolį kaip nurodytą kodą, pavyzdžiui: #A - didžioji lotyniška raidė A raidė, # 5 - skaitmuo 5 raidė, # - tarpas pažodinis, ## - pažodinės raidės #;

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

    komanda siųsti tekstinį pranešimą į ekraną: rodomo pranešimo tekstas, atskirtas kairėje tašku-dvigubomis kabutėmis ir dvigubomis kabutėmis dešinėje ir atskirtas žodžių skyrikliais, pvz.: "Krūvas tuščias ";

    komentaras: savavališkas tekstas, įterptas laužtiniuose skliaustuose ir atskirtas skyrikliais, pavyzdžiui:.

Literatai ir pranešimo pateikimo ekranui komanda veikia kaip DSPP kalbos objektai kartu su žodyno atpažįstamais žodžiais, o komentarus DSPP procesorius visiškai ignoruoja – jie skirti žmogui, o ne mašinai. Jei žodžio žodyne nerasta ir jis nesusijęs su išvardytomis konstrukcijomis, procesorius pateikia pranešimą: „Nežinau<неопознанное слово>".

Dėl ypatingos reikšmės, suteiktos 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, skirtuose įtraukti į žodyną.

Žodžių seka procesoriaus įvestyje interpretuojama kaip procesoriaus vykdomų instrukcijų seka. Šiuo atveju išskiriami trys žodžių tipai:

1) atliekami savarankiškai, t.y. kurios yra vieno žodžio komandos (monologai);

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

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

Monologai apima pažodinius žodžius, duomenų pavadinimus, daugumą įvesties / išvesties, duomenų tikrinimą ir konvertavimą dėtuvėje ir vartotojo nustatytas procedūras. Pavyzdžiui: 1987 m. – skaitinis pažodinis, # 5 – skaitmuo 5 litras, schemų sąrašas – teksto literatūra, 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ą, nelyginį skaičių pakeičiant 1, lyginiu 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 – vėl ir vėl vykdykite CHECK procedūrą,

USE $ 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 po vieną žodį, o priešdėlis BR + – du žodžius. Tačiau priešdėlis: (dvitaškis) leidžia sudaryti savavališko ilgio komandą, pradedant nuo trijų žodžių. Komandos pabaiga yra žodis; (kabliataškis). Savavališkas ilgis taip pat būdingas komandai - pastovus deskriptorius CNST A1 ... AJ; ir procedūra kelių pasirinkimų 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 būdą. 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į, gausime komandą BYTE VAR X, kuri nurodo sukurti 8 bitų kintamąjį. (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ų CLEAR procedūrai, kuri pašalina nefiksuotus žodžius iš žodyno. Vardai, įvesti į žodyną kuriant programą komandomis, skirtomis duomenims aprašyti ir procedūroms apibrėžti, po to, kai programa buvo sukurta ir išbandyta, gali būti pašalinti iš žodyno, išskyrus keletą, reikalingų baigtai programai prižiūrėti. . Pašalinimas atliekamas naudojant komandą CLEAR $<имя подсловаря>, nurodydamas išvalyti su programa susijusį žodyną, jame išsaugant tik tuos žodžius, kurių apibrėžimuose yra priešdėlis ::. Komandų, kurios generuoja nepašalinamus žodžius, pavyzdžiai:

:: BYTE CNST LITCODE # # 0 #A;

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

Kaip rodo antrasis pavyzdys, kuriame yra priešdėliai :: ir BYTE, komandoje gali būti daugiau nei vienas priešdėlis.

Taigi, DSPP komanda gali būti arba vienas žodis (monologas), arba frazė (frazė), kuri prasideda priešdėliu ir apima žodžių skaičių, nustatytą tam tikram priešdėliui, o jei priešdėlis leidžia savavališką žodžių skaičių. , tada jo pabaigoje yra skiriamasis žodis arba tai gali būti frazė su specialiais priešdėliniais žodžiais priešais.

Pagrindinėje DSPN kalboje nėra sudėtingesnių sintaksinių konstrukcijų nei komanda ir nėra jokių kitų konstrukcijų, išskyrus aptartas aukščiau. Netgi tokie būtini dalykai programavimo kalbose, kaip išraiška ir funkcija, nėra pagrindinėje kalboje ir gali būti įvesti, jei reikia, 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 procese apima komandų seką, apibrėžiančią į ją įtrauktus žodžius. Dalyvaujančiose komandose gali būti žodžių, žyminčių komandų grandines, kuriose taip pat galimi žodžiai, nurodantys su jais susijusias grandines ir pan. iki tokio lygio, kai komandose yra tik primityvai.

Bendrasis PARADISE 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. DSPP 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 vykdomas procedūrų paketų, įkeliamų į procesoriaus įvestį, be pagrindinės sistemos, pavidalu.

Kita vertus, bazinę sistemą galima papildyti specialiais jos pagrindu įdiegtų DSP programų mašinos efektyvumo didinimo įrankiais. Šios priemonės apima galimybę apibrėžti atskiras procedūras tiesiogiai naudojamos mašinos instrukcijos kode. Procedūros apibrėžimo būdas neturi į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

Stack operacijos

Operandų krūva yra vienas iš pagrindinių DSP procesoriaus architektūros elementų. Dauguma procesoriaus instrukcijų naudoja krūvą, sunaudoja iš jos reikalingus operandus ir į jį įkelia rezultatus. Duomenų, esančių dėtuvėje, interpretacija priklauso nuo sprendžiamos problemos esmės, tai yra, galiausiai ji yra patikėta programuotojui. Dėl to, kad į krūvą patekusi reikšmė iš tikrųjų praranda pavadinimą, iš programos teksto sunku nustatyti, kuriems operandams taikoma ta ar kita operacija, kokie jos rezultatai. Todėl norint aiškiai nurodyti operandus ir procedūrų rezultatus PARADISE kalba, naudojami komentarai. Tokiu atveju nereikalaujama (ir ne visada įmanoma) aprašyti visą krūvos turinį. Būtina pakomentuoti viršutinę kamino dalį, kuriai daro įtaką joje atliekama procedūra, nes be jos prarandamas programos matomumas ir sunku ją patikrinti.

Norint pasiekti programos nuoseklumą, šie komentarai turėtų būti parašyti laikantis kelių paprastų taisyklių. Kaip ir bet kuris komentaras, krūvos 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 pozicijos pateikiamos iš kairės į dešinę, pradedant giliausiu elementu ir baigiant krūvos viršuje. Atskiro operando aprašymas gali būti skaičius, pavadinimas, posakis ar bet koks kitas reikšmingas įrašas, paaiškinantis krūvoje esančios reikšmės reikšmę. Kartais tam tikrai krūvos pozicijai gali būti nurodytos kelios galimos reikšmės. Šiuo atveju reikšmės pateikiamos 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, o viršuje gali būti 1 arba 0, poskyryje - skaitinė reikšmė, lygi N + 1, o žemiau it – tam tikras skaičius, interpretuojamas kaip pradžios adresas.

Kad būtų patogiau nurodyti reikiamą rietuvės padėtį, naudosime gylio sąvoką. Darysime prielaidą, kad krūvos viršus yra 1 gylyje, posluoksnis yra 2 gylyje ir pan. Visų pirma, vertė, pavyzdyje pažymėta kaip „skelbimo pradžia“. yra 3 gylyje.

Pradėsime pagrindinės DSPC kalbos tyrimą su komandomis, skirtomis reikšmių įkėlimui į krūvą. Paprasčiausia (ir dažniausiai naudojama) šio tipo komanda yra skaitinis literalas, tai yra aiškus konstantos, kurią reikia perkelti į krūvą, nuoroda. Pavyzdžiui, tarkime, kad į krūvą norime įstumti skaičius 28, -5 ir 11. Norėdami tai padaryti, klaviatūra įveskite šią eilutę:

28 -5 11 ir paspauskite klavišą (vežimas atgal). Procesorius atpažįsta įvestus skaičius ir po vieną įstumia juos į krūvą, kad viršuje būtų 11. Norėdami tai patikrinti, užtenka ekrane atspausdinti krūvos viršaus reikšmę. Tam naudojama DSPP komanda su pavadinimu. (taškas). Įvesdami "tašką" klaviatūra ir paspausdami , ekrane gauname atsakymą: 11, kuris atitinka paskutinę į krūvą įstumtą reikšmę. Pakartotinis „taško“ vykdymas veda prie to paties rezultato – ši komanda atvaizduoja tik viršūnę, nekeičiant krūvos būsenos.

Kad būtų rodomas visas kamino turinys, DSPP yra komanda .. (du taškai). Ją įvykdę, ekrane gauname eilutę:

Kaip matote, spaudinio forma atitinka priimtas 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 atvaizduoti, skaičiai pateikiami dviejų komplemento kode. Atitinkamai, PRSP procesorius gali teisingai suvokti tik sveikuosius skaičius, esančius diapazone nuo -2147483648 iki 2147483647. Jei įvestas skaičius neatspindi 32 bitų (su ženklu), tada reikšmingiausi bitai, kurie netelpa, yra atmetami.

Nagrinėjamuose pavyzdžiuose buvo daroma prielaida, kad PRSP procesorius yra dešimtainio skaičių įvesties / išvesties režimu. Norėdami nustatyti šį režimą PARADISE 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. DSPP galima dirbti su kodais, pateiktais dvejetaine, aštuntaine arba šešioliktaine skaičių sistema. Norint nustatyti norimą režimą, pakanka įvykdyti vieną iš trijų komandų: B2, B8 arba B16, po kurių procesorius suvoks ir atspausdins visus įvestus kodus nurodytoje skaičių sistemoje.

Šią funkciją galima naudoti dešimtainiams skaičiams konvertuoti į bazines 2, 8 ir 16. Pavyzdžiui, norėdami konvertuoti skaičių 29, turite įvesti ir vykdyti šią eilutę:

B10 29 B2. B8. B16. Dėl to procesorius 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į vaizdą, ty su nuliais priekyje ir be ženklų „+“, „-“. Vykdant eilutę B10 -2 B8. bus grąžintas skaičius 37777777776, kuris yra -2 dviejų komplemento aštuntainis atvaizdas.

Dirbant su šešioliktainiais kodais, gali įvykti skaitinių literalių ir DSPP 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 nustatymo komanda ir kaip šešioliktainė konstanta. Kad išvengtumėte dviprasmybių, skaitinius literatus pradėkite nereikšmingu nuliu, pvz., 0B8.

DSPP procesoriaus instrukcijų sistemos pagrindas yra duomenų konvertavimo į krūvą operacijos. Bendra taisyklė, reglamentuojanti šių operacijų veikimą, yra ta, kad kiekviena operacija sunaudoja (pašalina) jai reikalingus operandus iš krūvos ir išstumia rezultatų reikšmes (jei yra) į jų vietą.

Apsvarstykite procesoriaus instrukcijas, kurios įgyvendina keturias aritmetines operacijas: sveikųjų skaičių sudėjimą, atimtį, daugybą ir padalijimą. Norint juos pavaizduoti ROJAUS kalba, naudojami žodžiai: atitinkamai +, -, * ir /. 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, pakanka iš klaviatūros įvesti šią eilutę (manoma, kad nustatytas dešimtainis įvesties / išvesties režimas):

123 45 +

Jei dabar parodysime kamino turinį (naudodami komandą ..), papildymo rezultatas taps matomas:

Komutacinė daugybos operacija veikia panašiai.

Atliekant nekomutuojamąsias atėmimo ir padalijimo operacijas, atimamasis (dividendu) laikomas antrinis krūvelis, o atimamasis (daliklis) – viršutinė dalis. Pavyzdžiui, norėdami apskaičiuoti skirtumą 151-68, turite vykdyti eilutę:

151 68 -

Programa, skirta atlikti aritmetinį veiksmą PARADISE 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. Tarkime, kad, pavyzdžiui, turime 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 DSP procesoriumi.

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

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

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

Programuojant dažnai reikia padidinti arba sumažinti reikšmės reikšmę 1 arba 2. Į PARADISE kalbą į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+. Įvadas į šių komandų kalbą yra skirtas efektyvumo sumetimais.

Be to, siekiant padidinti pagrindinės DSP procesoriaus kalbos efektyvumą, yra komandos T0 ir T1, kurios pakeičia krūvos viršaus reikšmę 0 ir 1, nepriklausomai nuo to, kokia vertė buvo viršuje prieš nurodytą komandą. Pavyzdžiai:

NEG, ABS ir SGN komandos taip pat galimos dirbti su skaitmeniniais duomenimis. NEG komanda apverč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 vietoj jos pakeičia ištraukto skaičiaus ženklą. : -1 - jei skaičius neigiamas, 1 - jei teigiamas, 0 - jei lygus nuliui. Pavyzdžiui:

5 NEG [-5] ABS SGN

MIN ir MAX komandos pagrindine kalba leidžia rasti mažiausią ir didžiausią du sveikuosius skaičius. Šių instrukcijų operandai yra du skaičiai krūvos viršuje ir apačioje. MIN instrukcija palieka mažiausią iš parametrų krūvoje, 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, skirta patikrinti, ar skaičius, esantis krūvos viršuje, patenka į nurodytą diapazoną nuo a iki b (įskaitant ribas), palieka ženklą ant krūvos: 1, jei skaičius yra diapazone, ir 0, jei ne:

Pavyzdžiui, SEG [funkcija]:

Be instrukcijų, kaip dirbti su skaitmeniniais duomenimis, DSPP procesoriaus instrukcijų 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ų 31, o dešiniausias – 0. Mažėjanti komponento numeracija pakartoja daugelio mikroprocesorių priimtą mašininio žodžio bitų numeraciją.

Komandos, vykdomos bitų vektoriuose, pirmiausia apima Bulio algebros bitines 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šaus ir apačios bitų jungtis &, nustatant i-ąjį rezultato bitą, i = 31,30, ..., 0, į 1, jei abiejų operandų i-ieji bitai yra lygūs 1 , o kitais atvejais nustatant i-ąjį bitą lygų 0;

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

    mazgų ir submazgų bitų pridėjimas (neekvivalentiškumas) "+", kuris nustato i-ąjį rezultato bitą į 0, jei abiejų operandų i-tieji bitai turi tokias pačias reikšmes, ir nustato i-ąjį rezultato bitą. rezultato bitą į 1, jei operandų i-ųjų bitų reikšmės skiriasi.

525 INV 722 ir 136 ir 0 325 "+"

Bitinė jungtis dažnai naudojama žodžio bitams pašalinti (išvalyti). Norėdami tai padaryti, sujunkite pradinį žodį su kauke, kurios skaitmenyse, kuriuos reikia išvalyti, yra nuliai, o likusiuose skaitmenyse yra vienetai. Pavyzdžiui, jei kuriame nors žodyje X reikia nulinti bitų skaičių nuo 3 iki 5, turite atlikti jo bitų ryšį su kauke 37777777707. Jei X = 235, gauname:

Bitinis disjunkcija gali būti naudojama norint įterpti norimą bitų šabloną į iš anksto išvalytą žodžių grupę. Pavyzdžiui, tarkime, kad norite įdėti dvejetainį derinį 010 į 3–5 žodžio, likusio krūvoje dėl paskutinio pavyzdžio, bitus. Tai galite padaryti taip:

Bitų manipuliavimo operacijos taip pat apima logines poslinkio komandas:

    kairysis poslinkis SHL – kiekvienas krūvos viršaus bitas, pradedant nuo 31-ojo, įgauna sekančiojo reikšmę mažėjančia skaičių tvarka, 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 skaičių tvarka, o 31-asis bitas – 0;

    poslinkis išilgai viršutinio SHT – viršutinis elementas iškeliamas iš krūvos ir traktuojamas kaip sveikasis skaičius N, nurodantis, kiek poslinkių ir kuria kryptimi reikia atlikti krūvos viršuje: kai N> 0, perkeliamas į išėjo, 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 skaitmenimis į kairę:

B10 -5 3 SHT [-40]

Tokiu atveju reikia atsižvelgti į perpildymo galimybę.

Perkėlimas į dešinę gali būti naudojamas kaip visiškai dalijimo iš 2 iki N laipsnio operacija tik teigiamiems skaičiams, nes reikšmingiausias (ženklo) bitas nulinamas, kai pasislenka į dešinę. Pavyzdžiui:

kadangi

Komandos pasukti krūvos viršų 1 bitu į dešinę ROR ir į kairę ROL yra panašios į loginio poslinkio komandas, išskyrus tai, kad išplėstinis kraštutinis bitas nedingsta, bet yra nustumiamas į laisvą vietą iš priešingo 32 galo. -Šiek tiek ilgas žodis. Pavyzdžiui (šešioliktainiai skaičiai):

Dvejetainiams kodams apdoroti taip pat yra skirtos DSPP procesoriaus SWB ir SWW komandos. SWB funkcija yra sukeisti dėklo viršaus apatinės pusės baitus, o SWW funkcija – sukeisti krūvos viršaus puses. Pavaizduokime šių komandų veikimą šešioliktainiu įvesties / išvesties režimu (šiuo režimu kiekvienas baitas pavaizduotas dviem šešioliktainiais skaitmenimis):

B16 0ABCD SWB SWB

0ABCDEF12 SWW SWB

Kamino manipuliavimo instrukcijos vaidina svarbų vaidmenį PARADISE kalboje. Jie nekeičia dėklo duomenų reikšmių, o tik keičia jų vietą, todėl lengviau pasiekti operandus, esančius giliai krūvoje.

Yra trys komandos, skirtos pašalinti krūvos narius: D, DD, DS (Drop). Komanda D pašalina vieną (viršutinį) elementą iš krūvos, DD - du elementus, pvz.

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

Komanda, skirta kopijuoti krūvos viršų C (Kopijuoti - kopija), įstumia į krūvą dabartinės jo viršaus vertės kopiją. Tai prilygsta viršutinio kamino elemento dubliavimui: senasis viršus tampa antruoju, o jo kopija tampa nauju. Pavyzdys:

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

[x] C 3 * 4 + * 5 -

Kartu su krūvos viršaus kopijavimo komanda PARADISE kalba taip pat yra komandos C2, C3, C4, kurios kopijuoja elementus, esančius 2, 3, 4 gyliuose. Jų darbą galima iliustruoti šiais pavyzdžiais:

C2 C4

Taip pat yra CT komanda, skirta kopijuoti elementą kamino viršuje nurodytame gylyje. Vykdydamas CT, procesorius iškelia viršutinį elementą iš krūvos, naudoja jo vertę kaip nukopijuoto elemento gylio indikatorių ir nustumia pastarojo kopiją į krūvą. Taigi, 5 gylyje esančio elemento kopijavimas nustatomas 5 CT komandų pora, o jas įvykdęs procesorius nustums skaičių 5 į krūvą, o tada vykdys CT komandą. KT atlikimas su 1, 2, 3, 4 parametrais atitinka atitinkamai C, C2, C3, C4.

Keitimo komandos E2, E3, E4 (Keisti – keistis) atlieka pirmojo (viršutinio) krūvos elemento permutaciją atitinkamai su 2, 3, 4, ty su elementu, esančiu 2, 3 gylyje. , 4. Pavyzdžiui:

E3 E2

Norint pakeisti didesnį gylį, naudojama ET komanda, kuri, kaip ir CT, naudoja krūvos viršaus reikšmę kaip elemento gylio rodiklį, kuris keičiamas su pirmuoju elementu. Pavyzdžiui:

5 ET

ET komanda su 2, 3, 4 parametrais atitinka E2, E3, E4 komandas.

Norėdami iliustruoti kopijavimo ir bendrinimo komandų naudojimą, apsvarstykite mokomąją problemą. Kiemelyje yra trys skaičiai. Būtina užlipti ant kamino:. Galima pasiūlyti tokią programą, kurios prasmė aiškėja iš komentarų.

C3 C3 C3 +

E4 + E4

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

Programos dažnai turi palyginti skaitines reikšmes tarpusavyje ir atlikti įvairias procedūras, priklausomai nuo palyginimo rezultatų. Yra palyginimo komandos PARADISE kalba<, =, >... Jie apibrėžiami skaičiais ir dėl to pateikia skaitines reikšmes 0 ir 1. Pavyzdžiui, komanda< потребляет из стека два элемента и засылает в стек число 1, если значение нижнего элемента оказалось меньше значения верхнего, а в противном случае засылает 0. Например, в результате выполнения последовательности 5 -20 < в стек будет заслан 0. Команда = засылает 1 в случае равенства потребленных ею элементов. Команда >siunčia 1, kai apatinis elementas yra didesnis nei viršutinis. Norėdami užprogramuoti negriežtus palyginimus (mažiau arba lygūs, didesni arba lygūs), naudokite komandą NOT, kuri krūvoje esančią vertę, kuri nėra nulis, pakeičia nuliu, o nulį - 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 programavimo sąlygų galimybių išplėtimas suteikiamas naudojant kartu su palyginimo komandomis logines konjunkcijos & (loginis IR) ir disjunkcijos & 0 (loginis ARBA) operacijas. Tarkime, kad krūvelėje reikia gauti 1, jei skaičius x viršūnėje priklauso pusei atkarpos 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, PRSP suteikia vartotojui galimybę apibrėžti įvardintas operacijų sekas, vadinamas procedūromis. Tegul reikia, pavyzdžiui, 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švesti rezultatą į terminalą, o tada taikyti š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 reiškia „procedūros apibrėžimo“ operaciją, o po procedūros pavadinimo yra dvitaškis po skiriamojo tarpo. Apibrėžiančioji komandų seka (procedūros turinys) seka procedūros pavadinimą ir baigiasi kabliataškiu. Trumpai tariant, procedūra apibrėžiama tokia forma:

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

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

Komentarai padeda žmogui suprasti ir naudoti procedūrą, o procesorius tiesiog ignoruoja viską, kas yra skliausteliuose. Todėl, jei įvedate atskiros procedūros apibrėžimą iš terminalo, galite praleisti komentarus.

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

* 2 pikselių 13

* 3 pikseliai 24

* 4 pikseliai 41

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

: PXA C E4 E3 * + * +;

Naudojant PXA, a0, a1, a2, x reikšmės krūvoje turi būti reikiama seka. 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ėžtos procedūros. Pavyzdžiui, galite apibrėžti rutiną P, kuri, be PXA skaičiavimų, įrašys rezultato kopiją į terminalą ir pašalins rezultatą iš krūvos.

: P 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, tai yra, ji veikia kaip laiko skaitiklis.

LAIKO skaitiklis iš esmės negali sustoti: vieno atėmimo procedūra bus atliekama vėl ir vėl, kol veiks procesorius. Tačiau DSPP yra priemonių, 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 pagal jų vietą viena po kitos jos įraše, vadinama linijine. Kad programa būtų lengvai stebima (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 apibrėžia DSPP komandų sekos. Tokia programa, parašyta kaip procedūrų apibrėžimų hierarchija, vadinama struktūrizuota. Struktūrinės programos sudarymo metodas, kurį sudaro laipsniškas sprendžiamos problemos skaidymas į vis mažesnes ir smulkesnes užduotis, vadinamas struktūriniu programavimu.

Struktūrinio programavimo metodu galima sukurti ne tik linijines, bet ir bet kokias programas, jei yra operacijos atlikimo pagal sąlygą, procedūros kartojimo ir išėjimo iš kartotinės procedūros. Tokio tipo komandų rinkinys, esantis DSPP, 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ąlyginio procedūros vykdymo komanda - BRS (BRanch on Sign - to filial by sign) nurodo atlikti vieną iš trijų BRS vardu pavadintų procedūrų, priklausomai nuo krūvos viršaus esamos reikšmės ženklo. Vykdydamas BRS, procesorius iškelia viršutinį elementą iš kamino, patikrina jo reikšmę ir, jei ji yra neigiama, tada atlieka pirmą iš nurodytų procedūrų, jei lygi nuliui, tada antrą, o jei teigiama, tada trečią . Taigi komanda

sukels vieno elemento pašalinimą iš krūvos ir procedūros N vykdymą, jei pašalinta reikšmė yra neigiama, procedūros P vykdymą, jei ji teigiama, ir procedūros Z vykdymą, jei ji yra nulis.

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

: SGN [X] BRS -1 0 1;

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

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

IF komandos atitinka IF-THEN teiginį. Pavyzdžiui, IF-P instrukcija nurodo iškelti viršutinį elementą iš kamino ir patikrinti jo ženklą, o jei šis elementas turi minuso ženklą, tada paleiskite procedūrą P. IF0 P ir IF + P instrukcijos nurodo vykdyti P. procedūrą, atitinkamai tuo atveju, kai iššokęs elementas yra lygus nuliui, ir tuo atveju, kai jo reikšmė yra teigiama.

Kaip pavyzdį, iliustruojantį IF grupės komandų naudojimą, pateikime pagrindinės kalbos ABS komandos apibrėžimą, 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, iššokusio iš krūvos, ženklas sutampa su esančiu komandos žymėjime, tada vykdoma pirmoji pavadinta procedūra, o jei nesutampa, vykdoma antra procedūra. Pavyzdžiui, BR0 P0 P1 instrukcija nurodo atlikti P0 procedūrą tuo atveju, kai elementas, iššokęs iš krūvos, yra lygus nuliui, o jei ši sąlyga netenkinama, tada vykdyti P1 procedūrą.

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

: NE [x] BR0 1 0;

Programos šakojimas dažnai atliekamas po palyginimo komandų (<, =, >), kurių loginė reikšmė yra 1 arba 0, atsižvelgiant į dviejų skaičių palyginimo rezultatą. Pavyzdžiui, pagrindinės kalbos komandą MAX galima užprogramuoti taip:

: MAX C2 C2< IF+ E2 D ;

Šakos komandų grupėje taip pat yra BR pasirinkimo komanda, parašyta tokia forma:

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

Vykdydamas šią komandą, procesorius pirmiausia vykdo procedūrą A1 ir lygina vertę, kurią jis nustūmė į krūvą, su reikšme po juo ankstesniame krūvos viršuje. Jei reikšmės sutampa, tada du viršutiniai elementai pašalinami iš krūvos ir vykdoma procedūra P1, priskirta rodyklei A1, po kurios pereinama prie komandos, einančios po BR komandos (ty aukščiau esančiame įraše programa po žodžio P0 tekste). Jei palygintos vertės nesutampa, tada vienas viršutinis elementas pašalinamas iš krūvos (ty rezultatas A1) ir tie patys veiksmai atliekami su pora A2 P2, tada, jei atitiktis nepavyko, tada su pora A3. P3 ir kt. iki AN PN imtinai. Tuo atveju, kai nė vienas bandymas nesutampa, vykdoma P0 procedūra, pavadinta ELSE žodžio vardu. Paprastai skaitinės konstantos veikia kaip rodyklės procedūros, pavyzdžiui:

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

Atlikus š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, o y = 0 kitu atveju.

Paprastai tariant, rodyklės procedūra gali būti ne tik skaitinė konstanta, bet ir kintamasis arba bet kuri kita procedūra, kuri tenkina paprastą reikalavimą: ji nieko neišmuša iš krūvos ir įstumia vieną reikšmę į krūvą.

Norėdami parodyti, kaip naudojamos sąlyginio vykdymo operacijos, ankstesniame skyriuje modifikuojame procedūrą TIME, kad skaitiklis sustotų, kai nurodoma sąlyga:

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

Dabar ši TIME rutina išsikviečia tik tada, kai krūvos viršus yra teigiamas. Skaitiklis bus suaktyvintas lygiai N kartų, jei iki pirmojo TIME vykdymo pradžios viršūnėje yra teigiamas skaičius N. Pavyzdžiui, norėdami gauti 7 trigerius, turite nustatyti

7 KATAS<ВК>

Kadangi IF + TIME apibrėžime, kaip ir bet kuri sąlyginė operacija, iškelia išbandytą elementą iš krūvos, o šis elementas reikalingas tolimesnėms operacijoms, jis turi būti dubliuojamas įdedant operaciją C (kopijuoti) prieš IF +.

Rekursija nėra pagrindinis būdas atlikti procedūrą kelis kartus. Programavimo kilpoms PARADISE kalba yra komandos RP (Repeat) ir DO (Do - do, execute).

RP W komanda nurodo W procedūrą atlikti vėl ir vėl neribotą skaičių kartų. Kad kartojimas nustotų, W procedūros turinyje turi būti EX (Exit) operacija, kuri turi būti atlikta esant tam tikroms sąlygoms. EX operacija persijungia į procedūros, kuri atliekama po kartotinės procedūros, kurioje yra ši EX operacija, vykdymą programos tekste. Taigi skaitiklis, įdiegtas aukščiau kaip rekursinė TIME procedūra, gali būti užprogramuotas kaip W procedūros pakartojimas, kuris apibrėžiamas taip:

: W [t] 1-C IF0 EX;

Kad skaitiklis veiktų 25 kartus, reikia į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, tai yra viršuje sunaudoja elementą, kuris patikrina savo ženklą ir atlieka išėjimą, 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 reikia atimti mažesnį skaičių iš didesnio skaičiaus, kol skaičiai taps lygūs vienas kitam. Pasiekus lygybę, bus rastas didžiausias bendras daliklis.

Programavimas bus vykdomas kūrimo iš viršaus į apačią metodu. Pirmiausia apibrėžiame GCD procedūrą, kuri nustato 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 turinyje turi būti nurodytas ciklinis dėklo verčių konvertavimo procesas. 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 [mazgas (M, N), mazgas (M, N)] D [mazgas (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šų, tai yra, pirmiausia turite įsitikinti, kad STEP procedūra veikia tinkamai, ir tik tada - GCD.

Naudojant bazinės kalbos DO operaciją, jos vardu pavadinta procedūra kartojama 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 nurodyti

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, kaip tai daroma RP veikimas. Pavyzdžiui, jei DO pakartoja aukščiau aprašytą W procedūrą ir apibrėžime yra IF0 EX, parašius [T] 30 DO W, W pakartos 30, jei T> = 30. Jei 0

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

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

Įdėkite vienetų skaičiaus skaitiklį į papildomą krūvą. Vienetų skaičiavimas susideda iš NUMI procedūros pakartojimo 32 kartus, kai išnagrinėsime vieną žodžio x bitą. Išeinant iš kilpos, reikiamas skaičius turi būti antrinėje krūvoje.

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

Norėdami suskaičiuoti bitus, kurie skiriasi nuo nulio, naudosime faktą, kad vienas reikšmingiausias (31-asis) žodžio bitas yra neigiamo skaičiaus ženklas. Jei tiriamas žodis yra neigiamas, pridėkite vieną prie N. Pasibaigus NUMI procedūrai, tiriamą žodį reikia perkelti vienu skaitmeniu į kairę.

: NUMI C IF-N + SHL;

N + procedūros įgyvendinimas yra gana paprastas: reikia pridėti vieną prie krūvos posluoksnio nekeičiant viršūnių.

: N + E2 1+ E2;

Pakartotinai atliekamose procedūrose gali būti atliekamos RP ir DO operacijos, dėl kurių gali atsirasti įdėtos kilpos, todėl leidžiamas bet koks lizdo gylis. Šiuo atveju yra EXT operacija, skirta išeiti iš įdėtos kilpos, nurodanti lizdo gylį krūvos viršuje. Pavyzdžiui, išėjimas iš dviejų įdėtų kilpų gali būti nustatytas taip:

Reikėtų nepamiršti, kad komandos EXT naudojimas reikalauja ypatingo atsargumo, nes modifikuojant 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 duomenų manipuliavimo mechanizmas PRSP. 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ė DSPN kalba apima keletą 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.

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

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

Vykdydamas šią komandą, procesorius iškelia viršutinį elementą iš kamino ir įrašo jo reikšmę į vietą, skirtą X kintamajam.

Komanda, susidedanti tik iš kintamojo pavadinimo be raidės! Dėl šios priežasties šio kintamojo reikšmė įstumiama į krūvą, o stūmimas atliekamas nukopijuojant atitinkamos atminties vietos turinį, tai yra, kintamojo reikšmė lieka nepakitusi . Taigi, bet koks kintamojo X pavadinimo įvedimas į programą, nebent prieš jį iš karto yra žodis, nurodantis kitokį veiksmą, dabartinė šio kintamojo reikšmė bus perkelta į krūvą, kaip ir tiesiogiai nurodyti skaičiai (skaitiniai literalai). yra stumiami ant kamino.

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

: DIEVE! 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 padidėjo jos aiškumas.

VCTR žodis deklaruoja vienmatį 16 bitų langelių masyvą (vektorių), o šio masyvo reikšmingiausio elemento skaičius pateikiamas pagal viršūnės reikšmę. Pavyzdžiui, dėl rašymo

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

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

[j] EILUTĖ

Naudojant elemento numerį ant krūvos kaip parametrą, vektoriaus pavadinimas ROW priverčia šį skaičių pakeisti atitinkamo elemento reikšme. Jei žodis! yra prieš pat vektoriaus ROW pavadinimą, tada antrinio kelio reikšmė priskiriama šio vektoriaus elementui, kurį nurodo viršūnė, ir krūvos gylis sumažėja 2. Pavyzdžiui, galite nulį 5-asis ROW vektoriaus elementas yra toks:

Taip pat yra galimybė sukurti pastovius vektorius, t.y. 16 bitų skaičių vektoriai, kurių reikšmės buvo nustatytos jos deklaravimo metu ir ateityje nebus keičiamos. 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, stumiančios 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 nustatymo komanda. į įprastų vektorių komponentus. Pavyzdžiui:

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

Skaičius 3 prieš pat ARR reiškia deklaruoto masyvo matmenis.

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

Atitinkamai, šiam elementui dabartinės krūvos viršaus vertės priskyrimas nustatomas 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 - baitų X 6 komponentų vektoriaus 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ų elementai nuskaitomi taip pat, kaip ir 16 bitų žodžių struktūrų atveju. Jei elemento ilgis yra mažesnis nei 32 bitai, išskirta reikšmė dedama į mažiausiai reikšmingą žodį arba baitą krūvos viršuje, o viršutinė viršutinė dalis nulinama. Mažiausiai reikšmingas žodis arba baitas iš 32 bitų ilgio žodžio krūvoje taip pat laikomas žodžio ar baitų struktūros elementui priskirta verte.

Nors pagal numatytuosius nustatymus apibrėžiant duomenis naudojamas 16 bitų žodžio formatas, jis taip pat turi WORD žymėjimą. Patartina naudoti šį išankstinį priešdėlį, kai programa turėtų būti perkelta į kitus įrenginius, kuriuose taip pat yra įdiegtas DSSP ir numatytasis parametras gali skirtis.

Tekstinei informacijai saugoti ir apdoroti dažniausiai naudojamos baitų duomenų struktūros. Taip yra dėl to, kad vienam simboliui užkoduoti kompiuterio atmintyje yra skiriamas vienas baitas. Raidžių kodams nustatyti PARADISE kalba yra konstrukcija #l, kur l yra bet kuri kompiuterio klaviatūroje esanti raidė. DSPP procesorius suvokia šią konstrukciją kaip komandą įstumti l raidę į 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 įsiminti kodus ir, antra, programas daro labiau suprantamas. Visų pirma, galima pateikti tokį pastovaus vektoriaus Y apibrėžimą:

BYTE CNST Y #A #B #C;

Dažnai programoje patogu naudoti simbolinę skaitinės konstantos žymėjimą. Galimas apibrėžimo žodis VALUE, kad būtų suteikta ši galimybė:

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

Darbas su atmintimi pagal fizinius adresus

Nagrinėjamos priemonės suteikia galimybę pavadinti duomenis ir manipuliuoti duomenimis nepriklausomai nuo kompiuterio adresų sistemos. Tačiau pagrindinė kalba taip pat apima priemones, skirtas manipuliuoti atminties elementų adresais. X masyvo kintamojo arba elemento adresas komanda įstumiamas į krūvą

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

Pagrindinio kompiuterio kalbos komanda @ pakeičia ilgo atminties žodžio, esančio krūvos viršuje, adresą reikšme, kurioje yra tas žodis. Pavyzdžiui, Y vertė gali būti įstumta į krūvą vykdant šią eilutę:

@B pakeičia adresą atitinkamo baito reikšme, darant prielaidą, kad aukštų baitų nulis, o @L pakeičia adresą 32 bitų žodžiu.

Taip pat yra komandos, skirtos įrašyti reikšmes į atmintį. Komanda!T į adresą, iššokusį iš krūvos viršaus, įrašo 16 bitų antrinę reikšmę. Komanda!TB sukelia panašų subbaito žemos eilės baito įrašymą į baitą, kurį adresuoja viršuje, o! TL įrašo subbaito 32 bitų žodį į žodį, adresuotą viršuje. Pavyzdžiui, penktajam baitų vektoriaus BV elementui (0: 5) 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 įvesties/išvesties tvarkykles.

Papildomos operacijos su duomenimis ir atmintimi

Siekiant didesnio programų efektyvumo ir kompaktiškumo, į PARADISE kalbą buvo į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 atimti 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ųjų 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 padidins programų efektyvumą ir matomumą.

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

Naudojimo pavyzdys:

tarpo simbolio kodas įrašomas į visus BUF baitų masyvo komponentus.

Dažnai programoje reikia gauti informacijos apie duomenų struktūrą, esančią už pavadinimo. Komandų pora DYDIS? - nurodykite duomenų elemento formatą: 1, 2 arba 4 baitai, o DIM? - nurodykite duomenų elementų skaičių struktūroje. Pavyzdžiui, jei deklaruojami duomenys

3 4 2 ILGAS ARR Z

tada joms pritaikytos šios komandos duos tokį rezultatą (dešimtainiai skaičiai):

DYDIS? X DYDIS? Y DYDIS? Z

DIM? X DIM? Y DIM? Z

DSPP procesoriaus instrukcijų rinkinyje kaip priedas yra keturios komandos, leidžiančios nuskaityti ir įrašyti atskirus kompiuterio atminties ląstelių bitus. Tai yra @BI,! BI,! BI0,! BI1 komandos. Kiekvieno iš jų parametrai yra dėtuvėje esančio atminties žodžio adresas ir bitų skaičius šiame žodyje (atminkite, kad bitai numeruojami iš dešinės į kairę, pradedant nuo nulio). BI komanda taip pat daro prielaidą, kad krūvoje yra bitas ir reikia įrašyti reikšmę. 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! 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 [addr.X] 3 @BI – trečiasis X bitas, 0" X 3! BI - X lygus 100101,

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

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

PARADISE kalboje taip pat yra galimybių dirbti su atmintyje esančiomis baitų eilutėmis. Norėdami nustatyti 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 vienai (nustatytai kamino) reikšmei. Jis naudoja tris parametrus iš kamino: kur b yra priskirta reikšmė, a ir l yra atitinkamai pradinis adresas ir baitų eilutės ilgis. Tarkime, kad, pavyzdžiui, jums reikia nulį elementų nuo 3 iki 10 baitų masyvo TXT (0:20). Norėdami tai padaryti, galite paleisti š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ą.

SB komanda perduoda baitų eilutes. Jo parametrai yra:, kur a1 ir l yra pradinis adresas ir perduodamos eilutės ilgis, a2 yra eilutės, į kurią atliekamas perkėlimas, pradžios adresas. Įvykdžius SB komandą, atmintyje iš adreso a2 bus l ilgio baitų eilutė, kuri yra tiksli eilutės, esančios adresu a1 prieš atliekant perkėlimą, kopija. Šaltinio ir paskirties eilutės gali sutapti. Pavyzdžiui, tarkime, kad norite perkelti baitų masyvo M (0:10) elementus taip: M (10): = M (9), M (9): = M (8), ..., M (1): = M (0). Norėdami tai padaryti, galite naudoti SB komandą:

0 "M 10 C2 1+! SB

dėl to 10 baitų eilutė pajudės vienu baitu, kad padidėtų atminties adresai.

SB komanda yra patogi dirbant su simbolių eilutėmis (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 susiduriama su programoje, baitų eilutės, kurioje yra kabutėse esantis tekstas, pradžios adresas ir ilgis įstumiamas į krūvą. Šiuos parametrus gali naudoti komanda! SB. Pavyzdžiui, "LENTELĖ" 0 "TN! SB fragmentas lems TABLE literalą, kuris bus išsiųstas į 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 paieškos eilutės pradžios adresą ir ilgį. Jei n> 0, tai paieška atliekama 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]

Baigę svarstyti darbo su duomenimis priemones, apsistokime ties duomenų saugojimo išorinėje kompiuterio atmintyje klausimu, t.y. magnetiniuose diskuose. PARADISE kalboje yra komanda SAVE<имя файла>kad išsaugotumėte sistemos pagrindinės atminties kopiją diske kartu su vartotojo nustatytais objektais. Šiuo atveju VAR, VCTR, ARR operacijų duomenims skirtos atminties sritys diske nerodomos. Dėl to, paleidžiant 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 išleisti disko atminties darbo kintamiesiems, buferiams ir kt. Tačiau yra duomenų, kurių reikšmės turi būti nustatytos iškart po to, kai sistema paleidžiama iš disko. Pavyzdys yra kintamasis, kuriame saugomas duomenų apsikeitimo su kokiu nors išoriniu įrenginiu greitis. Pereinant prie kito kurso, užtenka pakeisti šio kintamojo reikšmę, neatliekant jokių programos taisymų.

Nurodymas procesoriui, kad kai kurios duomenų struktūros elementų reikšmės turi būti išvestos į diską komanda 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 niekuo nesiskiria nuo darbo su įprastu būdu apibrėžtomis struktūromis.

Procesoriaus valdymo komandos

PARADISE kalboje yra nedidelė komandų grupė, skirta valdyti DSPP procesorių, tiksliau, DSPP procesoriaus emuliatorių.

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

DSSP versija XX.XX.XX

Nemokama XXXXXW

ir procesorius pereina į komandų įvesties budėjimo režimą. Ši komanda naudinga derinant programas. Jis taip pat vykdomas, kai atsiranda klaidos sąlyga: indeksas viršija 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 aptinka nuorodą į neapibrėžtą žodį, jis pateikia pranešimą:

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

kur taškas yra DSPP procesoriaus kvietimas, signalizuojantis, kad procesorius yra sustabdytas neapibrėžtam žodžiui. Š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 komandą RESTART.

EXEC nurodo procesoriui atlikti procedūrą, kurios adresas yra krūvos viršuje. Norėdami gauti procedūros adresą, naudokite komandą "" (du apostrofai), po kurios nurodomas procedūros pavadinimas. Pavyzdžiui, dėl komandos

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

Jau minėta SAVE operacija priklauso procesoriaus valdymo komandų grupei.<имя файла>, nurodantis išsaugoti sistemos kopiją diske, taip pat komandas, kurios nustato į procesoriaus įvestį pateiktos tekstinės informacijos įvesties šaltinį. Pagrindinis š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 nustatomi krūvoje. Vykdant komandas, esančias nurodytuose šaltiniuose, įvestis automatiškai persijungia į ekrano klaviatūrą.

Žodyno komandos

Procesoriaus suvokiamame instrukcijų įvesties sraute visų pirma gali būti instrukcijų, kaip apibrėžti procedūras ir duomenis, dėl kurių kompiliavimas atliekamas į vidinį atvaizdą, ir saugoti procedūros korpusą arba skirti atmintį nurodytiems duomenims, taip pat įvesti kompiliuojamo asmens pavadinimą. procedūrą arba duomenų struktūrą į DSPP žodyną.

Žodynas nustato išorinių (programos tekste vartojamų) pavadinimų ir šiuos pavadinimus atitinkančių objektų adresų vidinėje atvaizdoje atitikimą. Apdorojant procedūros apibrėžimą ar įvardintos duotybės aprašymą, procesorius sukuria žodyną, kuriame sudaro naują žodyno įrašą, kuriame yra pavadinimas (tiksliau, pirmosios 7 pavadinimo raidės) ir procedūros adresas. kūno ar duomenų deskriptorius, susietas su šiuo pavadinimu.

Programuojant iš viršaus į apačią, procedūrų dalyse gali būti nuorodų į objektus, kurie dar neapibrėžti. Šiuo atveju žodyne formuojami žodyno įrašai (antraštės), pažymėti dviprasmiškumo ženklu. Komanda UNDEF naudojama visiems neapibrėžtiems pavadinimams rodyti ekrane.

Kuriant žodyną, galima sudaryti subžodynus – pavadintus žodyno įvesties rinkinius. Subžodynas paprastai sujungia procedūras ir duomenų struktūras, susijusias su viena užduotimi. Kad nebūtų painiojami antrinių žodynų ir kitų programos objektų pavadinimai, antrinio žodyno pavadinimas turi prasidėti simboliu $. Prieiga prie antrinių žodynų, siekiant juos išplėsti ar naudoti, gali būti atidaroma ir uždaroma specialiomis komandomis, kurios apima šias komandas (pavadinimas $ v reiškia bet kokį galiojantį antrinį žodyną).

GROW $ v - padidinkite $ v antrinį žodyną, tai yra, kol nenurodyta kitaip, įveskite visų sudarytų procedūrų ir duomenų pavadinimus į $ v antrinį žodyną;

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

SHUT $ v - uždarykite galimybę naudoti $ v antrinį žodyną;

ONLY $ v - padaryti prieinamą tik antrinį žodyną $ v;

ATŠAUKTI – atšaukti TIK paskutinę.

Taip pat yra komanda? $, kuri ekrane atspausdina visų jų būsenos antrinių žodynų pavadinimus – antrinis žodynas yra atidarytas arba uždarytas paieškai. Žodynas, kurio pavadinimas spausdinamas viršuje, visada didinamas.

Pagrindinės PRSP 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ą.

Tarkime, pavyzdžiui, operacija? $ Išspausdino kitą subžodynų būseną.

$ PRG atidaryta

$ PRIME atidaryta

$ EDIT uždarytas

$ PRIME atidaryta

SISTEMA uždaryta

Tai reiškia, kad $ PRG šiuo metu galima išplėsti ir naudoti, $ PRIME - tik naudoti, o $ EDIT ir SYSTEM nepasiekiami. Atminkite, kad antrinį žodyną gali sudaryti keli skyriai tais pačiais pavadinimais.

Yra komandos, skirtos ištrinti tam tikrą žodyno įvesties rinkinį iš žodyno ir, galbūt, susijusius vidinius objektus. Pavyzdžiui, komanda FORGET $ v ištrina visus pavadinimus, įrašytus į žodyną (ne tik subžodyne $ v) po paskutinio komandos GROW $ v vykdymo kartu su šiais pavadinimais nurodytais objektais ir atšaukia išplėtimą. antrinį žodyną $ v, kurį jis nustatė. Komanda PROGRAM $ v daro tą patį, kaip ir nuoseklios komandos FORGET $ v GROW $ v. Tokios komandos buvimas bet kurios programos pradžioje lemia tai, kad iš naujo sukompiliavus programą, senoji jos kopija bus ištrinta ir bus suformuotas žodynas, kuriame bus saugomi naujos programos kopijos objektai. Pavyzdžiui, atlikdami operaciją FORGET $ PRIME žodyne, kurio būsena buvo parodyta aukščiau, gauname naują būseną:

$ EDIT uždarytas

$ PRIME atidaryta

SISTEMA uždaryta

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

Atminkite, kad SYSTEM antrinio žodyno pavadinimas neprasideda $. Tai leistina, tačiau tai lemia tai, kad komandų FORGET ir RPOGRAM taikymas šiam antriniam žodynui nesukelia jokio veiksmo (sistema antrinis žodynas jiems tarsi neegzistuoja).

Atsižvelgiant į tai, kad baigtoje programoje didžiajai daugumai procedūrų apeliacija išoriniu pavadinimu nereikalinga, jų pavadinimus galima ištrinti iš žodyno, išsaugant su jais susijusius vidinius objektus. Komanda CLEAR $ v pašalina visus pavadinimus iš visų $ v antrinio žodyno skilčių, išskyrus tuos, kurių priešdėlis yra priešdėlis :: (du dvitaškiai) programos tekste (juos apibrėžiant). Pavyzdžiui, procesoriui vykdant šį programos fragmentą:

::: X + Y + X;

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

I / O komandos

Pagrindinė vartotojo ir DSPP sąveikos priemonė yra terminalas, kuris, kaip taisyklė, yra katodinių spindulių ekranas su klaviatūra. Terminalas naudojamas pirminiam programų įvedimui, redagavimui ir derinimui, duomenų paruošimui ir visam sistemos valdymui. Programos ir duomenys, taip pat pati drožlių plokštė išsaugomi kaip failai diskuose ir gali būti atspausdinti spausdintuvu. Galimi šie įrankiai, skirti valdyti įvestį / išvestį pagrindinių PRSP procedūrų rinkinyje.

Terminalo veikimo programavimą užtikrina skaičių, atskirų raidžių ir raidžių (eilučių) sekos įvedimo ir išvedimo komandos, taip pat kai kurios papildomos komandos.

Komanda TIB (Terminal Input Byte) inicijuoja ciklą, laukiantį terminalo klaviatūros klavišo paspaudimo. Kai paspaudžiamas klavišas, atitinkamos raidės 8 bitų kodas įstumiamas į krūvą kaip mažiausiai reikšmingas viršūnės baitas, o svarbiausiuose 3 baituose yra nuliai. Ekrane rodoma tokiu būdu įvestos raidės kopija. Taip pat yra TRB (Terminal Read Byte) komanda, kuri skiriasi nuo TIB tuo, kad įvestos raidės kodo įstūmimas į krūvą nėra lydimas šios raidės atvaizdavimo ekrane.

Komanda TIN (terminalo įvesties numeris) inicijuoja įvedimo į krūvą ciklą ir ekrane rodomas klaviatūra įvestas skaičius. Įvestas skaičius turi būti skaičių seka, kuri gali prasidėti minuso ženklu ir baigtis ... Priklausomai nuo įvesties / išvesties režimo, procesorius interpretuoja skaičius kaip šešioliktainį, dešimtainį, aštuntainį arba dvejetainį. Jei šešioliktainis skaičius prasideda skaitmeniu, pažymėtu raide, tada prieš jį pridedamas skaitmuo 0. Įvestas skaičius paverčiamas dvejetainiu komplemento kodu, kuris įstumiamas į krūvą kaip 32 bitų sveikasis skaičius. ilgas žodis, t nupjaunant bitus, esančius svarelio 2 kairėje, iki svarbiausio bito 31 laipsnio.

Kiekviena TIN komanda įveda vieną skaičių. Jei reikia įvesti skaičių seką vienoje eilutėje, juos reikia atskirti paspaudus klavišą , o TIN komanda turi būti vykdoma dar kartą įvedant kiekvieną programoje esantį skaičių.

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

Panašiai TOS komanda nustato n baitų simbolių sekos išvestį su pradiniu adresu a:

Teksto elementų, tiesiogiai įtrauktų į programą, išvestis į terminalą pateikiama konstrukcija

."<текст>"

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

Komanda TON (Terminal Output Number) rodo skaičių, ištrauktą iš antrinio krūvos, o išvesties lauko ilgis turi būti nurodytas viršuje. Rodomas skaičius lygiuojamas į dešinįjį lauko kraštą, laisvos pozicijos kairėje užpildomos tarpais, o jei skaičiaus ilgis viršija nurodytą lauko ilgį, tada kairysis nupjaunamas. Dešimtainiame įvesties / išvesties režime neigiami skaičiai prasideda minuso ženklu.

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

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

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

SP - erdvė, tai yra, perkelkite vieną poziciją į dešinę.

Komanda BELL skleidžia trumpą pyptelėjimą („varpelis“).

Kartais, bendraujant su terminalu, reikia patikrinti, ar klavišas jau buvo paspaustas ir ar ekranas jau įvykdė ankstesnę išvesties komandą. Tai galima padaryti naudojant TTI (Terminal Test Input) ir TTO (Terminal Test Output) komandas, kurios palieka vėliavėlę 1 ant krūvos, jei įvyko nurodytas įvykis, o 0 kitu atveju.

Spausdintuvo išvesties komandos yra panašios į terminalo išvesties komandas ir yra pagrįstos panašia mnemonika, kurioje LP (Line Printer) simboliai buvo pakeisti TO arba pridėti kaip pirmaujantys. Pavyzdžiui, LPCR – peršokti į naujos eilutės pradžią, LPSP – tarpas, LPN – išveda skaičių iš poeilutės viršūnės nurodytame lauke, LPB – išveda simbolį, LPS – išveda simbolių eilutę. Taip pat yra [N] LPT komanda, kuri perkelia spausdinimo galvutę į spausdintos eilutės N padėtį, ir LPFF komanda, kuri tiekia popieriaus lapą. Norint spausdinti aiškiai nurodytą 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. DSPP šis apdorojimas užprogramuotas taip. Pertraukimams tvarkyti skirta programa yra įprasta PRSP procedūra, prieš kurios apibrėžimą yra priešdėlis INT, pvz. INT: A!1+ I; INT priešdėlis užtikrina, kad procesoriaus būsena išsaugoma pertraukimo metu ir atkuriama apdorojant pertraukimą.

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

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

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

DSPP išimtys fiksuojamos naudojant komandų pertraukimus. Komandos pertraukimas yra pavadinta operacija, iškviečianti atsakymo procedūrą ir deklaruojama taip:

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

Pavyzdžiui:

TRAP S1. „Situacija S1“.

Pirmuoju atveju X procedūra yra paskutinė reakcija į S pertraukimą, antruoju, įvykus S1 pertraukimui, terminalas gaus pranešimą: Situacija S1.

Programa, kurios vykdymo metu gali įvykti pertraukimas, gali nustatyti savo reakciją į ją, naudodama pertraukimo komandą. DSSP numato dviejų tipų perėmimus: ON ir EON. Perėmimo komandos gali būti naudojamos tik procedūrų metu ir turi tokį formatą:

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

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

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

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

ON ir EON nustato skirtingus reakcijos tipus. Jei komanda ON nustatoma nauja reakcija, tada, įvykus pertraukimui, yra vykdoma reakcijos procedūra, po kurios nutraukta programa veikia toliau. Jei reakcija nustatoma EON komanda, tai iš pradžių operandų krūva prisiima tokį gylį, kokį turėjo EON vykdymo momentu, tada atliekama reakcija, o jai pasibaigus atliekama procedūra, kurioje buvo EON komanda. naudojimas nedelsiant nutraukiamas.

Pažvelkime į keletą pavyzdžių. Procedūra M įveda simbolius iš terminalo klaviatūros ir patikrina, ar tai skaitmuo. Jei įvestas simbolis nėra skaitmuo, ND pertraukimas pakeliamas. TRAP ND. „Nė skaitmens“. : M RP M1; : M1 TRB [B] C # 0< C2 #9 >& 0 JEI + ND [B] TOB;

Galutinis atsakymas į ND pertraukimą yra pranešimas: Ne skaitmuo.

Jei M iškviečiamas iš P1 procedūros, kuri turi savo atsaką į ND pertraukimą: P1 ON ND PR1 M; : PR1 [B] CR. „Klaida“. D # 0 [# 0]; tada, kai įvedamas neskaitmeninis simbolis, ND pertraukimas bus apdorotas PR1 reakcijos programa, kurios tipas yra ĮJUNGTAs, todėl iš naujos eilutės bus išvestas toks pranešimas: Klaida. Įvesta raidė bus pakeista raide 0, po kurios 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 neskaitmeninis simbolis, ND pertraukimas bus apdorojamas EON tipo PR2 reakcijos programa, dėl kurios iš naujos eilutės bus išvestas toks pranešimas: Klaida. Įvesties pabaiga. Tada P2 išeis. Tada operandų krūva bus tuščia.

Esant poreikiui, 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 perėmimo komandoje uždarymo procedūroje, arba galutinė reakcija. Pavyzdžiui, jei pakeisite PR2 taip:: PR2 CR "Klaida. Įvesties pabaiga." ND; tada terminalui išsiųstas pranešimas bus toks: Error. Įėjimo pabaiga. Ne skaičius.

DSPP turi keletą įmontuotų komandų pertraukimų, į kuriuos reakciją galima pateikti vartotojo programose.

Pasidalinti