Ərəb dili Cənnət dilidirmi? Paradise Language Məlumat və yaddaşla işləmək üçün əlavə əməliyyatlar

18 dekabr Ümumdünya Ərəb dili günüdür. Bayram 2010-cu ildə Birləşmiş Millətlər Təşkilatı tərəfindən təsis edilib və Birləşmiş Millətlər Təşkilatının altı rəsmi dilindən biridir. Son məlumatlara görə, dünyada ərəb və onun dialektlərində danışan 300 milyon insan var. Üstəlik, 240 milyon üçün o, doğmadır. Ərəb dili ilə İslam dini bir-biri ilə sıx bağlıdır. Birini digəri olmadan təsəvvür etmək mümkün deyil, çünki min yarım ildir ki, dünya müsəlmanları gündə beş vaxt ərəbcə dua oxuyurlar. Onun üzərində Qurani-Kərim nazil oldu və Məhəmməd Peyğəmbər (s) danışdı.

Qroznı ruhaniləri əlamətdar tarixi özlərinə məxsus şəkildə qeyd etdilər. “Çeçenistanın ürəyi” məscidinin imamı Maqomed Dadahaev şəhər sakinlərinə müraciət edib. O, ərəb dilinin müsəlmanın həyatındakı rolunu belə izah edib:

Ərəb dilini bilmədən insan İslamı öyrənə bilməz. Ona görə də müsəlmanlar arasında bu dil qədim zamanlardan böyük hörmətə malik olmuşdur. Peyğəmbərin (ona Allahın salavatı və salamı olsun) dinini öyrənmək üçün vacib şərt ərəb mətnlərinin təhlilidir, demək olar ki, hamısı çox uzun müddət əvvəl yazılmışdır. Müasir ərəb dilində 12 milyondan çox söz var (müqayisə üçün rus dilində 131.000, ingilis dilində isə təxminən bir milyon var ...). Bu, çox zəngin və mürəkkəb bir dildir. Suriyada İslam Universitetində oxuyanda filoloq müəllimimiz bizə belə bir misal çəkdi: ərəb dilində sadəcə bir “dəvə” sözünün sinonimlərinin sayı altı minə çatır! Onun qrammatikası da çox mürəkkəb və çoxşaxəlidir. Onun öyrənilməsi kifayət qədər intellektual və iradi səylər tələb edir. Buna görə də Quran və Peyğəmbərin (s) hədislərini təfsir edənlər arasında həvəskarlar yoxdur. Möhkəm ərəb lüğəti olmadan və bu dilin sintaksisi, semantikası və fonetikası haqqında məlumat olmadan müqəddəs mətnin mənasını araşdırmaq, demək olar ki, mümkün deyil. Bəzən elə insanlar olur ki, özlərini Quran alimi adlandırırlar. Onlar Haqq-Taalanın Mesajından sitatlar gətirir, insanlara məsləhət verirlər. Amma onlardan biliyin mənbəyini soruşsanız, “Tərcüməni oxudum” cavabını alırsınız. Bu cür insanlar İslam üçün çox təhlükəlidirlər, çünki onlar nə etdiklərini bilmədən Uca Allahın risalətinin təfsirində çaşqınlıq və qeyri-dəqiqliklər törədə bilirlər. İslam təhsil müəssisələrində aşağıdakı tədris metodologiyası geniş şəkildə tətbiq olunur: bir neçə ildir ki, ibtidai sinif şagirdləri yalnız ərəb filologiyasını öyrənirlər. Və yalnız lazımi miqdarda materialı kifayət qədər mənimsədikdən sonra Quran mətnlərinin öyrənilməsinə giriş əldə edirlər. Beləliklə, ərəb dili İslam haqqında məlumatların mənimsənilməsi üçün bir növ tramplindir. Bundan əlavə, ərəb dili cənnət əhlinin danışacağı dildir. Allaha həmd olsun ki, bizləri müsəlman yaratdı! Gözəl, zəngin ərəb dili iradəmizi dərk etmək üçün bizə nə verdi!

1. Bu, insanların bir-birini başa düşməyi dayandırdığı və müasir dünyanın çoxsaylı dillərinin ortaya çıxdığı bir hekayədir. Bu mif müxtəlif xalqlar arasında nə dərəcədə populyardır və onun şərhləri nədir?

2. Babil qülləsi mifi təkcə bütün bəşəriyyətin ilkin olaraq eyni dildə danışdığı inamına deyil, həm də bu dilin “ideal” olmasına əsaslanır: obyektlərin adları onların əsl mahiyyətini bildirirdi. Başqa mədəniyyətlərin nümayəndələri də bu fikirləri bölüşürlərmi və öz dillərinin orijinala ən yaxın olduğuna inanırlarmı?

Birinci sualın cavabı Yaradılış Kitabı 11: 1-9-da təklif olunur, burada deyilir ki, Allah bəşər övladına dillərin qarışıqlığı lənətini tətbiq etməklə onu cəzalandırmaq qərarına gəlib. İkinci sualın cavabını Yaradılış 2:19 ayəsində tapmaq olar. Bu hissədə Allah Adəmin onları necə adlandıracağını eşitmək üçün bütün heyvanları və quşları Adəmə gətirdi və "insan hər canlı canı çağırdığı kimi, onun da adı belə idi". Müxtəlif mədəniyyətlərə ekspromt səfər bu məsələlərin necə əhatə olunduğunu görməyə imkan verəcək. Onlardan birincisinə gəldikdə, çoxları Əhdi-Ətiqlə razılaşır: dillərin müxtəlifliyi Rəbbin cəzasıdır və ya ən azı hansısa əlverişsiz amilin nəticəsidir.

Avstraliya qəbilələrindən birinin əfsanəsi qocaların yeməklərindən bəhs edir. Bədənin özünü yeyən tayfalar “təmiz”, daxili orqanları yeyənlər isə “murdar” dildə danışırdılar. Afrikalı Kabila hesab edir ki, münaqişə nəticəsində insanlar müxtəlif dillərdə danışmağa başlayıblar. Assamdan olan bir qəbiləyə görə, dillərin qarışıqlığı üç uşağın bir dəfə siçovul ovlaması ilə əlaqədar idi. Amazon qəbilələrindən biri belə hesab edir ki, Allah insanları və onların dillərini Ona daha çox itaət etmək üçün bölüb. Amerikanın yerli əhalisi olan Maidu qəbiləsi (Kaliforniya) arasında insanların əvvəlcə eyni dildə danışdıqlarına inanılır, lakin bir dəfə dəfn mərasimində dil eyni olmaqdan çıxdı. İrokezlər hesab edirlər ki, dillərin ayrılması bir uşağın öldürülməsi ilə nəticələnən ailə münaqişəsi ilə əlaqədardır. Ancaq çoxdilliliyin lənət olması fərziyyəsi göründüyü qədər yaygın deyil. Dünyada ayrılmanın təbii proseslər nəticəsində baş verdiyi bir çox versiya var.

Qədim Hind müqəddəs himni “Riqveda”da qeyd edilir ki, vaxtilə Vak (“söz”) olub və tanrılar onu bir çox formalara ayırıblar. Hind-Çin yarımadasının xalqları altı irqdən bəhs edir, onların hər birinin balqabağından qıvrılan gövdə şəklində öz dili var. Kiş qəbiləsində (Qvatemala) insanların qruplara bölünənə qədər birlikdə yaşadıqları və eyni dildə danışdıqları barədə bir mif var. Hər biri öz tanrısını seçdi və öz dilində danışmağa başladı.

Cənubi Amerika navaxo qəbiləsinin yaradılış mifi "Dəyişən qadın"dan və onun dilində danışan real xalqların meydana çıxmasından bəhs edir. Beləliklə, o, qonşu xalqları - puebloları, meksika aborigenlərini və başqalarını yaratdı və onlar öz dillərində danışdılar, onları müxtəlif istiqamətlərə yaydılar. İslamda Quran öyrədir ki, Adəm adlar və ya başqa bir şey uydurmayıb, hər şeyi Allah öyrədib. Dillərin müxtəlifliyi tamamilə təbiidir və Allahın qüdrətinin təzahürüdür. Quran ayələrini hansı dildə yazılmasından asılı olmayaraq bütün insanlar anlaya bilirlər.

Dünyanın bir çox xalqlarının mifoloji sistemində dillərin qarışmasının heç bir izahı yoxdur, bu, sadəcə olaraq qəbul edilir və buna görə də sualımıza cavab verə bilmir. Lakin dünyanın demək olar ki, bütün mədəniyyətlərində “ideal” dilə istinad var (sual 2). Yuxarıda bəzi insanların (insan bədənini yeyən) şeylərin əsl mahiyyətini çatdıran "təmiz" bir dildə danışdığına inanan Avstraliya qəbiləsindən bəhs etdik. Qədim misirlilərə görə, tanrı Ptah hər şeyə ad verirdi, ona görə də dil tanrıların hədiyyəsi oldu. Çində "düzgün" dili mifik imperatorlar öyrədirdilər. Quran dillərin müxtəlifliyinə bütün digər dilləri əhatə edən vahid bir dilin bölünməsi kimi baxır.

Hər yerdə insanlar bir obyektin adının onun mahiyyətini necə açdığını anlamağa çalışırlar. Ehtimal olunur ki, ya obyektin əsl mahiyyətini təsvir edən “ideal” dil bu gün mövcuddur, ya da keçmişdə qalıb. İkinci fərziyyə dünyada həqiqət və harmoniya axtarışı üçün ilkin şərt kimi xidmət edir. Görünür, bizim şüurumuzda dillə real dünya və insan varlığı arasındakı əlaqə haqqında fikirlər yerləşib. Bu baxımdan ilk dəfə Platonun “Kratil” dialoqunda səslənən və o vaxtdan bəri daimi müzakirə obyektinə çevrilən sual yaranır: təbii şeylərin adı ilə obyektiv mahiyyəti arasında əlaqə varmı (ana dili danışanın subyektiv şüurunda yaranır? ) yoxsa bu əlaqə şərti və təsadüfidir?

Dil anlayışın mənası və mənasından onun təyinatına keçməyə imkan verən işarə sistemidir.

İnsan şifahi varlıqdır və heyvanlardan fərqli olaraq dildən istifadə edərək öz cinsi ilə ünsiyyət qurur. Bəzən “heyvanların dili”ndən danışırlar, amma belə bir ifadənin şərti olduğu aydındır – var-dövləti və imkanları baxımından heyvanların dili insanlara bənzəmir. Mələklər isə ünsiyyət üçün heç bir dilə ehtiyac duymurlar - onların rus və ya ingilis dilində danışdıqlarını təsəvvür etmək çətindir.

Dilin funksiyaları müxtəlif ola bilər - məlumat ötürməklə yanaşı, hissləri və qiymətləndirmələri ifadə etməyə kömək edir.

Müqəddəs Yazıları tərcümə etmək olarmı?

Kilsənin dili dua, ibadət və Müqəddəs Yazıların dilidir.

Bəzi dinlərdə müqəddəs mətnlər əvvəlcə müəyyən bir dildə mövcuddur və əsas etibarilə tərcümə oluna bilməyən hesab olunur. Beləliklə, müsəlman Quranı ilk olaraq ərəb dilində tərtib edilmişdir. Üstəlik, müsəlmanlar bu kitabın başlanğıcda belə yaradıldığına inanırlar.

Yəhudi mirzələri də müqəddəs mətnlərin yalnız ibrani dilində olması fikrinə meylli idilər. Xristian Yazıları əvvəldən belə deyildi.

Eramızdan əvvəl III əsrdə. sözdə "yetmişin tərcüməsi" - Septuaginta - Əhdi-Ətiqin yunan dilinə tərcüməsi həyata keçirildi. Üstəlik, bəzi tədqiqatçılar, Əhdi-Cədidlərarası dövrdə Müqəddəs Yazı rolunu oynayan Septuaginta olduğuna inanırlar.

Məhz Septuaqintanın mövcudluğu Müqəddəs Yazıların prinsipial şəkildə tərcümə oluna bilməsinin lehinə əsas arqumentə çevrildi. Bununla belə, daha güclüsü var. İndi Məsihin həvarilərlə aramey dilində danışdığı sübut edilmiş hesab olunur. Lakin İncilləri tərtib edənlər bu söhbətləri yunan dilində çatdırmaqdan çəkinmədilər.

İndi elmi istiqamət var - linqvistik rekonstruksiya. Onların tərtibçiləri bu dialoqların orijinalda necə səsləndiyini anlamağa çalışırlar. Ancaq yenə də bu elmi araşdırmaların mövzusudur.

Həqiqətənmi cənnətdədirsoyuq?

Dili bir dilə tərcümə edərkən bəzən problemlər yaranır, çünki dillər qrammatik cəhətdən eyni deyildir. Müxtəlif dillərdə sözlərin mənaları və çalarları da fərqlidir.

Məsələn, “cənnət isti və sərin yerdir” ifadəsi açıq şəkildə göstərir ki, Müqəddəs Yazılar “sərinliyin” olduqca xoş olduğu isti iqlimi olan ölkələrdə yaradılmışdır. Rus dilində belə birliklər çətin ki, yaransın. Və "istirahət etmək", "yaxşı vaxt keçirmək" mənasında olan "sərinləmək" feli rus dilinə ivrit dilindən yunancaya keçərək izləmə kağızı kimi daxil olub.

Bütün slavyanlar Müqəddəs Kitabı başa düşdülərmi?

Müqəddəs Yazılar əcdadlarımıza qeyri-rus şəkildə gətirilib. Kiril və Methodius - Solunsk yunanları - Solunsk slavyanlarının danışıq dili əsasında yeni bir yazı dili hazırladılar.

Dünyada bir çox xalqlar yazılı dili olmayan dillərdən istifadə edirlər. Nə qədər ki, gündəlik həyatdan danışırıq, heç bir problem yoxdur. Ancaq dini mətnin və ya fəlsəfi risalənin belə bir dilə tərcüməsi lazım olan kimi, Kiril və Methodius tərəfindən edilən dili təkmilləşdirmək lazımdır.

Bir neçə min il əvvəl slavyan tayfalarının müasir slavyan xalqlarına nisbətən bir-biri ilə razılaşmaq daha asan olduğunu düşünsək, haqlı olacağıq - dillər daha yaxın idi. Ancaq bu, Kiril və Methodius tərəfindən edilən Müqəddəs Yazıların tərcüməsinin Kiyev və Novqorod əhalisi üçün daha başa düşülməsi demək deyil - yazılı ədəbi dil fərqli idi.

Bəlkə də bu, rus vəziyyətinin bir xüsusiyyətidir, çünki rus ədəbi dili Moskva ləhcəsindən daha çox kilsə slavyan dilinə yaxındır. Əslində, bütün kilsə slavyan dili rus dilinə "yüksək sakitlik" kimi daxil oldu. Məsələn, hətta müasir iştirakçılar - ağlamaq, qaçmaq kimi - kilsə slavyan modelinə uyğun olaraq dəqiq şəkildə formalaşır - köhnə rus dilində "ağlamaq", "qaçmaq" olacaq.

Bəzən köhnə rus həmkarları tamamilə tərk etdilər - "Bologoye" adında "yaxşı" və "boloqo"; Yalnız dastanlarda olan “Şelom”, “dəbilqə”dən fərqli olaraq.

Dillər yaxın və ... paraleldir

Qədim Rusiyada diglossiya vəziyyəti var idi. Bu, ikidillilik kimi deyil. Diglossia cəmiyyətdə paralel olaraq iki dilin istifadəsidir. Məsələn, XIX əsrdə həm rus, həm də fransız dillərindən istifadə olunurdu. Fransız dili yüksək cəmiyyətin dili idi, lakin, prinsipcə, istənilən mətni tərcümə etmək olardı.

Diqlossiyada dillər istifadə baxımından üst-üstə düşmür. Köhnə rus dilində danışırdılar, köhnə rusca məişət qeydini yaza bilirdilər. Lakin onlar kilsə slavyan dilində dua edirdilər.

Bu vəziyyət Peterdən əvvəl də mövcud idi, 18-ci əsrdə tədricən çökdü. İndi elm və ədəbiyyat rus dilində inkişaf edə bilərdi, lakin kilsə slavyan dilində hələ də yalnız dualar mövcuddur. Kilsə Slavyan reklamına tərcümə edin - və bu, zarafat və ya küfr kimi görünəcək.

Kahin yoxsa Çoban?

Biz unikal bir dövrdə yaşayırıq. Çar Rusiyasında İncil rus dilində oxunurdu, Qədim Rusiyada onu kilsə slavyan dilində dinləmək mümkün idi. Lakin insanların əksəriyyəti savadsız idi və ya Müqəddəs Yazıları oxumaq və qavramaq üçün kifayət qədər savadlı deyildi.

Sovet dövründə hamı savadlı idi, amma Müqəddəs Yazıların mətni yox idi.

Savadlılıq hələ də qorunub saxlanılır və mətnlər mövcuddur.

Müqəddəs Yazıların özündən əlavə, bizi daha bir neçə slavyan mətnini - dualardan tutmuş ilahi xidmətlərə qədər mənimsəməyə dəvət edirik. Düzdür, rus dilinə mövcud tərcüməni başa düşmək bir qədər çətindir. 19-cu əsrdə analoqu olmayan tərcüməçilər tez-tez slavyanları tərcüməyə çevirirdilər.

Beləliklə, "Mən yaxşı çobanam" ifadəsi tərcüməyə köçdü. Və burada bəzi çətinliklər var. Yunan dilindən hərfi tərcümə belə səslənəcək: "Mən yaxşı çobanam", lakin belə tərcümə aşağı kimi qəbul edilir. Digər tərəfdən, əzəmətli "pastor" haqqında indi sadə bir dinləyici daha çox "keşiş" kimi qəbul edir. Bununla belə, etiraf etmək lazımdır ki, bir çox bibliya kəlamlarının rus dilinə hərfi tərcüməsi mümkün deyil - "uşağın ağzından həqiqət danışır" ifadəsi - fəlsəfi bir deyim kimi qəbul edilməyəcəkdir.

Ancaq ümumiyyətlə, Müqəddəs Kitabın slavyan mətninin qavranılmasına sözlərin deyil, mənasının başa düşülməməsi daha çox mane olur.

Ayrı bir çətinlik qrammatik konstruksiyalardır. Məsələn, yunan dilindən gələn bir sıra təkmilləşdirmələr var. “Günahları və günahları bağışla” sadəcə olaraq bütün günahları bağışlamaq deməkdir. “Qəzəbdən hirsləndim”, “Eşqlə sevdim” tipli konstruksiyalar da oxşardır.

Müqəddəs mətnləri başqa dillərə tərcümə edərkən problemlər də yaranır (baxmayaraq ki, Müqəddəs Yazılar hələ dillərinə tərcümə olunmamış xalqlar, bəlkə də, dünya əhalisinin 5℅-ni təşkil edir). Yəni, Kiril və Methodiusun slavyanlar üçün gördüyü işlər davam edir.

Kiril və Methodius birinci deyildi - bundan əvvəl Efiopiya, Gothic dillərinə tərcümələr var idi. Kiril və Methodiusdan sonra Permli Stefan Müqəddəs Yazıları Zyryan dilinə tərcümə etdi.

Müqəddəs və murdar tərcümələr

Hər tərcümə müqəddəs mətn sayılırmı? Xeyr, ancaq kilsə icmalarında qəbul olunduğu dərəcədə. Məsələn, sinodal tərcümə liturgik tərcümə kimi qadağan edilmir, lakin qəbul edilmir. Ancaq bunu protestantlar, məsələn, rus baptistləri belə istifadə edirlər.

Hətta müasir protestantizm cərəyanları var ki, bibliya mətninin hər kəs üçün əlçatan olması lazım olduğuna inanırlar. Bibliya mövzularına əsaslanan komikslər də nəşr olunur.

Əhdi-Cədidin mətni ilə bağlı heç bir problem yoxdur - onun mənbəyi yunanca məlumdur. Lakin Əhdi-Ətiqin sinodal tərcüməsinin əsasını ibrani mətni təşkil edirdi. Yunan tərcüməsindən fraqmentlər yalnız uyğunsuzluqlar əsas olduqda daxil edilmişdir.

Müasir versiyada iki tərcümənin olması yaxşı olardı - həm İbranicə Masoretik mətnlərdən, həm də Yunancadan. Hər iki dili bilməyənlər üçün rahat olardı.

Suallar üzrə cavablar

Çıxışdan sonra protokoşist Aleksandra bir neçə sual verildi:

Adəm hansı dildə danışırdı?

- Bunu demək çətindir. Bir tərəfdən dil sağ ikən dəyişir. Ancaq heç kim bilmir ki, bu, Babil qülləsi tikildikdən sonra ortaya çıxan dillərin yeni bir xüsusiyyəti deyildi.

Ancaq hər halda, Adəmin dili, yəqin ki, ibrani də daxil olmaqla, mövcud dillərin heç birinə bənzəmirdi.

Xidmətin rus dilinə tərcüməsi ilə bağlı hər hansı mübahisə varmı?

- Bu ideya hələ inqilabdan əvvəl müzakirə olunub və təmirçilər tərəfindən qismən güzəştə gedib. Onların hamısı rus dilində xidmət etməsələr də, bu ideya onlar tərəfindən dəstəkləndi.

İncilin rus dilinə tərcüməsi asan deyildi, baxmayaraq ki, Metropolitan Philaretin həm ivrit, həm də yunan dillərindən tərcümə etmək lazım olduğu fikri müdrik qərar idi. Baxmayaraq ki, bu bizə hər iki dildən elmi tərcümələr vermədi.

Rus dilindən istifadənin fərdi halları var - Optina ağsaqqallarının duası və akatist "Hər şey üçün Allaha həmd olsun" əvvəlcə rus dilində yazılmışdır.

O qədər başqa tərcümələr var və onların həyata keçirilməsində o qədər nüanslar olacaq ki, mətnləri bir qədər ruslaşdırmaq onları tərcümə etməkdən daha asandır.

Bu proses uzun müddətdir ki, kortəbii şəkildə davam edir. Bəzən hadisələr baş verir: məsələn, “Toy ayini”ndə dual bəzən gözlənilmədən cəmlə əvəz olunur, müasir akatistlərdə isə ardıcıl olaraq istifadə olunur.

İlahi Providence müxtəlif dillərin formalaşmasında necə iştirak edir?

- Dil insan iradəsindən ayrı mövcuddur. İnsan esperanto yarada bilər, lakin təbii dillər öz qanunlarına uyğun olaraq mövcuddur.

Kiril və Methodius yuxarıdan ilham alaraq kilsə slavyan dilinə tərcümə etdilər, həm də o dövrdə mövcud olan modelə görə.

Yuxarıdan ilham alaraq, İncilləri yunan dilində yazan həvarilər İncilin tərcüməsi ideyasını irəli sürdülər.

Daria Mendeleeva tərəfindən hazırlanmışdır

Foto: Dmitri Kuzmin

SUAL: Salam aleykum aha!

Burada bu məqalə ilə rastlaşdım. Səhv etmirəmsə, əksini yazmısınız. Çətin deyilsə, bu məqaləni yenidən şərh edə bilərsiniz.

müsəlman.

Ərəb dili Quranın dilidir. O, bütün dünya dilləri arasında seçilmiş biri idi və qeyri-adi xüsusiyyətlərə malikdir. Bu dil həm də Məhəmməd peyğəmbərin (Allahın ona salavat və salamı olsun) dilidir. Bu dil zəngindir və dünya dillərinin heç biri onunla rəqabət apara bilməz. O, bu dildə danışan şəxsə mənəvi və fiziki təsir göstərir.

Əvvəllər ərəblər şeir müsabiqələri təşkil edirdilər, lakin Peyğəmbərə (s.a.s) Vəhy gələndə ərəblər dilin bu qədər gözəl ifadəliliyinə o qədər heyran qaldılar və hətta bəziləri Quranın insana sehrli təsir göstərdiyini düşünürdülər. Əgər kimsə Qurandan bir sözü və ya hərfi düzəltmək istəsə, İlahi Kitabın bütün ahəngdarlığı pozulacaq. Quranın bir kəlməsi də dəyişdirilməməlidir, əks halda məna və fonetika dəyişəcək.

Bəzi sözlərin zamanla köhnəlməyə meylli olduğunu bilirik və biz onlardan istifadə etmirik. Quranın dili isə 1439 ildir ki, aktuallığını itirməyib...

Mən 10 ildən artıqdır ki, Qurandan dərs deyirəm və bu günə kimi tələbələrimdən birinə rast gəlməmişəm ki, mənə sual versin: “Biz Quranı niyə öyrənirik? Haradan gəldi? Onun hansı üstünlükləri var? Soldan sağa oxumaqdan nə ilə fərqlənir?" Gündən-günə ərəb əlifbasını və təcvid qaydalarını öyrənmək istəyənlərin sayı artır ki, sonralar Quranı orijinaldan oxuya bilsinlər. Ancaq yuxarıdakı sualların cavabı haqqında az adam düşünür. Və nəhayət, mən onlara Quranın faydaları, faydaları haqqında danışanda çoxları bunun üzərində dərinləşməyə başlayır.

Ərəb dilində 29 hərf var. Səslər qırtlağın sərhədində, qırtlağın ortasında, döş qəfəsində, dilin kökü ilə ağız boşluğunun arasında əmələ gəlir. Ərəb dilinin səsləri ağız boşluğunu “təmizləyir” və xəstəliklərə daha az həssasdır. Həmçinin ərəb dili yaxşı loqopeddir. "r" hərfinin tələffüzünü və səhv tələffüzünü sağaldır. Bu dil görmə qüsuru olanlara da kömək edir. Çünki ərəb mətnini soldan sağa oxumaq insanın görmə aparatını təkmilləşdirir və rahatlaşdırır. Hərflərin oval, yuvarlaq forması da psixikaya faydalıdır.

Ərəb əlifbasının bütün hərfləri samitdir. Sait səslər üçün xüsusi hərflər yoxdur. Qısa və uzun saitlər arasında fərq qoyulur. Qısa saitlər yazılı şəkildə saitlərdən - yuxarı və alt işarələrdən istifadə etməklə çatdırılır. Həmçinin 28 hərfdən 22 hərf hər iki tərəfdən, 6 hərf isə yalnız sağda birləşir.

Quran bizə 23 ildir ki, təhrif edilmədən enib. Quran sonuncu ilahi kitabdır və ondan sonra başqa kitablar olmayacaq. O, bütün insanlara nazil edilmişdir. Quranın qanunları qiyamət gününə qədər qüvvədə qalacaq və dəyişməyəcək. Quran, Muhəmməd Peyğəmbərə (s.a.s.) bəxş edilmiş Uca Allahın əbədi, böyük möcüzəsidir. Quran oxumaq ibadətdir. Hər kəsə bu inanılmaz gözəl kitabı hər gün oxumağı və mənasını bilməyi məsləhət görürəm. Oxumağı və Yaradanınızla danışmağı öyrənməyə tələsin. Allah bizə Cənnət sakinləri olmağı və Özünün seçdiyi ərəb dilində danışmağı nəsib edər.

Dilyar Bektayeva,

Aktobe vilayətinin ustası

"Nur Kasır" mərkəzi məscidi

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

CAVAB: aleykum salam qardaş!

O, kimi yerli və cahil “yalan ustaz”ları müsəlmanlardan uzaqlaşdırmaq lazımdır ki, onları azdırmasın. Bir dəfə Aktobe məscidində belə cəfəngiyyatlar yayılır və cahil müəllimlər saxlanılır, bəlkə də buna görədir ki, bu şəhərdə bu qədər ekstremist məzhəbçilər var. Nə Quranda, nə də Sünnədə ərəb dilinin bütün cənnət əhli üçün ortaq bir dil olacağına dair heç bir eyham belə yoxdur. Özünüz düşünün, əgər ərəb dilini bilməsələr, başqa millətlərin nümayəndələri Cənnətdə bir-biri ilə necə ünsiyyət quracaqlar?!

Əvvəllər oxşar suala cavab verdi:

Hazırlanmış adaptiv dil dialoq proqramlaşdırma sisteminin CƏNƏNTİ DSPP Moskva Dövlət Universitetinin Hesablama Riyaziyyatı və Kibernetika Fakültəsi N.P.Brusentsov, V.B.Zaxarova, İ.A.Rudnev, S.A.Sidorov, N.A.Çanışev, Moskva, 1987

CƏNNƏT dilinin ümumi təsviri

Dil inkişafının məqsədi və məqsədi

PARADISE (İnkişaf Edilə bilən Adaptiv Dil) Strukturlaşdırılmış Proqramlaşdırma Dialoq Sistemi DSPP-nin əsas dilidir. Əsas o deməkdir ki, DSSP-də əsas dili inkişaf etdirmək (genişləndirmək, gücləndirmək) və bəlkə də bu şəkildə yaradılmış linqvistik vasitələri konkret tətbiqə uyğunlaşdırmaqla həyata keçirilən bütün sonrakı konstruksiyalar üçün əsasdır. Yüksək səviyyəli dillərdən fərqli olaraq, PARADIS hazır məlumat növlərini və əməliyyatlarını təmin etmir, lakin tələb olunan növləri effektiv şəkildə müəyyən etmək üçün yalnız elementlər və primitivlər təqdim edir. Məsələn, orijinal məlumat formatları 8-bit bayt, 16-bit sözlər və 32-bit uzun sözlərdir və onlar üzərində tam ədədlər, mantiq vektorları, hərf kodları, mantiq, verilənlər və prosedur göstəriciləri kimi həyata keçirilən əməliyyatlardan asılı olaraq şərh olunur. Bu halda, bir tərəfdən, baytların və sözlərin ayrı-ayrı bitlərini manipulyasiya etmək, digər tərəfdən isə kompozit məlumat vahidlərini (çox uzunluqlu sözlər, vektorlar, massivlər, mətn sətirləri və s.) yaratmaq mümkündür. onlar üçün bu və ya digər təfsirlərin təyin edilməsi, müvafiq əməliyyatların tətbiqi. Beləliklə, tələb olunan uzunluq və dəyər diapazonunun həqiqi ədədləri, kompleks nömrələr və digər obyektlər təqdim edilə bilər və bu tətbiqə yönəlmiş dilin versiyası bu tətbiqə xas olan obyektləri və vasitələri əhatə edəcək və tətbiq edilməyənləri daxil etməyəcək. o, - dil proqrama uyğunlaşdırılacaq (uyğunlaşdırılacaq). DSPP-nin inkişafı mikrokompüterlər üçün geniş yayılmış və effektiv proqramlaşdırma alətinin yaradılması məqsədini güdürdü, yəni. mikroprosessorlara əsaslanan kompüterlər. Mikroprosessorların arxitekturasının mühüm xüsusiyyəti verilənlər növlərinin və əməliyyatlarının elementar olmasıdır ki, bu da bir tərəfdən universallıq, digər tərəfdən isə proqramlaşdırmanın zəhmətkeşliyi deməkdir. Çox yönlü olduğuna görə, onların əsasında yaradılmış mikroprosessorlar və mikrokompüterlər potensial olaraq sonsuz tətbiq imkanlarına malikdir. Bununla belə, bu imkanların praktiki həyata keçirilməsi, ilk növbədə, tələb olunan tətbiqi proqramların hazırlanmasının zəhmətkeşliyinə əsaslanır. Bundan əlavə, qənaətbəxş tətbiq proqramları yalnız müvafiq tətbiqlərin xüsusiyyətləri haqqında dərin və incə biliklərlə yaradıla bilər, yəni. onları təkcə proqramçılar deyil, bu və ya digər sahədə yüksək ixtisaslı mütəxəssislər hazırlamalıdırlar. Odur ki, proqramlaşdırma sistemi proqramçının əməyinin məhsuldarlığını böyük dərəcədə artırmaqla yanaşı, həm də o qədər sadə olmalıdır ki, qeyri-peşəkar proqramçılar tərəfindən mənimsənilə və səmərəli istifadə oluna bilsin.

Bu problemin köklü həlli kompüter arxitekturasının əhəmiyyətli dərəcədə sadələşdirilməsi kimi görünür. Amma təəssüf ki, mikrokompüterlərin arxitekturası diametral əks istiqamətdə - artan mürəkkəblik və təkmilləşmə yolu ilə inkişaf edir ki, bu gün peşəkar proqramçı üçün mikrokompüter assemblerinin dilini mükəmməl mənimsəmək asan deyil. C və ya PL / M kimi sistem proqramlaşdırma dilləri müəyyən dərəcədə (kifayət qədər uzaq olsa da) proqramın hazırlanmasının mürəkkəbliyini azaltmışdır, lakin onları proqramlaşdırmada təcrübəsi olmayan insanlara tövsiyə etmək çətindir. Geniş istifadə olunan dil, təbii ki, daha sadə və daha təbii olmalı, proqramlaşdırmanın mahiyyəti və texnikası haqqında mümkün qədər adi, tanış fikirlərə əsaslanmalıdır.

Assembly dilində proqramlaşdırma ilə müqayisədə proqram işlənməsinin mürəkkəbliyinin mövcudluğu və əhəmiyyətli dərəcədə azalması ilə yanaşı, DSSP assembler dili ilə eyni dilin çox yönlülüyünü, yüksək maşın səmərəliliyini (yəni kompaktlığı və sürətini) tələb edirdi. kod), yaradılmış proqramların sınaqdan keçirilə bilməsinin etibarlılığı və onların davamlılığı.və dəyişdirilə bilməsi, o cümlədən sistemin və onda hazırlanmış proqramların müxtəlif arxitekturalı maşınlara mobilliyi (daşıma qabiliyyəti).

Prosedur proqramlaşdırma

PARADISE dilində proqramlaşdırma bir-biri ilə əlaqəli hərəkətlərin, işlərin, proseslərin planlaşdırılması və təşkili və ya mürəkkəb maddi obyektlərin - maşınların, qurğuların, konstruksiyaların qurulması kimi geniş yayılmış insan fəaliyyəti növlərinə tamamilə bənzəyir. Konstruktor öz ideyasını onun tərkib hissələrini (bloklar, birləşmələr, hissələr) birləşdirərək reallaşdırdığı kimi, proqramçı da dilin verdiyi sadə hərəkətlərdən tələb olunan mürəkkəb hərəkəti sintez edir. Həmçinin deyə bilərik ki, proqramlaşdırma (dizayn) həyata keçirilən obyektin getdikcə daha kiçik komponentlərə tədricən parçalanmasıdır (parçalanması).

CƏNNƏT dili ilə desək, əsas “konstruksiya” prosedurdur – adlandırılmış hərəkətdir. Dil öz adları (təyinatları) ilə təmsil olunan ən sadə prosedurların (primitivlərin) məhdud dəstinə əsaslanır. Məsələn: + əlavə etmək, NEG işarəni dəyişdirmək, VCTR vektor yaratmaq deməkdir. Xüsusilə, primitivlər var: və; (kolon və nöqtəli vergül), yeni proseduru daxil etməyə imkan verir, məsələn, P adı ilə, onu P1, P2, ..., PN şəklində prosedurların ardıcıllığı kimi təyin edir.

: P P1 P2 ... PN;

Əgər P proseduru yaradılmış proqramın yerinə yetirməli olduğu hərəkəti əks etdirirsə, bu proqramın PARADISE dili vasitəsilə qurulması P1, P2, ..., PN prosedurlarının ardıcıl təfərrüatlarına endirilir. Bu o deməkdir ki, bu prosedurların hər biri daha kiçik prosedurlar ardıcıllığı ilə müəyyən edilməlidir, daha sonra daha kiçik prosedurların ardıcıllığı ilə müəyyən edilir və yalnız primitivlərdən ibarət təriflər alınana qədər.

Verilmiş hədəfdən başlayaraq və istifadə etdiyi prosedurları tədricən dilin əsasına qədər azaldan proqramın bu dizaynı yuxarıdan aşağıya proqramlaşdırma kimi tanınır. Bu, fərdi, dəqiq müəyyən edilmiş problemlərin həlli üçün PARADISE dilində proqramlar əldə etməyin əsas yoludur. Bunun əksi aşağıdan yuxarı proqramlaşdırmadır - dilin əsas vasitələrinə əsaslanan, müəyyən problem sahəsinə yönəlmiş tədricən genişləndirilmiş prosedurlar sisteminin qurulması. Bu yolla dilin inkişafı və onun konkret tətbiqə uyğunlaşdırılması həyata keçirilir.

Hər iki halda yaradılmış proqramların hərtərəfli strukturlaşdırılması vacibdir: hər bir proqram və proqramın hər bir hissəsi hər biri müəyyən funksiyanı yerinə yetirən və müstəqil şəkildə yoxlanıla bilən az sayda ayrıca hissələrdən ibarət olmalıdır. CƏNNƏT dilinə gəldikdə, bu, xüsusilə, prosedurların təriflərinin qısa olması deməkdir: müəyyənedici ardıcıllıq, bir qayda olaraq, 5-7 üzvdən çox olmamalıdır. Strukturlaşdırma proqramın aydınlığını, yoxlanılmasını və dəyişdirilməsini təmin edir, onun yaradılması və saxlanmasının mürəkkəbliyini əhəmiyyətli dərəcədə azaldır.

Yuxarıdakı P prosedurunun müəyyənləşdirilməsi nümunəsi sadələşdirilmişdir. Əslində, müəyyənedici ardıcıllıq üzvlər kimi təkcə prosedurların adlarını deyil, həm də birdən çox sözdən ibarət təlimatları (əmrləri) ehtiva edə bilər. Prosedur adı, başqa sözlərlə birləşmədən kənar istifadə edildikdə, onun təyin etdiyi proseduru yerinə yetirmək üçün əmrdir. Prosedur adlarının ardıcıllığı bu prosedurların bir-birinin ardınca adlarının ardıcıllığı ilə (xətti ardıcıllıqla) icrasını diktə edir. Digər icra ardıcıllıqlarını müəyyən etmək üçün PARADISE göstərilən şərtdən asılı olaraq onlarla birlikdə adlanan prosedurların icrasını, həmçinin prosedurun təkrar (tsiklik) icrasını təyin edən xüsusi sözlər (prefikslər) təqdim edir.

Məsələn, P0 P1 xətti ardıcıllığı P0 prosedurunun, sonra isə P1 prosedurunun icrasına səbəb olur. Əgər P1 proseduru həmişə yerinə yetirilməli deyilsə, əksinə, P0-ın icrası nəticəsində müsbət ədədin alınması nəzərdə tutulursa, P1 əvəzinə onlar şərtə uyğun olaraq icra əmrini yazırlar: IF + P1, yəni. P0 P1 əvəzinə P0 IF + P1 olacaq. PARADISE, şərti icranı effektiv şəkildə ifadə etməyə imkan verən prefiks şərtlər toplusunu, həmçinin iki, üç və ya daha çox prosedur seçimini əhatə edir.

Prosedurun çoxsaylı icrası RP prefiksi ilə müəyyən edilir. Beləliklə, RP P əmri bu prosedurun gövdəsində olan EX-in işə salınması üçün şərait yaranana qədər P prosedurunun icrasını təkrar-təkrar çağırır - döngədən çıxın, bundan sonra xətti qaydada növbəti əmr yerinə yetirilir. . Döngədən çıxmaq şərti, məsələn, bəzi X dəyişəninin sıfıra bərabərliyi ola bilər ki, bu da aşağıdakı kimi ifadə edilir:

Adı başqa bir prosedurun tərifində görünən prosedurun onun daxilində yerləşdiyi deyilir. Yuvalanmış prosedur, əgər primitiv deyilsə, öz növbəsində yuvalanmış prosedurları ehtiva edə bilər, yəni. yuva çoxlu ola bilər. Bundan əlavə, PARADISE dilinin qaydaları öz adından olan prosedurun tərifinə və ya bu adı ehtiva edən prosedurun adının daxil edilməsini qadağan etmir, yəni. PARADISE rekursiyaya imkan verir.

Dəfələrlə icra edilən prosedur təkrar icra edilən prosedura da daxil edilə bilər. Bu vəziyyətdə, döngələr yuvalanır. PARADISE çoxlu döngələri yerləşdirməyə imkan verir.

Əmrlərin xətti ardıcıllığı, yuvalama, prosedurların şərti və tsiklik yuvalanması - bu, PARADISE dilində proqramların qurulması imkanlarını tükəndirir. Bu vasitələrin azlığı, eynicinsliliyi və təbiiliyi dilin mənimsənilməsi və istifadəsinin asanlığının təminatıdır. Eyni zamanda, bu, inkişafın əmək intensivliyi və proqram etibarlılığının əhəmiyyətli dərəcədə azaldılmasını təmin edən ciddi strukturlaşdırılmış proqramlaşdırma dilidir.

Prosedurlar və məlumatlar

İndiyə qədər deyilənlərin hamısı ibtidai əməliyyatların sonlu toplusundan ixtiyari hərəkətlər qurmaq, hərəkətləri təyin etmək vasitəsi kimi CƏNNƏT dilinin xüsusiyyətidir. Dilin digər tərəfi hərəkətlərin həyata keçirildiyi obyektləri təmsil edən vasitələrlə - məlumatların təqdim edilməsi və təşkili vasitələri ilə təmsil olunur.

Son dərəcə sadə məlumat elementi ikirəqəmli elementdir - bir az. Bütün digər formatlar və məlumat növləri bitlərdən qurulur. PARADISE dilində 8-bit bayt, 16-bit söz və 32-bit uzun söz əsas formatlar kimi qəbul edilir. Onlar üzərində aparılan əməliyyatlardan asılı olaraq baytlar, sözlər və uzun sözlər bir çox şərhləri qəbul edir, yəni. müxtəlif növ verilənlər üçün əsas ola bilər. Onlar həm də kompozit formatların və növlərin formalaşması üçün başlanğıc nöqtəsidir.

Əslində PARADISE nə sadə, nə də kompozit məlumat növlərini ehtiva etmir - yalnız əsas formatlar (bayt, söz, uzun söz) və onlardan kompozit formatlar yaratmaq üçün vasitələr var: vektorlar və çoxölçülü massivlər. Bu zaman eyni baytlar (sözlər, uzun sözlər) onların üzərində yerinə yetirilən əməliyyatlardan asılı olaraq bit vektorları kimi, yaxud işarəli və işarəsiz ikili tam ədədlər kimi, yaxud giriş/çıxış əlifbasının hərfləri kimi şərh olunur və s. Məlumat növləri və onlarla əlaqəli məhdudiyyətlər və yoxlamalar problem yönümlü dil genişləndirmələrində təqdim edilə bilər.

Əsas dildə verilənlər adlarının bəyanı yalnız adla verilənlərə çıxışın təmin edilməsi funksiyasını yerinə yetirir: ad bəyannamədə tələb olunan yaddaş hüceyrələrinin sayı və onlara daxil olmaq mexanizmi ilə əlaqələndirilir. Sınaq və transformasiya əməliyyatları birbaşa adlandırılmış məlumatlara tətbiq edilmir. Bu əməliyyatlar operand stekində müəyyən edilir ki, bu da 32 bitlik uzun sözlərin (stek elementlərinin) ardıcıllığıdır və onun sonuna yeni elementlər əlavə etməklə (itələməklə), eləcə də eyni ucdan elementləri çıxarmaqla (çıxarmaqla) dinamik şəkildə dəyişdirilir. yığın). Elementlər göndərildiklərinin tərsi ardıcıllıqla geri götürülür: sonuncunun göndərdiyi əvvəlcə geri alınır. Sınaq ediləcək və ya çevriləcək məlumatlar yığına itələnir, burada müəyyən edilmiş əməliyyatlar yerinə yetirilir, bundan sonra emal nəticələri yığından çıxarıla bilər.

Məsələn, 32 bitlik uzun söz kimi elan edilmiş X dəyişəni varsa, onda birbaşa onun üzərində yalnız iki əməliyyat yerinə yetirilə bilər:

1) dəyərinin hər dəfə X adı çəkiləndə avtomatik olaraq baş verən yığına itələnməsi,

2) əmrlə ona tapşırıq! Son (yuxarı) elementin X dəyəri yığından çıxdı.

Tutaq ki, X-in dəyərini özünə əlavə etməklə ikiqat artırmaq istəyirsinizsə, bunu aşağıdakı əmrləri bir-birinin ardınca yerinə yetirməklə edə bilərsiniz:

X dəyərinin iki nüsxəsi yığına itələnəcək, sonra + əmri onları çıxaracaq, əlavə edib əldə edilən məbləği yığına itələyir, bundan sonra əmr! X bu məbləği siləcək və dəyərini X dəyişəninə təyin edəcək.

X şəklində verilmiş nümunənin yüksək səviyyəli dillər üçün adi qeydi: = X + X proqramçıya daha çox tanışdır, lakin bu, prosessor tərəfindən yerinə yetirilən təlimatların ardıcıllığının birbaşa əksi deyil, lakin bir növ riyazi düstur. Bu, hesablama tapşırıqlarını proqramlaşdırarkən rahatdır; lakin, əsas dildə icra olunan əmrlərə birmənalı uyğunluq daha vacib görünür, çünki proqram birbaşa proqramlaşdırma dilində əmrlə yoxlana bilər və dil bilməyə ehtiyac yoxdur. prosessor dilindən başqa.

Lakin yığılmış məlumatların emalının xüsusilə qiymətli üstünlüyü ondan ibarətdir ki, sınaq və transformasiya prosedurları tətbiq olunduğu məlumatlardan asılı olmayaraq müəyyən edilə və həyata keçirilə bilər. Test və transformasiya əməliyyatları verilənlərin identifikatorlarına (və ya sabitlərin və dəyişənlərin adlarına, formal parametrlərə) görə deyil, əməliyyat zamanı operandların qiymətləri təyin edilməli olan yığının elementlərinə münasibətdə tərtib edilir. həyata keçirilir. Məsələn, + (əlavə et) əmri ilə yerinə yetirilən iki ədədin toplanması əməliyyatı yığından yuxarı iki elementin (yuxarı və alt) cəm kimi götürülməsindən, onların cəminin hesablanmasından və yığının üzərinə itələnməsindən ibarətdir. İki ədəd əlavə etmək üçün onların dəyərlərini yığına itələmək və + əmrini yerinə yetirmək lazımdır, nəticə yığının yuxarısında olacaq.

İxtiyari sayda giriş və çıxış parametrləri olan bir test-çevirmə proseduru bu şəkildə sadəcə olaraq müəyyən edilmiş qaydada arqument dəyərlərini ehtiva edən yığında və icradan sonra yerinə yetirilən adlandırılmış hərəkət (parametrlər siyahısı olmadan) kimi müəyyən edilə bilər. - nəticələrin dəyərləri. Belə bir proseduru xüsusi məlumat toplusuna tətbiq etmək üçün bu məlumatları müvafiq ardıcıllıqla yığına itələmək lazımdır. Onları istehlak etdikdən sonra prosedur nəticələrini yığında tərk edəcəkdir (həmçinin müəyyən bir ardıcıllıqla təşkil edilmişdir).

Başqa sözlə, PARADISE dilində prosedurların adları əməliyyatların əlamətləri ilə eyni şəkildə istifadə olunur və mahiyyətcə ixtiyari sayda operandları olan əməliyyatların simvollarıdır. Stackin işləmə prinsipinə uyğun olaraq, əməliyyatlar postfiks şəklində yazılır, yəni. əməliyyatın adı onun operandlarının adları və ya dəyərlərinin siyahısından sonra yerləşdirilir. Məsələn, üç ədədin cəminin alınması əməliyyatını ++ simvolu ilə işarələsəniz, A, 5 və B rəqəmlərinin cəmi aşağıdakı kimi ifadə olunacaq:

Postfiks dilinin formal qaydalarını qurmaq və proqramlar yazarkən onları rəhbər tutmaq olardı, lakin insan üçün qaydalarla deyil, stek prosessorunun modeli ilə məşğul olmaq daha asan və təhlükəsizdir, yəni. proqramların yaradıldığı və onları icra edəcək maşının modeli ilə. PARADISE dili vəziyyətində belə bir maşın DSPP-prosessordur - bu dildə nəzərdə tutulmuş hərəkətləri həyata keçirən aparat və proqramlar dəsti.

DSP prosessoru

Fiziki olaraq, DSPP-prosessoru mikrokompüterlərin proqram təminatı problemini ən yaxşı şəkildə həll etməyə imkan verən sadə və effektiv proqramlaşdırıla bilən arxitekturanın mikroprosessoru şəklində həyata keçirilə bilər. Lakin belə bir mikroprosessor hələ yaradılmayıb və onun arxitekturasını proqramlaşdırma qabiliyyətini yaxşılaşdırmaq üçün mövcud mikrokompüterlərdə təqlid etmək lazımdır. Əlbəttə ki, emulyasiya baha başa gəlir - onun həyata keçirilməsi üçün yaddaş və maşın vaxtı tələb olunur, lakin PRSP prosessorunun təqlid edilməsi vəziyyətində bu xərclər nisbətən kiçikdir.

Proqramçının nöqteyi-nəzərindən prosessorun xarakteristikası onun arxitekturasıdır, yəni. verilmiş prosessorun verilənlərin emalı vasitəsi kimi nə olduğu, verilənlərin girişdə və prosessor daxilində təqdim edilməsi imkanları, hansı test və məlumatların çevrilməsi əməliyyatlarının mövcudluğu, prosessorun öz yaddaşının necə təşkil edildiyi, habelə əsas və xarici yaddaş, proqramın gedişatını idarə edənlər hansılardır, xarici mühitlə qarşılıqlı əlaqə, müstəsna hadisələrə reaksiya və s. Arxitekturaya yiyələnmək mənalı (qeyri-rəsmi) proqramlaşdırma üçün ilkin şərtdir ki, bu da xətaların sayını əhəmiyyətli dərəcədə azaldır və proqramların etibarlılığını artırır.

DSPP prosessorunun mərkəzi əlaqəsi yuxarıda qeyd olunan operand yığınıdır. Stackin özündə emal aparılır və məlumatlar bir qayda olaraq stek vasitəsilə ötürülür. Yığın üzərindəki fərdi əmrlər və qısa əmrlər ardıcıllığı onları birbaşa terminal klaviaturasından prosessor girişinə verməklə yerinə yetirilə bilər. Bu halda, DSPP prosessoru postfiks kalkulyatorunun işini simulyasiya edir. Klaviaturadan daxil edilən əməliyyatların rəqəmləri və mnemonik kodları boşluqlarla ayrılır. Daxil edilmiş mətn terminal ekranında sətir kimi göstərilir. Giriş son siqnalı və prosessora "Daxil edilmiş resepti yerinə yetirin" əmri düyməni basır , həmçinin işarələnmişdir , ... Prosessorun girişinə gələn nömrələr yığının üzərinə itələnir və stek üzərində əmrlər yerinə yetirilir. Stackin yuxarı hissəsində alınan hesablama nəticəsi komanda ilə terminal ekranına köçürülə bilər. (nöqtə).

Məsələn, (2-5) * 3 ifadəsini hesablamaq və nəticəni göstərmək üçün daxil edin:

2 5 - 3 * .

Düyməni basdıqdan sonra prosessor nəticə çıxarır, ona görə də bütün xətt belə görünəcək

* 2 5 - 3 * . -90

Xəttin əvvəlindəki ulduz işarəsi prosessor tərəfindən onun daxil edilməsini gözlədiyinə dair bir siqnal olaraq verilir.

Baxılan misalda prosessor daxil edilən ədədləri tam onluq yerlər kimi qəbul edib emal edir. Əslində, daxil edilərkən bu ədədlər ikilik tamamlayıcıya çevrilir, çıxdıqda isə yenidən onluq sistemə çevrilirdi. PRSP prosessoru həmçinin ikili, səkkizlik və onaltılıq I/O rejimlərinə imkan verir. İstədiyiniz rejimə keçmək üçün müvafiq olaraq B2, B8, B10, B16 əmrlərindən biri yerinə yetirilməlidir.

Düymələrin basılması prosessorun daxil edilməsinə bu düymələrdə göstərilən hərfləri (hərflər, rəqəmlər, durğu işarələri, əməliyyatların simvolları) təmsil edən kodları təmin edir. Giriş simvollarının ardıcıllığı bir giriş sətrini - simvolların kodlarını ehtiva edən bayt zəncirini təşkil edir, hər simvol üçün bir baytdır. Giriş sətirinin maksimum uzunluğu 80 simvoldur.

Daxiletmə sətirini emal edərkən prosessor içindəki sözləri - bir-birindən boşluqlarla ayrılmış hərf birləşmələrini təcrid edir və onları şərh edir. Əgər emal olunan söz prosessora məlum olan əməliyyatın (prosedurun) və ya verilmiş birinin adıdırsa, prosessor tərifinə görə bu adla çağırılmalı olan hərəkətləri yerinə yetirir. Əgər söz prosessora məlum deyilsə, o zaman təyin edilmiş I/O rejimini nəzərə alaraq onu rəqəm kimi şərh etməyə çalışır.

Rəqəmlər verilmiş say sistemində icazə verilən rəqəmlərdən ibarət və bəlkə də birinci hərf kimi mənfi işarəsi olan sözlər kimi tanınır. Hexadecimal giriş/çıxış rejimində rəqəmlərlə yanaşı latın A, B, C, D, E, F hərfləri də etibarlıdır.Qəbul edilən nömrə binarın tamamlayıcı koduna çevrilir və 32 bitlik uzunluqda operand yığınına itələnir. söz. Bu halda, ədədin dəyəri -2147483648: 2147483647 təmsil oluna bilən dəyərlər diapazonundan kənardadırsa, o zaman bu diapazondan 2 ** 32 modulunda müqayisə edilə bilən dəyərlə əvəz olunur.

İşlənmiş söz prosessora məlum olmadığı və nömrə kimi qəbul edilə bilməyəcəyi halda, prosessor terminal ekranında bir mesaj göstərir: "Bilmirəm.<обрабатываемое слово>"və əlavə reseptlərin daxil edilməsini gözləyir.

Sərbəst mətn şəklində verilənlərin daxil edilməsi (bayt-hərflərin ardıcıllığı) ikiqat dırnaq içərisində yazılmış mətn olan mətn literalları şəklində həyata keçirilir, məsələn: “Mətn hərfi”. Prosessora giriş kimi mətn hərfi gəlişi dırnaqların arasına daxil edilmiş mətnin bayt hərflər sətri kimi əsas yaddaşa yazılmasına səbəb olur. Bu halda, birinci baytın ünvanı və baytların sayı (mətn uzunluğu) yığına itələnir. Nöqtədən əvvəl gələn mətn hərfi prosessor tərəfindən "sitatlar arasındakı mətni terminal ekranına göndərmək" əmri kimi şərh olunur. Məsələn, simvol kombinasiyasının prosessor girişinə qidalanması “Yaddaş yoxdur” mesajının ekranda görünməsinə səbəb olacaq: Yaddaş yoxdur.

Fərdi simvolun kodu, bu simvol prosessorun girişinə əvvəlcədən göndərilmiş # işarəsi ilə daxil olduqda, təpənin ən az əhəmiyyətli baytı kimi yığına itələnir. Məsələn, #L simvol birləşməsi L hərfi kodunu yığına göndərəcək, # 5 simvol birləşməsi 5 nömrəli kodu göndərəcək.Terminalda bir baytı çıxarmaq üçün TOB əmri kodu aşağı simvolda olan simvolu göstərir. yığının yuxarı baytı.

Əmrlərin birbaşa icrası rejimində belə, PRSP prosessoru adi kalkulyatorun imkanlarını xeyli üstələyir, istifadəçiyə verilənlərin emalı əməliyyatlarına əlavə olaraq, adı verilən məlumatların elan edilməsi və sonradan əsaslarla yanaşı istifadə oluna bilən prosedurların müəyyənləşdirilməsi vasitələri ilə təmin edilir. əməliyyatlar. Verilənlərin adları elan edilir və prosedurlar xüsusi əmrlərdən istifadə etməklə müəyyən edilir.

Məsələn, məsələn, TEMP adlı 16 bitlik dəyişən yaratmaq üçün klaviaturada yazın və düymə ilə onu prosessorun girişinə çatdırın. əmr

VAR TEMP

Siz bəyannamə ilə birlikdə dəyişənə ilkin dəyər təyin edə bilərsiniz, məsələn, 0:

VAR TEMP 0! TEMP

İndi prosessor girişinə TEMP adının gəlməsi bu dəyişənin cari dəyərinin stek üzərinə itələnməsinə səbəb olacaq və yığından ona yeni bir dəyərin təyin edilməsi komanda ilə həyata keçirilə bilər! TEMP.

Prosedur tərifi aşağıdakı əmrlə daxil edilir: (iki nöqtə) müəyyən edilən prosedurun adını ehtiva edən və hərflə əmr zəncirini müəyyən edən; (nöqtəli vergül) tərifin sonu simvolu kimi. Prosedurların tərifini və istifadəsini düsturla N natural ədədinin faktorialının hesablanması nümunəsi ilə nümayiş etdirək.

N! = N * (N-1) * (N-2) * ... * 2 * 1, yəni. N-1 vurma.

İstənilən nəticəni əldə etmək üçün FCT proseduru N-1-dən 1-ə qədər ardıcıl olaraq azalan nömrələrlə verilmiş N sayını çoxaltmalıdır, yəni. yalnız N-1 dəfə. PARADISE dilində bu, P prosedurunun t-dəfə icrası ilə proqramlaşdırılır: DO P, burada P prosedurun adıdır, t stekin yuxarı hissəsinin cari qiymətidir və P prosedurunun neçə dəfə lazım olduğunu göstərir. edam edilmək.

Fərz edək ki, FCT proseduru tətbiq edilməzdən əvvəl N rəqəmi yığının üzərinə sürülür və onun yuxarı hissəsindədir. Proseduru daha aydın etmək üçün K dəyişəninin dəyişdirilə bilən çarpanını təqdim edirik:

FCT prosedurunun tərifini aşağıdakı formada təqdim edirik:

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

Kvadrat mötərizədəki şərhlər operand yığınının cari vəziyyətini əks etdirir. Komanda! Müəyyən edilmiş prosedurun başlandığı K, yığından götürülmüş N ədədinin qiymətini K dəyişəninə təyin edir. Sonra K iki dəfə stek üzərinə itələnir və yığının yuxarı hissəsindəki 1-i çıxmaqla, yerinə yetirilmə sayı N-1-ə bərabər təkrarlanan F proseduru əmələ gəlir. Bunun ardınca bir döngə təyin edən DO F əmri gəlir, bundan sonra yığının yuxarı hissəsində tələb olunan faktorial qiymət olacaq - N !. Komanda. (dövr) bu dəyərin surətini terminal ekranına çap edir. 1-i çıxmaqla K-nin dəyərini dəyişdirən və yığında olan R.-nin hesablanmasının qismən nəticəsini K-yə vuran F prosedurunu müəyyən etmək qalır:

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

Hər iki prosedurun düzgünlüyünün yoxlanılması onların təriflərini bir-bir yerinə yetirməklə, operand stekinin məzmununu və hər əmrdən sonra terminal ekranında K dəyişəninin qiymətini göstərməklə həyata keçirilir.FCT proseduru tamamlandıqdan sonra yuxarı yığında N ! dəyəri olmalıdır və K dəyişəninin qiyməti 1-ə bərabər olmalıdır.

Yoxlanılan və düzəldilmiş prosedurlar (yoxlama prosesi zamanı xətalar aşkar edilərsə) N rəqəminin fərdi dəyərlərinə tətbiq edilməklə sınaqdan keçirilir. F proseduru FCT-də iç-içə olduğundan, sonuncu sınaq prosesi zamanı avtomatik sınaqdan keçirilir. Nəzərə almaq lazımdır ki, nəticənin dəyərləri tamamlayıcı kodda 32 bitlik uzun bir sözlə təmsil olunan maksimum müsbət rəqəmdən çox olmamalıdır: 2147483647, yəni. FCT yalnız N = 1, ..., 13 üçün düzgün nəticələr verir.

FCT-dən istifadə prosessorun öz göstərişlərini istifadə etməkdən fərqlənmir: nəticə əldə etmək üçün operandın dəyərini təyin etməli və prosedurun adını daxil etməlisiniz:

5 FCT 120

7 FCT 5040

FCT prosedurunun yuxarıda həyata keçirilməsi K köməkçi dəyişəninin tətbiqini tələb edirdi, lakin onun təpəsinin bir nüsxəsini yığına itələyən C əməliyyatından və E2 əməliyyatlarından istifadə etməklə funksional ekvivalent proseduru köməkçi dəyişən olmadan da yerinə yetirmək olar. və E3, zirvəni müvafiq olaraq yığının ikinci və üçüncü elementləri ilə mübadilə edir. Bu prosedurun tərifi aşağıdakı kimidir.

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

: FA C E3 * E2 1-;

Belə “sırf stek” prosedurunun üstünlüyü onun tam muxtariyyətindədir: prosessorun əsas stek əməliyyatları kimi, o, başqa yaddaş tələb etmədən və prosessorun digər komponentlərində heç bir dəyişikliyə səbəb olmadan yalnız operand stekində yerinə yetirilir.

Müəyyən edilmiş prosedurların adları və elan edilmiş məlumatlar prosessor lüğətinə daxil edilir, bu adların adlandırılmış obyektlərlə, yəni əsas yaddaşda yerləşən prosedur orqanları ilə və bu yaddaş üçün ayrılmış elementlərlə əlaqəsini qurur. elan edilmiş məlumatların saxlanması. Daxiletmə axınından növbəti sözü emal edərək, prosessor lüğətə baxır və orada uyğun söz taparaq bu sözlə əlaqəli hərəkətləri yerinə yetirir. Axtarış uğursuz olarsa, artıq qeyd edildiyi kimi, sözü rəqəmsal şəkildə şərh etməyə cəhd edilir və bu uğursuz olarsa, prosessorun sözü bilmədiyi bir mesaj gəlir.

Prosedur tərifinin tərtibi nəticəsində lüğətə bu prosedurun adı və onun gövdəsinin prosedurlara və tərifi təşkil edən verilənlərə işarələr ardıcıllığı olan göstəricisi (ünvanı) daxil edilir. Başqa sözlə, prosedur orqanının daxili təsviri onun tərifindəki prosedurların və verilənlərin adlarını müvafiq orqanların göstəriciləri ilə əvəz etməklə əldə edilir ki, bu da öz növbəsində göstəricilərin eyni ardıcıllığı, primitivlərdə isə zəncirdir. maşın təlimatları. Biz bunu proqramın prosedur kodunun daxili təsviri adlandırırıq.

P prosedurunun təriflərinin tərtibi ilə yanaşı, prosessora məlum olmayan bütün daxili prosedurların tərifləri tərtib edildikdə, göstəricilərin tam iyerarxiyası formalaşır ki, bu da P prosedurunu yalnız onun adını verməklə yerinə yetirməyə imkan verir. prosessor girişi. Bu halda, P-nin tərifi ilə əlaqədar tərtib edilmiş iç içə prosedurların adları, bu prosedurlara ayrıca müraciət etmək lazım deyilsə, onları lüğətdə saxlamağın mənası yoxdur. Bir sıra hallarda, lüğətin bu və ya digər hissəsinə girişi bağlamaq, bəlkə də yalnız bəzi prosedurları yerinə yetirmək qabiliyyətini tərk etmək məsləhət görülür.

Bu cür tələbləri ödəmək üçün lüğət alt lüğətlər toplusu kimi həyata keçirilir, onların üzərində alt lüğətləri və onların hissələrini yaratmağa və məhv etməyə, adları silməyə, müəyyən alt lüğətlərə girişi bağlamaq və açmaq imkanı verən əməliyyatlar müəyyən edilir. . Hər bir alt lüğətin onunla əlaqəli əmrlərdə istifadə olunan bir adı var. Alt lüğət adları $ ilə başlamalıdır, məsələn: $ PRIME, $ EDIT, $ FLOAT, $ TEXTPROC, $ GRAPHICS.

DSPP sözlərinin əsas dəstini ehtiva edən $ PRIME alt lüğəti prosessoru işə saldıqdan sonra həm tərkibindəki sözlərə daxil olmaq, həm də yeni sözlərlə doldurmaq üçün açıqdır. Ona daxil edilən yeni sözlər, lazım gələrsə, FORGET $ PRIME əmri ilə onlarla əlaqəli orqanlarla birlikdə silinə bilər. Bundan sonra, bu alt lüğətə sözləri daha da daxil etmək imkanı $ PRIME alt lüğətini yenidən artırmağa imkan verən GROW $ PRIME əmrini yerinə yetirməklə təmin edilir və ona daxil edilmiş hər şeyi UNUTMA $ ilə yenidən silmək olar. PRIME əmri və s. Bu rejimdə PRIME proqramların kiçik fraqmentləri, fərdi nümunələr, təxminlər ilə eksperimentlər apararkən istifadə olunur, həmçinin zərurət yarandıqda, sistem dilinin inkişaf ardıcıllığı ilə $ PRIME alt lüğətinə yeni sözləri daxil edin.

Ayrı bir proqram yaratdıqda, onlar bunun üçün öz lüğətlərini yaradırlar və bu, proqram mətninin əmrlə başlaması ilə əldə edilir.

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

Bir şəxs bu əmri başlıq kimi qəbul edir, ardınca kvadrat mötərizədə şərh verilir, proqramın həyata keçirdiyi funksiyanı bir neçə sözlə xarakterizə edir. Prosessor üçün o, əmrlər ardıcıllığına bərabərdir

$UNUTMAYIN<имя>$ ARTIQ<имя>

Buna görə də, prosessor girişində proqram mətninin hər bir qəbulu onun əvvəlki versiyasının silinməsinə səbəb olacaq və eyni adlı proqramın yeni versiyasını daxil etmək üçün bu şəkildə təmizlənmiş alt lüğəti açacaqdır. Bu, yaradılmış proqrama düzəlişlər edərkən, həmçinin gələcəkdə onu dəyişdirərkən rahatdır.

Qurulmuş proqramın mətni birbaşa klaviaturadan prosessor girişinə daxil edilmir, mətn redaktorunun buferində formalaşır. E əmri (Edit) redaktə rejimini təyin edir, bu rejimdə klaviaturada yazılmış sözlər artıq prosessor tərəfindən dərhal yerinə yetiriləcək əmrlər kimi qəbul edilmir, sadəcə olaraq buferə yazılan və eyni zamanda ekranda əks olunan mətndir. Ekranda cari mövqe göstəricisinin (kursorun) hərəkətini idarə edən xüsusi düymələrin, eləcə də digər düymələri basmaqla verilən redaktə əmrlərinin köməyi ilə daxil edilmiş mətni korrektə etmək və dəyişdirmək, silinmə və əlavələr etmək, onun fraqmentlərini köçürmək olar. yerdən yerə və s.

Mətnin daxil edilməsi və redaktə edilməsinin sonunda redaktor E düyməsini eyni vaxtda (daha doğrusu, əvvəllər basılmış) düymə ilə basmaqla söndürülür. , və sistem DSPP əmrlərinin əsas rejiminə keçir. Bənzər bir hərəkət sadəcə bir düyməyə basmaqla çağırılır ... Bu rejimdə redaktor buferinin məzmunu PF (PerForm - icra) əmri ilə prosessor girişinə göndərilə bilər. Bu, mətndə olan bütün əmrləri, xüsusən də PROGRAM $ əmrini yerinə yetirəcəkdir<имя>alt lüğətə daxil edilmiş $-ı siləcək<имя>bu əmrin son icrasından bəri məlumat və prosedur adları və müvafiq orqanlar, bu alt lüğəti genişləndirmək üçün yenidən açır. Verilənlərin bəyannaməsi və prosedurun tərifi əmrləri ona daxil etdikləri adları, bu adlarla təyin olunan verilənlərə və təriflərə uyğun tərtib edilmiş prosedur orqanlarına göstəricilərlə birlikdə qoyacaqdır.

Yükləmə tamamlandıqda, klaviaturadan yığılan prosedurlar və məlumatlar öz adları ilə istinad üçün mövcuddur və siz prosedurları artan ardıcıllıqla yerinə yetirməklə proqramın düzgünlüyünü yoxlaya bilərsiniz, yəni. təriflərində yoxlanılmamış prosedurlar olmayanlardan başlayaraq. Yoxlamaya başlamazdan əvvəl proqramda qeyri-müəyyən adların istifadə edilmədiyinə əmin olmaq lazımdır. Prosessor onları UNDEF əmri ilə ekranda göstərir. Proqram mətnini bu adların tərifləri ilə doldurmaq, habelə yoxlama zamanı aşkar edilmiş digər səhvləri düzəltmək üçün E əmrindən istifadə edərək redaktoru çağırın və redaktor buferində proqramın mənbə koduna müvafiq dəyişiklik edin və sonra keçid edin. prosessoru əsas rejimə keçirin və PF əmri ilə buferin məzmununu yükləyin.

Proqram yoxlanıldıqdan və sınaqdan keçirildikdən sonra onun mənbə kodunu redaktor buferindən OE f əmrindən istifadə etməklə diskə köçürmək olar, burada f proqramın diskə yazılacağı formada faylın adıdır. Gələcəkdə faylın məzmunu LOAD f əmri ilə prosessor girişinə yüklənə, həmçinin IE f əmri ilə içindəki mətnə ​​əlavə olaraq redaktor buferinə köçürülə bilər. Varsayılan olaraq, fayllar .dsp uzantısına malikdir. Bufer əvvəllər KE əmri ilə təmizlənə bilər. LPE əmri ilə buferin məzmununu çap etmək də mümkündür.

İcraya hazır olan proqramı yüklədikdən sonra yaradılmış $ lüğətini təmizləmək mümkündür<имя>CLEAR $ əmri ilə<имя>... Bu əmri yerinə yetirməklə, prosessor qeyd olunmamış adları adlandırılmış alt lüğətdən çıxarır, yəni. təriflərinin qarşısında :: prefiksi (iki iki nöqtə) olanlardan başqa bütün adlar. Bu halda, yalnız adların özləri (lüğət qeydləri) silinir və prosedurların və onlarla əlaqəli məlumatların orqanları saxlanılır və tərtib zamanı qurulan daxili keçidlərdən istifadə edərək proqramın icrası zamanı əldə edilir, lakin onlar artıq kənardan mövcud deyildir. Kənardan daxil olmaq qabiliyyətini bərpa etmək üçün, məsələn, bəzi əlavə və ya dəyişiklik tərtib etmək lazımdırsa, proqramın mənbə kodunu yenidən yükləməlisiniz.

SHUT $ əmrindən istifadə etməklə adları lüğətdən çıxarmadan kənardan əlçatmaz etmək olar.<имя>, adı çəkilən alt lüğətin bütün sözlərinə girişi bağlayır. Onun sözlərindən istifadə etmək üçün lüğətin açılması USE $ əmri ilə həyata keçirilir<имя>... YALNIZ $ əmri də var<имя>, adı çəkiləndən başqa bütün alt lüğətləri bağlayan və bu məhdudiyyəti ləğv edən LƏĞV əmri. Sadalanan əmrlər tərtib zamanı lüğətdən istifadəyə nəzarət etməyə və proqramın istifadəçisi üçün mövcud olan adlar toplusunu tələb olunan minimuma qədər məhdudlaşdırmağa imkan verir.

Lüğətdə adın axtarışı onun sözlərinə lüğətə daxil edildiyinin tərsi ardıcıllıqla baxılmaqla həyata keçirilir, yəni. sonuncu daxil olandan başlayır. Buna görə də lüğətdə bir dəfədən çox müəyyən edilmiş ad üçün ən son tərif etibarlıdır. Bu son tərifi ehtiva edən alt lüğət bağlanarsa, axtarış verilmiş adla mövcud olan ilk lüğət girişinə qədər davam edir və bu girişdə göstərilən tərif istifadə olunacaq.

Məlumatların daxil edilməsi və çıxışı haqqında bir neçə söz. Artıq qeyd edildiyi kimi, prosessor icra olunan proqramın lüğətdə tapılmayan sözünü ədəd kimi şərh etməyə çalışır və əgər uğurlu olarsa, bu ədədin binar ekvivalentini stek üzərinə itələyir. Nömrənin yığına daxil edilməsi VÖEN əmri ilə həyata keçirilə bilər ki, bu da daxil edilmiş nömrənin klaviaturada yazılmasını tələb edir. Klaviaturadan daxil edilmiş simvolu stek üzərinə itələmək üçün də əmrlər var: TIB - displeyli, TRB - bu simvolu ekranda göstərmədən. Bu halda, hərf kodu yığına itələnən 32 bitlik sözün ən az əhəmiyyətli baytı ilə təmsil olunur, ən əhəmiyyətli 3 baytı sıfıra bərabərdir.

Yığının yuxarı hissəsinin məzmunu müvafiq olaraq rəqəm və hərf kimi daxil edilə bilər. TON əmri eni təpə ilə təyin olunan çıxış sahəsində alt sətirin ədədi dəyərinin onun icrası zamanı təyin edilmiş ədədlərin təmsil sistemində göstərilməsinə səbəb olur. TOB əmri, kodu yığının yuxarı hissəsinin aşağı baytında olan simvolu ekrana çap edir. Hər iki halda çıxış arqumentlərin yığından çıxarılması ilə müşayiət olunur.

DSPP prosessorunda xarici və daxili (komanda) kəsilmələr üçün aparat var və onları emal etmək üçün aşağıdakı vasitələri təmin edir. Xarici kəsmə ilə işləmə proseduru adi prosedura bənzər şəkildə müəyyən edilir, lakin iki nöqtədən əvvəl INT prefiksi əlavə olunur. Belə bir prosedurun adı əmrlə kəsmə vektorunun ünvanı ilə əlaqələndirilir:

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

Komanda kəsilməsi cavab prosedurunu çağıran adlandırılmış əməliyyatdır. Bu əməliyyatın adı, son cavabın ON və ya EON əmri ilə başqa cavab proseduru ilə əvəz edilmədiyi halda həyata keçirilən son cavab proseduru ilə əlaqələndirən TRAP əmri tərəfindən müəyyən edilir. Hər üç əmr eyni formata malikdir:

TƏLƏK<имя вызова> <процедура реагирования>

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

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

EON əmri ilə çağırış adı ilə əlaqəli prosedur EON əmrini ehtiva edən prosedurun gövdəsindən ilkin çıxışla və EON icrası zamanı baş vermiş operand yığını göstəricisinin dəyəri ilə yerinə yetirilir.

PARADISE sintaksisi

PARADISE dilinin əlifbasına latın və rus dilləri, böyük və kiçik hərflər, onluq rəqəmlər, riyazi və digər xüsusi simvollar daxildir. Əlifbanın elementlərinə (üzvlərinə) hərflər deyilir. Hərfin xarici təsviri onun çap edilmiş şəklidir (çap işarəsidir). PRSP prosessorunun daxilində hər çap edilmiş simvol bir baytla təmsil olunur, dəyəri bu simvolun ikili kodudur. Xarici təsvirin daxili birinə və əksinə çevrilməsi giriş / çıxış cihazı (klaviatura, displey, printer) tərəfindən həyata keçirilir. Rahatlıq üçün kodun ədədi dəyəri onluq, onaltılıq və ya səkkizlik sistemlə ifadə edilir, müvafiq nömrəni onluq, onaltılıq və ya səkkizlik hərf kodu kimi adlandırır.

CƏNNƏT dilinin bütün obyektləri hərflərdən qurulub və sözlər adlanan sonlu uzunluqlu hərflərin xətti zəncirlərini təmsil edir. Bir-birini izləyən sözlərin ayırıcısı çap olunmayan simvoldur (boşluq). Boşluqlar silsiləsi bir boşluqla eynidir. Bundan əlavə, söz ayırıcısının funksiyası daxiletmə qurğularının klaviaturalarında simvolla işarələnmiş "Növbəti sətrin əvvəlinə keç" əmri ilə yerinə yetirilir. və ya və hərflərlə yanaşı, kod-baytla daxili təmsilə malikdir. Beləliklə, xəttin əvvəlində və sonunda heç bir ayırıcı boşluq tələb olunmur.

Söz nümunələri: CLEAR NOP STEK2 & 1+ -366 X Nümunə.

DSPP prosessoru sözləri ilk yeddi hərflə fərqləndirir, onları öz lüğətindəki sözlərlə polimer müqayisəsi ilə müəyyən edir. Lüğətdə əsas əməliyyatlar və ya primitivlər adlanan prosessorun öz əməliyyatlarının adları (təyinatları) olan və istifadəçi tərəfindən müəyyən edilmiş obyektlərin (məlumatların, prosedurların) adları ilə tamamlana bilən sözlər var. Beləliklə, lüğətdə olan sözlər ya hərəkətlərin (əməliyyatların, prosedurların) adları, ya da verilənlərin adlarıdır (sabitlər, dəyişənlər, massivlər).

Lüğətdə tanınan söz olmadıqda, prosessor onu aşağıdakı hallardan birinə təyin etməyə çalışır:

    ədədi hərfi, yəni. minus işarəsi ilə başlayan rəqəmlər ardıcıllığı, məsələn: 0, 4096, -25;

    hərfi simvol: # simvolu ilə başlayan söz, prosessorun verilmiş kod kimi dərhal sonrakı simvolu almasına səbəb olur, məsələn: #A - böyük Latın hərfi A hərfi, # 5 - rəqəm 5 hərfi, # - boşluq hərfi, ## - hərfi hərflər #;

    mətnin hərfi: qoşa dırnaq içərisində və söz ayırıcıları ilə ayrılmış ixtiyari mətn, məsələn: "Mətn", "Daxiletmə faylı N3";

    ekrana mətn mesajı göndərmək əmri: göstərilən mesajın mətni, sola nöqtə-iki dırnaq və sağda qoşa dırnaq işarəsi ilə ayrılmış və söz ayırıcıları ilə ayrılmışdır, məsələn: “Yığın boşdur. ";

    şərh: kvadrat mötərizələrə alınmış və ayırıcılarla ayrılmış ixtiyari mətn, məsələn:.

Hərflər və ekrana mesaj vermək əmri lüğət tərəfindən tanınan sözlərlə birlikdə DSPP dilinin obyektləri kimi çıxış edir, şərhlər isə DSPP prosessoru tərəfindən tamamilə nəzərə alınmır - onlar maşın üçün deyil, şəxs üçün nəzərdə tutulub. Söz lüğətdə tapılmırsa və sadalanan konstruksiyalara aid deyilsə, prosessor mesaj verir: "Bilmirəm.<неопознанное слово>".

#, "və birləşmə" hərflərinə verilən xüsusi mənaya görə. sözün əvvəlində, yəni. ayırıcıdan sonra, eləcə də ayırıcıdan əvvəl "hərfi, lüğətə daxil edilməsi üçün müəyyən edilmiş sözlərdə göstərilən vəzifələrdə istifadə edilməməlidir.

Prosessorun girişindəki sözlər ardıcıllığı prosessor tərəfindən yerinə yetirilən əmrlərin ardıcıllığı kimi şərh olunur. Bu halda üç növ söz fərqləndirilir:

1) müstəqil şəkildə həyata keçirilir, yəni. bir sözdən ibarət əmrlər (monoloqlar);

2) bir və ya bir neçə sonrakı sözlə birlikdə yerinə yetirilir, yəni. iki, üç və ya ətraflı əmrlərin ilkin sözləri (prefiksləri) olan;

3) xüsusi icra rejiminin aydınlaşdırılması və ya göstəricisi kimi əmrdən əvvəl (prefikslər).

Monoloqlara hərflər, verilənlər adları, əksər giriş/çıxışlar, yığında verilənlərin sınanması və konvertasiyası və istifadəçi tərəfindən müəyyən edilmiş qaydalar daxildir. Məsələn: 1987 - ədədi hərf, # 5 - rəqəm 5 hərfi, Sxem siyahısı - mətn hərfi, LENGTH - dəyişən adı, TOB, NEG, +, &,<, = - имена (обозначения) операций, SORT, CONVERT, ЧИСТКА, СНЯТЬ - имена процедур пользователя.

Prefikslər verilənlərin təsviri və prosedurların müəyyən edilməsi, həmçinin adlandırılmış verilənlərin manipulyasiyası, prosedurların şərti və təkrar icrası, lüğətin idarə edilməsi üçün əmrlərə xasdır. Prefiksli əmrlərə nümunələr:

VAR SUM - dəyişən SUM yaradın,

: ODD [x] 1 &; - tək ədədi 1, hətta 0 ilə əvəz edən TƏK proseduru yaradın,

0 X - X dəyişəninə 0 dəyərini təyin edin,

BR + P1 P2 - yığından götürülmüş üst hissəsinin dəyəri müsbət olarsa, P1-i yerinə yetirin, əks halda P2-ni yerinə yetirin,

RP CHECK - CHECK prosedurunu təkrar-təkrar yerinə yetirmək,

İSTİFADƏ $REAL - istifadə üçün $REAL alt lüğətini açın.

Tipik olaraq, müəyyən bir prefiks ondan sonra müəyyən sayda söz tələb edir. Beləliklə, indi verilmiş nümunələrdə VAR,!0 və USE prefikslərinin hər biri bir söz, BR+ prefiksi isə iki söz tələb edir. Bununla belə, prefiks: (kolon) üç sözdən başlayaraq ixtiyari uzunluqda əmr yaratmağa imkan verir. Əmrin sonu sözdür; (nöqtəli vergül). İxtiyari uzunluq da əmrə xasdır - sabit deskriptor CNST A1 ... AJ; və prosedur çox seçim əmri BR A1 P1 ... AJ PJ ELSE PN.

Prefikslər əmrin ön hissəsinə əlavə olunduqda onun məzmununu dəyişdirən və ya xüsusi icra rejimini təyin edən xüsusi sözlərdir. Məsələn, prefikssiz VAR X əmri 16 bitlik dəyişən X yaratmaq göstərişidir. Əgər ona BYTE prefiksini əlavə etsəniz, 8 bitlik dəyişən yaratmağı əmr edən BYTE VAR X əmrini alırıq. (bayt) adlı X. Əgər LONG prefiksini istifadə edirsinizsə, onda biz LONG VAR X alırıq - X adlı 32 bitlik dəyişən yaratmaq üçün təlimat.

Başqa tipli ön prefiks, yəni :: (iki iki nöqtə), əmr nəticəsini lüğətdən sabitləşdirilməmiş sözləri silən CLEAR proseduruna davamlı edir. Proqramın qurulması prosesində verilənlərin təsviri və prosedurların müəyyən edilməsi əmrləri ilə lüğətə daxil edilmiş adlar, proqram yaradıldıqdan və sınaqdan keçirildikdən sonra, bitmiş proqramı saxlamaq üçün lazım olan bir neçə şey istisna olmaqla, lüğətdən çıxarıla bilər. . Silinmə CLEAR $ əmri ilə həyata keçirilir<имя подсловаря>, proqramla əlaqəli lüğəti təmizləməyi tapşıraraq, onda yalnız təriflərində :: ön prefiksi olan sözləri saxlamaq. Çıxarılmayan sözlər yaradan əmrlərin nümunələri:

:: BYTE CNST LITCODE # # 0 #A;

::: MOD / [int (a, b), istirahət (a, b)] E2 D [istirahət (a, b)];

:: və BYTE prefikslərini ehtiva edən ikinci misalda göstərildiyi kimi, komandada birdən çox prefiks ola bilər.

Beləliklə, DSPP-dəki bir əmr ya tək söz (monoloq), ya da prefikslə başlayan və verilmiş prefiks üçün təyin edilmiş sözlərin sayını ehtiva edən bir söz (ifadə) ola bilər və əgər prefiks ixtiyari sayda sözə icazə verirsə , onda onun sonunda ayırıcı söz var və ya qarşısında xüsusi ön prefiksli sözlər olan ifadə ola bilər.

DSPN-in əsas dilində əmrdən daha mürəkkəb sintaktik konstruksiyalar yoxdur və yuxarıda müzakirə olunanlardan başqa heç bir başqa konstruksiya yoxdur. Hətta proqramlaşdırma dillərində ifadə və funksiya kimi əvəzolunmaz şeylər də əsas dildə yoxdur və lazım gələrsə, yalnız onun inkişafı zamanı təqdim edilə bilər.

Baza dildə olan proqram sadəcə mətndə göründükləri ardıcıllıqla yerinə yetirilən əmrlər toplusudur. Üstəlik, hər bir əmr, yalnız primitivləri ehtiva edənlər istisna olmaqla, onun icrası prosesində ona daxil olan sözləri müəyyən edən əmrlər ardıcıllığını ehtiva edir. İştirak edən əmrlər öz növbəsində əmr zəncirlərini bildirən sözlərdən ibarət ola bilər, bu sözlərdə onların əlaqəli zəncirlərinə istinad etmək mümkündür və s. əmrlərin yalnız primitivlərdən ibarət olduğu səviyyəyə.

Bu fəslin məzmununu təşkil edən CƏNNƏT dilinin ümumi təsviri bu dilin strukturunun xüsusiyyətlərinə və onun daxili əmrlər (primitivlər) toplusu olan əsas (ilkin) əmrlər toplusuna həsr edilmişdir. DSPP prosessorunun. Dilin gələcək inkişafı və müvafiq olaraq prosessorun imkanlarının artırılması əsas alətlərdən istifadə etməklə qurulan yeni prosedurların, əmrlərin, formatların və məlumat növlərinin tətbiqi ilə həyata keçirilir. Bir qayda olaraq, bu cür inkişaf problem yönümlüdür və baza sisteminə əlavə olaraq prosessorun girişində yüklənmiş prosedurlar paketləri şəklində həyata keçirilir.

Digər tərəfdən, əsas sistem onun əsasında həyata keçirilən DSP proqramlarının maşın səmərəliliyini artırmaq üçün xüsusi vasitələrlə tamamlana bilər. Bu alətlərə fərdi prosedurları birbaşa istifadə olunan maşının təlimat kodunda müəyyən etmək imkanı daxildir. Prosedurun müəyyənləşdirilməsi üsulu onun sonrakı istifadəsinə heç bir təsir göstərmir: bütün prosedurların adları ümumi lüğətə daxil edilir və tamamilə bərabərdir. Bir sıra kitabxana proqramları başqa dillərdə yazılmış prosedurlardan və ya bütün proqramlardan istifadə etməyə imkan verir.

Əməliyyatların və əmrlərin təsviri

Stack əməliyyatları

Operand yığını DSP prosessor arxitekturasının əsas elementlərindən biridir. Əksər prosessor təlimatları yığından istifadə edir, ondan lazım olan operandları istehlak edir və nəticələri ona itələyir. Stekdəki verilənlərin şərhi həll olunan problemin mahiyyətindən asılıdır, yəni son nəticədə proqramçıya həvalə olunur. Stekə daxil olmuş qiymət əslində öz adını itirdiyinə görə proqramın mətnindən bu və ya digər əməliyyatın hansı operandlara tətbiq edildiyini, onun nəticələrinin nə olduğunu müəyyən etmək çətindir. Buna görə də, PARADISE dilində operandların və prosedurların nəticələrinin açıq şəkildə göstərilməsi üçün şərhlərdən istifadə olunur. Bu halda, yığının bütün məzmununu təsvir etmək tələb olunmur (və həmişə mümkün deyil). Üzərində həyata keçirilən prosedurdan təsirlənən yığının yuxarı hissəsini şərh etmək tamamilə lazımdır, çünki bu olmadan proqramın görünməsi itirilir və onun yoxlanılması çətinləşir.

Proqramın ardıcıllığına nail olmaq üçün bu şərhlər bir neçə sadə qayda ilə yazılmalıdır. Hər hansı şərh kimi, yığındakı məlumatların təsviri kvadrat mötərizə içərisindədir. Bu təsvir proqramın müəyyən nöqtəsində stekdə olan operandların siyahısıdır. Siyahının hər bir elementi bir yığın mövqeyinin məzmununu xarakterizə edir, ayırıcı kimi vergül istifadə olunur. Yığın mövqeləri ən dərin elementdən başlayaraq yığının yuxarı hissəsində bitən soldan sağa siyahıya alınmışdır. Fərdi operandın təsviri ədəd, ad, ifadə və ya yığındakı dəyərin mənasını izah edən hər hansı digər mənalı qeyd ola bilər. Bəzən müəyyən bir yığın mövqeyi üçün bir neçə mümkün dəyər təyin edə bilərsiniz. Bu halda, dəyərlər düz xətt ilə qeyd olunur.

Operand yığınının vəziyyətini əks etdirən şərhə bir nümunə:

[başlanğıc ünvanı, N + 1,1 / 0]

Proqramın bu şərhin yerləşdiyi nöqtədə operand yığını ən azı üç mövqedən ibarət olmalıdır və yuxarıda 1 və ya 0 ola bilər, alt bölmədə - N + 1-ə bərabər ədədi dəyər və aşağıda o - bəzi nömrələr başlanğıc ünvanı kimi şərh olunur.

Yığın tələb olunan mövqeyini təyin etmək rahatlığı üçün dərinlik anlayışından istifadə edəcəyik. Fərz edəcəyik ki, yığının yuxarı hissəsi 1 dərinlikdə, alt təbəqə 2 dərinlikdə yerləşir və s. Xüsusilə, nümunədə "reklamı başlat" kimi qeyd olunan dəyər. 3 dərinlikdə yerləşir.

Əsas DSPC dilini öyrənməyə dəyərləri yığına itələmək əmrləri ilə başlayacağıq. Bu tipin ən sadə (və ən çox istifadə olunan) əmri ədədi literaldır, yəni yığına itələnəcək sabitin açıq göstəricisidir. Məsələn, tutaq ki, biz 28, -5 və 11 rəqəmlərini yığının üzərinə itələmək istəyirik.Bunun üçün klaviaturadan aşağıdakı sətri daxil edin:

28 -5 11 və düyməsini basın (vaqonun qaytarılması). Prosessor daxil edilmiş nömrələri tanıyır və onları tək-tək stekə itələyir ki, yuxarı 11 olacaq. Bunu yoxlamaq üçün displey ekranında yığının yuxarı hissəsinin qiymətini çap etmək kifayətdir. Bunun üçün adı olan DSPP əmrindən istifadə olunur. (nöqtə). Klaviaturada "nöqtə" yazaraq və basmaqla , ekranda cavabı alırıq: 11, yığına itələnən son dəyərə uyğundur. "Nöqtə"nin təkrar icrası eyni nəticəyə gətirib çıxarır - bu əmr yığının vəziyyətini dəyişdirmədən yalnız təpəni göstərir.

Stackin bütün məzmununu göstərmək üçün DSPP-də .. (iki nöqtə) əmri var. Onu icra etdikdən sonra ekranda xətti alırıq:

Gördüyünüz kimi, çap forması yığının vəziyyətini şərh etmək üçün qəbul edilmiş konvensiyalara uyğundur (vergül əvəzinə boşluqdan istifadə etmək istisna olmaqla). .. əmri yığının məzmununu dəyişmir.

Maşının yaddaşında bir yığın mövqeyini təmsil etmək üçün 32 bitlik söz (4 bayt) istifadə olunur, nömrələr iki tamamlayıcı kodda təmsil olunur. Müvafiq olaraq, PRSP prosessoru yalnız -2147483648 ilə 2147483647 diapazonunda yerləşən tam ədədləri düzgün qəbul edə bilər. Əgər daxil edilmiş nömrə 32 bitlə (işarəsi ilə) təmsil olunmursa, onda uyğun gəlməyən ən əhəmiyyətli bitlər atılır.

Baxılan nümunələrdə PRSP prosessorunun ədədlərin onluq giriş/çıxış rejimində olduğu güman edilirdi. Bu rejimi PARADISE dilində qurmaq üçün B10 əmri var.

Bir çox tapşırıqlarda işlənmiş verilənləri rəqəmlər kimi deyil, ikili kodlar, yəni 32 komponentli bit vektorları kimi şərh etmək tələb olunur. DSPP-də ikilik, səkkizlik və ya onaltılıq say sistemində təqdim olunan kodlarla işləmək mümkündür. İstədiyiniz rejimi qurmaq üçün üç əmrdən birini yerinə yetirmək kifayətdir: B2, B8 və ya B16, bundan sonra prosessor göstərilən say sistemində bütün daxil edilmiş kodları qəbul edəcək və çap edəcəkdir.

Bu funksiya onluq ədədləri 2, 8 və 16 bazasına çevirmək üçün istifadə edilə bilər. Məsələn, 29 rəqəmini çevirmək üçün aşağıdakı sətri daxil edib icra etməlisiniz:

B10 29 B2. B8. B16. Nəticədə, prosessor bir sıra rəqəmlər göstərəcək: 00000000035 0000001D, üç müəyyən edilmiş say sistemində 29-cu onluq rəqəminin təmsilləridir. Qeyd edək ki, kodlar maşın təsvirində, yəni aparıcı sıfırlarla və "+", "-" işarələri olmadan çap olunur. B10 -2 B8 xəttini yerinə yetirərkən. 37777777776 nömrəsi qaytarılacaq ki, bu da -2-nin iki tamamlayıcısının səkkizlik təmsilidir.

Onaltılıq kodlarla işləyərkən ədədi hərflərlə DSPP prosessorunun əmrlərinin adları arasında toqquşmalar baş verə bilər. Məsələn, Hexadecimal I/O rejimində B8 sözü səkkizlik rejimi təyin etmək əmri və onaltılıq sabit kimi şərh edilə bilər. Qeyri-müəyyənliyin qarşısını almaq üçün 0B8 kimi qeyri-əhəmiyyətli sıfırla ədədi hərflərə başlayın.

DSPP prosessorunun təlimat sisteminin əsasını yığındakı məlumatların çevrilməsi əməliyyatları təşkil edir. Bu əməliyyatların işini tənzimləyən ümumi qayda ondan ibarətdir ki, hər bir əməliyyat yığından tələb olunan operandları istehlak edir (çıxarır) və nəticə dəyərlərini (əgər varsa) öz yerinə itələyir.

Dörd arifmetik əməliyyatı yerinə yetirən prosessor təlimatlarını nəzərdən keçirin: toplama, çıxma, vurma və tam ədədlərə bölmə. Onları CƏNNƏT dilində təsvir etmək üçün müvafiq olaraq +, -, * və / sözlərindən istifadə olunur. Yığındakı iki ədədin, məsələn, 123 və 45-in cəmini əldə etmək üçün bu ədədləri yığının üzərinə itələmək və + əmrini yerinə yetirmək lazımdır. Bunu etmək üçün klaviaturadan aşağıdakı sətri daxil etmək kifayətdir (onluq I / O rejiminin qurulduğu güman edilir):

123 45 +

İndi yığının məzmununu göstərsək (.. əmrindən istifadə etməklə), əlavənin nəticəsi görünəcək:

Kommutativ vurma əməliyyatı oxşar şəkildə işləyir.

Qeyri-kommutativ çıxma və bölmə əməliyyatlarını yerinə yetirərkən alt yığın çıxılan (bölünən), yuxarı hissəsi isə çıxılan (bölən) kimi qəbul edilir. Məsələn, 151-68 fərqini hesablamaq üçün xətti yerinə yetirməlisiniz:

151 68 -

PARADISE dilində hesab əməliyyatını yerinə yetirmək üçün proqram əməliyyatın müvafiq operandlardan sonra yerləşməsi ilə xarakterizə olunur. Arifmetik ifadələrin bu qeydi postfiks (və ya Polşa tərs) notasiyası adlanır və stek mikrokalkulyatorlarında geniş istifadə olunur. Tutaq ki, məsələn, arifmetik ifadənin qiymətini hesablamalıyıq ((127 + 81) * 15- (31 + 117) * 21) * 3

Postfiks notasiyasında bu ifadə belə görünəcək:

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

Bu sətir (sözlərin bir-birindən boşluqlarla ayrıldığı) DSP prosessoru ilə ifadəmizi hesablamaq üçün hazır proqramdır.

Bölmə / əmr digər arifmetik əməliyyatlardan onunla fərqlənir ki, onun nəticəsi iki dəyərdir - hissə və qalıq. Bölmə yığının aşağı hissəsində, qalan hissəsi isə yuxarıdadır. Dividend və bölən fərqli işarələrdirsə, bölgü mənfi olur. Qalanda həmişə divident işarəsi var. Bölmə əmrindən istifadə üçün bir neçə nümunə var.

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

Hesablamalar apararkən səhv vəziyyətlər yarana bilər: daşqın və sıfıra bölmə. DSPP prosessoru onlara heç bir şəkildə reaksiya vermir (xüsusilə, sıfıra bölündükdə yığının məzmunu dəyişmir) və əməliyyatların istifadəsinin düzgünlüyünə nəzarət proqramçıya verilir.

Proqramlaşdırma zamanı çox vaxt dəyərin dəyərini 1 və ya 2 artırmaq və ya azaltmaq lazımdır. PARADISE dilinə yığının yuxarı hissəsində göstərilən hərəkətləri yerinə yetirən xüsusi əmrlər daxil edilmişdir. Onlar sözlərlə göstərilir: 1+, 1-, 2+, 2-. Bu əmrlərin yerinə yetirilməsi tələb olunan sabiti (1 və ya 2) yığına itələmək və sonra tələb olunan arifmetik əməliyyatı (+ və ya -) yerinə yetirməyə bərabərdir. Məsələn, 2+ 2+ sözü cütlüyünə bərabərdir. Bu əmrlərin dilinə giriş səmərəlilik baxımındandır.

Həmçinin, DSP prosessorunun əsas dilində səmərəliliyi artırmaq üçün göstərilən əmrdən əvvəl yuxarıda hansı dəyərin olmasından asılı olmayaraq yığının yuxarı hissəsinin dəyərini müvafiq olaraq 0 və 1 ilə əvəz edən T0 və T1 əmrləri mövcuddur. Nümunələr:

NEG, ABS və SGN əmrləri rəqəmsal verilənlərlə işləmək üçün də mövcuddur. NEG əmri yığının yuxarı hissəsinin işarəsini tərsinə çevirir, ABS yığının yuxarı hissəsinin dəyərini modulu ilə əvəz edir, SGN - yığının yuxarı hissəsindən rəqəmli dəyəri istehlak edir və çıxarılan ədədin işarəsini əvəz edir: -1 - ədəd mənfi olarsa, 1 - müsbət olarsa, 0 - sıfıra bərabərdirsə. Məsələn:

5 NEG [-5] ABS SGN

Əsas dildə MIN və MAX əmrləri sizə iki tam ədədin minimum və maksimumunu tapmağa imkan verir. Bu təlimatlar üçün operandlar yığının yuxarı və aşağı hissəsində iki ədəddir. MIN təlimatı yığındakı parametrlərin sayının ən kiçiyini, MAX isə maksimumunu qoyur. Məsələn:

5 0 15 DƏQİQ [-5,0] MAX

Yığındakı üç ədədin minimumunu (maksimumunu) tapmaq üçün MIN (MAX) əmrindən iki dəfə istifadə etmək kifayətdir:

MIN DƏQİQ [-2]

Yığın yuxarı hissəsində olan nömrənin a-dan b-yə (sərhədlər daxil olmaqla) müəyyən edilmiş diapazonda olub olmadığını yoxlamaq üçün SEG əmri nəticədə yığında işarə qoyur: əgər nömrə diapazondadırsa 1 və 0 Əgər olmasa:

SEG [xüsusiyyət] məsələn:

Rəqəmsal məlumatlarla işləmək üçün təlimatlara əlavə olaraq, DSPP prosessoru üçün təlimatlar dəstinə 32 bitlik kodları çevirmək üçün nəzərdə tutulmuş bir sıra əməliyyatlar daxildir. Bu əməliyyatlar yığın elementinə 32 komponentli bit vektoru kimi baxır, onun komponentləri sağdan sola elə nömrələnir ki, ən soldakı bit 31, ən sağdakı bit isə 0-dır. Komponentin azalan nömrələnməsi bir çox mikroprosessorlar üçün qəbul edilən maşın sözü bitlərinin nömrələnməsini təkrarlayır.

Bit vektorlarında yerinə yetirilən əmrlərə əsasən Boolean cəbrinin bitvi əməliyyatları daxildir:

    INV yığınının yuxarı hissəsinin bit istiqamətində çevrilməsi, yuxarının hər bitinin dəyərini dəyişdirmək, yəni 0-ı 1, 1-i 0 ilə əvəz etmək;

    yığının yuxarı və aşağı hissəsinin bit istiqamətində birləşməsi &, nəticənin i-ci bitini təyin etməklə, hər iki operandın i-ci bitləri 1-ə bərabərdirsə, i = 31,30, ..., 0, 1-ə , və digər hallarda i-ci bitin 0-a bərabər qurulması;

    yığının yuxarı və aşağı hissəsinin bit üzrə disjunksiya & 0, nəticənin i-ci bitində təyin edilməsi, i = 31,30, ..., 0, dəyəri 0, əgər hər iki operandın i-ci bitləri 0-a bərabərdir, digər hallarda isə i-ci biti 1-ə bərabər təyin edir;

    qovşaqların və alt qovşaqların bit üzrə əlavəsi (ekvivalent olmaması) "+", hər iki operandın i-ci bitləri eyni qiymətə malik olduqda, nəticənin i-ci bitini 0-a təyin etmək və i-cini təyin etmək operandların i-ci bitlərinin qiymətləri fərqli olarsa, nəticənin biti 1-ə bərabərdir.

525 INV 722 & 136 & 0 325 "+"

Bitwise birləşmə tez-tez söz bitlərini sıfırlamaq (təmizləmək) üçün istifadə olunur. Bunu etmək üçün orijinal sözü təmizlənməli olan rəqəmlərdə sıfırlar və qalan rəqəmlərdə birlər olan maska ​​ilə birləşdirin. Məsələn, əgər hansısa X sözündə 3-dən 5-ə qədər bitləri sıfırlamalısınızsa, onun 37777777707 maskası ilə bitwise birləşməsini yerinə yetirməlisiniz. X = 235 üçün alırıq:

Bitwise disjunction əvvəlcədən təmizlənmiş söz qrupuna istədiyiniz bit modelini daxil etmək üçün istifadə edilə bilər. Məsələn, tutaq ki, siz 010 binar kombinasiyasını sonuncu misal nəticəsində yığında qalan sözün 3-dən 5-ə qədər bitlərinə yerləşdirmək istəyirsiniz. Bunu belə edə bilərsiniz:

Bit manipulyasiya əməliyyatlarına məntiqi keçid əmrləri də daxildir:

    sola sürüşmə SHL - yığının yuxarı hissəsinin hər biti, 31-dən başlayaraq, nömrələrin azalan ardıcıllığı ilə növbətinin qiymətini alır, sonuncu, sıfır bit isə 0 qiymətini alır;

    sağa sürüşdürmə SHR - yığının yuxarı hissəsinin hər biti 0-dan başlayaraq nömrələrin artan sırası ilə növbətinin qiymətini, 31-ci bit isə 0 qiymətini alır;

    üst SHT boyunca yerdəyişmə - yuxarı element yığından çıxarılır və yığının yuxarı hissəsində neçə yerdəyişmənin və hansı istiqamətdə yerinə yetirilməli olduğunu göstərən N tam ədədi kimi qəbul edilir: N> 0 olduqda, keçidə keçid edilir. ayrılanda, N<0 - вправо.

B8 125 SHR SHL -2 SHT

Sola sürüşdürmə əməliyyatları nömrələri N-ci dərəcəyə 2-yə vurmaq üçün istifadə edilə bilər, burada N növbələrin sayını təyin edən natural ədəddir. Məsələn, -5 rəqəmini 8-ə vurmaq bu rəqəmin 3 rəqəmini sola köçürməklə edilə bilər:

B10 -5 3 SHT [-40]

Bu vəziyyətdə daşqın ehtimalı nəzərə alınmalıdır.

Sağa sürüşdürmə yalnız müsbət ədədlər üçün N-nin gücünə tam 2-yə bölmə əməliyyatı kimi istifadə edilə bilər, çünki sağa keçid zamanı ən əhəmiyyətli (işarə) bit sıfırlanır. Məsələn:

Halbuki

Yığmanın yuxarı hissəsini 1 bit sağa ROR və sol ROL çevirmək əmrləri məntiqi yerdəyişmə əmrlərinə bənzəyir, istisna olmaqla, uzadılmış ekstremal bit yox olmur, əksinə 32-nin əks ucundan boş yerə itələnir. -bir az uzun söz. Məsələn (onaltılıq ədədlər):

İkili kodların emalı üçün DSPP prosessorunun SWB və SWW əmrləri də nəzərdə tutulmuşdur. SWB funksiyası yığının yuxarı hissəsinin aşağı yarısının baytlarını dəyişdirmək, SWW funksiyası isə yığının yuxarı hissəsinin yarılarını dəyişdirməkdir. Hexadecimal I/O rejimindən istifadə edərək bu əmrlərin işini təsvir edək (bu rejimdə hər bayt iki onaltılıq rəqəmlə təmsil olunur):

B16 0ABCD SWB SWB

0ABCDEF12 SWW SWB

Stack manipulyasiya təlimatları PARADISE dilində mühüm rol oynayır. Onlar yığındakı məlumatların dəyərlərini dəyişmir, yalnız yerlərini dəyişdirərək, yığının dərinliyində yerləşən operandlara daxil olmağı asanlaşdırır.

Stack üzvlərini silmək üçün üç əmr var: D, DD, DS (Drop). D əmri yığından bir (yuxarı) elementi, DD - iki elementi çıxarır, məsələn:

D DD D DS yığından bütün elementləri çıxarır (yığınlığı təmizləyir):

C yığınının yuxarı hissəsinin surətini çıxarmaq əmri (Copy - copy) stek üzərinə onun yuxarı hissəsinin cari dəyərinin surətini itələyir. Bu, yığının yuxarı elementinin təkrarlanmasına bərabərdir: köhnə üst alt hissəyə, onun surəti isə yeni yuxarıya çevrilir. Misal:

Horner sxeminə görə p (x) = 3 * x ** 2 + 4 * x-5 polinomunun hesablanması nümunəsi ilə bu əmrin tətbiqini göstərək: p (x) = (3 * x + 4) * x -5. Fərz edirik ki, x yığının yuxarı hissəsindədir.

[x] C 3 * 4 + * 5 -

PARADISE dilində yığının yuxarı hissəsinin surətinin çıxarılması əmri ilə yanaşı, 2, 3, 4-cü dərinliklərdə yerləşən elementləri köçürən C2, C3, C4 əmrləri də mövcuddur. Onların işlərini aşağıdakı misallarla göstərmək olar:

C2 C4

Elementi yığının yuxarı hissəsində göstərilən dərinliyə köçürmək üçün CT əmri də var. CT-ni yerinə yetirərkən prosessor üst elementi yığından çıxarır, onun dəyərindən kopyalanan elementin dərinliyinin göstəricisi kimi istifadə edir və sonuncunun surətini yığına itələyir. Beləliklə, 5 dərinlikdə yerləşən elementin surətinin çıxarılması bir cüt 5 CT əmri ilə təyin olunur, icra edildikdə prosessor 5 rəqəmini yığına itələyir və sonra CT əmrini yerinə yetirir. CT-nin 1, 2, 3, 4 parametrləri ilə yerinə yetirilməsi müvafiq olaraq C, C2, C3, C4-ə bərabərdir.

Mübadilə komandaları E2, E3, E4 (Exchange - exchange) müvafiq olaraq 2-ci, 3-cü, 4-cü ilə, yəni 2, 3 dərinlikdə yerləşən elementlə stekin birinci (yuxarı) elementinin dəyişdirilməsini həyata keçirir. , 4. Məsələn:

E3 E2

Daha böyük dərinliyə mübadilə etmək üçün ET əmrindən istifadə olunur ki, bu da CT kimi birinci elementlə dəyişdirilən elementin dərinliyinin göstəricisi kimi yığının yuxarı hissəsinin dəyərindən istifadə edir. Məsələn:

5 ET

2, 3, 4 parametrləri olan ET əmri E2, E3, E4 əmrlərinə bərabərdir.

Kopyalama və paylaşma əmrlərinin istifadəsini göstərmək üçün dərslik problemini nəzərdən keçirin. Yığın üç rəqəmdən ibarətdir. Bu yığını almaq üçün tələb olunur:. Şərhlərdən mənası aydın olan aşağıdakı proqram təklif oluna bilər.

C3 C3 C3 +

E4 + E4

Bu nümunə operand yığınının vəziyyətini əks etdirən şərhlərin rolunun nə qədər əhəmiyyətli olduğunu yaxşı göstərir.

Proqramlar tez-tez ədədi dəyərləri bir-biri ilə müqayisə etməli və müqayisə nəticələrindən asılı olaraq müxtəlif prosedurları yerinə yetirməli olurlar. PARADISE dilində müqayisə əmrləri var<, =, >... Onlar ədədlər üzərində müəyyən edilir və nəticədə 0 və 1 ədədi dəyərləri qaytarır. Məsələn, əmr< потребляет из стека два элемента и засылает в стек число 1, если значение нижнего элемента оказалось меньше значения верхнего, а в противном случае засылает 0. Например, в результате выполнения последовательности 5 -20 < в стек будет заслан 0. Команда = засылает 1 в случае равенства потребленных ею элементов. Команда >alt element yuxarıdan böyük olduqda 1 göndərir. Qeyri-ciddi müqayisələri (kiçik və ya bərabər, böyük və ya bərabər) proqramlaşdırmaq üçün stekdəki sıfırdan fərqli dəyəri sıfırla, sıfırı isə birlə əvəz edən NOT əmrindən istifadə edin. Məsələn, x> = 5 məntiqi ifadəsinin qiymətləndirilməsi, burada x yığının yuxarı hissəsində yerləşən bəzi ədəddir, aşağıdakı kimi təyin edilə bilər:

[x] 5< NOT

Proqramlaşdırma şərtlərinin imkanlarının daha da genişləndirilməsi, müqayisə əmrləri ilə yanaşı, birləşmənin & (məntiqi AND) və disjunksiya & 0 (məntiqi OR) məntiqi əməliyyatlarının istifadəsi ilə təmin edilir. Məsələn, təpəsindəki x ədədi C 5 yarımseqmentinə aiddirsə, yığında 1 almaq tələb olunsun.< NOT C2 10 <

& E2 2 = & 0

Müqayisə nəticələrindən asılı olaraq proqram nəzarətləri daha sonra müzakirə olunacaq.

Prosedurların müəyyənləşdirilməsi

Əsas proqramlaşdırma texnikası olaraq, PRSP istifadəçiyə prosedur adlanan əməliyyatların adlanmış ardıcıllığını müəyyən etmək imkanı verir. Məsələn, verilən x dəyərləri üçün kvadrat trinomial 3 * x ** 2-4 * x + 9 dəyərlərini hesablamaq tələb olunsun. Bu halda, siz trinomial formulunu həyata keçirən proseduru təyin etməli və nəticəni terminala çıxarmalı və sonra bu proseduru x-in xüsusi qiymətlərinə tətbiq etməlisiniz. Lazım olan prosedur, gəlin onu PX adlandıraq, aşağıdakı kimi müəyyən edilir: PX [x] C 3 * 4 - * 9 +. D; İki nöqtə "prosedurun müəyyən edilməsi" əməliyyatını ifadə edir, prosedur adından sonra ayıran boşluqdan sonra iki nöqtə qoyulur. Əmrlərin müəyyənedici ardıcıllığı (prosedur gövdəsi) prosedur adından sonra gedir və nöqtəli vergüllə bitir. Bir sözlə, prosedur aşağıdakı formada müəyyən edilir:

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

PARADISE dilində prosedurun əvvəlində və sonunda operand yığınının vəziyyətini şərh etmək tələb olunur. Prosedurun mətnində şərhlər proqramçının ixtiyarına uyğun olaraq başa düşülməsi çətin olan yerlərdə yerləşdirilir.

Şərhlər insana proseduru başa düşməyə və istifadə etməyə kömək edir, prosessor isə sadəcə mötərizədə olan hər şeyə məhəl qoymur. Buna görə, terminaldan fərdi prosedurun tərifini daxil etsəniz, şərhləri buraxa bilərsiniz.

Prosedurun tərifi daxil edildikdən sonra və düyməni basaraq prosessora daxiletmənin başa çatması barədə məlumat verilir, terminal ekranında "prosedurun müəyyən edilməsi" əmrinin yerinə yetirilməsini və prosessorun dialoqu davam etdirməyə hazır olduğunu bildirən ulduz işarəsi görünür. İndi siz PX prosedurunu klaviatura ilə təchiz edilmiş x dəyərlərinə tətbiq edə bilərsiniz, məsələn, 2, 3, 4 (prosessor çıxışının altı çizilir):

* 2 PX 13

* 3 PX 24

* 4 PX 41

Həm x, həm də a0, a1, a2 dəyərlərini təyin etməyə imkan verən a2 * x ** 2 + a1 * x + a0 formasının trinomialının hesablanması üçün daha ümumi proseduru müəyyən edək. Gəlin buna PXA deyək:

: PXA C E4 E3 * + * +;

PXA-dan istifadə edərkən a0, a1, a2, x dəyərləri yığında tələb olunan ardıcıllıqla olmalıdır. Məsələn: a0 = 1, a1 = 2, a2  = -3, x = 4

* 1 2 -3 4 PXA. D -39

Prosedurun gövdəsində əsas prosessor əməliyyatları ilə yanaşı, istifadəçi tərəfindən müəyyən edilmiş prosedurlar ola bilər. Məsələn, siz PXA hesablamalarına əlavə olaraq nəticənin surətini terminala yazacaq və nəticəni yığından siləcək rutin P təyin edə bilərsiniz.

: P PXA. D;

Xüsusilə, prosedurun gövdəsi müəyyən edilən prosedurun adını ehtiva edə bilər, yəni prosedur rekursiv ola bilər. Məsələn:

: TIME [t] 1- TIME;

Bu prosedur yığının yuxarı hissəsinin dəyərini 1 azaldır və yenidən özünə istinad edir, yəni vaxt sayğacı kimi işləyir.

TIME sayğacı, prinsipcə, dayana bilməz: birinin çıxılması proseduru prosessor işlədiyi müddətdə təkrar-təkrar yerinə yetiriləcəkdir. Lakin DSPP-də əldə edilən nəticələrdən asılı olaraq prosesin gedişatına nəzarət etməyə imkan verən vasitələr var - proqramın gedişatına nəzarət əməliyyatı.

Şərti icra və təkrar

Yazısında bir-birinin ardınca yerləşmə ardıcıllığı ilə yerinə yetirilən əmrlər ardıcıllığı olan proqram xətti adlanır. Proqramı asanlıqla müşahidə oluna bilən (oxunan) və başa düşülən etmək üçün o, müəyyən məna kəsb edən adlandırılmış hissələrə - hər biri öz prosedur ardıcıllığı ilə müəyyən edilən, öz növbəsində daha kiçik prosedurların ardıcıllığı ilə müəyyən edilən prosedurlara və s. DSPP əmrlərinin ardıcıllığı ilə birbaşa müəyyən edilən prosedurlara. Prosedur təriflərinin iyerarxiyası kimi yazılan belə proqram strukturlaşdırılmış adlanır. Həll olunan məsələnin daha kiçik və daha kiçik alt tapşırıqlara tədricən parçalanmasından ibarət olan strukturlaşdırılmış proqramın qurulması üsulu strukturlaşdırılmış proqramlaşdırma adlanır.

Proseduru şərtlə yerinə yetirmək, proseduru təkrarlamaq və təkrar prosedurdan çıxmaq əməliyyatları mövcud olduqda strukturlaşdırılmış proqramlaşdırma üsulu ilə təkcə xətti deyil, həm də istənilən proqramların yaradılması mümkündür. DSPP-də mövcud olan bu cür əmrlər toplusu ixtiyari proqramın strukturlaşdırılmış qurulması imkanını təmin edir.

Prosedurun yerinə yetirilməsi və ya yerinə yetirilməməsi şərtləri ədədin işarəsinə, daha dəqiq desək, yığının yuxarı hissəsinin hazırda malik olduğu dəyərin işarəsinə nisbətən tərtib edilir. Prosedurun şərti yerinə yetirilməsinin əsas əmri - BRS (Branch on Sign - to filial by sign) yığının yuxarı hissəsinin cari qiymətinin işarəsindən asılı olaraq BRS ilə adlandırılan üç prosedurdan birini yerinə yetirməyi tapşırır. BRS-i yerinə yetirərkən prosessor stekdən yuxarı elementi çıxarır, onun dəyərini yoxlayır və əgər mənfi olarsa, adlanan prosedurların birincisini, sıfıra bərabərdirsə, ikincini, müsbət olarsa, üçüncünü yerinə yetirir. . Beləliklə, komanda

bir elementin stekdən çıxarılmasına və çıxarılan qiymət mənfi olarsa N prosedurunun, müsbət olarsa P prosedurunun yerinə yetirilməsinə, sıfır olduqda isə Z prosedurunun yerinə yetirilməsinə səbəb olacaqdır.

BRS əmrindən istifadə nümunəsi aşağıdakı SGN prosedurunun tərifidir

: SGN [X] BRS -1 0 1;

Bu rutin yığının yuxarısındakı X dəyərini X olarsa -1 ilə əvəz edir<0, числом 0, если X=0, и числом 1, если X>0. SGN proseduru PRSP-də əsas prosessor əməliyyatı kimi mövcuddur.

BRS əmri üç verilənlərdən bir prosedurun seçilməsi ilə yanaşı IF-THEN və IF-THEN-ELSE formasının ikirəqəmli operatorlarının həyata keçirilməsi imkanını təmin edir. Məsələn, əgər x> 0 olarsa, P1 başqa P0 ifadəsi BRS P0 P0 P1 əmrinə, əgər x olarsa ifadəsi uyğun gəlir.<>0 sonra P - BRS P NOP P əmri, burada NOP boş əməliyyatın adıdır. Ancaq DSPP-də iki rəqəmli şərtlərin daha səmərəli həyata keçirilməsi var - IF-, IF0, IF +, BR-, BR0, BR + əmrləri.

ƏGƏR əmrləri IF-THEN ifadəsinə uyğundur. Məsələn, IF-P təlimatı stekdən yuxarı elementi çıxarmaq və onun işarəsini yoxlamağı tapşırır və bu elementin mənfi işarəsi varsa, P prosedurunu yerinə yetirin.IF0 P və IF + P təlimatları P-nin yerinə yetirilməsini əmr edir. proseduru, müvafiq olaraq, atılan element sıfıra bərabər olduqda və onun dəyəri müsbət olduqda.

IF qrupunun komandalarının istifadəsini təsvir edən nümunə olaraq yığının yuxarı hissəsinin modulunu hesablayan ABS əsas dilinin əmrinin tərifini verək.

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

BR-, BR0 və BR + əmrləri ƏGƏR-ONDA-ƏLBƏSİNDƏ ifadəsinə uyğundur və sizə onların adını daşıyan iki prosedurdan birini seçməyi tapşırır. Əgər stekdən çıxarılan elementin işarəsi komanda təyinatındakı işarə ilə üst-üstə düşürsə, birinci adlandırılan prosedur yerinə yetirilir, uyğun gəlmirsə, ikinci prosedur yerinə yetirilir. Məsələn, BR0 P0 P1 təlimatı yığından çıxan element sıfıra bərabər olduqda P0 prosedurunu yerinə yetirməyi tapşırır və bu şərt təmin olunmursa, P1 prosedurunu yerinə yetirin.

Baxılan əmrlər verilmiş şərtlərdən asılı olaraq prosedurun icrasını iqtisadi proqramlamağa imkan verir. X formasının ən ümumi şərtləri<0, x=0, x>0 birbaşa İF qrupunun komandaları tərəfindən həyata keçirilir. Şərtlər x<=0, x<>0, x> = 0 ilk prosedur kimi boş NOP əməliyyatından istifadə etməklə BR-, BR0, BR + əmrləri ilə proqramlaşdırılır. Məsələn, əgər x<=0 then P соответствует команда BR+ NOP P. Примером использования команд группы BR может служить следующая реализация команды базового языка NOT, заменяющей нулевое значение вершины стека единицей, а ненулевое - нулем.

: DEYİL [x] BR0 1 0;

Proqramın budaqlanması çox vaxt müqayisə əmrlərindən sonra həyata keçirilir (<, =, >) iki ədədin müqayisəsinin nəticəsindən asılı olaraq 1 və ya 0 məntiqi qiymət verən. Məsələn, MAX əsas dil əmri aşağıdakı kimi proqramlaşdırıla bilər:

: MAX C2 C2< IF+ E2 D ;

Budaqlanan komandalar qrupuna həmçinin aşağıdakı formada yazılmış BR seçim əmri daxildir:

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

Bu təlimatı yerinə yetirərkən prosessor əvvəlcə A1 prosedurunu yerinə yetirir və stek üzərinə itələdiyi dəyəri onun altındakı qiymətlə yığının əvvəlki yuxarı hissəsindəki qiymətlə müqayisə edir. Dəyərlər üst-üstə düşürsə, onda yuxarıdakı iki element yığından çıxarılır və A1 göstəricisinə təyin edilmiş P1 proseduru yerinə yetirilir, bundan sonra BR əmrindən sonra əmrə keçid edilir (yəni yuxarıdakı qeyddə mətndə P0 sözündən sonra gələn proqram). Müqayisə edilmiş qiymətlər uyğun gəlmirsə, onda bir üst element yığından çıxarılır (yəni A1 nəticə) və eyni hərəkətlər A2 P2 cütü ilə, sonra uyğunluq işləməyibsə, A3 cütü ilə həyata keçirilir. P3 və s. AN PN daxil olmaqla. Cəhdlərin heç biri uyğun gəlmədiyi halda, ELSE sözü ilə adlandırılan P0 proseduru yerinə yetirilir. Adətən rəqəmsal sabitlər göstərici prosedurları kimi çıxış edir, məsələn:

[x] C BR 5 NEG -3 ABS 0 BAŞQA DEYİL T0 [y]

Bu xəttin yığının yuxarı hissəsində yerinə yetirilməsi nəticəsində x = 5 olarsa y = -5 qiyməti alınacaq; y = 3, əgər x = -3; x = 0 olarsa y = 1, əks halda isə y = 0 olar.

Ümumiyyətlə, göstərici proseduru təkcə ədədi sabit deyil, həm də dəyişən və ya sadə tələbi ödəyən hər hansı digər prosedur ola bilər: o, yığından heç nə çıxarmır və bir dəyəri yığına itələyir.

Şərti icra əməliyyatlarının necə istifadə edildiyini göstərmək üçün əvvəlki bölmədə TIME prosedurunu dəyişdiririk ki, şərt müəyyən edildikdə sayğac dayansın:

: TIME [t] 1- C ƏGƏR + ZAMAN;

İndi bu TIME rejimi yalnız yığının yuxarı hissəsi müsbət olduqda özünü çağırır. TIME ilk icrasının əvvəlində təpəsində müsbət N ədədi olarsa, sayğac tam olaraq N dəfə işə salınacaq. Məsələn, 7 tetikleyici əldə etmək üçün siz təyin etməlisiniz.

7 DƏFƏ<ВК>

ZAMAN tərifindəki IF + hər hansı şərti əməliyyat kimi sınanmış elementi yığından çıxardığından və bu element sonrakı əməliyyatlar üçün tələb olunduğundan, IF +-dan əvvəl C (Kopyala) əməliyyatını yerləşdirməklə təkrarlanmalıdır.

Rekursiya proseduru dəfələrlə yerinə yetirmək üçün əsas vasitə deyil. PARADISE dilində loopların proqramlaşdırılması üçün RP (Repeat) və DO (Do - do, execute) əmrləri mövcuddur.

RP W əmri W prosedurunu qeyri-məhdud sayda təkrar-təkrar yerinə yetirməyi əmr edir. Təkrarların dayanması üçün W prosedurunun gövdəsində verilmiş şərtlə yerinə yetiriləcək EX (Çıxış) əməliyyatı olmalıdır. EX əməliyyatı proqram mətnində bu EX əməliyyatını ehtiva edən təkrar proseduru izləyən prosedurun icrasına keçir. Beləliklə, yuxarıda rekursiv TIME proseduru kimi həyata keçirilən sayğac W prosedurunun təkrarı kimi proqramlaşdırıla bilər ki, bu da belə müəyyən edilir:

: W [t] 1-C IF0 EX;

Sayğacın 25 dəfə işləməsi üçün xətti yerinə yetirmək lazımdır

Şərti icra əmrlərində istifadə olunan EX əməliyyatı ilə yanaşı, IF-EX, IF0 EX, IF + EX əmrləri ilə eyni effekti yaradan EX-, EX0, EX+ şərti çıxış əməliyyatları mövcuddur, yəni onlar İşarəni sınayan və işarə əməliyyat təyinatında göstərilənə uyğun gələrsə, çıxış edən elementi yuxarıdan istehlak edin. EX, EX-, EX0, EX + əməliyyatları mütləq təkrarlanan prosedurun özündə (bizim halda, W) deyil, həm də onun istinad etdiyi prosedurlarda istifadə edilə bilər.

Nümunə olaraq, Evklid üsulu ilə iki natural ədədin ən böyük ortaq böləninin tapılması məsələsini nəzərdən keçirək. Metodun mahiyyəti ondan ibarətdir ki, ədədlər bir-birinə bərabər olana qədər böyük ədəddən kiçik ədədi çıxarmaq lazımdır. Bərabərliyə çatdıqda ən böyük ortaq bölən tapılacaq.

Proqramlaşdırma yuxarıdan aşağıya inkişaf üsulu ilə həyata keçiriləcək. Əvvəlcə alqoritmin ümumi sxemini düzəldən GCD prosedurunu müəyyənləşdiririk. Bu prosedurun parametrləri yığındakı iki ədəd M və N-dir ki, onlar üçün ən böyük ümumi bölən tapılır. GCD prosedurunun gövdəsində yığındakı dəyərlərin çevrilməsinin tsiklik prosesi göstərilməlidir. Bu prosesin nəticəsi olaraq yığında iki bərabər ədəd qalmalıdır - onlardan hər hansı biri ən böyük ümumi bölən kimi qəbul edilə bilər. Bu mülahizələri nəzərə alaraq, GCD prosedurunu aşağıdakı kimi müəyyən etmək olar.

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

İndi iterativ prosesin bir addımını proqramlaşdırmaq lazımdır, yəni. STEP prosedurunu müəyyənləşdirin. Bunun üçün parametrlər yığındakı iki rəqəmdir. Bu ədədləri müqayisə etməli və onlar bərabərdirsə, döngədən çıxmalısınız, əks halda böyükdən kiçiki çıxarın. Bu, məsələn, belə edilə bilər:

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

İndi proqramda müəyyən edilməmiş prosedurlar qalmayıb və siz onu yoxlamağa başlaya bilərsiniz. Yoxlama aşağıdan yuxarı aparılmalıdır, yəni əvvəlcə STEP prosedurunun düzgün işlədiyinə əmin olmalısınız və yalnız bundan sonra - GCD.

Əsas dildə olan DO əməliyyatı onun adını daşıyan prosedurun N dəfə təkrarlanmasına səbəb olur, burada N DO icra edildiyi anda yığının yuxarı hissəsində olan nömrədir. Məsələn, P prosedurunun 8 dəfə yerinə yetirilməsi üçün müəyyən etmək lazımdır

8 DO P

Əgər P prosedurunun gövdəsində ən azı bir çıxış əməliyyatı varsa və onun yerinə yetirilməsi şərti göstərilən təkrarların sayına çatmazdan əvvəl yerinə yetirilirsə, təkrarlar prosedurdan çıxmaqla dayandırılacaqdır RP əməliyyatı. Məsələn, DO yuxarıda təsvir edilən W prosedurunu təkrarlayırsa və onun tərifində IF0 EX varsa, [T] 30 DO W yazmaq T> = 30 olarsa, W-nin 30 təkrarına səbəb olacaq. Əgər 0

Əgər DO əməliyyatının icrası zamanı yığının yuxarı hissəsində sıfır və ya mənfi qiymət varsa, onda DO-dan sonrakı prosedur bir dəfə də olsa yerinə yetirilməyəcək.

DO əməliyyatının istifadəsini göstərmək üçün biz yığının yuxarı hissəsində göstərilən 32 bitlik x sözündə sıfırdan fərqli bitlərin sayını hesablayan NUM prosedurunu təyin edirik.

Alt yığındakı vahidlərin sayının sayğacını yerləşdirin. Birlərin sayılması NUMI prosedurunun 32 dəfə təkrarlanmasından ibarət olacaq, burada x sözünün bir bitini araşdıracağıq. Döngədən çıxdıqdan sonra tələb olunan nömrə alt yığında olmalıdır.

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

Sıfırdan fərqli bitləri saymaq üçün sözün ən əhəmiyyətli (31-ci) bitindəki birinin mənfi ədədin işarəsi kimi xidmət etməsi faktından istifadə edəcəyik. Tədqiq olunan söz mənfidirsə, N-ə bir əlavə edin. NUMI prosedurunun sonunda tədqiq olunan sözü bir rəqəm sola keçirməlisiniz.

: NUMI C IF-N + SHL;

N+ prosedurunun həyata keçirilməsi olduqca sadədir: təpələri dəyişdirmədən yığının alt qatına birini əlavə etmək lazımdır.

: N + E2 1+ E2;

Təkrarlanan prosedurlar bədənlərində RP və DO əməliyyatlarını ehtiva edə bilər, bu da iç içə döngələrin meydana gəlməsinə səbəb olur və istənilən yuva dərinliyinə icazə verilir. Bu halda, yığının yuxarısındakı yuva dərinliyini göstərən iç-içə döngədən çıxmaq üçün EXT əməliyyatı var. Məsələn, iki yuvalanmış döngədən çıxış belə təyin edilə bilər:

Nəzərə almaq lazımdır ki, EXT əmrinin istifadəsi əlavə qayğı tələb edir, çünki proqram dəyişdirildikdə, döngələrin yuva dərinliyi dəyişə bilər və EXT-dən əvvəl müvafiq sabiti dəyişdirmək lazımdır.

Adlandırılmış məlumatlar

Operand yığını PRSP-də məlumatların manipulyasiyasının əsas, lakin yeganə mexanizmi deyil. Prosedur tərifləri ilə yanaşı, daha sonra öz adları ilə istifadə üçün əlçatan olan elementləri və məlumatların elementlərinin standart şəkildə təşkil edilmiş kolleksiyalarını (sözdə strukturlar) elan etmək də mümkündür. Məlumat bəyannamələrini həyata keçirməklə, prosessor onları saxlamaq üçün lazım olan yaddaşı saxlayır və bu yaddaşa daxil olmaq üçün lazımi mexanizmləri təmin edir.

DSPN-in əsas dilinə dəyişənlərin və massivlərin elan edilməsi üçün aşağıda müzakirə olunan bir sıra direktiv sözlər daxildir. Sistem dilini genişləndirmək üçün ona bu cür başqa sözlər və müvafiq olaraq digər elementlər və verilənlər strukturları daxil edilə bilər.

VAR sözü 16 bitlik rəqəmsal dəyişəni elan edir. Məsələn, giriş

X dəyişənini elan edir, yəni prosessora X adının dəyişənin adı olduğunu bildirir. Prosessor bu dəyişənin dəyərinin saxlanacağı 16 bitlik yaddaş yerini bu adla əlaqələndirir. X dəyişənini operand yığınının yuxarı hissəsində olan dəyərə təyin etmək üçün təlimat formaya malikdir.

Bu əmri yerinə yetirərkən prosessor stekdən yuxarı elementi çıxarır və onun dəyərini X dəyişəni üçün ayrılmış yerə yazır.

Yalnız hərfsiz dəyişən adından ibarət komanda!Bu dəyişənin dəyərinin stek üzərinə itələnməsinə səbəb olur və təkan müvafiq yaddaş yerinin məzmununu kopyalamaqla həyata keçirilir, yəni dəyişənin qiyməti dəyişməz qalır. . Beləliklə, X dəyişəninin adının proqramına hər hansı bir giriş, əgər ondan dərhal əvvəl fərqli bir hərəkət təyin edən bir söz gəlmirsə, bu dəyişənin cari dəyərini birbaşa göstərilən ədədlər (rəqəm hərfi) kimi yığına itələyir. yığının üzərinə itələyirlər.

Nümunə olaraq, yuxarıda müzakirə edilən GCD prosedurunun iki işləyən dəyişənin istifadə edildiyi başqa bir versiyasını verək.

: ALLAHIM! X! Y RP ADDIM X [GCD];

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

: X-Y X Y -! X;

: Y-X Y X -! Y;

Gördüyünüz kimi, proqram bir qədər uzandı, lakin aydınlığı artdı.

VCTR sözü 16 bitlik xanalardan ibarət birölçülü massivi (vektor) elan edir və bu massivin ən əhəmiyyətli elementinin sayı təpənin qiyməti ilə verilir. Məsələn, yazmaq nəticəsində

9 VCTR ROW Prosessor ROW vektorunu (0: 9) təşkil edərək, ardıcıl olaraq ünvanlanan 16 bitlik yaddaş sözünü ehtiyatda saxlayır. Əvvəlcə 9 rəqəmi yığının üzərinə itələnir, sonra yaradılacaq ROW vektorunun uzunluğunu müəyyən etmək üçün yığının yuxarı elementindən istifadə edən VCTR proseduru yerinə yetirilir.

ROW vektorunun j-ci elementinin qiymətinin stekə 0 itələnməsi<=j<=9, задается командой

[j] CAR

Yığındakı element nömrəsini parametr kimi istifadə edərək ROW vektor adı bu nömrənin müvafiq elementin dəyəri ilə əvəz edilməsinə səbəb olur. Əgər! sözü ROW vektorunun adından bilavasitə əvvəldirsə, o zaman alt yolun dəyəri bu vektorun təpə ilə göstərilən elementinə təyin edilir və yığının dərinliyi 2 azalır. Məsələn, siz sıfıra endirə bilərsiniz. ROW vektorunun 5-ci elementi aşağıdakı kimidir:

Sabit vektorlar yaratmaq imkanı da var, yəni. 16 bitlik ədədlərin vektorları, onların elanı zamanı qiymətləri müəyyən edilmiş və gələcəkdə dəyişdirilməyəcəkdir. Beləliklə, L + 1 uzunluğunda 16 bitlik VC sabitlərinin vektoru CNST sözündən istifadə edərək aşağıdakı formada elan edilir:

CNST VC k0 k1 ... kL;

burada k0, k1, ... kL bir dəyəri yığına itələyən əmrlərdir. Çox vaxt bunlar sadəcə ədədi hərflərdir, lakin dəyişənlərin adları, prosedurlar, həmçinin söz cütlərindən ibarət əmrlər də ola bilər, məsələn, aşağıda müzakirə olunan “X” dəyişəninin ünvanını təyin etmək əmri. adi vektorların komponentlərinə.Məsələn:

ARR sözündən istifadə edərək 16 bitlik sözlərin çoxölçülü massivi elan edilir, ondan əvvəl hər ölçü üçün maksimum indeks dəyərləri və ölçülərin sayı göstərilir. Məsələn, TIR 3D massivi (0: 8.0: 2.0: 24) belə elan edilir:

ARR-dən dərhal əvvəl 3 rəqəmi elan edilmiş massivin ölçüsünü bildirir.

Massiv elementini yığına itələmək bu elementin indeksini və ardınca massiv adını göstərməklə əldə edilir. Məsələn, TIR (0,2,2) elementini yığına itələmək əmri belə ifadə edilir.

Müvafiq olaraq, bu elementə yığının yuxarı hissəsinin cari dəyərinin təyin edilməsi komanda tərəfindən təyin edilir

Bütün nəzərdən keçirilən nümunələr 16 bitlik sözlərdən strukturların yaradılmasını təsvir etdi. Bununla belə, dil həm də 32 bitlik sözlərin və 8 bitlik baytların strukturlarını müəyyən etməyə imkan verir. Bunun üçün strukturu təyin edən sözdən əvvəl müvafiq olaraq LONG və ya BYTE prefiksi qoyulur. Məsələn,

5 BYTE VCTR X - baytların 6 komponentli vektorunun təyini;

BYTE CNST Y 65 66 67; - 3 komponentli bayt vektor-sabit Y-nin tərifi;

10 20 2 UZUN ARR MTRX - uzun sözlər MTRX matrisinin tərifi (0: 10,0: 20).

Söz və bayt strukturlarının elementlərinin oxunması 16 bitlik söz strukturlarında olduğu kimi həyata keçirilir. Elementin uzunluğu 32 bitdən azdırsa, çıxarılan dəyər yığının yuxarı hissəsinin ən az əhəmiyyətli sözünə və ya baytına yerləşdirilir və yuxarının yuxarı hissəsi sıfırlanır. Yığındakı 32 bitlik uzun sözün ən az əhəmiyyətli sözü və ya baytı da sözün və ya bayt strukturunun elementinə təyin edilmiş dəyər kimi qəbul edilir.

16 bitlik söz formatı standart olaraq verilənlərin müəyyən edilməsində istifadə olunsa da, onun WORD notasiyası da var. Proqramın DSSP-nin də həyata keçirildiyi və defolt fərqli ola biləcəyi digər maşınlara köçürülməsi nəzərdə tutulduqda bu ön prefiksdən istifadə etmək məsləhətdir.

Bayt verilənlər strukturları ən çox mətn məlumatlarını saxlamaq və emal etmək üçün istifadə olunur. Bu, bir simvolun kodlaşdırılması üçün kompüterin yaddaşında bir baytın ayrılması ilə əlaqədardır. PARADISE dilində hərflərin kodlarını təyin etmək üçün #l konstruksiyası var, burada l kompüter klaviaturasında mövcud olan istənilən hərfdir. DSPP prosessoru bu konstruksiyanı l hərfini yığına itələmək əmri kimi qəbul edir. Məsələn:

Bu konstruksiya göstərilən hərfin koduna bərabər olan ədədi hərfi ilə eyni hərəkətləri yerinə yetirir, lakin onun istifadəsi daha məqsədəuyğundur, çünki birincisi, sizi kodları yadda saxlamaq ehtiyacından azad edir və ikincisi, proqramları daha başa düşülən edir. Xüsusilə, Y sabit vektorunun aşağıdakı tərifini vermək olar:

BYTE CNST Y #A #B #C;

Proqramda ədədi sabitin simvolik qeydindən istifadə etmək çox vaxt rahatdır. VALUE tərif sözü bu qabiliyyəti təmin etmək üçün əlçatandır:

Bu əmr yığından yuxarı elementi çıxarır və VALUE-dan dərhal sonra adı olan sözü əmələ gətirir. Bu sözdən istifadə ədədi sabitdən istifadə etməyə bərabərdir. Məsələn:

Fiziki ünvanlarla yaddaşla işləmək

Nəzərdən keçirilən vasitələr kompüterin ünvan sistemindən asılı olmayaraq verilənlərin adlarını vermək və verilənlərlə manipulyasiya etmək imkanı verir. Lakin əsas dil yaddaş elementlərinin ünvanlarını manipulyasiya etmək üçün vasitələrdən də ibarətdir. Dəyişənlərin və ya X massivinin elementinin ünvanı komanda ilə stek üzərinə itələnir

Massiv elementi vəziyyətində bu əmrdən əvvəl indeks(lər)in qiyməti yazılır.

Ana dil əmri @ yığının yuxarısındakı uzun yaddaş sözünün ünvanını həmin sözü ehtiva edən dəyərlə əvəz edir. Məsələn, Y dəyərini aşağıdakı sətri yerinə yetirməklə yığına köçürmək olar:

@B sıfır yüksək bayt qəbul edərək ünvanı müvafiq baytın dəyəri ilə əvəz edir və @L ünvanı 32 bitlik sözlə əvəz edir.

Yaddaşa dəyərlər yazmaq üçün əmrlər də var. T əmri yığının yuxarı hissəsindən açılan ünvana 16 bitlik alt dəyəri yazır. TB əmri alt baytın aşağı sıra baytının qovşağın ünvanladığı bayta oxşar yazılmasına səbəb olur və! TL alt qovşağın 32 bitlik sözünü qovşağın ünvanladığı sözə yazır. Məsələn, BV bayt vektorunun (0: 5) beşinci elementinə 15 dəyərini aşağıdakı əmrlərlə təyin edə bilərsiniz:

15 5 "BV! TB

Fiziki ünvanlarda yaddaşla işləmək zərurəti adətən müəyyən bir kompüterin arxitekturasından asılı olan proqramların yaradılması zamanı, məsələn, giriş/çıxış sürücülərinin yaradılması zamanı yaranır.

Məlumat və yaddaşla işləmək üçün əlavə əməliyyatlar

Proqramların daha çox səmərəliliyini və yığcamlığını əldə etmək üçün PARADISE dilinə aşağıdakı əməliyyatlar daxil edilmişdir:

0 <имя переменной>- dəyişəni sıfırlayın;

1 <имя переменной>- dəyişənə vahid təyin etmək;

1- <имя переменной>- dəyişənin qiymətini bir azaltmaq;

1+ <имя переменной>- dəyişənin qiymətini bir artırın;

!- <имя переменной>- dəyişəndən yığının yuxarı hissəsinin qiymətini çıxarmaq;

!+ <имя переменной>- dəyişənə yığının yuxarı hissəsinin dəyərini əlavə edin.

Bu əməliyyatların hər biri dəyişənlər üçün oxumaq və yazmaq əmrlərindən istifadə etməklə asanlıqla proqramlaşdırılır. Məsələn,

0 X 0-a bərabərdir! X

1+ X X 1+-a bərabərdir! X

X X E2-ə bərabərdir -! X

Bu əməliyyatların istifadəsi proqramların səmərəliliyini və görünməsini artıracaq.

Təcrübədə siz çox vaxt massivin bütün elementlərinə vahid qiymət təyin etmək istəyirsiniz. Bunun üçün PARADISE dilində əməliyyat var !!!<имя массива>... Onun hərəkəti yığının yuxarı hissəsinin dəyərini göstərilən massivin bütün komponentlərinə təyin etməkdir. Əməliyyat!!! istənilən formatın elementləri olan massivlərə şamil edilir.

İstifadə nümunəsi:

boşluq simvol kodu BUF bayt massivinin bütün komponentlərinə yazılır.

Tez-tez proqramda adın arxasındakı verilənlər strukturu haqqında məlumat əldə etmək lazımdır. Bir cüt əmr SIZE? - məlumat elementinin formatını verin: 1, 2 və ya 4 bayt və DIM? - strukturdakı məlumat elementlərinin sayını verin. Məsələn, məlumat elan olunarsa

3 4 2 UZUN ARR Z

sonra onlara tətbiq edildikdə, bu əmrlər aşağıdakı nəticəni verəcəkdir (onluq ədədlər):

ÖLÇÜ? X ÖLÇÜ? Y ÖLÇÜ? Z

ZƏİF? X DIM? Y DIM? Z

DSPP prosessorunun təlimatlar toplusuna əlavə olaraq kompüterin yaddaş hüceyrələrinin ayrı-ayrı bitlərini oxumağa və yazmağa imkan verən dörd əmr daxildir. Bunlar @BI,!BI,!BI0,!BI1 əmrləridir. Onların hər biri üçün parametrlər stekdə yerləşən yaddaş sözünün ünvanı və bu sözdəki bit nömrəsidir (xatırladırıq ki, bitlər sıfırdan başlayaraq sağdan sola nömrələnir). BI əmri həmçinin yığında bitin və yazılacaq dəyərin olduğunu qəbul edir. @BI əmri göstərilən parametrləri seçilmiş bitin (0 və ya 1) dəyəri ilə əvəz edir,!BI0 və!BI1 komandaları seçilmiş biti müvafiq olaraq 0 və 1-ə təyin edir, onların parametrlərini yığından çıxarır və!BI! komanda seçilmiş biti yığının üçüncü elementinin ən az əhəmiyyətli bitinin dəyərinə təyin edir və onun hər üç parametrini yığından çıxarır. Məsələn, əgər X dəyişəninin dəyəri ikilik rəqəmdirsə, 101101, sadalanan əməliyyatların nəticələri aşağıdakı kimi olacaq:

"X [addr.X] 3 @BI - X-in üçüncü biti, 0" X 3! BI - X 100101-ə bərabərdir,

"X [addr.X] 0! BI0 - X 100100-ə bərabərdir,

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

PARADISE dilində yaddaşda yerləşən bayt sətirləri ilə işləmək üçün də imkanlar mövcuddur. Bayt sətirini təyin etmək üçün yığına iki parametr itələnir: sətrin başlanğıc ünvanı (yəni onun ilk baytının ünvanı) və sətrin uzunluğu (ondakı baytların sayı).

!!!MB əmri sətrin bütün baytlarını bir (stekdə təyin edilmiş) qiymətə təyin etmək üçün istifadə olunur. O, yığından üç parametr sərf edir: burada b təyin edilmiş dəyərdir, a və l müvafiq olaraq bayt sətirinin başlanğıc ünvanı və uzunluğudur. Tutaq ki, məsələn, TXT (0:20) bayt massivinin 3-cüdən 10-cu bayt massivinə qədər elementləri sıfırlamalısınız. Bunu etmək üçün aşağıdakı sətri işlədə bilərsiniz:

0 3 "TXT 8 !!! MB

nəticədə göstərilən massivin 3-cüdən başlayaraq ardıcıl səkkiz elementi 0 qiymətini alacaq. Oxşar əmr !!! MW eyni dəyərlə (sözlərin sayı) 16 bitlik sözlər ardıcıllığını doldurmaq üçün nəzərdə tutulub. yığının yuxarısında göstərilir) və əmr! !! M - uzun sözlərin ardıcıllığını doldurmaq üçün.

SB əmri bayt sətirlərini köçürür. Onun parametrləri aşağıdakılardır:, burada a1 və l köçürülmüş sətirin başlanğıc ünvanı və uzunluğudur, a2 köçürmənin həyata keçirildiyi sətirin başlanğıc ünvanıdır. SB əmrinin icrası nəticəsində a2 ünvanından yaddaşda l uzunluğunda bayt sətri yerləşəcək ki, bu da köçürmə həyata keçirilməzdən əvvəl a1 ünvanında yerləşən sətirin dəqiq surətidir. Mənbə sətri və təyinat sətri üst-üstə düşə bilər. Məsələn, tutaq ki, siz M (0:10) bayt massivinin elementlərini aşağıdakı kimi köçürmək istəyirsiniz: M (10): = M (9), M (9): = M (8), ..., M (1): = M (0). Bunun üçün SB əmrindən istifadə edə bilərsiniz:

0 "M 10 C2 1+! SB

nəticədə, 10 baytlıq sətir bir baytı artan yaddaş ünvanlarına doğru hərəkət edəcək.

SB əmri simvol sətirləri ilə işləmək üçün əlverişlidir (xatırlayın ki, hər bir simvol bir baytda kodlanır). O, məsələn, bayt massivinə açıq şəkildə göstərilən hərfi sətirin dəyərini təyin etməyə imkan verir. Belə bir sətri təyin etmək üçün mətn literalından istifadə edin, yəni. dırnaq içərisində olan simvollar ardıcıllığı, məsələn, "MƏTN LİTERAL". Bu konstruksiya proqramda rastlaşdıqda başlanğıc ünvanını və dırnaq içərisində olan mətni ehtiva edən bayt sətirinin uzunluğunun yığına itələnməsinə səbəb olur. Bu parametrlər daha sonra SB əmri ilə istifadə edilə bilər. Məsələn, "TABLE" 0 "TN! SB fraqmenti TABLE literalının TN massivinə göndərilməsinə səbəb olacaq.

SRCHB əmri müəyyən bir bayt üçün sətirdə axtarış aparır. Parametrlər:, burada b baytdır, ilk dəfə tapılmalı, a və n müvafiq olaraq başlanğıcın ünvanını və axtarış sətirinin uzunluğunu təyin edir. Əgər n> 0 olarsa, onda axtarış a ünvanından a + n-1 ünvanına (ünvanların artması istiqamətində) aparılır, əgər n olarsa<0, то поиск ведется с адреса a до адреса a+n+1 (в сторону убывания адресов). В результате выполнения этой команды в стеке оказывается значение d, равное смещению относительно адреса a до первого вхождения байта b. Если такое вхождение не обнаружено, то d=n. Примеры:

#T "MƏTN" SRCHB

#A "MƏTN" SRCHB

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

Məlumatlarla işləmə vasitələrinin nəzərdən keçirilməsini başa çatdıraraq, məlumatların kompüterin xarici yaddaşında saxlanması məsələsinə toxunaq, yəni. maqnit disklərində. CƏNNƏT dilində SAVE əmri var<имя файла>sistemin əsas yaddaşının surətini istifadəçi tərəfindən müəyyən edilmiş obyektlərlə birlikdə diskdə saxlamaq üçün. Bu zaman VAR, VCTR, ARR əməliyyatları ilə verilənlər üçün ayrılmış yaddaş sahələri diskdə göstərilmir. Nəticədə, saxlanan sistemi diskdən yükləyərkən, göstərilən məlumatların dəyərləri müəyyən edilmir (onlar proqramın icrası zamanı müəyyən edilməlidir). Əksər hallarda bu, əsaslandırılır, çünki işləyən dəyişənləri, buferləri və s. saxlamaq üçün disk yaddaşını sərf etməyə ehtiyac yoxdur. Bununla belə, dəyərləri sistem diskdən yükləndikdən dərhal sonra müəyyən edilməli olan məlumatlar var. Məsələn, bəzi xarici cihazla məlumat mübadiləsi sürətini saxlayan dəyişəndir. Fərqli məzənnəyə keçərkən proqrama heç bir düzəliş etmədən bu dəyişənin dəyərini dəyişmək kifayətdir.

Bəzi məlumat strukturunun elementlərinin dəyərlərinin SAVE əmri ilə diskə çıxarılmasının prosessora göstəricisi strukturun tərifindən əvvəl yerləşdirilən FIX prefiksidir, məsələn,

DÜZƏLƏN VAR SPEED 20 FIX BYTE VCTR CƏDVƏLİ

Bu şəkildə müəyyən edilmiş məlumat strukturları ilə işləmək adi şəkildə müəyyən edilmiş strukturlarla işləməkdən fərqlənmir.

Prosessorun idarəetmə əmrləri

PARADISE dilində DSPP prosessorunu, daha doğrusu DSPP prosessorunun emulyatorunu idarə etmək üçün nəzərdə tutulmuş kiçik komandalar qrupu mövcuddur.

RESTART əmri prosessorun yenidən işə salınmasına səbəb olur. Bu halda yığın təmizlənir, mesaj verilir

DSSP versiyası XX.XX.XX

Pulsuz XXXXXXW

və prosessor əmr daxiletməsinin gözləmə rejiminə keçir. Bu əmr proqramları sazlayarkən faydalıdır. O, həmçinin xəta vəziyyəti yarandıqda yerinə yetirilir: indeks massiv hüdudlarını aşır, boş yaddaş tükənir və s.

\ G əmri müəyyən edilməmiş sözdə dayandıqdan sonra proqramın icrasını davam etdirmək üçün istifadə olunur. Prosedurun icrası zamanı prosessor müəyyən edilməmiş sözə istinadla qarşılaşarsa, o, mesaj verir:

dayan, bilmirəm<слово> .

burada nöqtə DSPP-prosessorunun dəvətidir və prosessorun qeyri-müəyyən sözdə dayanma vəziyyətində olduğunu bildirir. Bu rejimdə adi rejimdə olduğu kimi, ulduz işarəsi göstəriş olduqda istənilən prosessor əmrlərini yerinə yetirə bilərsiniz. Bu rejimdən çıxmağın iki yolu var - ya \ G əmrini yerinə yetirməklə (sonra prosessor kəsilmiş proseduru yerinə yetirməyə davam edəcək, müəyyən edilməmiş sözü atlayacaq) və ya YENİDƏN BAŞLAT əmri ilə.

EXEC prosessora ünvanı yığının yuxarı hissəsində olan proseduru yerinə yetirməyi tapşırır. Prosedurun ünvanını əldə etmək üçün "" (iki apostrof) əmrindən istifadə edərək prosedurun adını qeyd edin. Məsələn, əmrin nəticəsi olaraq

ABS prosedurunun ünvanı yığının üzərinə itələnəcək. Bu əmrlər proseduru parametr kimi başqa prosedura ötürməyə imkan verir.

Artıq qeyd olunan SAVE əməliyyatı prosessorun idarəetmə əmrləri qrupuna aiddir.<имя файла>, sistemin bir nüsxəsinin diskdə saxlanmasını təyin etmək, həmçinin prosessorun girişinə verilən mətn məlumatının daxil edilmə mənbəyini təyin edən əmrlər. Əsas mənbə ekran klaviaturasıdır.

LOAD əmri<имя файла>daxiletməni müəyyən adla disk faylına çevirir. PF əmri - mətn redaktorunun buferindən əmrlərin daxil edilməsini təyin edir. TEXEC əmri mətn sətrini prosessor girişinə ötürür, onun parametrləri stekdə təyin olunur. Göstərilən mənbələrdə olan əmrlərin yerinə yetirilməsindən sonra daxiletmə avtomatik olaraq ekran klaviaturasına keçir.

Lüğət əmrləri

Prosessor tərəfindən qəbul edilən təlimatların giriş axınında, xüsusən də daxili təqdimatda kompilyasiyaya səbəb olan prosedurların və məlumatların müəyyən edilməsi və prosedur orqanının saxlanması və ya göstərilən məlumatlar üçün yaddaşın ayrılması, habelə tərtib edilənin adının daxil edilməsi üçün təlimatlar ola bilər. proseduru və ya məlumat strukturunu DSPP lüğətinə daxil edin.

Lüğət daxili təsvirdə xarici (proqramın mətnində istifadə olunan) adlar ilə bu adlara uyğun gələn obyektlərin ünvanları arasında uyğunluq yaradır. Prosedurun tərifini və ya adlandırılmış verilmişin təsvirini emal edərkən prosessor lüğət qurur, orada adı (daha doğrusu, adın ilk 7 hərfi) və ünvanını ehtiva edən yeni lüğət girişi yaradır. prosedur orqanı və ya bu adla əlaqəli məlumat deskriptoru.

Yuxarıdan aşağıya proqramlaşdırmada prosedur orqanları hələ müəyyən edilməmiş obyektlərə istinadları ehtiva edə bilər. Bu zaman lüğətdə qeyri-müəyyənlik işarəsi ilə qeyd olunan lüğət girişləri (başlıqlar) formalaşır. UNDEF əmri bütün qeyri-müəyyən adları displey ekranında göstərmək üçün istifadə olunur.

Lüğətin yaradılması prosesində alt lüğətlər - lüğət daxilolmalarının adlandırılmış kolleksiyaları yaratmaq mümkündür. Alt lüğət adətən bir tapşırıqla əlaqəli prosedurları və məlumat strukturlarını birləşdirir. Alt lüğətlərin və digər proqram obyektlərinin adları arasında çaşqınlığın qarşısını almaq üçün alt lüğətin adı $ simvolu ilə başlamalıdır. Onların genişləndirilməsi və ya istifadəsi üçün alt lüğətlərə giriş aşağıdakıları ehtiva edən xüsusi əmrlərlə açıla və bağlana bilər ($ v adı hər hansı etibarlı alt lüğət deməkdir).

GROW $ v - $ v alt lüğətini artırın, yəni başqa cür təyin olunana qədər bütün tərtib edilmiş prosedurların və məlumatların adlarını $ v alt lüğətinə daxil edin;

İSTİFADƏ $ v - istifadə üçün açıqdır (ondakı adları axtarmaq üçün) $ v alt lüğəti;

SHUT $ v - $ v alt lüğətindən istifadə etmək imkanını bağlayın;

YALNIZ $ v - yalnız $ v alt lüğətini istifadə üçün əlçatan etmək;

LƏĞV EDİN - YALNIZ sonuncunu ləğv edin.

Ekranda öz dövlətlərinin bütün alt lüğətlərinin adlarını çap edən $ əmri də var - alt lüğət axtarış üçün açıq və ya bağlıdır. Adı yuxarıda çap olunan lüğət həmişə artırılır.

PRSP-nin əsas prosedurları istifadə üçün açıq olan $ PRIME adlı alt lüğəti təşkil edir və defolt olaraq genişləndirilir, yəni başqa bir alt lüğətin genişləndirilməsini təyin edən heç bir əmr olmadıqda.

Tutaq ki, məsələn, əməliyyat?$ Alt lüğətlərin növbəti vəziyyətini çap edib.

$ PRG açıqdır

$ PRIME açıqdır

$ EDIT bağlandı

$ PRIME açıqdır

SİSTEM bağlandı

Bu o deməkdir ki, $ PRG hazırda genişləndirmə və istifadə üçün açıqdır, $ PRIME yalnız istifadə üçündür və $ EDIT və SYSTEM mövcud deyil. Qeyd edək ki, alt lüğət eyni adlı bir neçə bölmədən ibarət ola bilər.

Müəyyən bir sıra lüğət daxilolmalarını lüğətdən və bəlkə də əlaqəli daxili obyektlərdən silmək üçün əmrlər var. Beləliklə, FORGET $ v əmri GROW $ v əmrinin sonuncu icrasından sonra lüğətə daxil edilmiş bütün adları (yalnız $ v alt lüğətində deyil) bu adlarla göstərilən obyektlərlə birlikdə silir və genişlənməsini ləğv edir. təyin etdiyi $ v alt lüğəti. PROGRAM $ v əmri ardıcıl FORGET $ v GROW $ v əmrləri ilə eyni şeyi edir. İstənilən proqramın əvvəlində belə əmrin olması ona gətirib çıxarır ki, proqram yenidən tərtib edildikdə onun köhnə nüsxəsi silinəcək və proqramın yeni nüsxəsinin obyektlərini saxlamaq üçün lüğət formalaşacaq. Məsələn, vəziyyəti yuxarıda göstərilən lüğətdə FORGET $ PRIME əməliyyatını yerinə yetirərək yeni bir vəziyyət əldə edirik:

$ EDIT bağlandı

$ PRIME açıqdır

SİSTEM bağlandı

FORGET əmrinin icrası zamanı ekranda silinəcək bölmələrin adları göstərilir.

Qeyd edək ki, SİSTEM alt lüğətinin adı $ ilə başlamır. Bu, icazəlidir, lakin bu, UNUTMA və RPOQRAM əmrlərinin bu alt lüğətə tətbiqinin heç bir hərəkətə səbəb olmamasına gətirib çıxarır (Sistem alt lüğəti onlar üçün sanki mövcud deyil).

Tamamlanmış proqramda prosedurların böyük əksəriyyəti üçün xarici adla müraciət tələb olunmadığına görə, onlarla əlaqəli daxili obyektləri qorumaqla adlarını lüğətdən silmək mümkündür. CLEAR $ v əmri proqram mətnində (onları təyin edərkən) :: (iki iki nöqtə) ön prefiksindən əvvəl gələnlər istisna olmaqla, $ v alt lüğətinin bütün bölmələrindən bütün adları silir. Məsələn, prosessorun aşağıdakı proqram fraqmentini yerinə yetirməsi nəticəsində:

::: X + Y! + X;

CLEAR $ EXAM yalnız X və X + adları $ EXAM alt lüğətində qalacaq, lüğət girişi Y silinəcək (baxmayaraq ki, daxili təmsildə Y sözünə uyğun dəyişən qalacaq).

I/O əmrləri

İstifadəçi ilə DSPP arasında qarşılıqlı əlaqənin əsas vasitəsi, bir qayda olaraq, klaviatura ilə katod-şüa ekranı olan terminaldır. Terminal proqramların ilkin daxil edilməsi, redaktə edilməsi və sazlanması, məlumatların hazırlanması və bütün sistemin idarə edilməsi üçün istifadə olunur. Proqramlar və məlumatlar, həmçinin lövhənin özü disklərdə fayllar kimi saxlanılır və printerdə çap oluna bilər. PRSP-nin əsas prosedurlar toplusunda I/O-ya nəzarət etmək üçün aşağıdakı alətlər mövcuddur.

Terminal işinin proqramlaşdırılması rəqəmlərin, ayrı-ayrı hərflərin və hərflərin (sətirlərin) ardıcıllığının daxil edilməsi və çıxarılması əmrləri, həmçinin bəzi əlavə əmrlərlə təmin edilir.

TIB (Terminal Input Byte) əmri terminal klaviaturasında düymənin basılmasını gözləyən dövrə başlayır. Düymə basıldıqda, müvafiq hərfin 8 bitlik kodu zirvənin ən az əhəmiyyətli baytı kimi yığının üzərinə itələnir, ən əhəmiyyətli 3 bayt isə sıfırları ehtiva edir. Bu şəkildə daxil edilmiş məktubun surəti ekranda göstərilir. Həmçinin TRB (Terminal Read Byte) əmri var ki, TIB-dən onunla fərqlənir ki, daxil edilmiş hərfin kodunu yığına itələmək displeydə bu hərfin görünməsi ilə müşayiət olunmur.

VÖEN (Terminal Giriş Nömrəsi) əmri yığına daxil olmaq və klaviaturadan daxil edilmiş nömrəni ekranda göstərmək dövrünü başlayır. Daxil edilmiş nömrə mənfi işarəsi ilə başlayan və bitən rəqəmlər ardıcıllığı olmalıdır ... I/O rejimi dəstindən asılı olaraq, ədədlər prosessor tərəfindən onaltılıq, onluq, səkkizlik və ya ikilik kimi şərh olunur. Əgər onaltılıq rəqəm hərflə təyin olunan rəqəmlə başlayırsa, o zaman onun qarşısına 0 rəqəmi əlavə olunur.Daxil edilmiş nömrə ikili sistemin tamamlayıcı koduna çevrilir və bu, 32-bitlik tam dəyəri kimi stek üzərinə itələnir. uzun söz, yəni çəki 2-nin solunda yerləşən bitləri ən əhəmiyyətli bitin 31-ə qədər kəsməklə.

Hər bir VÖEN əmri bir nömrə daxil edir. Bir sətirdə nömrələr ardıcıllığını daxil etmək lazımdırsa, düyməni basaraq onları ayırmaq lazımdır , və proqrama hər bir nömrənin daxil edilməsi üçün VÖEN əmri yenidən yerinə yetirilməlidir.

Klaviaturadan daxil edilən n simvoldan ibarət ardıcıllıq TIS (Terminal Input String) əmrindən istifadə etməklə a ünvanından başlayaraq ardıcıl artan ünvanlarda yerləşən n bayt şəklində kompüter yaddaşına daxil edilir, ondan əvvəl a ünvanı və onların sayı göstərilir. n hərfləri yığının üzərinə itələnir ... Məsələn, kifayət qədər uzunluğa malik X bayt vektoru elan edilsin. Sıfır elementdən başlayaraq bu vektorun elementlərinə onların dəyərlərini təyin edərək 9 simvol daxil etməlisiniz:

Eynilə, TOS əmri başlanğıc ünvanı a olan n bayt simvoldan ibarət ardıcıllığın çıxışını təyin edir:

Proqrama birbaşa daxil olan mətn elementlərinin terminala çıxışı konstruksiya ilə təmin edilir

."<текст>"

Məsələn, proqramın müəyyən fraqmenti yerinə yetirildikdə displeydə VARİANT NÖMRƏSİ ENTER mətni görünsün, fraqmentdə “VARİANT NÖMRƏSİ GİRİN” yazısı olmalıdır.

TON (Terminal Çıxış Nömrəsi) əmri alt yığından çıxarılan nömrəni göstərir və çıxış sahəsinin uzunluğu yuxarıda göstərilməlidir. Göstərilən nömrə sahənin sağ kənarına düzülür, soldakı boş mövqelər boşluqlarla doldurulur və nömrənin uzunluğu göstərilən sahə uzunluğundan çox olarsa, sol kəsilir. Onluq I / O rejimində mənfi ədədlər mənfi işarə ilə başlayır.

TOB (terminal çıxış baytı) əmri, kodu yığının yuxarı hissəsinin aşağı baytı ilə müəyyən edilən hərfi çap edir. Yığın dərinliyi 1 azaldılır.

Ekran kursorunu birbaşa idarə edən əmrlər də var:

CR - yeni sətrin əvvəlinə keçin,

SP - boşluq, yəni bir mövqeni sağa köçürün.

BELL əmri qısa bir siqnal verir (“zəng”).

Bəzən terminalla əlaqə qurarkən düymənin artıq basılıb-basılmadığını və displeydə əvvəlki çıxış əmrini artıq yerinə yetirib-yetirmədiyini yoxlamaq lazımdır. Bunu TTI (Terminal Test Girişi) və TTO (Terminal Test Çıxışı) əmrləri ilə etmək olar ki, göstərilən hadisə baş veribsə, bayraq 1-i stekdə qoyur, əks halda isə 0.

Printerin çıxış əmrləri terminal çıxış əmrlərinə bənzəyir və LP (Line Printer) simvollarının ya TO-nu əvəz etdiyi, ya da aparıcı kimi əlavə edildiyi oxşar mnemonikaya əsaslanır. Məsələn, LPCR - yeni sətrin əvvəlinə keçid, LPSP - boşluq, LPN - təpənin göstərdiyi sahədə alt sətirdən rəqəm çıxarır, LPB - simvolu çıxarır, LPS - simvollar sətirini çıxarır. Çap başlığını çap edilmiş xəttin N mövqeyinə aparan [N] LPT əmri və kağız vərəqini qidalandıran LPFF əmri də var. Açıq şəkildə göstərilən mətni çap etmək üçün mətn hərfi və LPS əmrindən istifadə etmək rahatdır, məsələn:

"FUNKSİYA QİYMƏTLƏRİ CƏDVƏLİ" LPS

Kəsmə və İstisna İdarəetmə

Periferik qurğuları proqramlaşdırarkən kəsilmələri idarə etmək lazım gəlir. DSPP-də bu emal aşağıdakı kimi proqramlaşdırılır. Fasilələrin idarə edilməsi üçün nəzərdə tutulmuş proqram normal PRSP prosedurudur, onun tərifindən əvvəl INT prefiksi var, məsələn, INT: A!1+ I; INT prefiksi fasilə zamanı prosessorun vəziyyətinin saxlanmasını və kəsilmə işləndikdə bərpa olunmasını təmin edir.

Bir hissə proqramını müəyyən bir fasilə ilə əlaqələndirmək üçün LINK əmrindən istifadə edin:

<адрес вектора>LINK<имя процедуры>yerinə yetirildikdə, müvafiq vektor boyunca kəsilmənin idarə edilməsi rejiminə çağırış yazılır. LINK əmri proqramın tərtibi zamanı baş verən fasilə ilə prosedurun həm statik, həm də proqramın icrası zamanı dinamik əlaqələndirilməsini həyata keçirə bilər.

Prosessorun kəsilməsi xarici aləmdə baş vermiş hadisə haqqında sistemin məlumatlandırılması üsuludur. Dərhal emal tələb edən hadisələr proqramda da baş verə bilər. Bunlara müstəsna hallar deyilir. Belə halların nümunələri: sıfıra bölmə, cihazla əlaqə xətası, giriş faylının sonu və s.

DSPP-də istisnalar əmr kəsmələrindən istifadə etməklə tutulur. Komanda kəsilməsi cavab prosedurunu çağıran adlandırılmış əməliyyatdır və aşağıdakı kimi elan edilir:

TƏLƏK<имя вызова> <конечная реакция>

Məsələn:

TRAP S1. "Vəziyyət S1."

Birinci halda, X proseduru S kəsilməsinə son reaksiyadır; ikincidə, S1 kəsilməsi baş verdikdə, terminal bir mesaj alacaq: Vəziyyət S1.

İcra zamanı kəsilmə baş verə bilən proqram intercept əmrindən istifadə edərək ona reaksiyasını təyin edə bilər. DSSP iki növ tutma təmin edir: ON və EON. Tutma əmrləri yalnız prosedurlar daxilində istifadə edilə bilər və aşağıdakı formata malikdir:

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

EON<имя прерывания> <реакция>Məsələn:

: A ... ON S. "Interrupt S" ...;

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

ON və EON müxtəlif növ reaksiyalar təyin edir. Əgər ON əmri ilə yeni reaksiya təyin edilirsə, onda fasilə yarandıqda reaksiya proseduru yerinə yetirilir, bundan sonra kəsilmiş proqram işləməyə davam edir. Reaksiya EON əmri ilə təyin edilirsə, əvvəlcə operand yığını EON-un icrası anında malik olduğu dərinliyi qəbul edir, sonra reaksiya yerinə yetirilir və başa çatdıqdan sonra EON əmrinin yerinə yetirildiyi prosedur yerinə yetirilir. istifadə dərhal dayandırılır.

Gəlin bəzi nümunələrə baxaq. Prosedur M terminal klaviaturasından simvol daxil edir və onun rəqəm olub-olmadığını yoxlayır. Daxil edilmiş simvol rəqəm deyilsə, ND kəsilməsi qaldırılır. TRAP ND. "Rəqəm deyil." : M RP M1; : M1 TRB [B] C # 0< C2 #9 >& 0 IF + ND [B] TOB;

ND kəsilməsinə son cavab mesajdır: Rəqəm deyil.

ND kəsilməsinə öz cavabı olan P1 prosedurundan M çağırılırsa: P1 ON ND PR1 M; : PR1 [B] CR. "Xəta." D # 0 [# 0]; sonra qeyri-rəqəmsal simvol daxil edildikdə, ND kəsilməsi ON tipli PR1 reaksiya proqramı tərəfindən işlənəcək və bu, yeni sətirdən aşağıdakı mesajın çıxmasına səbəb olacaq: Xəta. Daxil edilmiş hərf 0 hərfi ilə əvəz olunacaq, bundan sonra M işləməyə davam edəcək.

P2 prosedurundan M çağırılırsa: P2 EON ND PR2 M; : PR2 CR. "Xəta. Girişin sonu." ; sonra qeyri-rəqəmsal simvol daxil edildikdə, ND kəsilməsi EON tipli PR2 reaksiya proqramı tərəfindən işlənəcək və bu, yeni sətirdən aşağıdakı mesajın çıxmasına səbəb olacaq: Xəta. Girişin sonu., Sonra P2 çıxacaq. Bundan sonra operand yığını boş olacaq.

Lazım gələrsə, reaksiya proqramında fasilə yenidən qaldırıla bilər və beləliklə, onu daha yüksək səviyyəli proqramlara genişləndirə bilərsiniz. Bu halda, kəsilmə ya əlavə prosedurda ələ keçirmə əmrində göstərilən proqram, ya da son reaksiya ilə idarə olunacaq. Məsələn, PR2-ni aşağıdakı kimi dəyişdirsəniz:: PR2 CR. "Xəta. Girişin sonu." ND; sonra terminalda göstərilən mesaj olacaq: Xəta. Girişin sonu. Nömrə deyil.

DSPP-də bir neçə daxili əmr fasiləsi var, reaksiyası istifadəçi proqramlarında təmin edilə bilər.

Bunu paylaşın