Etkileşimli programlama sistemi DSSP Moskovsky'nin uyarlanabilir dili PARADISE geliştirildi Devlet Üniversitesi Hesaplamalı Matematik ve Sibernetik Fakültesi N.P. Brusentsov, V.B. Zakharov, I.A. Rudnev, S.A. Sidorov, N.A. Chanyshev Moskova, 1987
PARA dilinin genel açıklaması
Dil gelişiminin amacı ve amacı
PARA (Gelişmiş Uyarlamalı Dil), Yapılandırılmış Programlama için DSSP Konuşma Sisteminin temel dilidir. Temel - DSSP'de temel dili geliştirerek (genişleterek, güçlendirerek) ve belki de bu şekilde oluşturulan dil araçlarını belirli bir uygulamaya uyarlayarak gerçekleştirilen tüm diğer yapıların temeli olmak anlamına gelir. Sözde yüksek seviyeli dillerin aksine, PARA hazır veri türleri ve işlemleri sağlamaz, sadece gerekli türleri verimli bir şekilde tanımlamak için öğeler ve ilkelleri sağlar. Örneğin orijinal veri formatları 8-bit byte, 16-bit word ve 32-bit long word olup bunlar üzerinde yapılan işlemlere bağlı olarak tam sayılar, Boolean vektörler, karakter kodları, mantıksal değerler, veri ve prosedür olarak yorumlanır. işaretçiler. Bu durumda, bir yandan bireysel bayt ve kelime bitlerini manipüle etmek ve diğer yandan bileşik veri birimleri (çok uzunluklu kelimeler, vektörler, diziler, metin satırları vb.) uygun işlemlerin tanıtılması için bir veya başka bir yorumun belirlenmesi. Böylece, gerekli uzunluk ve değer aralığının gerçek sayıları, karmaşık sayılar ve diğer nesneler tanıtılabilir ve belirli bir uygulamaya yönelik dilin sürümü, bu uygulamaya özgü nesneleri ve araçları içerecek ve geçerli olmayanları içermeyecektir. ona göre - dil uygulamaya uyarlanır (uyarlanır). DSSP'nin geliştirilmesi, geniş çapta erişilebilir ve etkili çare mikrobilgisayarların programlanması, yani. mikroişlemci tabanlı bilgisayarlar. Mikroişlemci mimarisinin temel bir özelliği, bir yandan evrensellik ve diğer yandan programlamanın karmaşıklığı anlamına gelen veri türleri ve işlemlerinin temel doğasıdır. Çok yönlülükleri nedeniyle, mikroişlemciler ve bunlara dayalı mikrobilgisayarların potansiyel olarak sınırsız uygulamaları vardır. Ancak, bu olasılıkların pratikte uygulanması, öncelikle gerekli uygulama programlarının geliştirilmesinin karmaşıklığına dayanmaktadır. Ek olarak, tatmin edici uygulama programları ancak ilgili uygulamaların özellikleri hakkında derin ve ince bir bilgi ile oluşturulabilir, yani. sadece programcılar tarafından değil, belirli bir alanda yüksek nitelikli uzmanlar tarafından geliştirilmelidirler. Bu nedenle, programlama sistemi yalnızca programcıların verimliliğini büyük ölçüde artırmakla kalmamalı, aynı zamanda profesyonel olmayan programcılar tarafından ustalaşılabilecek ve etkin bir şekilde kullanılabilecek kadar basit olmalıdır.
Bu soruna radikal bir çözüm, görünüşe göre, bilgisayar mimarisinin önemli bir basitleştirilmesi olacaktır. Ancak ne yazık ki, mikrobilgisayarların mimarisi, artan karmaşıklık ve karmaşıklık yolunda taban tabana zıt bir yönde gelişiyor, bu nedenle profesyonel bir programcının bugün mikrobilgisayar montajı dilinde ustalaşması kolay değil. C veya PL/M gibi sistem programlama dilleri, yazılım geliştirmenin karmaşıklığını belirli (yeterli olmaktan uzak olsa da) bir boyuta indirmiştir, ancak programlama ticaretinde deneyimli olmayan kişilere pek tavsiye edilememektedir. Geniş çapta erişilebilir bir dil, elbette, daha basit ve daha doğal olmalı, programlamanın özü ve tekniği hakkında en sıradan, tanıdık fikirlere dayanmalıdır.
Assembly dilinde programlamaya kıyasla erişilebilirliğe ve program geliştirmenin karmaşıklığında önemli bir azalmaya ek olarak DSSP, dilin, Assembly dilindekiyle aynı evrenselliğini, yüksek makine verimliliğini (yani, kodun kompaktlığı ve hızı) gerektirdi. , oluşturulan programların doğrulanabilirliğinin güvenilirliği ve bakım kolaylığı ve değiştirilebilirliğin yanı sıra sistemin ve içinde geliştirilen programların farklı mimarilerdeki makinelere hareketliliği (taşınabilirliği).
prosedürel programlama
PARADISE dilinde programlama, birbiriyle ilişkili eylemleri, işleri, süreçleri planlamak ve organize etmek veya karmaşık malzeme nesneleri - makineler, kümeler, yapılar tasarlamak gibi yaygın insan faaliyeti türlerine oldukça benzer. Fikrini kurucu parçalarını (bloklar, montajlar, parçalar) bir araya getirerek uygulayan bir kurucu gibi, programcı da dil tarafından sağlanan basit eylemlerden gerekli karmaşık eylemi sentezler. Programlamanın (yapılandırma), uygulanan nesnenin giderek daha küçük bileşenlere kademeli olarak ayrıştırılmasından (ayrışmasından) oluştuğu da söylenebilir.
PARADISE dilinde, ana "yapıcı" bir prosedürdür - adlandırılmış bir eylem. Dil, kendi adlarıyla (notasyonlar) temsil edilen sınırlı bir dizi basit prosedüre (ilkel) dayanmaktadır. Örneğin: + "ekle" anlamına gelir, NEG "ters işaret" anlamına gelir, VCTR "bir vektör oluştur" anlamına gelir. Özellikle ilkeller vardır: ve; (iki nokta üst üste ve noktalı virgül), örneğin P adında yeni bir prosedür tanıtmanıza izin vererek, onu P1, P2, ..., PN şeklinde bir prosedür dizisi olarak tanımlar.
: P P1 P2 ... PN ;
P prosedürü, oluşturulan programın gerçekleştirmesi gereken eylemi temsil ediyorsa, bu programın PARA dili aracılığıyla yapılandırılması, P1, P2, ..., PN prosedürlerinin sıralı detaylandırmasına indirgenir. Bu, bu prosedürlerin her birinin, daha sonra daha küçük prosedürlerin dizileriyle tanımlanan bir dizi daha küçük prosedürlerle tanımlanması gerektiği anlamına gelir ve bu, yalnızca ilkellerden oluşan tanımlar elde edilene kadar böyle devam eder.
Belirli bir hedeften başlayarak ve kullanılan prosedürleri kademeli olarak temel dil özellikleri düzeyine indirgeyen bu program yapısı, yukarıdan aşağıya programlama olarak bilinir. Bireysel, iyi tanımlanmış görevleri çözmek için PARADISE dilinde programlar edinmenin ana yoludur. Tersi aşağıdan yukarıya programlamadır - belirli bir sorun alanına odaklanan kademeli olarak genişleyen prosedürler sisteminin temel dili temelinde inşa etmek. Bu şekilde dilin geliştirilmesi ve belirli bir uygulamaya uyarlanması gerçekleştirilir.
Her iki durumda da, oluşturulan programların dikkatli bir şekilde yapılandırılması esastır: her program ve programın her bölümü, her biri belirli bir işlevi yerine getiren ve bağımsız doğrulamaya izin veren az sayıda ayrı bölümden oluşmalıdır. PARA dili ile ilgili olarak, bu, özellikle, prosedür tanımlarının kısa olması gerektiği anlamına gelir: Tanımlama sırası, kural olarak, 5-7'den fazla üye içermemelidir. Yapılandırma, programın anlaşılabilirliğini, test edilebilirliğini ve değiştirilebilirliğini sağlar, oluşturulmasının ve bakımının karmaşıklığını önemli ölçüde azaltır.
Yukarıdaki P prosedürünü tanımlama örneği basitleştirilmiş bir örnektir. Aslında, tanımlama sırası üye olarak sadece prosedürlerin isimlerini değil, aynı zamanda birden fazla kelimeden oluşan reçeteleri (komutları) da içerebilir. Bir prosedürün adı, başka kelimelerle birleştirilmeden kullanılan, kendisi tarafından belirlenen prosedürü yürütmek için bir komuttur. Prosedür adlarının sırası, bu prosedürlerin birbiri ardına (doğrusal sırada) sırayla yürütülmesi talimatını verir. Diğer yürütme sıralarını ayarlamak için, PARA, belirtilen koşula bağlı olarak bunlarla birlikte adlandırılan prosedürlerin yürütülmesini ve ayrıca prosedürün çoklu (döngüsel) yürütülmesini öngören özel kelimeler (ön ekler) sağlar.
Örneğin, P0 P1 doğrusal dizisi, P0 prosedürünün yürütülmesine ve ardından P1 prosedürünün yürütülmesine neden olur. P1 prosedürü her zaman yürütülmemeliyse, ancak yalnızca P0'ın yürütülmesi sonucunda pozitif bir sayı elde edilirse, o zaman P1 yerine yürütme komutu şu koşula göre yazılır: IF + P1, yani. P0 P1 yerine P0 IF+ P1 olacaktır. PARA, iki, üç veya daha fazla prosedür seçiminin yanı sıra bir koşulun yürütülmesini etkili bir şekilde ifade etmenize olanak tanıyan bir dizi ön ek koşulu içerir.
RP öneki kullanılarak bir prosedürün çoklu yürütülmesi belirtilir. Böylece, RP P komutu, bu prosedürün gövdesinde bulunan EX'in tetiklendiği koşullar oluşturulana kadar P prosedürünün tekrar tekrar yürütülmesine neden olur - döngüden çıkış, ardından doğrusal bir sırayla sonraki komut uygulanmış. Döngüden çıkmak için koşul, örneğin, şu şekilde ifade edilen bazı X değişkenlerinin sıfıra eşit olması olabilir:
Adı başka bir prosedürün tanımında yer alan bir prosedür, içinde yuvalanmış olarak adlandırılır. Bir iç içe prosedür, ilkel değilse, sırayla iç içe prosedürler içerebilir, yani. yuvalama birden fazla olabilir. Ayrıca, PARA dilinin kuralları, kendi adının bir prosedürün tanımına veya bu adı içeren bir prosedürün adının, yani. PARA özyinelemeye izin verir.
Tekrar tekrar yürütülen bir prosedür, tekrar tekrar yürütülen bir prosedürün içine yerleştirilebilir. Bu durumda, döngülerin iç içe geçmesi gerçekleşir. PARADISE, döngülerin çoklu yuvalanmasına izin verir.
Doğrusal komut dizisi, yuvalama, koşullu ve döngüsel prosedür yuvalaması - bu, RAYA dilinde program oluşturma olanaklarını tüketir. Bu araçların azlığı, homojenliği ve doğallığı, dile hakim olma ve kullanma kolaylığının anahtarıdır. Aynı zamanda, programların geliştirilmesinin karmaşıklığında ve güvenilirliğinde önemli bir azalma sağlayan titiz yapılandırılmış bir programlama dilidir.
Prosedürler ve Veriler
Buraya kadar söylenen her şey, eylemleri reçete etmenin, sonlu bir dizi ilkel işlemden keyfi eylemler inşa etmenin bir aracı olarak PARADISE dilinin bir özelliğidir. Dilin diğer yüzü, dilin üzerinde durduğu nesneleri temsil etme aracıdır. eylemler, araçlar verilerin sunumu ve organizasyonu.
sonuçta basit bir eleman data iki basamaklı bir elemandır - bit. Bitler, diğer tüm veri biçimlerinin ve türlerinin yapı taşlarıdır. PARADISE dilinde 8-bit byte, 16-bit word ve 32-bit long word temel formatlar olarak kabul edilmektedir. Üzerinde yapılan işlemlere bağlı olarak baytlar, kelimeler ve uzun kelimeler birçok yoruma tabidir, yani. için temel olarak hizmet edebilir çeşitli tipler veri. Ayrıca, kompozit formatların ve türlerin oluşumu için ilk unsurlardır.
Aslında, PARADISE ne basit ne de bileşik veri türleri içermez - yalnızca temel biçimler (bayt, sözcük, uzun sözcük) ve bunlardan bileşik biçimler oluşturmak için araçlar vardır: vektörler ve çok boyutlu diziler. Bu durumda, aynı baytlar (kelimeler, uzun kelimeler), üzerlerinde gerçekleştirilen işlemlere bağlı olarak, bit vektörleri veya işaretli veya işaretsiz ikili tam sayılar veya giriş/çıkış alfabesinin harfleri vb. olarak yorumlanır. Veri türleri ve bunlarla ilişkili kısıtlamalar ve kontroller, alana özgü dil uzantılarında tanıtılabilir.
Temel dilde, veri adlarının bildirimi, yalnızca verilere adla erişim sağlama işlevini yerine getirir: bildirimin gerektirdiği bellek hücrelerinin sayısı ve bunlara erişim mekanizması adla ilişkilendirilir. Test ve dönüştürme işlemleri doğrudan adlandırılmış verilere uygulanmaz. Bu işlemler, sonuna yeni öğeler eklenerek (iterek) ve aynı uçtan öğeler kaldırılarak (onu aynı uçtan çıkararak) dinamik olarak değiştirilen 32 bit uzunluğundaki sözcüklerden (yığın öğeleri) oluşan bir dizi olan işlenen yığınında tanımlanır. yığın). Öğeler, gönderildikleri sıranın tersi sırayla geri çekilir: son gönderilen ilk önce geri çekilir. Test edilecek veya dönüştürülecek veriler yığına gönderilir, burada öngörülen işlemler üzerlerinde yapılır ve ardından işleme sonuçları yığından çıkarılabilir.
Örneğin, 32 bit uzunluğunda bir kelime olarak bildirilen bir X değişkeni varsa, bu değişken üzerinde doğrudan yalnızca iki işlem gerçekleştirilebilir:
1) X adından her bahsedildiğinde otomatik olarak ortaya çıkan değerini yığına itmek,
2) takıma atamak! Yığından çıkarılacak son (üst) öğenin X değeri.
Diyelim ki X'in değerini kendisine ekleyerek iki katına çıkarmak istiyorsanız, bunu aşağıdaki komutları arka arkaya uygulayarak yapabilirsiniz:
X değerinin iki örneği yığına itilecek, ardından + komutu bunları kaldıracak, toplayacak ve elde edilen miktarı yığına aktaracak, ardından komut! X, bu tutarı çekecek ve değerini X değişkenine atayacaktır.
Yukarıdaki örneğin X:=X+X biçiminde yazılan yüksek seviyeli diller için olağan, programcıya daha aşinadır, ancak işlemci tarafından yürütülen komut dizisinin doğrudan bir yansıması değildir, ancak bir bir tür matematiksel formül. Bu, hesaplama problemlerini programlarken kullanışlıdır, ancak temel dilde, program doğrudan programlama dilinde komut komut kontrol edilebildiğinden ve yürütülen komutlarla bire bir yazışma daha önemli görünmektedir. genellikle işlemcinin dilinden başka bir dil bilmek gerekmez.
Ancak veri yığınlamanın özellikle değerli bir yararı, test ve dönüştürme prosedürlerinin uygulandıkları verilerden bağımsız olarak tanımlanıp uygulanabilmesidir. Test ve dönüştürme işlemleri, veri tanımlayıcıları (veya sabitlerin ve değişkenlerin adları, resmi parametreler) ile ilgili olarak değil, işlem gerçekleştirilirken işlenen değerlerinin atanması gereken yığın öğeleriyle ilgili olarak formüle edilir. Örneğin, + (ekle) komutuyla gerçekleştirilen iki sayı toplama işlemi, en üstteki iki öğeyi (üst ve alt) yığından toplama olarak almak, toplamlarını hesaplamak ve yığına göndermekten ibarettir. İki sayı eklemek için değerlerini yığına göndermeniz ve + komutunu çalıştırmanız gerekir, sonuç yığının en üstünde olacaktır.
Rasgele sayıda giriş ve çıkış parametresine sahip bir test-dönüşüm prosedürü, bu nedenle, argüman değerlerini belirtilen sırada içeren bir yığın üzerinde gerçekleştirilen adlandırılmış bir eylem (parametre listesi olmadan) olarak tanımlanabilir ve yürütmeden sonra, sonuç değerleri. Böyle bir prosedürü belirli bir veri kümesine uygulamak için, bu verileri uygun sırayla yığına göndermek gerekir. Onları tükettikten sonra, prosedür sonuçlarını yığında (belirli bir sırayla bulunur) bırakacaktır.
Başka bir deyişle, PARA dilindeki prosedürlerin adları, işlemlerin işaretleri ile aynı şekilde kullanılır ve esasen keyfi sayıda işlenene sahip işlemlerin sembolleridir. Yığın işlemi ilkesine uygun olarak işlemler postfix şeklinde yazılır, yani. Bir işlemin adı, işlenenlerinin adlarının veya değerlerinin listelenmesinden sonra yerleştirilir. Örneğin, ++ sembolü ile üç sayının toplamını alma işlemini gösterirsek, A, 5 ve B sayılarının toplamı aşağıdaki gibi ifade edilecektir:
Program yazarken postfix dilinin biçimsel kurallarını belirlemek ve onlar tarafından yönlendirilmek mümkün olacaktır ancak bir kişinin kurallarla değil yığın işlemci modeliyle yani yığın işlemci modeliyle uğraşması daha kolay ve güvenilirdir. programların oluşturulduğu ve bunları yürütecek olan makinenin modeli ile. PARA dili söz konusu olduğunda, böyle bir makine bir DSSP işlemcisidir - bu dilde belirtilen eylemleri uygulayan bir dizi donanım ve program.
DSSP işlemci
Fiziksel olarak, DSSP işlemcisi, mikrobilgisayar yazılımı sorununu çözecek olan basit ve verimli programlanabilir mimarinin bir mikroişlemcisi biçiminde uygulanabilir. en iyi yol. Ancak böyle bir mikroişlemci henüz oluşturulmamıştır ve mimarisinin programlanabilirliğini geliştirmek için mevcut mikrobilgisayarlara öykünmesi gerekir. Elbette öykünme maliyetlerle ilişkilidir - bellek ve makine zamanı gerektirir, ancak bir PRSP işlemci öykünmesi durumunda bu maliyetler nispeten küçüktür.
Programcının bakış açısından, bir işlemcinin özelliği mimarisidir, yani. Bu işlemcinin bir veri işleme aracı olarak neye benzediği, girişte ve işlemcinin içinde veri sunma olanaklarının neler olduğu, test etme ve veri dönüştürme işlemlerinin neler olduğu, işlemcinin kendi belleğinin nasıl organize edildiği ve bunlara erişim hakkında bilgiler. ana ve harici bellek, programın seyrini kontrol eden kontroller nelerdir, ile etkileşim dış ortam, istisnai olaylara tepki vb. Mimarlığın ustalığı bu gerekli kondisyon Hata sayısını önemli ölçüde azaltan ve programların güvenilirliğini artıran anlamlı (gayri resmi) programlama.
DSSP işlemcisinin merkezi öğesi, daha önce bahsedilen işlenen yığınıdır. Aslında, işlem yığında gerçekleştirilir ve kural olarak veriler yığın üzerinden aktarılır. Yığın üzerindeki bireysel komutlar ve kısa komut dizileri, bunları doğrudan terminal klavyesinden işlemci girişine sağlayarak yürütülebilir. Bu durumda, DSSP işlemcisi bir postfix hesaplayıcısının çalışmasını taklit eder. Klavyeden girilen sayılar ve anımsatıcı işlem kodları boşluklarla ayrılır. Girilen metin, terminal ekranında bir dizi olarak görüntülenir. Girişin bitişi için sinyal ve işlemciye verilen komut "Girilen komutu yürütün" tuşuna basmaktır.
Örneğin, (2-5)*3 ifadesini değerlendirmek ve sonucu görüntülemek için şunu girin:
2 5 - 3 * .
tuşuna bastıktan sonra
* 2 5 - 3 * . -90
Bir satırın başındaki yıldız işareti, işlemci tarafından girdi beklediğine dair bir sinyal olarak verilir.
Ele alınan örnekte, işlemci girilen sayıları ondalık tamsayılar olarak algıladı ve işledi. Aslında, giriş yaparken bu sayılar ikili tamamlayıcı koda dönüştürülür ve çıktı alınırken tekrar ondalık sayıya dönüştürülürdü. PRSP işlemcisi ayrıca ikili, sekizli ve onaltılı G/Ç modlarına izin verir. İstenilen moda geçmek için sırasıyla B2, B8, B10, B16 komutlarından birini uygulamalısınız.
Tuşlara basılması, bu tuşlarda belirtilen harfleri (harfler, sayılar, noktalama işaretleri, işlem simgeleri) temsil eden işlemci kodlarının girilmesine neden olur. Girdi karakterlerinin sırası bir girdi dizgisi oluşturur - karakter başına bir bayt olmak üzere karakter kodlarını içeren bir bayt zinciri. Giriş dizesinin maksimum uzunluğu 80 karakterdir.
Giriş dizesini işleyen işlemci, içindeki sözcükleri - birbirinden boşluklarla ayrılmış harf kombinasyonlarını - çıkarır ve yorumlar. İşlenmekte olan sözcük, işlemci tarafından bilinen bir işlemin (prosedür) adı veya verilen ad ise, işlemci, tanım gereği bu adın çağırması gereken eylemleri gerçekleştirir. Kelime işlemci tarafından bilinmiyorsa, set giriş / çıkış modunu dikkate alarak onu bir sayı olarak yorumlamaya çalışır.
Sayılar, belirli bir sayı sisteminde kabul edilebilir rakamlardan oluşan ve belki de ilk harf olarak bir eksi işareti içeren kelimelerdir. Onaltılık giriş/çıkış modunda, Latin harfleri A, B, C, D, E, F rakamlarla birlikte de geçerlidir.Alınan sayı ikiye tümleyene dönüştürülür ve işlenen yığınına 32 bit uzunluğunda bir kelime olarak gönderilir. Bu durumda, sayının değeri -2147483648: 2147483647 temsil edilebilir değerler aralığının dışındaysa, bu aralıktan karşılaştırılabilir bir modülo 2**32 değeri ile değiştirilir.
İşlenen kelimenin işlemci tarafından bilinmemesi ve sayı olarak kabul edilememesi durumunda, işlemci terminal ekranında bir mesaj görüntüler: "Bilmiyorum<обрабатываемое слово>ve daha fazla talimat bekler.
Rastgele metin biçimindeki veri girişi (bayt değişmez değerleri dizisi), çift tırnak içine alınmış metin olan metin değişmezleri biçiminde yapılır, örneğin: "Metin değişmezi". İşlemcinin girişinde bir metin değişmezinin alınması, tırnak işaretleri arasına alınan metnin bir bayt-litre dizesi biçiminde ana belleğe yazılmasına neden olur. Bu durumda, ilk baytın adresi ve bayt sayısı (metnin uzunluğu) yığına itilir. Önünde bir nokta bulunan bir metin değişmezi, işlemci tarafından "metni terminal ekranındaki tırnak işaretleri arasına koyma" komutu olarak yorumlanır. Örneğin, işlemci girişine "Hafıza yok" karakter kombinasyonunu vermek, mesajın ekranda görünmesine neden olur: Hafıza yok.
Tek bir karakterin kodu, bu karakter işlemci girişine ulaştığında, önündeki # işaretiyle birlikte en üstteki düşük bayt olarak yığına itilir. Örneğin, #L karakter kombinasyonu, L harfinin kodunu yığına gönderir, #5 karakter kombinasyonu ise 5 sayısının kodunu gönderir. Terminale bir bayt çıkışı için TOB komutu, kodu yığının üst kısmının düşük baytında bulunur.
Doğrudan yürütme modunda bile, PRSP işlemcisi, veri işleme işlemlerine ek olarak, kullanıcıya, daha sonra temel işlemlerle birlikte kullanılabilecek adlandırılmış verileri bildirme ve prosedürleri tanımlama araçları sağlayarak, geleneksel bir hesap makinesinin yeteneklerini çok aşar. Veri adlarının bildirilmesi ve prosedürlerin tanımlanması özel komutlar kullanılarak yapılır.
Örneğin, TEMP adında 16 bitlik bir değişken oluşturmak için klavyede yazmalı ve tuşu ile işlemcinin girişine uygulamalısınız.
VAR TEMP
Bildirim ile birlikte bir değişkene atayabilirsiniz. başlangıç değeri, örneğin, 0:
VAR TEMP 0 ! TEMP
Şimdi TEMP adının işlemcinin girişine gelmesi, bu değişkenin mevcut değerinin yığına itilmesine neden olacak ve yığından kaldırılan yeni bir değerin atanması komutla yapılabilir! TEMP.
Bir prosedürün tanımı şu komutla verilir: (iki nokta üst üste) tanımlanan prosedürün adını içeren ve bir harfle bir komutlar zincirini tanımlayan; (noktalı virgül) tanım sonu karakteri olarak. N doğal sayısının faktöriyelini formülle hesaplama örneğini kullanarak prosedürlerin tanımını ve kullanımını gösterelim.
N!=N*(N-1)*(N-2)*...*2*1, yani. N-1 çarpımı.
İstenen sonucu elde etmek için FCT prosedürü, verilen N sayısını, N-1'den 1'e kadar art arda azalan sayılarla çarpmalıdır, yani. sadece N-1 kez. PARA dilinde bu, P t kez prosedürü yürütülerek programlanır: DO P, burada P prosedürün adıdır, t, P prosedürünün kaç kez olması gerektiğini gösteren yığının en üstündeki mevcut değerdir. uygulanmış.
FCT prosedürünü uygulamadan önce, N sayısının yığının üzerine itildiğini ve en üstte olduğunu varsayın. Prosedürü daha anlaşılır kılmak için, K değişkeninin değiştirilebilir bir çarpanını sunuyoruz:
FCT prosedürünün tanımını şu şekilde sunuyoruz:
FCT [N] ! K K K 1-DO F . [N] ;
Köşeli parantez içindeki yorumlar, işlenen yığınının mevcut durumunu yansıtır. Takım! Tanımlanan prosedürü başlatan K, yığından alınan N sayısının değerini K değişkenine atar. Daha sonra K, yığının üzerine iki kez itilir ve yığının tepesinden 1 çıkarılarak, yürütme sayısı. N-1'e eşit tekrarlanan prosedür F oluşturulur. Bunu, bir döngü belirleyen DO F komutu takip eder, ardından yığının üst kısmı faktöriyelin istenen değerini - N!'yi içerecektir. Takım. (nokta) terminal ekranında bu değerin bir kopyasını görüntüler. Geriye, 1'i çıkararak K'nin değerini değiştiren ve yığında bulunan R'nin kısmi sonucunu K ile çarpan bir F prosedürü tanımlamak kalır.
F [R] K 1- ! K [R] K* ;
Her iki prosedürün doğruluğu, her komuttan sonra terminal ekranında işlenen yığınının içeriği ve K değişkeninin değeri görüntülenerek, tanımları komut komut yürütülerek kontrol edilir. yığın N! değerini içermeli ve K değişkeninin değeri 1'e eşit olmalıdır.
Kontrol edilen ve düzeltilen (doğrulama işlemi sırasında hatalar bulunursa) prosedürler, N sayısının bireysel değerlerine uygulanarak test edilir. F prosedürü FCT'de yuvalandığından, testi test sürecinde otomatik olarak gerçekleştirilir. ikincisi. Sonuç değerlerinin, ikinin tümleyen kodunda 32 bit uzunluğunda bir kelime ile temsil edilen maksimum pozitif sayıyı geçmemesi gerektiği unutulmamalıdır: 2147483647, yani. FCT yalnızca N=1, ..., 13 için doğru sonuçları verir.
FCT'yi kullanmak, yerel işlemci talimatlarını kullanmaktan farklı değildir: sonucu almak için işlenenin değerini belirtmeli ve prosedürün adını girmelisiniz:
5 FCT
7 FCT
FCT prosedürünün yukarıdaki uygulaması, bir yardımcı değişken K'nin eklenmesini gerektirdi, ancak, tepe noktasının bir kopyasını yığına iten C işlemi ve işlemler kullanılarak yardımcı bir değişken olmadan işlevsel olarak eşdeğer bir prosedür gerçekleştirilebilir. Sırasıyla yığının ikinci ve üçüncü öğeleriyle tepe noktasını değiştiren E2 ve E3. Bu prosedürün tanımı aşağıdaki gibidir.
: FCTA [N] C 1- C DO FA D . ;
: FACE E3 * E2 1- ;
Böyle bir "saf yığın" prosedürünün avantajı, tam özerkliğidir: tıpkı işlemcinin temel yığın işlemleri gibi, başka bir belleğe ihtiyaç duymadan ve diğer işlemci bileşenlerinde herhangi bir değişikliğe neden olmadan yalnızca işlenen yığınında gerçekleştirilir.
Tanımlanmış prosedürlerin ve beyan edilen verilerin adları, bu isimler ve adlandırılmış nesneler arasında, yani ana bellekte bulunan prosedürlerin gövdeleriyle ve bu belleğin beyan edilen verileri depolamak için tahsis edilen öğeleriyle bir bağlantı kuran işlemcinin sözlüğüne girilir. . Giriş akışından bir sonraki kelimeyi işleyen işlemci, sözlüğe bakar ve içinde eşleşen bir kelime bulduktan sonra bu kelimeyle ilişkili eylemleri gerçekleştirir. Aramanın başarısız olduğu ortaya çıkarsa, daha önce belirtildiği gibi, verilen kelimenin sayısal olarak yorumlanması için bir girişimde bulunulur ve bu başarısız olursa, kelimenin işlemci tarafından bilinmediğini belirten bir mesaj gelir.
Bir prosedür tanımının derlenmesi sonucunda, bu prosedürün adı ve tanımı oluşturan prosedür işaretçileri ve veri dizisi olan gövdesinin işaretçisi (adresi) sözlüğe girilir. Başka bir deyişle, bir prosedürün gövdesinin dahili temsili, tanımındaki prosedürlerin ve verilerin adlarının, karşılık gelen gövdelere yönelik işaretçilerle değiştirilmesiyle elde edilir, bunlar sırasıyla aynı işaretçi dizileridir ve ilkeller durumunda, makine talimatları zincirleri. Programın prosedürel kodunun bu dahili temsilini diyoruz.
P prosedürünün tanımının derlenmesiyle birlikte, önceden bilinmeyen tüm iç içe prosedürlerin tanımları da derlendiğinde, yalnızca adını vererek P prosedürünü yürütme olasılığını sağlayan eksiksiz bir işaretçiler hiyerarşisi oluşturulur. işlemci girişi Bu durumda, P'nin tanımı ile bağlantılı olarak derlenen iç içe prosedürlerin adları, bu prosedürlere ayrı ayrı erişmeniz gerekmiyorsa, bunları sözlükte saklamanın bir anlamı yoktur. Bazı durumlarda, sözlüğün bir veya başka bir bölümüne erişimi engellemek, belki de yalnızca bazı prosedürleri gerçekleştirme yeteneğini bırakmak uygun olur.
Sözlük, bu gereksinimleri karşılamak için, üzerinde alt sözlükler ve bunların bölümlerinin oluşturulmasına ve yok edilmesine, adların silinmesine, belirli alt sözlüklere erişimin kapatılmasına ve açılmasına izin veren işlemlerin tanımlandığı bir alt sözlükler topluluğu olarak uygulanmaktadır. Her alt sözlüğün, kendisiyle ilgili komutlarda kullanılan bir adı vardır. Alt dizin adları $ harfiyle başlamalıdır, örneğin: $PRIME, $EDIT, $FLOAT, $TEXTPROC, $GRAPHICS.
PRSP kelimelerinin temel setini içeren $PRIME alt sözlüğü, işlemci başlatıldıktan sonra hem içerdiği kelimelere erişim hem de yeni kelimelerle doldurma için açılır. İçine girilen yeni kelimeler, gerekirse FORGET $PRIME komutu ile bunlarla ilişkili gövdeler ile birlikte silinebilir. Bundan sonra, GROW $PRIME komutunu çalıştırarak bu alt sözlüğe daha fazla kelime ekleme olasılığı sağlanır, bu da $PRIME alt sözlüğünü tekrar büyütmenize izin verir ve içine girilen her şey FORGET $PRIME komutu, vb. ile tekrar silinebilir. . Bu modda, PRSP, küçük program parçaları, bireysel örnekler, tahminler ile deneyler yapılırken ve gerekirse sistem dilinin gelişim sırasına göre $PRIME alt sözlüğüne yeni kelimeler eklemek için kullanılır.
Ayrı bir program oluşturma durumunda, bunun için kendi alt sözlüklerini oluştururlar ve bu, program metninin komutla başlaması gerçeğiyle sağlanır.
PROGRAM$<имя программы>
Bir kişi bu komutu bir başlık olarak algılar, ardından köşeli parantez içindeki bir yorum, programın uyguladığı işlevi birkaç kelimeyle açıklar. İşlemci için bir dizi talimata eşdeğerdir.
UNUT $<имя>BÜYÜME $<имя>
Bu nedenle, program metninin işlemci girişine her girişi, önceki sürümünün silinmesine neden olacak ve bu şekilde temizlenen alt sözlüğü girmek için açacaktır. Yeni sürüm aynı isimli program. Bu, oluşturulan programda düzeltmeler yaparken ve gelecekte değiştirirken kullanışlıdır.
Tasarlanan programın metni, klavyeden doğrudan işlemci girişine girilmez, metin düzenleyicinin arabelleğinde oluşturulur. E komutu (Düzenle - düzenle), klavyede yazılan kelimelerin artık işlemci tarafından hemen çalıştırılacak komutlar olarak algılanmadığı, sadece ara belleğe yazıldığı ve aynı anda ekran metninde görüntülendiği düzenleme modunu ayarlar. Ekrandaki mevcut konum göstergesinin (imleç) hareketini kontrol eden özel tuşlar yardımı ile diğer tuşlara basılarak verilen düzenleme komutlarının yanı sıra, girilen metin, silme ve eklemeler yaparak, parçalarını taşıyarak düzeltilebilir ve değiştirilebilir. yerden yere vb.
Metin girme ve düzenleme sonunda, (daha doğrusu, daha önce basılan) tuşuyla aynı anda E tuşuna basılarak editör kapatılır.
Yükleme tamamlandığında, prosedürler ve veriler klavyeden yazılan isimleriyle referans için kullanılabilir ve prosedürleri artan sırada yürüterek programın doğruluğunu kontrol etmek mümkündür, yani. tanımları denenmemiş prosedürler içermeyenlerle başlayarak. Kontrol etmeye başlamadan önce, programınızın tanımsız adlar kullanmadığından emin olmak iyi bir fikirdir. İşlemci bunları UNDEF komutuyla ekranda görüntüler. Program metnine bu adların tanımlarını eklemek ve doğrulama işlemi sırasında tespit edilen diğer hataları düzeltmek için, editörü E komutuyla çağırın ve editör ara belleğinde bulunan program kaynak metninde uygun değişikliği yapın ve ardından işlemciyi ana moda geçirin ve arabelleğin içeriğini PF komutuyla yükleyin.
Programı kontrol edip test ettikten sonra, kaynak kodu editörün tampon belleğinden OE f komutu ile diske kopyalanabilir, burada f, programın diske yazılacağı dosyanın adıdır. İleride dosyanın içeriği LOAD f komutu ile işlemci girişine yüklenebilir ve ayrıca IE f komutu ile içerdiği metne ek olarak editörün tampon belleğine kopyalanabilir. Varsayılan olarak, dosyalar .DSP uzantısına sahiptir. Arabellek, KE komutuyla önceden temizlenebilir. LPE komutu ile arabelleğin içeriğini yazdırmak da mümkündür.
Yürütmeye hazır bir program yükledikten sonra, onun için oluşturulan $ alt dizinini temizlemek mümkündür.<имя>komut TEMİZLE $<имя>. Bu komutu yürüterek, işlemci sabitlenmemiş adları adlandırılmış alt sözlükten, yani. tanımlarından önce sabit ön ek:: (iki iki nokta üst üste) gelenler dışındaki tüm adlar. Bu durumda, yalnızca adların kendileri (sözlük girdileri) silinir, bunlarla ilişkili prosedürler ve veriler korunur ve derleme sırasında oluşturulan dahili referanslar aracılığıyla program yürütme sırasında kullanılabilir, ancak bunlara artık dışarıdan erişilemez. Dışarıdan erişim olasılığını geri yüklemek için, örneğin, bazı eklemeler veya değişiklikler derlemeniz gerekiyorsa, programın kaynak kodunu yeniden yüklemeniz gerekir.
SHUT $ komutu ile isimler sözlükten kaldırılmadan dışarıdan erişilemez hale getirilebilir.<имя>, içinde adı geçen alt sözlüğün tüm kelimelerine erişimi kapatır. Sözcüklerini kullanmak için bir alt sözlük açmak USE $ komutu ile yapılır.<имя>. Ayrıca bir SADECE $ komutu var<имя>adlandırılmış olan dışındaki tüm alt sözlükleri kapatan , ve bu kısıtlamayı iptal eden CANCEL komutu. Listelenen komutlar, derleme sırasında sözlüğün kullanımını kontrol etmenize ve programın kullanıcısı için mevcut olan ad kümesini gerekli minimum ile sınırlamanıza izin verir.
Sözlükte bir isim araması, kelimelere sözlüğe girildikleri sıranın tersinden bakılarak yapılır, yani. son girişten başlayarak. Bu nedenle sözlükte birden fazla tanımlanmış bir ad için en son tanım geçerlidir. Bu son tanımı içeren alt sözlük kapatılırsa, arama, verilen adla ilk kullanılabilir sözlük girişine kadar devam eder ve o giriş tarafından belirtilen tanım kullanılır.
Veri girişi ve çıkışı hakkında birkaç kelime. Daha önce de belirtildiği gibi, işlemci, yürütülen programın sözlükte bulunmayan kelimesini bir sayı olarak yorumlamaya çalışır ve başarılı olursa, bu sayının ikili eşdeğerini yığına iter. Yığın üzerine bir sayı itmek, klavyede giriş numarasının yazılmasını gerektiren TIN komutuyla yapılabilir. Ayrıca klavyeden girilen bir karakterin yığına itilmesine neden olan komutlar da vardır: TIB - ekranlı, TRB - bu karakteri ekranda göstermeden. Bu durumda, karakter kodu, üst düzey 3 bayt sıfıra eşit olan yığına gönderilen 32 bitlik bir kelimenin düşük baytı ile temsil edilir.
Yığının üst kısmının içeriğini sırasıyla sayı ve harf şeklinde girmek mümkündür. TON komutu, alt düğümün sayısal değerinin, yürütüldüğü sırada kurulan sayı temsil sisteminde, genişliği köşe tarafından belirtilen çıkış alanında ekranda görüntülenmesini sağlar. TOB komutu, kodu yığının üst kısmının alt baytında bulunan karakteri görüntüler. Her iki durumda da, çıktıyı yığından argümanlar kaldırılarak takip edilir.
DSSP işlemcisi, harici ve dahili (komut) kesintiler için bir aparata sahiptir ve bunların işlenmesi için aşağıdaki araçları sağlar. Harici bir kesmeyi işlemeyi amaçlayan prosedür, normal prosedürle aynı şekilde tanımlanır, ancak iki nokta üst üste işaretinden önce INT öneki eklenir. Böyle bir prosedürün adı, kesme vektörünün adresiyle şu komutla ilişkilendirilir:
<адрес вектора>BAĞLANTI<имя процедуры>
Bir komut kesme, bir yanıt prosedürünü çağırmak için adlandırılmış bir işlemdir. Bu işlemin adı, son tepkinin ON veya EON komutu kullanılarak başka bir yanıt prosedürü ile değiştirilmemesi durumunda gerçekleştirilen son tepki prosedürü olarak adlandırılan işlemi ona eşleyen TRAP komutu tarafından belirlenir. Her üç komut da aynı biçime sahiptir:
TUZAK<имя вызова> <процедура реагирования>
ÜZERİNDE<имя вызова> <процедура реагирования>
zaman<имя вызова> <процедура реагирования>
Bir EON talimatı tarafından bir çağrı adıyla eşlenen bir prosedür, EON talimatını içeren prosedürün gövdesinden çıktıktan sonra ve EON'un yürütüldüğü sırada yerinde olan işlenen yığın işaretçisinin değeri ile yürütülür.
PARA dil sözdizimi
PARADISE dil alfabesi Latince ve Rusça, küçük ve büyük harfler, ondalık rakamlar, matematiksel ve diğer özel karakterleri içerir. Alfabenin öğelerine (üyelerine) harf denir. Bir harfin dış temsili, basılı görüntüsüdür (basılı karakter). PRSP işlemcisi içinde, yazdırılan her karakter, değeri o karakterin ikili kodu olan bir bayt ile temsil edilir. Dış temsilin iç temsile dönüştürülmesi ve bunun tersi, giriş / çıkış cihazı (klavye, ekran, yazıcı) tarafından gerçekleştirilir. Rahatlık için Sayısal değer kodlar ondalık, onaltılık veya sekizli olarak ifade edilir ve karşılık gelen sayı ondalık, onaltılık veya sekizli karakter kodu olarak adlandırılır.
PARA dilinin tüm nesneleri karakterlerden oluşturulur ve sözcükler adı verilen sonlu uzunluktaki karakterlerden oluşan doğrusal zincirlerdir. Ardışık sözcüklerin sınırlayıcısı, yazdırılamayan bir karakterdir (boşluk). Bir boşluk dizisi, tek bir boşluğa eşdeğerdir. Ayrıca sözcük ayırıcının işlevi, giriş cihazlarının klavyelerinde simgesiyle gösterilen "Bir sonraki satırın başına git" komutuyla gerçekleştirilir.
Örnek kelimeler: CLEAR NOP STEK2 & 1+ -366 X Prob.
PRSP işlemcisi sözcükleri ilk yedi harfe göre ayırt eder ve bunları sözlüğündeki sözcüklerle çok terminalli karşılaştırma yoluyla tanır. Sözlük, temel işlemler veya ilkel olarak adlandırılan işlemcinin kendi işlemlerinin adları (tanımlamaları) olan ve kullanıcı tarafından tanımlanan nesnelerin (veri, prosedürler) adlarıyla doldurulabilen sözcükleri içerir. Böylece sözlükte yer alan kelimeler ya eylem adları (işlemler, prosedürler) ya da veri adlarıdır (sabitler, değişkenler, diziler).
Sözlükte tanınabilir bir sözcük olmadığında, işlemci onu aşağıdaki durumlardan birine atamaya çalışır:
sayısal değişmez, yani muhtemelen bir eksi işaretiyle başlayan bir rakam dizisi, örneğin: 0, 4096, -25;
değişmez değer: # karakteriyle başlayan ve işlemcinin hemen ardından gelen karakteri belirli bir kod olarak almasına neden olan bir kelime, örneğin: #A - büyük Latin harfi A'nın değişmez değeri, #5 - 5 sayısının değişmez değeri , # - boşluk değişmezi, ## - değişmez harfler #;
metin değişmezi: çift tırnak içine alınmış ve sözcük ayırıcılarla ayrılmış rastgele metin, örneğin: "Metin", "Giriş dosyası N3";
ekranda bir metin mesajı yayınlama komutu: solda nokta-çift tırnak karakter kombinasyonu ve sağda çift tırnak ile sınırlandırılmış ve sözcük ayırıcılarla ayrılmış çıktı mesajının metni, örneğin: "Yığın boş";
yorum: köşeli parantez içine alınmış ve sınırlayıcılarla ayrılmış rastgele metin, örneğin: .
Değişmez değerler ve ekrana bir mesaj gönderme komutu, sözlükten tanınan kelimelerle birlikte PRSP dilinin nesneleri olarak hareket ederken, yorumlar PRSP işlemcisi tarafından tamamen göz ardı edilir - bunlar bir makine için değil, bir kişi için tasarlanmıştır. Sözcük sözlükte yoksa ve listelenen yapılarla ilgili değilse, işlemci bir mesaj verir: "Bilmiyorum<неопознанное слово>".
#, "ve kombinasyon" harflerine verilen özel anlamı göz önünde bulundurarak. bir kelimenin başında, yani ayırıcıdan sonra, ayrıca ayırıcıdan önceki "harfi, sözlüğe dahil edilmek üzere tanımlanan kelimelerde belirtilen konumlarda kullanılmamalıdır.
İşlemcinin girişindeki sözcük dizisi, işlemci tarafından yürütülen bir talimat dizisi olarak yorumlanır. Üç tür kelime vardır:
1) bağımsız olarak gerçekleştirilir, yani. tek kelimelik komutları temsil eden (tek kelimeler);
2) müteakip bir veya daha fazla kelime ile birlikte gerçekleştirilir, yani. iki, üç veya çok kelimeli komutların ilk kelimeleri (önekleri);
3) özel bir yürütme modunun (önekler) bir açıklaması veya göstergesi olarak komuttan önce.
Tek sözcükler, değişmezleri, veri adlarını, yığındaki çoğu G/Ç, test ve veri dönüştürme işlemlerini ve kullanıcı tanımlı prosedürleri içerir. Örneğin: 1987 - sayısal değişmez, #5 - basamak 5'in değişmezi, "Şemaların listesi" - metin değişmezi, LENGTH - değişken adı, TOB, NEG, +, &,<, = - имена (обозначения) операций, SORT, CONVERT, ЧИСТКА, СНЯТЬ - имена процедур пользователя.
Ön ekler, verileri tanımlamaya ve prosedürleri tanımlamaya ve ayrıca adlandırılmış verileri işlemeye, prosedürlerin koşullu ve çoklu yürütülmesine ve sözlük yönetimine yönelik komutların doğasında vardır. Ön ekli komut örnekleri:
VAR SUM - SUM değişkeni yarat,
: ODD [x] 1 & ; - tek sayıyı 1, çift sayıyı 0 ile değiştiren bir ODD prosedürü oluşturun,
0 X - X değişkenine 0 değerini atayın,
BR+ P1 P2 - yığından alınan tepe değeri pozitifse, o zaman P1'i yürütün, aksi takdirde P2'yi yürütün,
RP KONTROLÜ - KONTROL prosedürünü tekrar tekrar uygulayın,
USE $REAL - kullanım için $REAL alt sözlüğünü açın.
Kural olarak, belirli bir önek, kendisinden sonra belirli sayıda kelime gerektirir. Bu nedenle, az önce verilen örneklerde VAR, !0 ve USE önekleri birer sözcük gerektirirken BR+ öneki iki sözcük gerektirir. Ancak: (iki nokta üst üste) öneki, üç kelimeyle başlayan, isteğe bağlı uzunlukta bir komut oluşturmanıza olanak tanır. Komutun sonu bir kelimedir; (noktalı virgül). Rastgele uzunluk aynı zamanda CNST A1 ... AJ sabitlerinin komut tanımlayıcısının özelliğidir; ve prosedür çoklu seçim komutu BR A1 P1 ... AJ PJ ELSE PN.
Ön ekler, bir komutun önüne eklendiğinde içeriğini değiştiren veya özel bir yürütme modu tanımlayan özel kelimelerdir. Örneğin, öneksiz VAR X komutu, 16 bitlik bir X değişkeni oluşturmak için bir talimattır. X adında bir değişken (bayt). LONG önekini kullanırsak, LONG VAR X alırız - X adında 32 bitlik bir değişken oluşturma talimatı.
Başka türden bir önek, yani:: (iki iki nokta üst üste), komut yürütmenin sonucunu, sözlükten gevşek sözcükleri kaldıran CLEAR prosedürüne göre kararlılığı söyler. Programın oluşturulması sırasında sözlüğe girilen isimler, program oluşturulduktan ve test edildikten sonra veri tanımlama ve prosedür tanımlama komutları ile, bitmiş programı korumak için gerekli birkaç istisna dışında, sözlükten kaldırılabilir. CLEAR $ komutu ile silme işlemi yapılır.<имя подсловаря>, programla ilişkili alt sözlüğü temizleme talimatı vererek, yalnızca tanımlarında :: önekini içeren kelimeleri kaydederek. Kaldırılamayan kelimeler oluşturan komutlara örnekler:
:: BYTE CNST LITCODE # #0 #A ;
:: : MOD / [hedef(a,b),dinlenme(a,b)] E2 D [dinlenme(a,b)] ;
:: ve BYTE öneklerini içeren ikinci örneğin gösterdiği gibi, bir komutta birden fazla önek olabilir.
Bu nedenle, DSSP'deki bir komut, bir sözcük (tek sözcük) veya bir önekle başlayan ve bu önek için ayarlanan sözcük sayısını içeren bir tümce (tümce) olabilir ve eğer önek, keyfi sayıda sözcüklere izin veriyorsa, o zaman sonunda bir sınırlayıcı sözcük vardır veya özel önek sözcükleri ile önek bir sözcük grubu olabilir.
DSSP'nin temel dili, komuttan daha karmaşık sözdizimsel yapılar içermez ve yukarıda tartışılanların dışında herhangi bir yapı içermez. Programlama dillerinde bir ifade ve işlev gibi vazgeçilmez şeyler bile temel dilde yoktur ve gerekirse yalnızca geliştirme sürecinde tanıtılabilir.
Bir temel dil programı, metinde göründükleri sırayla yürütülen bir komutlar topluluğudur. Ayrıca, yalnızca ilkelleri içerenler hariç olmak üzere, yürütülme sürecindeki her komut, içerdiği sözcükleri tanımlayan bir dizi komut içerir. İlgili komutlar, sırayla, ilgili zincirlere atıfta bulunan kelimeleri de içerebilen, komut zincirlerini ifade eden kelimeleri içerebilir, vb. komutların yalnızca ilkelleri içerdiği düzeye kadar.
Bu bölümün içeriğini oluşturan PARA dilinin genel tanımı, bu dilin yapısının ve bir dizi yerleşik komut (ilkel) olan komutlarının temel (başlangıç) kümesinin karakterizasyonuna ayrılmıştır. PRSP işlemcisinin Dilin daha da geliştirilmesi ve işlemcinin yeteneklerinde buna karşılık gelen bir artış, temel araçlar kullanılarak oluşturulan yeni prosedürler, komutlar, formatlar ve veri türleri tanıtılarak gerçekleştirilir. Kural olarak, bu tür geliştirme, doğası gereği soruna yöneliktir ve temel sisteme ek olarak işlemci girişine yüklenen prosedür paketleri şeklinde gerçekleştirilir.
Öte yandan, temel sistem, DSSP programlarının makine verimliliğini artırmak için temelinde uygulanan özel araçlarla desteklenebilir. Bu araçlar, bireysel prosedürleri doğrudan kullanılan makinenin komut kodunda tanımlama yeteneğini içerir. Bir prosedürün tanımlanma şekli, daha sonraki kullanımı üzerinde hiçbir etkiye sahip değildir: tüm prosedürlerin adları ortak bir sözlükte girilir ve tamamen eşittir. Bir dizi kitaplık programı, diğer dillerde yazılmış prosedürleri veya tüm programları kullanmanıza izin verir.
İşlemlerin ve komutların açıklaması
Yığın üzerinde gerçekleştirilen işlemler
İşlenen yığını, PRSP işlemci mimarisinin ana unsurlarından biridir. Çoğu işlemci talimatı yığını kullanır, ihtiyaç duydukları işlenenleri ondan tüketir ve sonuçları ona gönderir. Yığındaki verilerin yorumlanması, çözülmekte olan sorunun özüne bağlıdır, yani nihayetinde programcının sorumluluğundadır. Yığına giren değer aslında adını kaybettiğinden, programın metninden şu veya bu işlemin hangi işlenenlere uygulandığını, sonuçlarının ne olduğunu belirlemek zordur. Bu nedenle, PARA dilinde prosedürlerin işlenenlerini ve sonuçlarını açıkça belirtmek için yorumlar kullanılır. Bu durumda, yığının tüm içeriğini açıklamak gerekli değildir (ve her zaman mümkün değildir). Üzerinde gerçekleştirilen prosedürden etkilenen yığının üst kısmı hakkında yorum yapmak kesinlikle gereklidir, çünkü bu olmadan programın görünürlüğü kaybolur ve doğrulanması zordur.
Program tekdüzeliğini sağlamak için, bu yorumlar birkaç basit kural akılda tutularak yazılmalıdır. Herhangi bir yorum gibi, yığındaki verilerin açıklaması köşeli parantez içine alınır. Bu açıklama, programda belirli bir noktada yığında bulunan işlenenlerin bir listesidir. Listenin her öğesi, bir yığın konumunun içeriğini karakterize eder, ayırıcı olarak virgül kullanılır. Yığın konum değerleri, en derin elemandan başlayıp yığının en üstünde biten soldan sağa doğru listelenir. Tek bir işlenenin tanımı, bir sayı, bir ad, bir ifade veya yığındaki değerin anlamını açıklayan başka herhangi bir anlamlı gösterim olabilir. Bazen belirli bir yığın konumu için birkaç olası değer belirleyebilirsiniz. Bu durumda değerler eğik çizgi ile ayrılmış olarak listelenir.
Burada işlenen yığınının durumunu yansıtan bir yorum örneği verilmiştir:
[dr,N+1,1/0'ı başlat]
Programda bu yorumun bulunduğu noktada, işlenen yığını en az üç konum içermelidir ve üstte 1 veya 0, altta - N + 1'e eşit sayısal bir değer ve altında - bazı numarası başlangıç adresi olarak yorumlanır.
Yığının gerekli konumunu belirleme kolaylığı için, oluşum derinliği kavramını kullanacağız. Yığının üst kısmının 1 derinlikte, alt kısmının 2 derinlikte vb. olduğunu varsayacağız. Özellikle, örnekte "start.adr" olarak belirtilen değer. derinlikte bulunur 3.
Değerleri yığına itmek için talimatlarla temel PRSP dili çalışmamıza başlayacağız. Bu türün en basit (ve en yaygın olarak kullanılan) komutu, yığına itilecek bir sabitin açık bir göstergesi olan sayısal bir hazır bilgidir. Örneğin 28, -5 ve 11 sayılarını yığının üzerine itmek istiyoruz.Bunu yapmak için klavyeden satırı girin:
28 -5 11 ve tuşuna basın
Yığının tüm içeriğini ekranda görüntülemek için DSSP'nin bir komutu vardır .. (iki nokta). Çalıştırdıktan sonra ekranda şu satırı alıyoruz:
Gördüğünüz gibi, çıktının biçimi, yığının durumunu yorumlamak için kabul edilen kuralları takip eder (virgül yerine boşluk kullanılması dışında). .. komutu yığının içeriğini değiştirmez.
Makinenin belleğindeki bir yığın konumunu temsil etmek için 32 bitlik bir sözcük (4 bayt) kullanılır, sayılar ikinin tümleyeninde temsil edilir. Buna göre, PRSP işlemcisi sadece -2147483648 ile 2147483647 arasındaki tam sayıları doğru algılayabilir. Girilen sayı 32 bit olarak gösterilemezse (işaret dikkate alınarak), uymayan en önemli bitler atılır.
Ele alınan örneklerde, PRSP işlemcisinin sayıların ondalık giriş/çıkış modunda olduğu varsayılmıştır. Bu modu PARADISE dilinde ayarlamak için bir B10 komutu vardır.
Birçok görevde, işlenen verileri sayı olarak değil, ikili kodlar yani 32 bileşenli bit vektörleri olarak yorumlamak gerekir. DSSP'de ikili, sekizli veya onaltılık sayı sistemlerinde sunulan kodlarla çalışmak mümkündür. İstenen modu ayarlamak için, üç komuttan birini yürütmek yeterlidir: B2, B8 veya B16, bundan sonra işlemci girilen tüm kodları belirtilen sayı sisteminde kabul edecek ve yazdıracaktır.
Bu özellik, ondalık sayıları 2, 8 ve 16 tabanlarına dönüştürmek için kullanılabilir. Örneğin, 29 sayısını dönüştürmek için aşağıdaki satırı girin ve yürütün:
B10 29 B2 . B8. B16. Sonuç olarak, işlemci ekranda bir dizi sayı görüntüleyecektir: 00000000035 0000001D, bunlar belirtilen üç sayı sisteminde 29 ondalık sayısının temsilidir. Kodların makine gösteriminde, yani başında sıfırlar ve "+", "-" işaretleri olmadan yazdırıldığına dikkat edin. B10 -2 B8 satırını yürütürken . -2'nin tamamlayıcısının sekizli temsili olan 37777777776 sayısını döndürür.
Onaltılık kodlarla çalışırken, sayısal değişmez değerler ve PRSP işlemci komut adları arasında çakışmalar meydana gelebilir. Örneğin, onaltılık G/Ç modundaki B8 sözcüğü, sekizli modu ayarlamak için bir komut ve onaltılık bir sabit olarak yorumlanabilir. Belirsizliği önlemek için sayısal değişmezler, 0B8 gibi anlamlı olmayan bir sıfırla başlamalıdır.
DSSP işlemcisinin komut sisteminin temeli, yığında bulunan veri dönüştürme işlemleridir. Bu işlemleri yöneten genel kural, her işlemin ihtiyaç duyduğu işlenenleri yığından tüketmesi (kaldırması) ve sonuç değerlerini (varsa) yerine itmesidir.
Dört aritmetik işlemi uygulayan işlemci talimatlarını göz önünde bulundurun: tamsayılarda toplama, çıkarma, çarpma ve bölme. CENNET dilindeki imajları için şu kelimeler kullanılır: sırasıyla +, -, * ve /. Yığındaki iki sayının toplamını almak için, örneğin 123 ve 45, bu sayıları yığına itmeniz ve + komutunu çalıştırmanız gerekir. Bunu yapmak için klavyeden aşağıdaki satırı girmeniz yeterlidir (ondalık giriş/çıkış modunun ayarlandığını varsayarak):
123 45 +
Şimdi yığının içeriğini ekranda görüntülersek (.. komutunu kullanarak), eklemenin sonucu görünür hale gelecektir:
Çarpma işleminin değişmeli işlemi benzer şekilde çalışır.
Değişmeli olmayan çıkarma ve bölme işlemlerini gerçekleştirirken, yığının alt kısmı eksi (temettü) olarak alınır ve üst kısım, çıkan (bölen) olarak kullanılır. Örneğin, 151-68 arasındaki farkı hesaplamak için şu satırı çalıştırmanız gerekir:
151 68 -
PARA dilinde bir aritmetik işlem gerçekleştirme programı, işlemin kendisine karşılık gelen işlenenlerden sonra yer almasıyla karakterize edilir. Aritmetik ifadelerin bu tür notasyonuna postfix (veya Lehçe ters) notasyonu denir ve yığın hesaplayıcılarda yaygın olarak kullanılır. Örneğin ((127+81)*15-(31+117)*21)*3 aritmetik ifadesinin değerini hesaplayalım.
Postfix notasyonunda bu ifade şöyle görünecektir:
127 81 + 15 * 31 117 + 21 * - 3 *
Bu satır (kelimelerin birbirinden boşluklarla ayrıldığı) PRSP işlemcisi tarafından ifademizi hesaplamak için hazır bir programdır.
Bölme / komut, diğer aritmetik işlemlerden farklıdır, çünkü iki değerle sonuçlanır - bölüm ve kalan. Bölüm, yığının en altındadır ve kalan, en üsttedir. Bölünen ve bölenin işaretleri farklıysa bölüm negatiftir. Kalan her zaman temettü işaretine sahiptir. İşte bölme komutunu kullanmanın bazı örnekleri.
125 7 / [-17,-6] / / /
Hesaplamalar yapılırken hatalı durumlar ortaya çıkabilir: taşma ve sıfıra bölme. DSSP işlemcisi bunlara hiçbir şekilde tepki vermez (özellikle, sıfıra bölündüğünde, yığının içeriği değişmez) ve işlemlerin doğru kullanımı üzerindeki kontrol programcıya atanır.
Programlama yaparken, genellikle bir değerin değerini 1 ve 2 artırmak veya azaltmak gerekir. PARADISE diline, yığının tepesinde belirtilen eylemleri gerçekleştiren özel komutlar eklenmiştir. Şu kelimelerle belirtilirler: 1+, 1-, 2+, 2-. Bu komutları yürütmek, istenen sabiti (1 veya 2) yığına itmeye ve ardından gerekli aritmetik işlemi (+ veya -) gerçekleştirmeye eşdeğerdir. Örneğin, 2+, 2 + kelime çiftine eşdeğerdir. Bu komutların diline giriş, verimlilik hususlarından kaynaklanmaktadır.
Ayrıca, verimliliği artırmak için, DSSP işlemcisinin temel dili, belirtilen komuttan önce hangi değerin en üstte olduğuna bakılmaksızın, yığının en üstündeki değeri sırasıyla 0 ve 1 ile değiştiren T0 ve T1 komutlarına sahiptir. Örnekler:
NEG, ABS ve SGN komutları da sayısal verilerle çalışmak üzere tasarlanmıştır. NEG komutu yığının tepesinin işaretini tersine çevirir, ABS yığının tepesinin değerini mutlak değeriyle değiştirir, SGN - yığının tepesinden sayısal bir değer tüketir ve çıkarılan sayının işaretini yığının tepesine koyar. yer: -1 - sayı negatifse, 1 - pozitifse, 0 - sıfıra eşitse. Örneğin:
5 NEG [-5] ABS SGN
Temel dildeki MIN ve MAX komutları, minimum ve maksimum iki tam sayıyı bulmanızı sağlar. Bu talimatların işlenenleri, yığının üstünde ve altında iki sayıdır. MIN komutu yığında minimum parametre sayısını, MAX ise maksimum parametreyi bırakır. Örneğin:
5 0 15 DK [-5.0] MAKS
Yığındaki üç sayının minimumunu (maksimumunu) bulmak için MIN (MAX) komutunu iki kez uygulamak yeterlidir:
MIN MIN [-2]
Yığının en üstünde bulunan sayının a ile b arasındaki (sınırlar dahil) belirtilen aralıkta olup olmadığını kontrol etmeye yönelik SEG talimatı, sonuç olarak yığında aşağıdaki bayrağı bırakır: sayı aralıktaysa 1 ve 0 ya değilse:
SEG [işareti] örneğin:
Sayısal verilerle çalışma talimatlarına ek olarak, DSSP işlemcisi için talimat seti, 32 bit kodları dönüştürmek için tasarlanmış bir dizi işlemi içerir. Bu işlemler, yığın öğesini 32 bileşenli bir bit vektörü olarak ele alır; bileşenleri sağdan sola, en soldaki bit 31 ve en sağdaki sayı 0 olacak şekilde numaralandırılmıştır. Bileşenlerin azalan numaralandırması tekrar eder. birçok mikroişlemci için benimsenen makine sözcüğü bitlerinin numaralandırılması.
Bit-vektör talimatları öncelikle Boole cebri bitsel işlemlerini içerir:
INV yığınının tepesinin bit düzeyinde tersine çevrilmesi, tepenin her bitinin değerini değiştirerek, yani 0'ı 1 ile ve 1'i 0 ile değiştirmek;
yığının üstü ve altının bit düzeyinde birleşimi &, sonucun i-inci bitinin ayarlanması, i=31,30,...,0, her iki işlenenin i-inci bitleri 1 ise ve aksi takdirde i-inci bitin 0'a eşit ayarlanması;
yığının üst ve alt kısmının bit düzeyinde ayrılması &0, sonucun i-inci bitinin ayarlanması, i=31,30,...,0, her iki işlenenin i-inci bitleri 0 ise ve aksi takdirde i-inci bitin 1'e eşit ayarlanması;
bit düzeyinde ekleme (denkliksizlik) üst ve alt "+", her iki işlenenin i-inci biti aynı değerlere sahipse sonucun i-inci bitini 0'a ayarlamak ve i-inci bitini ayarlamak işlenenlerin i-inci bitlerinin değerleri farklıysa 1 ile sonuçlanır.
525 INV 722 & 136 &0 325 "+"
Bit düzeyinde bağlaç genellikle bir sözcüğün bitlerini sıfırlamak (temizlemek) için kullanılır. Bunu yapmak için, orijinal sözcük, temizlenmesi gereken bitlerde sıfırlar ve kalan bitlerde birler içeren bir maske ile birleştirilir. Örneğin, bir X sözcüğünde 3 ila 5 arasındaki bitleri sıfırlamanız gerekiyorsa, bunun bit düzeyinde bağlantısını 37777777707 maskesiyle gerçekleştirmeniz gerekir. X=235 için şunu elde ederiz:
Bit düzeyinde ayrılma, istenen bit kombinasyonunu önceden temizlenmiş bir kelime biti grubuna eklemek için kullanılabilir. Örneğin, son örneğin sonucu olarak yığında kalan word'ün 3 ila 5 bitlerine 010 ikili kombinasyonunu koymanız gerekiyor. Bu şu şekilde yapılabilir:
Bit işleme işlemleri ayrıca mantıksal kaydırma talimatlarını da içerir:
sola kaydırma SHL - 31'den başlayarak yığının tepesindeki her bit, sayıları azalan sırayla izleyenin değerini alır ve son sıfır biti 0 değerini alır;
sağa kaydırma SHR - 0'dan başlayarak yığının tepesindeki her bir bit, artan sayı sırasına göre bir sonrakinin değerini alır ve 31. bit 0 değerini alır;
top shift SHT - üst eleman yığından çıkarılır ve yığının tepesinde kaç kaydırmanın ve hangi yönde yapılması gerektiğini gösteren bir N tamsayı olarak kabul edilir: N>0 olduğunda, N olduğunda sola kaydırma yapılır<0 - вправо.
B8 125 SHR SHL -2 SHT
Sola kaydırma işlemleri, sayıları 2 ile N'nin kuvvetiyle çarpmak için kullanılabilir; burada N, kaydırma sayısını belirleyen doğal bir sayıdır. Örneğin, -5 sayısını 8 ile çarpmak, bu sayıyı 3 basamak sola kaydırarak yapılabilir:
B10 -5 3 SHT [-40]
Bu durumda taşma olasılığı dikkate alınmalıdır.
Sağa kaydırma, en anlamlı (işaret) bit sağa kaydırma sırasında sıfıra ayarlandığından, yalnızca pozitif sayılar için 2'nin N'nin gücüne tamsayı bölme işlemi olarak kullanılabilir. Örneğin:
Halbuki
Yığının tepesini 1 bit sağa döndürün ROR ve sol ROL, mantıksal kaydırma talimatlarına benzer, ancak dışarı itilen kenar biti kaybolmaz, 32'nin karşı ucundan boş alana itilir. -bit uzun kelime. Örneğin (onaltılık sayılar):
DSSP işlemci komutları SWB ve SWW ayrıca ikili kodların işlenmesi için tasarlanmıştır. SWB işlevi, yığının üst kısmının alt yarısının baytlarını değiştirmek ve SWW işlevi, yığının üst yarısının baytlarını değiştirmektir. Bu komutların onaltılık G/Ç modunu kullanarak nasıl çalıştığını gösterelim (bu modda, her bayt iki onaltılık basamakla temsil edilir):
B16 0ABCD SWB SWB
0ABCDEF12 SWW SWB
Yığın işleme komutları, PARA dilinde önemli bir rol oynar. Yığındaki verilerin değerlerini değiştirmezler, yalnızca konumlarını değiştirerek yığının derinliklerinde bulunan işlenenlere erişmeyi kolaylaştırırlar.
Yığın öğelerini kaldırmak için üç komut vardır: D, DD, DS (Bırak - at). D komutu, bir (üst) öğeyi yığından kaldırır, DD - iki öğe, örneğin:
D DD D DS, tüm öğeleri yığından kaldırır (yığını temizler):
Yığının tepesini kopyalama komutu C (Kopyala), üst öğesinin geçerli değerinin bir kopyasını yığına iter. Bu, yığının üst öğesini kopyalamaya eşdeğerdir: eski tepe noktası alt köşe olur ve kopyası yeni tepe noktası olur. Örnek:
Bu komutun uygulamasını, Horner şemasına göre p(x)=3*x**2+4*x-5 polinomunun hesaplanması örneğini kullanarak göstereceğiz: p(x)=(3*x+4)* x-5. x değerinin yığının en üstünde olduğunu varsayıyoruz.
[x] C3 * 4 + * 5 -
PARADISE dilinde yığının üstünü kopyalama komutunun yanı sıra 2, 3, 4 derinlikte bulunan öğeleri kopyalayan C2, C3, C4 komutları da vardır. Bunların işleyişi aşağıdaki örneklerle açıklanabilir:
C2 C4
Yığının en üstünde belirtilen derinlikte bir öğeyi kopyalamak için bir CT komutu da vardır. CT yürütülürken, işlemci üst öğeyi yığından kaldırır, değerini kopyalanan öğenin derinliğinin bir göstergesi olarak kullanır ve son öğenin bir kopyasını yığına iter. Bu nedenle, 5 derinlikte bulunan bir elemanın kopyalanması, işlemcinin 5 sayısını yığına iteceği ve ardından CT talimatını yürüteceği bir çift 5 CT talimatı ile belirlenir. CT'nin 1, 2, 3, 4 parametreleriyle yürütülmesi, sırasıyla C, C2, C3, C4 komutlarına eşdeğerdir.
Değişim komutları E2, E3, E4 (Değişim - değişim), yığının ilk (üst) elemanına sırasıyla 2., 3., 4., yani eleman 2, 3, 4 derinlikte bulunan eleman ile izin verir. Örneğin:
E3 E2
Daha büyük derinliklerde değiş tokuş yapmak için, CT gibi, ilk elemanla değiş tokuş edilen elemanın derinliğinin bir göstergesi olarak yığının tepesinin değerini kullanan ET komutu kullanılır. Örneğin:
5ET
2, 3, 4 parametreleriyle ET komutu, E2, E3, E4 komutlarına eşdeğerdir.
Kopyala ve değiş tokuş komutlarının kullanımını göstermek için bir eğitim problemi düşünün. Yığın üzerinde üç sayı vardır. Yığına çıkmak için gerekli: . Anlamı yorumlardan anlaşılan aşağıdaki programı önerebiliriz.
C3 C3 C3+
E4+E4
Bu örnek, işlenen yığınının durumunu yansıtan yorumların rolünün ne kadar büyük olduğunu gösterir.
Programlar çoğu zaman sayısal değerleri birbirleriyle karşılaştırmak ve karşılaştırma sonuçlarına bağlı olarak farklı işlemler yapmak zorundadır. RAYA dilinin karşılaştırma komutları vardır<, =, >. Sayılar üzerinden tanımlanırlar ve sonuç olarak 0 ve 1 sayısal değerlerini üretirler.Böylece komut< потребляет из стека два элемента и засылает в стек число 1, если значение нижнего элемента оказалось меньше значения верхнего, а в противном случае засылает 0. Например, в результате выполнения последовательности 5 -20 < в стек будет заслан 0. Команда = засылает 1 в случае равенства потребленных ею элементов. Команда >alt eleman üst elemandan büyük olduğunda 1 gönderir. Kesin olmayan karşılaştırmaları (küçük veya eşit, büyük veya eşittir) programlamak için, yığının tepesinin sıfıra eşit olmayan değerini sıfırla ve sıfıra eşit olan DEĞİL komutu kullanılır. bir. Örneğin, x'in yığının en üstünde bir sayı olduğu x>=5 mantıksal ifadesinin değerlendirmesi aşağıdaki gibi belirtilebilir:
[x]5< NOT
Programlama koşullarının olasılıklarının daha da genişletilmesi, & (mantıksal VE) ve ayırma &0'ın (mantıksal VEYA) mantıksal işlemlerinin karşılaştırma komutlarıyla birlikte kullanılmasıyla sağlanır. Örneğin, tepe noktasındaki x sayısı C 5 yarım parçasına aitse yığında 1 olması istensin.< NOT C2 10 <
& E2 2 = &0
Karşılaştırma sonuçlarına bağlı olarak program yönetim araçları daha sonra tartışılacaktır.
prosedürlerin tanımı
Temel bir programlama tekniği olarak PRSP, kullanıcıya prosedür adı verilen adlandırılmış işlem dizilerini tanımlama yeteneği sağlar. Verilen x değerleri için örneğin 3*x**2-4*x+9 kare üç terimli değerlerinin hesaplanması istensin. Bu durumda, üç terimli formülü uygulayan ve sonucu terminale çıkaran bir prosedür tanımlamalı ve ardından bu prosedürü belirli x değerlerine uygulamalısınız. İstenen prosedür, buna PX diyelim, şu şekilde tanımlanır: : PX [x] C 3 * 4 - * 9 + . D; İki nokta üst üste, bir ayırma boşluğundan sonra iki nokta üst üste gelen prosedür adı ile "prosedür tanımla" işlemi anlamına gelir. Tanımlayıcı komut dizisi (prosedür gövdesi), prosedür adını takip eder ve noktalı virgülle biter. Kısacası, prosedür şu şekilde tanımlanır:
: <имя процедуры> <тело процедуры> ;
PARADISE dilinde, işlemin başında ve sonunda işlenen yığınının durumu hakkında yorum yapmak gerekir. Prosedürün gövdesinde, anlaşılması zor yerlerde programcının takdirine bağlı olarak yorumlar yer almaktadır.
Yorumlar, insanın prosedürü anlamasına ve kullanmasına yardımcı olurken, işlemci parantez içindeki her şeyi görmezden gelir. Bu nedenle, terminalden tek bir prosedürün tanımı girilirken yorumlar atlanabilir.
Prosedür tanımı girildikten sonra ve tuşuna basılarak
*2PX
*3PX
*4PX
a2*x**2+a1*x+a0 biçimindeki bir trinomu hesaplamak için daha genel bir prosedür tanımlayalım; bu, hem x hem de a0, a1, a2 değerlerini ayarlamamıza izin verir. Buna PXA diyelim:
: PXA C E4 E3 * + * + ;
PXA kullanırken a0, a1, a2, x değerleri yığın üzerinde gerekli sırada olmalıdır. Örneğin: a0=1, a1=2, a2=-3, x=4
* 1 2 -3 4 PXA . D
Bir prosedür gövdesinde, işlemcinin temel işlemleri ile birlikte, kullanıcı tarafından tanımlanan prosedürler olabilir. Örneğin, PXA tarafından gerçekleştirilen hesaplamalara ek olarak, sonucun bir kopyasını terminale gönderecek ve sonucu yığından çıkaracak bir prosedür P tanımlayabilirsiniz.
:PXA. D;
Özellikle, bir prosedürün gövdesi, tanımlanan prosedürün adını içerebilir, yani prosedür özyinelemeli olabilir. Örneğin:
: ZAMAN [t] 1- ZAMAN ;
Bu prosedür yığının tepesinin değerini 1 azaltır ve tekrar kendisine atıfta bulunur, yani bir zaman sayacı olarak çalışır.
TIME sayacı prensipte duramaz: işlemci çalışırken birinin çıkarılması tekrar tekrar gerçekleştirilecektir. Ancak DSSP'de, elde edilen sonuçlara bağlı olarak sürecin seyrini kontrol etmenizi sağlayan araçlar vardır - programın seyrini yönetme işlemi.
Koşullu yürütme ve tekrarlama
Kaydında birbiri ardına yer aldığı sırayla yürütülen bir dizi komuttan oluşan bir programa doğrusal denir. Programı kolayca görünür (okunabilir) ve anlaşılır kılmak için, belirli bir anlamı olan adlandırılmış bölümlere ayrılır - prosedürler, her biri kendi prosedür dizisiyle tanımlanır, bunlar da daha küçük prosedür dizileriyle tanımlanır, vb. doğrudan PRSP komut dizileri tarafından tanımlanan prosedürlere. Prosedür tanımlarının hiyerarşisi olarak yazılan böyle bir programa yapılandırılmış denir. Çözülecek problemin giderek daha küçük alt görevlere kademeli olarak ayrıştırılmasından oluşan yapılandırılmış bir program oluşturma yöntemine yapılandırılmış programlama denir.
Bir prosedürü bir koşula göre yürütmek, bir prosedürü tekrarlamak ve tekrarlanan bir prosedürden çıkmak için işlemler varsa, yalnızca doğrusal değil, aynı zamanda yapılandırılmış programlama yöntemiyle herhangi bir programın oluşturulması mümkündür. DSSP'de bulunan bu tür komutlar seti, isteğe bağlı bir programın yapılandırılmış inşası olasılığını sağlar.
Prosedürün yürütülmesi veya yürütülmemesi için koşullar, sayının işaretine göre formüle edilir, daha kesin olarak, yığının tepesinin şu anda sahip olduğu değerin işaretine göre. Bir prosedürün koşullu yürütülmesi için ana komut - BRS (İşarette Şube - işarete göre dal), yığının tepesindeki mevcut değerin işaretine bağlı olarak, BRS'den sonra adlandırılan üç prosedürden birinin yürütülmesi talimatını verir. BRS yürütülürken, işlemci üst öğeyi yığından kaldırır, değerini test eder ve negatifse yukarıdaki prosedürlerden ilkini, sıfıra eşitse ikincisini ve pozitifse üçüncüsünü yürütür. yani takım
bir elemanın yığından çıkarılmasına neden olacak ve kaldırılan değer negatifse N prosedürünü, pozitifse P prosedürünü ve sıfıra eşitse Z prosedürünü yürütecektir.
BRS komutunu kullanmanın bir örneği aşağıdaki tanım SGN prosedürleri
: SGN [X] BRS -1 0 1 ;
Bu rutin, yığının üstündeki X değerini X ise -1 ile değiştirir.<0, числом 0, если X=0, и числом 1, если X>0. SGN prosedürü, PRSP'de temel bir işlemci işlemi olarak mevcuttur.
BRS komutu, üç veriden bir prosedür seçimi ile birlikte, IF-THEN ve IF-THEN-ELSE biçimindeki iki değerli operatörleri uygulama yeteneği sağlar. Örneğin, x>0 ise P1 değilse P0 ifadesi, BRS P0 P0 P1 komutuna ve eğer x ifadesi ise<>0 sonra P - komutu BRS P NOP P, burada NOP boş bir işlemin adıdır. Ancak DSSP'de iki değerli koşulların daha verimli bir uygulaması vardır - IF-, IF0, IF+, BR-, BR0, BR+ komutları.
IF grubu komutları, IF-THEN ifadesine karşılık gelir. Örneğin, IF-P komutu, üst öğeyi yığından çıkarma ve işaretini test etme talimatı verir ve bu öğenin eksi işareti varsa, o zaman P prosedürünü uygulayın. IF0 P ve IF+ P komutları, P prosedürünü yürütmeyi emreder. , sırasıyla, kaldırılan öğenin sıfır olması ve değerinin pozitif olması durumunda.
IF grubunun komutlarının kullanımını gösteren bir örnek olarak, yığının tepesinin modülünü hesaplayan ABS temel dil komutunun tanımını vereceğiz.
: ABS [X] C EĞER-NEG [|X|] ;
BR-, BR0 ve BR+ komutları, IF-THEN-ELSE deyimine karşılık gelir ve sizden sonra çağrılan iki prosedürden birini seçmenizi ister. Yığından kaldırılan elemanın işareti komut atamasındaki ile eşleşirse, ilk olarak adlandırılan prosedür uygulanır ve eşleşmezse ikinci prosedür yürütülür. Örneğin, BR0 P0 P1 komutu, yığından kaldırılan öğenin sıfır olması durumunda P0 prosedürünün yürütülmesini ve bu koşul sağlanmadığı takdirde P1 prosedürünün yürütülmesini bildirir.
Dikkate alınan komutlar, verilen koşullara bağlı olarak prosedürün yürütülmesini ekonomik olarak programlamanıza izin verir. x formunun en yaygın koşulları<0, x=0, x>0, doğrudan IF grup komutları tarafından uygulanır. Koşullar x<=0, x<>0, x>=0, ilk prosedür olarak boş NOP işlemi kullanılarak BR-, BR0, BR+ komutları kullanılarak programlanır. Örneğin, eğer x cümlesi<=0 then P соответствует команда BR+ NOP P. Примером использования команд группы BR может служить следующая реализация команды базового языка NOT, заменяющей нулевое значение вершины стека единицей, а ненулевое - нулем.
: DEĞİL [x] BR0 1 0 ;
Program dallandırma genellikle karşılaştırma komutlarından sonra yapılır (<, =, >) iki sayıyı karşılaştırmanın sonucuna bağlı olarak 1 veya 0 mantıksal bir değer üretir. Temel dil komutu MAX, örneğin aşağıdaki gibi programlanabilir:
: MAKS C2 C2< IF+ E2 D ;
Şube talimatları grubu ayrıca şu şekilde yazılan seçim talimatı BR'yi de içerir:
BR A1 P1 A2 P2 ... AK PK ... AN PN ELSE P0
Bu talimatı uygularken, işlemci önce A1 işaretçi prosedürünü yürütür ve yığına ittiği değeri, altındaki yığının bir önceki tepesinin değeri ile karşılaştırır. Değerler eşleşirse, üstteki iki öğe yığından çıkarılır ve A1 işaretçisiyle ilişkili P1 prosedürü yürütülür, ardından BR talimatını izleyen talimata geçiş yapılır (yani, yukarıdaki girişte, metinde P0 kelimesini takip eden program). Karşılaştırılan değerler eşleşmediyse, yığından bir üst eleman çıkarılır (yani, A1'in sonucu) ve aynı eylemler A2 P2 çifti ile gerçekleştirilir, ardından eşleşme işe yaramazsa, o zaman A3 P3 çifti ile vb. AN PN'ye kadar. Denemelerin hiçbirinin eşleşmediği durumda, ELSE kelimesinden sonra adlandırılan P0 prosedürü yürütülür. Genellikle sayısal sabitler, işaretçi prosedürleri olarak işlev görür, örneğin:
[x] C BR 5 NEG -3 ABS 0 ELSE DEĞİL T0 [y]
Bu satırın yürütülmesi sonucunda x=5 ise yığının en üstünde y=-5 değeri elde edilecektir; x=-3 ise y=3; x=0 ise y=1 ve aksi takdirde y=0.
Genel olarak konuşursak, bir işaretçi prosedürü yalnızca sayısal bir sabit değil, aynı zamanda bir değişken veya yığından hiçbir şey çıkarmaması ve yığına tek bir değer itmesi gibi basit gereksinimi karşılayan başka herhangi bir prosedür olabilir.
Koşullu prosedür yürütme işlemlerinin nasıl kullanıldığına dair bir örnek olarak, önceki bölümdeki TIME prosedürünü, verilen bir koşul verildiğinde sayacın durması için değiştirelim:
: ZAMAN [t] 1- C IF+ ZAMAN ;
Şimdi bu TIME rutini yalnızca yığının üstü pozitif olduğunda kendini çağırır. TIME'ın ilk uygulamasının başlangıcında, tepe noktası pozitif bir N sayısı içeriyorsa, sayaç tam olarak N kez çalışacaktır. Örneğin, 7 sayı almak için belirtmeniz gerekir.
7 kere<ВК>
TIME tanımındaki IF+, herhangi bir koşullu işlem gibi, test edilen öğeyi yığından çıkardığından ve bu öğe sonraki işlemler için gerekli olduğundan, C (Kopyalama) işlemi IF+'dan önce yerleştirilerek çoğaltılması gerekir.
Özyineleme, bir prosedürü tekrar tekrar yürütmenin birincil yolu değildir. PARADISE dilinde programlama döngüleri için RP (Tekrar - tekrar) ve DO (Yap - yap, gerçekleştir) komutları vardır.
RP W komutu, W prosedürünü sınırsız sayıda tekrar tekrar yürütme talimatı verir. Tekrarların durması için, W prosedürünün gövdesi, belirli bir koşulda yürütülen bir EX (Çıkış - çıkış) işlemini içermelidir. EX işlemi, bu EX işlemini içeren tekrarlanan prosedürden sonra program metnini takip eden prosedürün yürütülmesine atlar. Böylece, yukarıda özyinelemeli bir TIME prosedürü olarak uygulanan sayaç, aşağıdaki gibi tanımlanan W prosedürünün bir tekrarı olarak programlanabilir:
: W [t] 1-C IF0 EX ;
Sayacın 25 kez çalışması için satırı çalıştırmanız gerekir.
Koşullu yürütme komutlarında kullanılan EX işleminin yanı sıra, IF-EX, IF0 EX, IF+ EX komutlarıyla aynı etkiye sahip olan, yani üst öğeyi tüketen EX-, EX0, EX+ koşullu çıkış işlemleri vardır. işaretini test eder ve işaret, işlem tanımında belirtilenle eşleşirse çıkar. EX, EX-, EX0, EX+ işlemleri, mutlaka en çok tekrarlanan prosedürün gövdesinde (bizim durumumuzda, W) değil, aynı zamanda atıfta bulunduğu prosedürlerde de kullanılabilir.
Örnek olarak, Öklid yöntemini kullanarak iki doğal sayının en büyük ortak bölenini bulma problemini ele alalım. Yöntemin özü, sayılar birbirine eşit olana kadar daha büyük bir sayıdan daha küçük bir sayının çıkarılması gerektiğidir. Eşitliğe ulaşıldığında ve en büyük ortak bölen bulunur.
Programlama, yukarıdan aşağıya geliştirme yöntemi kullanılarak gerçekleştirilecektir. İlk olarak, algoritmanın genel şemasını düzelten GCD prosedürünü tanımlıyoruz. Bu prosedürün parametreleri, en büyük ortak bölenin bulunduğu yığın üzerinde iki sayı M ve N'dir. GCD prosedürünün gövdesinde, yığındaki değerleri dönüştürmek için döngüsel bir süreç belirtilmelidir. Bu işlemin bir sonucu olarak, yığında iki eşit sayı kalmalıdır - bunlardan herhangi biri en büyük ortak bölen olarak alınabilir. Bu hususlar akılda tutularak, GCD prosedürü aşağıdaki gibi tanımlanabilir.
: gcd RP ADIM [başını salla(M,N),başını(M,N)] D [başını(M,N)] ;
Şimdi yinelemeli sürecin bir adımını programlamak gerekiyor, yani. STEP prosedürünü tanımlayın. Parametreleri yığındaki iki sayıdır. Bu sayıları karşılaştırmanız ve eşitlerse döngüden çıkmanız gerekir, aksi takdirde küçük olanı büyükten çıkarmanız gerekir. Bu, örneğin şöyle yapılabilir:
: ADIM C2 C2 - BRS NOP EX E2 C2 - ;
Artık programda tanımsız prosedür kalmadı ve test etmeye başlayabilirsiniz. Kontrol aşağıdan yukarıya doğru yapılmalıdır, yani önce STEP prosedürünün doğru çalıştığından emin olmanız gerekir ve ancak o zaman - GCD.
DO temel dil işlemi, kendisinden sonra adlandırılan prosedürün N kez tekrarlanmasına neden olur; burada N, DO yürütüldüğünde yığının tepesinde bulunan sayıdır. Örneğin, P prosedürünün 8 kez yürütülmesi için belirtmeniz gerekir.
8 DOP
P prosedürünün gövdesinde en az bir çıkış işlemi varsa ve belirtilen tekrar sayısı gerçekleşmeden önce yerine getirilmesi için koşul sağlanırsa, durumda olduğu gibi işlemden çıkılarak tekrarlar sonlandırılır. Operasyonun RP'si. Örneğin, DO, tanımı IF0 EX içeren yukarıdaki W prosedürünü tekrarlarsa, [T] 30 DO W yazılması, T>=30 ise W'nin 30 tekrarına neden olur. 0 ise DO işlemi yürütüldüğünde, yığının tepesi sıfır veya negatif bir değere sahipse, DO'yu izleyen prosedür bir kez bile yürütülmeyecektir. DO işleminin kullanımını göstermek için, yığının tepesinde belirtilen 32 bitlik x sözcüğündeki sıfır olmayan bitlerin sayısını sayan NUM prosedürünü tanımlarız. Birim sayısı sayacı yığının en üstüne yerleştirilecektir. Birimlerin sayılması, x kelimesinin bir bitini inceleyeceğimiz NUMI prosedürünü 32 kez tekrar etmekten oluşacaktır. Döngüden çıktıktan sonra istenen sayı yığının en üstünde olmalıdır. : NUM [x] 0 E2 32 DO NUMI D [N] ; Sıfır olmayan bitleri saymak için, kelimenin en yüksek (31.) bitindeki birimin negatif bir sayının işareti olduğu gerçeğini kullanırız. İncelenen kelime olumsuz ise, o zaman N'ye bir eklenmelidir. NUMI prosedürünün sonunda, çalışılan kelimeyi bir bit sola kaydırmanız gerekir. : NUMI C IF- N+ SHL ; N+ prosedürünün uygulanması oldukça basittir: tepeyi değiştirmeden yığının en üstüne bir tane eklemeniz gerekir. : N+ E2 1+ E2 ; Tekrarlanabilir prosedürler, gövdelerinde RP ve DO işlemleri içerebilir, bu da iç içe döngülere yol açar ve herhangi bir iç içe yerleştirme derinliğine izin verilir. Bu durumda, yığının tepesindeki yuvalama derinliğini gösteren, yuvalanmış döngüden çıkmak için bir EXT işlemi vardır. Örneğin, iki iç içe döngüden çıkış şu şekilde belirtilebilir: Program değiştirilirken, döngülerin yuvalama derinliği değişebileceğinden ve EXT'den önceki karşılık gelen sabitin değiştirilmesi gerekeceğinden, EXT komutunun kullanımının ekstra özen gerektirdiği akılda tutulmalıdır. İşlenen yığını, PRSP'deki verileri işlemek için ana mekanizmadır, ancak tek mekanizma değildir. Prosedür tanımlarıyla birlikte, daha sonra adlarıyla kullanım için mevcut olan öğeleri ve standart olarak organize edilmiş veri öğeleri (yapılar olarak adlandırılan) koleksiyonlarını bildirmek de mümkündür. İşlemci, veri bildirimlerini uygulayarak, depolamaları için gerekli belleği ayırır ve bu belleğe erişmek için gerekli mekanizmaları sağlar. Temel PRSP dili, değişkenleri ve dizileri bildirmek için aşağıda tartışılan bir dizi yönerge sözcüğü içerir. Sistemin dilini genişletmek için, bu türden başka kelimeler ve buna bağlı olarak diğer unsurlar ve veri yapıları sisteme dahil edilebilir. VAR kelimesi 16 bitlik bir sayısal değişken bildirir. Örneğin, giriş bir X değişkeni bildirir, yani işlemciye X adının bir değişkenin adı olduğunu söyler. İşlemci bu adla, bu değişkenin değerini depolayacak 16 bitlik bir bellek konumu ilişkilendirir. İşlenen yığınının en üstünde yer alan X değişkenine değer atama talimatı şu şekildedir: Bu talimatı yürüterek, işlemci en üstteki elemanı yığından kaldırır ve değerini X değişkeni için ayrılan hücreye yazar. Sadece bir değişkenin adından oluşan, önünde ! harfi olmayan bir komut, bu değişkenin değerinin yığına itilmesine neden olur ve yükleme, ilgili bellek hücresinin içeriği, yani değer kopyalanarak gerçekleştirilir. değişkenin değeri değişmeden kalır. Bu nedenle, programda X değişkeninin adının herhangi bir şekilde geçmesi, hemen önünde farklı bir eylem öngören bir sözcük yoksa, bu değişkenin geçerli değerini, tıpkı doğrudan verilen sayılar (sayısal değişmezler) gibi yığına itecektir. itilirler. Örnek olarak, iki çalışma değişkeninin kullanıldığı yukarıda tartışılan GCD prosedürünün başka bir versiyonunu veriyoruz. : HAYIR! X! Y RP ADIM X [GCD] ; : ADIM XY = EX+ XY BR+ X-Y Y-X; : X-Y XY - ! X; : Y-X YX - ! Y; Gördüğünüz gibi, program biraz daha uzadı, ancak netliği arttı. VCTR sözcüğü, 16 bitlik hücrelerden oluşan tek boyutlu bir dizi (vektör) bildirir ve bu dizinin en yüksek öğesinin sayısı tepe noktasının değeriyle verilir. Örneğin, yazmanın bir sonucu olarak 9 VCTR ROW, işlemci bir ROW(0:9) vektörü oluşturan 10 ardışık olarak adreslenebilir 16-bit bellek word'ü rezerve eder. İlk olarak 9 sayısı yığının üzerine itilir ve ardından oluşturulacak SATIR vektörünün uzunluğunu belirlemek için yığının üst öğesi kullanılarak VCTR prosedürü yürütülür. ROW vektörünün j-th öğesinin değerini yığına iterek, 0<=j<=9, задается командой [j]SATIR Yığındaki öğe numarasını parametre olarak kullanarak, ROW vektör adı, bu sayının karşılık gelen öğenin değeriyle değiştirilmesine neden olur. Bir kelime varsa, SATIR vektörünün adından hemen önce, o zaman alt düğümün değeri bu vektörün tepe noktası tarafından belirtilen öğeye atanır ve yığın derinliği 2 azaltılır. SATIR vektörünün 5. elemanı aşağıdaki gibidir: Sabit vektörleri birleştirme olasılığı da vardır, yani. değerleri bildirildiğinde tanımlanan ve gelecekte değişmeyen 16 bitlik sayıların vektörleri. Böylece, L+1 uzunluğundaki 16 bitlik VC sabitlerinden oluşan bir vektör, CNST kelimesi şu şekilde kullanılarak bildirilir: CNST VC k0 k1 ... kL ; burada k0, k1, ... kL yığına bir değer iten komutlardır. Çoğu zaman, bunlar yalnızca sayısal değişmez değerlerdir, ancak değişkenlerin adları, prosedürlerin yanı sıra, örneğin aşağıda tartışılan "X" değişkeninin adresini gönderme komutu gibi kelime çiftlerinden oluşan komutlar da olabilir. Sabit bir vektörün öğelerine erişim, normal vektörlerin bileşenleriyle aynı şekilde yapılır, örneğin: Çok boyutlu bir 16 bitlik kelime dizisi, ARR kelimesi ile bildirilir, öncesinde her bir boyut için maksimum indeks değerleri ve boyut sayısı gelir. Örneğin, üç boyutlu TIR(0:8,0:2,0:24) dizisi şu şekilde bildirilir: ARR'den hemen önceki 3 sayısı, bildirilen dizinin boyutunu gösterir. Bir dizinin bir elemanını yığına itmek, o elemanın indeksini ve ardından dizinin adını vererek elde edilir. Örneğin, TIR(0,2,2) öğesini yığının üzerine itme komutu şu şekilde ifade edilir: Buna göre yığının tepesindeki mevcut değerin bu elemana atanması komutu ile verilmektedir. Dikkate alınan tüm örnekler, 16 bitlik kelimelerden yapıların oluşturulmasını göstermektedir. Bununla birlikte, dil ayrıca 32 bitlik kelimelerin ve 8 bitlik baytların yapılarının tanımlanmasına izin verir. Bunu yapmak için, yapıyı tanımlayan kelimenin önüne sırasıyla LONG veya BYTE gelir. Örneğin, 5 BYTE VCTR X - 6 bileşenli bayt vektörünün tanımı X; BYTE CNST Y 65 66 67 ; - 3 bileşenli bayt vektör sabiti Y'nin tanımı; 10 20 2 LONG ARR MTRX - uzun kelimelerin matrisinin tanımı MTRX(0:10,0:20). Kelime ve bayt yapılarının elemanlarının okunması, 16 bitlik kelime yapılarında olduğu gibi tamamen aynı şekilde yapılır. Eleman uzunluğu 32 bitten azsa, çıkarılan değer yığının üst kısmındaki düşük kelimeye veya bayta yerleştirilir ve üst kısmın yüksek kısmı sıfıra ayarlanır. Yığındaki 32 bit uzun kelimenin düşük kelimesi veya baytı da bir kelime veya bayt yapısının bir elemanına atanan değer olarak alınır. Varsayılan olarak verileri tanımlarken 16 bitlik kelime formatı kullanılsa da, WORD gösterimine de sahiptir. Programın DSSP'nin de uygulandığı ve varsayılanın farklı olabileceği diğer makinelere aktarılması gerektiğinde bu önek kullanılması tavsiye edilir. Bayt veri yapıları çoğunlukla metinsel bilgileri depolamak ve işlemek için kullanılır. Bunun nedeni, bilgisayarın belleğinde bir karakteri kodlamak için bir bayt ayrılmasıdır. PARADISE dilinde karakter kodlarını ayarlamak için bir #l yapısı vardır, burada l bilgisayar klavyesinde bulunan herhangi bir karakterdir. DSSP işlemcisi, bu yapıyı l harfini yığına itmek için bir komut olarak algılar. Örneğin: Bu yapı, belirtilen karakterin koduna eşit sayısal bir hazır bilgi ile aynı eylemleri gerçekleştirir, ancak kullanımı daha çok tercih edilir, çünkü ilk olarak sizi kodları hatırlama ihtiyacından kurtarır ve ikincisi, programları daha anlaşılır hale getirir. Özellikle, Y sabit vektörünün aşağıdaki tanımı verilebilir: BYTE CNST Y #A #B #C ; Bir programda sayısal bir sabit için sembolik gösterimi kullanmak genellikle uygundur. Bu olasılığı sağlamak için, tanımlayıcı bir VALUE kelimesi vardır: Bu komut, yığından en üstteki öğeyi çıkarır ve DEĞER'den hemen sonra gelen adla sözcüğü oluşturur. Bu kelimenin kullanımı, sayısal bir sabitin kullanımına eşdeğerdir. Örneğin: Dikkate alınan araçlar, bilgisayarın adres sisteminden bağımsız olarak verileri adlandırma ve verileri değiştirme olanağı sağlar. Ancak temel dil, bellek öğelerinin adreslerini değiştirmenize izin veren araçları da içerir. Bir değişkenin veya dizi öğesinin adresi X, komutla yığına gönderilir. Bir dizi öğesi durumunda, bu komuttan önce dizin(ler)in değeri gelir. Temel dil komutu @, yığının en üstündeki uzun bir bellek sözcüğünün adresini uzun sözcüğün içerdiği değerle değiştirir. Örneğin, Y değişkeninin değeri, aşağıdaki satır yürütülerek yığına aktarılabilir: @B komutu, yığının tepesindeki yüksek baytların sıfır olduğunu varsayarak adresi karşılık gelen baytın değeriyle değiştirir ve @L komutu, adresi 32 bitlik bir sözcükle değiştirir. Değerleri belleğe yazmak için talimatlar da vardır. !T komutu, yığının tepesinden açılan adrese 16 bitlik alt üst değeri yazar. !TB komutu, alt düğümün düşük baytının düğüm tarafından adreslenen bayta benzer bir şekilde yazılmasına neden olur ve !TL, alt düğümün 32 bitlik word'ünü düğümün hitap ettiği word'e yazar. Örneğin, aşağıdaki komutlarla bayt vektörü BV(0:5)'in beşinci öğesine 15 değerini atayabilirsiniz: 15 5" B.V.!TB Fiziksel adreslerde bellekle çalışma ihtiyacı, genellikle belirli bir bilgisayarın mimarisine bağlı programlar oluştururken, örneğin giriş / çıkış sürücüleri oluştururken ortaya çıkar. Programların daha verimli ve kompakt olmasını sağlamak için, PARA diline aşağıdaki işlemler eklenmiştir: 0 <имя переменной>- değişkeni sıfırlayın; 1 <имя переменной>- bir değişkene bir birim atamak; 1- <имя переменной>- değişkenin değerini bir azaltın; 1+ <имя переменной>- değişkenin değerini bir artırın; !- <имя переменной>- yığının tepesinin değerini değişkenden çıkarın; !+ <имя переменной>- yığının en üstündeki değeri değişkene ekleyin. Bu işlemlerin her biri değişkenleri oku ve yaz komutları kullanılarak kolayca programlanabilir. Örneğin, 0 X, 0'a eşittir! x 1+ X, X 1+ ile eşdeğerdir! x X, X'e eşdeğerdir E2 - ! x Bu işlemlerin kullanılması programların verimliliğini ve görünürlüğünü artırır. Pratikte, bir dizinin tüm elemanlarına genellikle tek bir değer atamak gerekir. PARADISE dilinde bunun için bir işlem var!!!<имя массива>. Eylemi, belirtilen dizinin tüm bileşenlerine yığının en üstündeki değeri atamaktır. Operasyon!!! herhangi bir biçimdeki öğelere sahip dizilere uygulanabilir. Kullanım örneği: "boşluk" karakter kodu, BUF bayt dizisinin tüm bileşenlerine yazılır. Bir programdaki bir ismin arkasındaki veri yapısı hakkında bilgi edinmek genellikle gereklidir. Bir çift komut SIZE? - veri öğesi biçimini verin: 1, 2 veya 4 bayt ve DIM? - yapıdaki veri öğelerinin sayısını döndürür. Örneğin, veriler bildirilirse 3 4 2 UZUN DÖNGÜ Z daha sonra bunlarla ilgili olarak, bu komutlar aşağıdaki sonucu verecektir (ondalık sayılar): BOYUT? X BOYUTU? Y BOYUTU? Z KİM? X DIM? Y DİM? Z DSSP işlemcisinin komut seti, ek olarak, bilgisayar bellek hücrelerinin ayrı bitlerini okumanıza ve yazmanıza izin veren dört talimat içerir. Bunlar @BI, !BI, !BI0, !BI1 komutlarıdır. Her biri için parametreler, yığındaki bellek kelimesinin adresi ve bu kelimedeki bitlerin sayısıdır (bitlerin sıfırdan başlayarak sağdan sola doğru numaralandırıldığını hatırlayın). !BI komutu aynı zamanda yığındaki varlığı ve yazılacak bitin değerini de varsayar. @BI komutu, belirtilen parametreleri seçilen bitin (0 veya 1) değeriyle değiştirir, !BI0 ve!BI1 komutları, parametrelerini yığından kaldırarak sırasıyla 0 ve 1 değerini seçilen bite atar ve !BI komutu, seçilen biti yığının üçüncü öğesinin en az anlamlı bitine ayarlar ve üç parametresinin hepsini yığından kaldırır. Örneğin, X değişkeninin değeri 101101 ikili sayı ise, listelenen işlemlerin sonuçları aşağıdaki gibi olacaktır: " X [adr. X] 3 @BI - X'in üçüncü biti, 0 " X 3 !BI - X 100101'dir, " X [addr.X] 0 !BI0 - X, 100100'dür, " X [addr.X] 1 !BI1 - X, 100110'dur. PARADISE dili ayrıca bellekte bulunan bayt dizileriyle çalışmak için olanaklara sahiptir. Bir bayt dizisi belirtmek için yığına iki parametre gönderilir: dizinin başlangıç adresi (yani ilk baytının adresi) ve dizinin uzunluğu (içindeki bayt sayısı). !!!MB komutu, bir dizgenin tüm baytlarını bir (yığın üzerinde verilen) bir değere atamak için kullanılır. Yığından üç parametre tüketir: burada b atanacak değerdir, a ve l sırasıyla başlangıç adresi ve bayt dizesinin uzunluğudur. Örneğin, 3. bayttan 10. bayt dizisine kadar olan TXT(0:20) öğelerini sıfırlamanız gereksin. Bunu yapmak için aşağıdaki satırı çalıştırabilirsiniz: 0 3" TXT 8 !!!MB sonuç olarak, belirtilen dizinin 3.'den başlayarak ardışık sekiz elemanı 0 değerini alacaktır. Benzer bir komut!!!MW, 16 bitlik sözcüklerin sırasını aynı değerle (kelime sayısı) doldurmak için tasarlanmıştır. yığının en üstünde belirtilir) ve komut! !!M - bir dizi uzun kelimeyi doldurmak için. !SB komutu bayt dizileri gönderir. Parametreleri şunlardır: a1 ve l, iletilen dizenin başlangıç adresi ve uzunluğu olduğunda, a2, iletmenin gerçekleştirildiği dizenin başlangıç adresidir. !SB komutunun yürütülmesinin bir sonucu olarak, aktarım gerçekleştirilmeden önce a1 adresinde bulunan dizenin tam bir kopyası olan a2 adresinden belleğe l uzunluğunda bir bayt dizesi yerleştirilecektir. Kaynak dize ve hedef dize çakışabilir. Örneğin, M(0:10) bayt dizisinin öğelerini aşağıdaki gibi taşımak istediğinizi varsayalım: M(10):=M(9), M(9):=M(8), ..., M(1):= M(0). Bunu yapmak için şu komutu kullanabilirsiniz!SB: 0" M 10 C2 1+ !SB sonuç olarak, 10 baytlık bir dizi, artan bellek adresleri yönünde bir bayt taşınacaktır. !SB komutu, karakter dizileriyle çalışmak için uygundur (her karakterin bir bayt ile kodlandığını hatırlayın). Örneğin, bir bayt dizisine açıkça verilen bir hazır bilgi dizisinin değerini atamaya izin verir. Böyle bir dize belirtmek için bir metin değişmezi kullanılır, yani. "TEXT LITERAL" gibi alıntılanan bir karakter dizisi. Bu yapı, bir programda karşılaştığında, alıntılanan metni içeren bir bayt dizesinin başlangıç adresinin ve uzunluğunun yığına itilmesine neden olur. Bu seçenekler daha sonra !SB komutuyla kullanılabilir. Örneğin, "TABLE" 0 " TN !SB parçası, "TABLE" değişmezinin TN dizisine aktarılmasına neden olacaktır. SRCHB komutu, bir dizgede verilen bir baytı arar. Parametreler: burada b, ilk oluşumu bulunacak olan bayttır, a ve n, sırasıyla, aranacak dizenin başlangıcının adresini ve uzunluğunu ayarlar. n>0 ise arama a adresinden a + n-1 adresine (artan adresler yönünde) yapılır, n ise<0, то поиск ведется с адреса a до адреса a+n+1 (в сторону убывания адресов). В результате выполнения этой команды в стеке оказывается значение d, равное смещению относительно адреса a до первого вхождения байта b. Если такое вхождение не обнаружено, то d=n. Примеры: #T "METİN" SRCHB #A "METİN" SRCHB #E "METİN" [#E,a,4] 1- + -4 [#E,a+3,-4] SRCHB [-2] Verilerle çalışma araçlarının incelemesini bitirerek, bir bilgisayarın harici belleğinde veri depolama ile ilgili konuya, yani. manyetik disklerde. PARADISE dilinin bir KAYDET komutu vardır.<имя файла>Kullanıcı tanımlı nesnelerle birlikte sistemin ana belleğinin bir kopyasının diskte saklanması talimatını verir. Bu durumda VAR, VCTR, ARR işlemleri tarafından veriler için ayrılan bellek alanları diskte görüntülenmez. Sonuç olarak, kaydedilen sistem diskten yüklendiğinde, belirtilen verilerin değerleri tanımlanmaz (programın yürütülmesi sırasında belirlenmeleri gerekir). Çoğu durumda, bu haklıdır, çünkü çalışma değişkenlerini, arabellekleri vb. depolamak için disk alanı harcamaya gerek yoktur. Ancak, sistem diskten önyüklendikten hemen sonra değerlerinin belirlenmesi gereken veriler vardır. Bir örnek, bazı harici aygıtlarla veri alışverişinin hızını depolayan bir değişkendir. Başka bir döviz kuruna geçiş yapılırken programda herhangi bir düzeltme yapmadan bu değişkenin değerini değiştirmek yeterlidir. KAYDET komutunda belirli bir veri yapısındaki elemanların değerlerinin diske yazılması gerektiğinin işlemciye göstergesi, yapı tanımından önce yerleştirilen FIX önekidir, örneğin FIX VAR HIZI 20 FIX BYTE VCTR TABLOSU Bu şekilde tanımlanan veri yapılarıyla çalışmak, olağan şekilde tanımlanan yapılarla çalışmaktan farklı değildir. PARADISE dilinde, PRSP işlemcisini veya daha doğrusu PRSP işlemcisinin öykünücüsünü kontrol etmek için tasarlanmış küçük bir komut grubu vardır. RESTART komutu, işlemcinin yeniden başlatılmasına neden olur. Bu durumda yığın temizlenir, bir mesaj görüntülenir. DSSP sürümü XX.XX.XX ücretsiz XXXXXW ve işlemci komut girişi bekleme moduna girer. Bu komut, programlarda hata ayıklarken kullanışlıdır. Ayrıca şu hata durumlarında da yürütülür: dizin, dizinin sınırlarının dışında, boş belleğin tükenmesi, vb. \G komutu, tanımsız bir kelimede durduktan sonra programın yürütülmesine devam etmek için kullanılır. Prosedürün yürütülmesi sırasında işlemci tanımsız bir kelimeye bir referansla karşılaşırsa, bir mesaj verir: dur bilmiyorum<слово> . burada nokta, işlemcinin tanımsız bir kelime üzerinde durma durumunda olduğunu gösteren PRSP işlemci istemidir. Bu modda, yıldız istendiğinde normal modda olduğu gibi herhangi bir işlemci komutunu çalıştırabilirsiniz. Bu kipten çıkmanın iki yolu vardır - ya \G komutunu yürüterek (daha sonra işlemci kesintiye uğrayan prosedürü yürütmeye devam edecek, tanımsız sözcüğü atlayarak) ya da RESTART komutu ile. EXEC komutu, işlemciye adresi yığının en üstünde olan prosedürü yürütmesi talimatını verir. Bir prosedürün adresini almak için "" (iki kesme işareti) komutunu ve ardından prosedürün adını kullanın. Örneğin, komutun yürütülmesinin bir sonucu olarak ABS prosedürünün adresi yığına aktarılacaktır. Bu komutlar, bir prosedürü başka bir prosedüre parametre olarak geçirmenize izin verir. Daha önce bahsedilen KAYDET işlemi, işlemci kontrol komutları grubuna aittir.<имя файла>, sistemin bir kopyasını diske kaydetme talimatının yanı sıra işlemciye sağlanan metin bilgilerinin giriş kaynağını belirleyen komutlar. Başlangıçta, bu kaynak ekran klavyesidir. YÜKLE komutu<имя файла>girdiyi belirtilen ada sahip bir disk dosyasına değiştirir. Komut PF - metin düzenleyici arabelleğinden komut girme talimatı verir. TEXEC komutu, parametreleri yığında belirtilen işlemci girişine bir metin dizisi gönderir. Belirtilen kaynaklarda bulunan komutlar yürütüldüğünde, giriş otomatik olarak ekran klavyesine geçer. İşlemci tarafından algılanan girdi komut akışı, özellikle, prosedürleri ve verileri tanımlamaya, dahili bir temsilde derlemeye neden olmaya ve prosedür gövdesini depolamaya veya belirtilen veriler için bellek ayırmaya ve ayrıca derlenmiş prosedürün adını girmeye yönelik talimatları içerebilir. veya PRSP sözlüğüne veri yapısı. Sözlük, harici (program metninde kullanılan) adları ile dahili temsilde bu adlara karşılık gelen nesnelerin adresleri arasında bir yazışma kurar. Bir prosedürün tanımını veya bir adlandırılmışın tanımını işlerken, işlemci bir sözlük oluşturur ve içinde adı (daha doğrusu adın ilk 7 karakterini) ve prosedür gövdesinin adresini içeren yeni bir sözlük girişi oluşturur. veya bu adla ilişkili veri tanımlayıcı. Yukarıdan aşağıya programlamada, prosedür gövdeleri henüz tanımlanmamış nesnelere referanslar içerebilir. Bu durumda, sözlükte belirsizlik işareti ile işaretlenmiş sözlük girişleri (başlıklar) oluşturulur. Tüm tanımsız adları görüntülemek için UNDEF komutunu kullanın. Sözlük büyümesi sırasında, alt sözlükler - adlandırılmış sözlük girdileri koleksiyonları oluşturmak mümkündür. Bir alt sözlük genellikle aynı görevle ilgili prosedürleri ve veri yapılarını birleştirir. Alt sözlüklerin adları ve diğer program nesneleri arasında karışıklığı önlemek için, bir alt sözlüğün adı $ harfiyle başlamalıdır. Büyümeleri veya kullanımları için alt sözlüklere erişim, aşağıdakileri içeren özel komutlarla açılıp kapatılabilir ($v adı, geçerli herhangi bir alt sözlük anlamına gelir). GROW $v - $v alt sözlüğünü büyütün, yani aksi belirtilmedikçe, derlenen tüm prosedürlerin ve verilerin adlarını $v alt sözlüğüne koyun; USE $v - kullanıma aç (içindeki isimleri aramak için) $v alt sözlüğü; SHUT $v - $v alt sözlüğünü kullanma olasılığını kapatın; YALNIZCA $v - yalnızca $v alt sözlüğünü kullanıma hazır hale getirin; İPTAL - SADECE sonuncuyu iptal edin. Ayrıca, arama alt sözlüğü açık veya kapalı olsun, durumlarının tüm alt sözlüklerinin adlarını ekrana yazdıran bir ?$ komutu da vardır. Adı en üstte yazdırılan alt sözlük her zaman artırılır. Temel PRSP prosedürleri, varsayılan olarak kullanıma ve büyümeye açık olan $PRIME adlı bir alt dizin oluşturur, yani farklı bir alt sözlüğe büyüme talimatı verecek bir komut yoksa. Örneğin, işlem?$ alt sözlüklerin sonraki durumunu yazdırsın. $PRG açık $PRIME açıldı $EDIT kapandı $PRIME açıldı SİSTEM kapalı Bu, $PRG'nin şu anda artış ve kullanıma açık olduğu, $PRIME'ın yalnızca kullanım için olduğu ve $EDIT ve SYSTEM'in kullanılamadığı anlamına gelir. Bir alt sözlüğün aynı ada sahip birkaç bölümden oluşabileceğini unutmayın. Bir veya başka bir sözlük girişi kümesinin sözlüğünden ve belki de bunlarla ilişkili dahili nesneler sözlüğünden silmek için komutlar vardır. Böylece, FORGET $v komutu, GROW $v komutunun son yürütülmesinden bu yana sözlüğe girilen tüm adları (yalnızca $v altsözlüğünü değil), bu adlarla gösterilen nesnelerle birlikte kaldırır ve $v'nin büyümesini geri alır. tarafından ayarlanan alt sözlük. PROGRAM $v komutu, sıralı FORGET $v GROW $v komutlarıyla aynı eylemleri gerçekleştirir. Herhangi bir programın başında böyle bir komutun bulunması, program yeniden derlendiğinde eski kopyasının silinmesine ve programın yeni kopyasının nesnelerini depolamak için bir alt dizinin oluşturulmasına yol açar. Örneğin, durumu yukarıda gösterilen sözlük üzerinde FORGET $PRIME işlemini gerçekleştirerek yeni bir durum elde ederiz: $EDIT kapandı $PRIME açıldı SİSTEM kapalı FORGET komutunun yürütülmesi sırasında silinecek bölümlerin isimleri ekrana gelir. SYSTEM alt sözlüğünün adının $ ile başlamadığına dikkat edin. Buna izin verilir, ancak bu alt sözlüğe FORGET ve RPOGRAM komutlarının uygulanmasının herhangi bir eyleme neden olmamasına neden olur (SYSTEM alt sözlüğü onlar için yok gibi görünüyor). Bitmiş programda prosedürlerin ezici çoğunluğu için harici bir adla çağırmanın gerekmediği gerçeği göz önüne alındığında, bunlarla ilişkili dahili nesneleri korurken adlarını sözlükten çıkarmak mümkündür. CLEAR $v komutu, program metninde (tanımlandıklarında) önek:: (iki iki nokta üst üste) ile gelenler dışında, $v alt sözlüğünün tüm bölümlerinden tüm adları kaldırır. Örneğin, işlemci tarafından aşağıdaki program parçasının yürütülmesinin bir sonucu olarak: :: : X+ Y !+ X ; CLEAR $EXAM $EXAM alt sözlüğünde yalnızca X ve X+ adları kalacak, Y sözlük girişi kaldırılacak (dahili gösterimde Y kelimesine karşılık gelen değişken kalacak olsa da). DSSP ile kullanıcı etkileşiminin ana yolu, genellikle klavyeli bir katot ışını ekranı olan terminaldir. Terminalden ilk giriş, programların düzenlenmesi ve hatalarının ayıklanması, veri hazırlama ve tüm sistem yönetimi gerçekleştirilir. Programlar ve veriler ile PRSP'nin kendisi disklerde dosyalar olarak saklanır ve bir yazıcıda yazdırılabilir. Giriş/çıkış kontrolü için, temel PRSP prosedürleri seti aşağıda açıklanan araçları içerir. Terminal işleminin programlanması, sayıların giriş ve çıkış komutları, tek tek harfler ve harf dizileri (dizeler) ve ayrıca bazı ek komutlar tarafından sağlanır. TIB (Terminal Input Byte) komutu, terminalin klavyesinde bir tuş vuruşu için bir bekleme döngüsü başlatır. Bir tuşa basıldığında, karşılık gelen karakterin 8 bitlik kodu, üstteki 3 bayt sıfır içerecek şekilde, üstteki düşük bayt olarak yığına itilir. Bu şekilde girilen karakterin bir kopyası ekranda gösterilir. Ayrıca bir TRB (Terminal Okuma Baytı) komutu da vardır, bu komut, girilen karakterin kodunu yığına göndermenin, bu karakterin ekranda görüntülenmesiyle birlikte olmamasıyla TIB'den farklıdır. TIN (Terminal Giriş Numarası) komutu, yığına bir giriş döngüsü başlatır ve klavyeden girilen sayının ekranda gösterilmesini sağlar. Girilen numara, eksi işaretiyle başlayıp ile biten bir basamak dizisi olmalıdır. Her TIN komutu bir sayı girer. Bir satıra bir sayı dizisi girmeniz gerekiyorsa, tuşuna basılarak ayrılmalıdırlar. Klavyeden yazılan n karakterden oluşan bir dizi, TIS (Terminal Input String) komutu kullanılarak ardışık olarak artan adreslerde bulunan n bayt şeklinde bilgisayar belleğine girilir. n karakteri yığının üzerine itilir. Örneğin, yeterli uzunlukta bir bayt vektörü X bildirilsin. Sıfır öğesinden başlayarak bu vektörün öğelerine değerlerini atayarak 9 karakter girmeniz gerekir: Benzer şekilde, TOS komutu kullanılarak, başlangıç adresi a olan n bayt litrelik bir dizinin çıktısı belirtilir: Doğrudan programa dahil edilen metin öğelerinin terminaline çıktısı, yapı tarafından sağlanır. ."<текст>" Örneğin, belirli bir program parçası yürütüldüğünde ekranda VARIANT NUMBER GİRİN yazısının görünmesi için, parçanın "VARIANT NUMARASINI GİRİN" girişini içermesi gerekir. TON (Terminal Çıkış Numarası) komutu, yığının tepesinden atılacak sayıyı görüntüler ve çıktı alanının uzunluğu en üstte belirtilmelidir. Görüntülenen sayı alanın sağ kenarına hizalanır, soldaki boş yerler boşluklarla doldurulur ve sayının uzunluğu belirtilen alan uzunluğunu aşarsa solda bir kesme oluşur. Ondalık G/Ç modunda, negatif sayılar eksi işaretiyle başlar. TOB (terminal çıktı baytı) komutu, kodu yığının üstündeki düşük bayt tarafından verilen karakteri yazdırır. Yığın derinliği 1 azalır. Ekran imlecini doğrudan kontrol eden komutlar da vardır: CR - yeni bir satırın başına atla, SP - boşluk, yani bir konum sağa hareket ettirin. BELL komutu kısa bir bip sesine ("zil") neden olur. Bazen, bir terminal ile iletişim kurarken, bir tuşa daha önce basılmış olup olmadığını ve ekranın önceki çıktı komutunu tamamlayıp tamamlamadığını kontrol etmek gerekebilir. Bu, belirtilen olay meydana gelirse yığında 1, aksi takdirde 0 bayrağı bırakan TTI (Terminal Test Girişi) ve TTO (Terminal Test Çıkışı) komutlarıyla yapılabilir. Yazıcı çıktı komutları, terminal çıktı komutlarına benzer ve LP (Satır Yazıcısı) harflerinin TO'nun yerini aldığı veya başta gelenler olarak eklendiği benzer bir anımsatıcıya dayanır. Örneğin, LPCR - yeni bir satırın başına geçiş, LPSP - boşluk, LPN - köşe tarafından belirtilen alandaki alt köşeden bir sayının çıkışı, LPB - bir karakterin çıkışı, LPS - bir karakter dizisinin çıkışı . Yazıcı kafasını yazdırılan satırın N konumuna hareket ettiren [N] LPT komutu ve kağıdı besleyen LPFF komutu da vardır. Müstehcen metni yazdırmak için, bir metin değişmezi ve LPS komutunu kullanmak uygundur, örneğin: "FONKSİYON DEĞER TABLOSU" LPS Çevre birimlerini programlarken, kesintileri işlemek gerekli hale gelir. DSSP'de bu işlem aşağıdaki gibi programlanmıştır. Kesmeyi işlemek için tasarlanan program, tanımından önce INT öneki olan normal bir PRSP prosedürüdür, örneğin INT: A !1+ I ; INT öneki, kesintiye uğradığında işlemcinin durumunun kaydedilmesini ve kesinti tamamlandığında geri yüklenmesini sağlar. LINK komutu, bir rutini belirli bir kesmeye bağlamak için kullanılır: <адрес вектора>BAĞLANTI<имя процедуры>yürütülmesi sırasında, ilgili vektöre göre, kesme işleme prosedürüne bir çağrı kaydedilir. LINK komutu, hem programın derlenmesi sırasında meydana gelen bir kesme ile bir prosedürün statik bağlantısını hem de program yürütüldüğünde dinamik olarak gerçekleştirebilir. İşlemci kesintisi, dış dünyada meydana gelen bir olayın sisteme bildirilme şeklidir. Anında işlem gerektiren olaylar da programda gerçekleşebilir. Bunlara istisnai durumlar denir. Bu tür durumlara örnekler: sıfıra bölme, cihazla iletişim hatası, giriş dosyasının sonu vb. DSSP'de istisnai durumlar komut kesmeleri kullanılarak düzeltilir. Bir komut kesme, adlandırılmış bir yanıt prosedürü çağrısı işlemidir ve aşağıdaki gibi bildirilir: TUZAK<имя вызова> <конечная реакция> Örneğin: TUZAK S1 .Durum S1. İlk durumda, S kesmesine son tepki prosedür X'tir, ikinci durumda, S1 kesmesi gerçekleştiğinde, terminalde aşağıdaki mesaj görüntülenecektir: Durum S1. Kesintiye neden olması muhtemel bir program, bir catch komutuyla buna yanıtını ayarlayabilir. PRSP'de iki tür engelleme vardır: ON ve EON. Durdurma komutları yalnızca prosedürlerin içinde kullanılabilir ve şu biçime sahiptir: ÜZERİNDE<имя прерывания> <реакция> zaman<имя прерывания> <реакция>Örneğin: : A ... ON S "Kesme S" ... ; : A1 ... EON S1 ABC ... ; ON ve EON, farklı reaksiyon türleri oluşturur. ON komutu ile yeni bir reaksiyon belirtilirse, bir kesinti meydana geldiğinde, reaksiyon prosedürü yürütülür ve ardından kesintiye uğrayan program çalışmaya devam eder. Reaksiyon EON komutu ile belirtilirse, önce işlenen yığını EON yürütmesi sırasında sahip olduğu derinliği alır, ardından reaksiyon gerçekleştirilir ve sona erdiğinde, EON'un yürütüldüğü prosedürün yürütülmesi. komutu kullanıldı hemen durur. Örnekleri düşünün. Prosedür M, terminal klavyesinden karakterleri girer ve bir rakam olup olmadığını kontrol eder. Girilen karakter bir rakam değilse, bir ND kesmesi oluşturulur. TRAP ND "Sayı değil." : M RP M1 ; : M1 TRB [B] C#0< C2 #9 >&0 IF+ ND [B] TOB ; ND kesmesine verilen son yanıt şu mesajdır: Rakam değil. M, bir ND kesmesine kendi yanıtı olan bir P1 prosedüründen çağrılırsa: P1 ON ND PR1 M ; : PR1 [B] CR "Hata." D#0 [#0] ; daha sonra rakam olmayan bir karakter girildiğinde, ND kesmesi ON tipi PR1 reaksiyon programı tarafından işlenecek ve bu da mesajın yeni bir satırdan verilmesine neden olacaktır: Hata. Girilen karakter 0 karakteri ile değiştirilecektir, ardından M çalışmaya devam edecektir. P2 prosedüründen M çağrılırsa: P2 EON ND PR2 M ; : PR2 CR "Hata. Girişin sonu." ; daha sonra rakam olmayan bir karakter girildiğinde, ND kesmesi EON tipi PR2 reaksiyon programı tarafından işlenecek ve bu da mesajın yeni bir satırdan verilmesine neden olacaktır: Hata. Girişin sonu., bundan sonra P2 çıkacaktır. Operand yığını daha sonra boş olacaktır. Gerekirse, kesinti reaksiyon programında yeniden etkinleştirilebilir, böylece daha yüksek seviyeli programlara genişletilebilir. Bu durumda, ya ekteki prosedürde intercept komutunda belirtilen program ya da son tepki kesmeyi işleyecektir. Örneğin, PR2'yi aşağıdaki gibi değiştirirseniz: : PR2 CR "Hata. Girişin sonu." N.D.; daha sonra terminalde görüntülenen mesaj şöyle olacaktır: Hata. Giriş sonu. Bir numara değil. DSSP, yanıtları kullanıcı programlarında sağlanabilecek birkaç yerleşik komut kesmesine sahiptir. Esselamu aleykum ve rohmatullahi ve berekatuhu! Ve aleyküm selam ve rahmetullahi ve berekatuh! Ebu Hureyre'nin aktardığına göre Taberani "el-Awsat"ta: Şeyh el-Albani onu 161 numaradan Silsila ad-daifa'ya getirdi ve şöyle dedi: "Bu hadis uydurmadır (Mevdu'). Gerçekte, cennet ehlinin hangi dili konuşacağını açıklayan tek bir güvenilir hadis yoktur, bu nedenle susmak ve bu konuda konuşmaya kendinizi kaptırmamak, bu konuda Cenâb-ı Hakk'a ilim vermek ve sadece ne ile meşgul olmak lâzımdır. öbür dünyada faydalı olacak amelleri işlemeye sevk edecek! Dil, bir kavramın anlamından ve anlamından onun tanımına geçmenizi sağlayan bir işaret sistemidir. İnsan sözlü bir varlıktır ve hayvanlardan farklı olarak kendi türüyle dil yardımıyla iletişim kurar. Bazen "hayvanların dili" hakkında konuşurlar, ancak böyle bir ifadenin şartlı olduğu açıktır - zenginliği ve yetenekleri açısından hayvanların dili insan diline benzemez. Meleklerin iletişimleri için bir dile ihtiyaçları yoktur - onların Rusça veya İngilizce konuştuklarını hayal etmek zordur. Dilin işlevleri farklı olabilir - bilgi aktarmanın yanı sıra duygu ve değerlendirmeleri ifade etmeye yardımcı olur. Kilisenin dili dua, ibadet ve Kutsal Yazıların dilidir. Bazı dinlerde, kutsal metinler başlangıçta tek bir dilde bulunur ve temelde çevrilemez olarak kabul edilir. Böylece, Müslüman Kuran'ın aslı Arapça olarak yazılmıştır. Üstelik Müslümanlar, zamanın başlangıcında bu kitabın böyle yaratıldığına inanırlar. Yahudi yazıcılar da kutsal metinlerin yalnızca İbranice olarak yazılabileceği fikrine yöneldiler. Başlangıçta Hristiyan Kutsal Yazıları için durum böyle değildi. MÖ III yüzyılda. sözde "yetmişlerin çevirisi" - Septuagint - Eski Ahit'in Yunancaya çevirisi. Ayrıca, bazı araştırmacılar, vasiyetler arası zamanlarda Kutsal Yazıların rolünü oynayan Septuagint olduğuna inanıyorlar. Kutsal Yazıların temel çevrilebilirliği lehine ana argüman haline gelen Septuagint'in varlığıydı. Ancak daha da güçlüsü var. Artık İsa'nın havarilerle Aramice konuştuğunun kanıtlandığı kabul edilmektedir. Ancak İncilleri derleyenler tereddüt etmeden bu konuşmaları Yunanca ilettiler. Şimdi bilimsel bir yön var - dilsel rekonstrüksiyonlar. Derleyicileri, bu diyalogların orijinalinde nasıl göründüğünü anlamaya çalışıyor. Ancak yine de bilimsel araştırmaların konusudur. Bir dili bir dile çevirirken, dillerin gramer olarak aynı olmamasından dolayı bazen sorunlar ortaya çıkar. Farklı dillerdeki kelimelerin anlamları ve tonları da farklıdır. Örneğin, "cennet yeşil ve serin bir yerdir" ifadesi, Kutsal Yazıların "serinliğin" oldukça hoş olduğu, sıcak iklime sahip ülkelerde yazıldığını açıkça göstermektedir. Rusça'da, bu tür dernekler pek ortaya çıkmazdı. Ve “dinlenmek”, “iyi vakit geçirmek” anlamındaki “serinlemek” fiili, İbranice'den Yunanca'ya aydınger kağıdı olarak Rusça'ya girmiştir. Kutsal Yazı atalarımıza Rusça olarak getirilmedi. Cyril ve Methodius - Selanik Yunanlılar - Selanik Slavlarının konuşma diline dayalı yeni bir yazı dili geliştirdiler. Dünyada yazılı dili olmayan dilleri kullanan birçok insan var. Hayat hakkında konuştuğumuz sürece sorun yok. Ancak, dini bir metnin veya felsefi bir incelemenin böyle bir dile çevrilmesi gerektiği anda, Cyril ve Methodius'un yaptığı gibi dilin iyileştirilmesi gerekiyor. Birkaç bin yıl önce Slav kabilelerinin kendi aralarında anlaşmanın modern Slav halklarından daha kolay olduğunu varsayarsak, o zaman haklı olacağız - diller daha yakındı. Ancak bu, Cyril ve Methodius tarafından yapılan Kutsal Yazı çevirisinin Kiev ve Novgorod halkı için daha anlaşılır olduğu anlamına gelmez - yazılı edebi dil farklıydı. Belki de bu Rus durumunun bir özelliğidir, çünkü Rus edebi dili Moskova lehçesinden çok Slav Kilisesi'ne daha yakındır. Aslında, Kilise Slav dilinin tamamı Rusça'ya “yüksek sakinlik” olarak girdi. Örneğin, modern katılımcılar bile - ağlama, koşma gibi - tam olarak Kilise Slav modeline göre oluşturulmuştur - Eski Rusça'da “ağlamak”, “koşmak” olacaktır. Bazen Eski Rus analogları tamamen düştü - “Bologoe” adına “iyi” ve “bologo”; "Kask"ın aksine sadece destanlarda bulunan "kask". Eski Rusya'da bir diglossia durumu vardı. "İki dillilik" bu değildir. Diglossia, toplumda iki dilin paralel olarak kullanılmasıdır. Örneğin, 19. yüzyılda hem Rusça hem de Fransızca kullanıldı. Fransızca yüksek sosyetenin diliydi, ancak prensipte herhangi bir metin tercüme edilebilirdi. Diglossia'da diller kullanım açısından kesişmez. Eski Rusça konuşuyorlardı, Eski Rusça'da bir ev notu yazabiliyorlardı. Ama Slav Kilisesi'nde dua ettiler. Bu durum Peter'dan önce vardı, 18. yüzyılda yavaş yavaş çöktü. Şimdi bilim ve edebiyat Rusça'da gelişebilir, ancak Kilise Slavcasında hala sadece dualar var. İlanı Kilise Slavcasına çevirin, bir şaka veya küfür gibi görünecektir. Eşsiz bir çağda yaşıyoruz. Çarlık Rusya'sında İncil Rusça okunabiliyordu, Eski Rusya'da Slav Kilisesi'nde dinlenebiliyordu. Ancak insanların çoğu okuma yazma bilmiyordu veya Kutsal Yazıları okuyup anlayacak kadar eğitimli değildi. Sovyet döneminde herkes okuryazar oldu, ancak Kutsal Kitap metni yoktu. Şimdi okuryazarlık hala korunuyor ve metinler mevcut. Kutsal Yazıların kendisine ek olarak, dualardan ibadete kadar bazı Slav metinlerinde ustalaşmaya davet ediyoruz. Doğru, Rusça'ya yapılan mevcut çeviriyi anlamak biraz zor. 19. yüzyılda, benzerleri olmayan çevirmenler genellikle Slavonikleri çeviriye aktardılar. Böylece “Ben iyi çobanım” ifadesi çeviriye geçti. Ve işte bazı zorluklar. Yunancadan birebir çeviri kulağa şöyle gelebilir: “Ben iyi bir çobanım”, ancak böyle bir çeviri düşük olarak algılanır. Öte yandan, şimdi basit bir dinleyici, yüce "papaz"ı bir "rahip" olarak algılayacaktır. Bununla birlikte, birçok İncil sözünün Rusça'ya harfiyen tercümesinin imkansız olduğu kabul edilmelidir - "bir çocuğun ağzı gerçeği söyler" ifadesi - felsefi bir söz olarak algılanmayacaktır. Ancak genel olarak, İncil'in Slav metnini anlamak, kelimelerden ziyade anlamın yanlış anlaşılmasından daha fazla engellenir. Ayrı bir zorluk, gramer yapılarıdır. Örneğin, Yunancadan gelen bir dizi amplifikasyon var. "Günahları ve ihlalleri bağışla", basitçe, tüm günahları bağışla demektir. “Öfkeyle öfkelenme”, “sevgiyle sevilme” türündeki yapılar da benzerdir. Kutsal metinleri diğer dillere çevirirken de sorunlar ortaya çıkar (Kutsal Yazıların henüz dillerine çevrilmediği halklar, belki de Dünya nüfusunun 5'i kadardır). Yani Cyril ve Methodius'un Slavlar için yaptığı çalışmalar devam ediyor. Cyril ve Methodius ilk değildi - ondan önce Etiyopya, Gotik'e çeviriler vardı. Cyril ve Methodius'tan sonra Permli Stefan, Kutsal Yazıları Zyria diline çevirdi. Her çeviri kutsal bir metin midir? Hayır, ancak kilise topluluklarında kabul edildiği ölçüde. Örneğin, ayinle ilgili bir çeviri olarak Synodal çevirisi yasak değildir, ancak kabul edilmez. Ancak Protestanlar, örneğin Rus Baptistleri tarafından bu şekilde kullanılır. İncil metninin herkes tarafından erişilebilir olması gerektiğine inanan modern Protestanlık akımları bile var. İncil çizgi romanları da yayınlanmaktadır. Yeni Ahit metninde herhangi bir sorun yok - kaynağı Yunanca biliniyor. Ancak Eski Ahit'in sinodal çevirisinin temeli İbranice metindi. Yunanca çeviriden parçalar, yalnızca tutarsızlıklar önemli olduğunda eklenmiştir. Modern versiyonda, hem İbranice Masoretik metinlerden hem de Yunancadan iki çeviri olması güzel olurdu. Her iki dili de bilmeyenler için uygun olacaktır. Konuşmanın ardından Başrahip Alexander'a birkaç soru soruldu: – Adem hangi dili konuşuyordu? - Söylemesi zor. Bir yandan dil, yaşarken değişir. Ancak bunun Babil Kulesi'nin inşasından sonra ortaya çıkan yeni bir dil özelliği olup olmadığını kimse bilmiyor. Ancak, her durumda, Adem'in dili muhtemelen İbranice de dahil olmak üzere mevcut herhangi bir dilden farklıydı. – Şimdi hizmetin Rusça'ya çevrilmesi konusunda bir tartışma var mı? - Bu fikir devrimden önce bile tartışıldı ve yenilemeciler tarafından kısmen taviz verildi. Hepsi Rusça hizmet vermedi, ancak fikir onlar tarafından desteklendi. Metropolitan Philaret'in hem İbranice hem de Yunancadan tercüme edilmesi gerektiği fikri akıllıca bir karar olmasına rağmen, İncil'in Rusçaya tercümesi kolay değildi. Her ne kadar bu bize her iki dilden bilimsel çeviriler vermese de. Rus dilini kullanmanın ayrı durumları vardır - Optina yaşlılarının duası ve akathist "Her şey için Tanrı'ya Zafer" orijinal olarak Rusça yazılmıştır. O kadar çok başka çeviri var ki ve bunların uygulanmasında o kadar çok nüans olacak ki, metinleri çevirmektense Ruslaştırmak daha kolay. Bu süreç uzun süredir kendiliğinden devam ediyor. Bazen olaylar ortaya çıkar: örneğin, “Düğün Ayini” nde çift sayı bazen beklenmedik bir şekilde çoğul ile değiştirilir ve modern akathistlerde tutarsız bir şekilde kullanılır. – İlahi Takdir, farklı dillerin oluşumuna nasıl katılır? “Dil, insan iradesinin ötesinde var olur. Bir kişi Esperanto oluşturabilir, ancak doğal diller kendi yasalarına göre vardır. Cyril ve Methodius, yukarıdan ilham alarak, aynı zamanda o zamana kadar var olan modelle Slav Kilisesi'ne çevrildi. Havariler, İncilleri Yunanca yazarak yukarıdan ilham alarak İncil'i tercüme etme fikrinin temelini attılar. Daria Mendeleeva tarafından hazırlanmıştır. Fotoğraf Dmitry Kuzmin SORU:
Selamun aleykum evet! İşte bu yazıyla karşılaştım. Yanılmıyorsam tam tersini yazmışsın. Zor değilse, bu makaleye tekrar yorum yapabilirsiniz. Müslüman. Arapça Kuran'ın dilidir. Dünyanın bütün dilleri arasından seçilmiştir ve olağanüstü özelliklere sahiptir. Bu dil aynı zamanda Peygamber Efendimizin (s.a.v.) dilidir. Bu dil zengindir ve dünya dillerinin hiçbiri onunla rekabet edemez. Bu dilin konuşmacısı üzerinde ruhsal ve fiziksel bir etkisi vardır. Araplar şiir yarışmaları düzenlerlerdi, ancak Peygamber (s.a.v.) Vahiy'i aldığında, Araplar dilin bu kadar harika bir anlatımına çok şaşırdılar ve hatta bazıları Kuran'ın büyülü bir etkisi olduğunu düşündüler. Bir kişi. Bir kimse Kuran'dan bir kelimeyi veya harfi düzeltmek isterse, İlâhi kitabın bütün ahengi bozulur. Kuran'ın tek bir kelimesi bile değiştirilmemelidir, aksi takdirde anlam ve fonetik değişir. Bazı kelimelerin zamanla eskime eğiliminde olduğunu biliyoruz ve onları kullanmıyoruz. Ve Kuran'ın dili 1439 yıldır önemini kaybetmedi... 10 yıldan fazla bir süredir Kuran öğretiyorum ve bugüne kadar bir öğrencimin bana "Neden Kuran'ı okuyoruz?" diye sorduğunu görmedim. Nereden geldi? Ne gibi faydaları var? Soldan sağa okumanın özelliği nedir? Her geçen gün Arap alfabesini ve tajuid kurallarını öğrenmek isteyenlerin sayısı artıyor, böylece daha sonra Kuran'ı orijinalinden okuyabilirler. Ancak çok az insan yukarıdaki soruların cevabını düşünüyor. Ve son olarak, onlara Kuran'ın faydalarını, faydalarını anlattığımda, birçokları onu araştırmaya başlıyor. Arapça 29 harften oluşur. Sesler gırtlak sınırında, gırtlak ortasında, göğüste, dil kökü ile ağız boşluğu arasında oluşur. Arap dilinin sesleri ağız boşluğunu "temizler" ve hastalıklara daha az eğilimlidir. Arapça aynı zamanda iyi bir konuşma terapistidir. "r" harfinin peltekliğini ve yanlış telaffuzunu giderir. Bu dil aynı zamanda görme bozukluğu olanlara da yardımcı olur. Çünkü Arapça bir metni soldan sağa okumak kişinin görme duyusunu geliştirir ve rahatlatır. Harflerin oval, yuvarlak şekli de ruh üzerinde iyi bir etkiye sahiptir. Arap alfabesinin tüm harfleri ünsüzdür. Ünlüler için özel harfler yoktur. Kısa ve uzun ünlüler vardır. Kısa ünlüler, sesli harflerin yardımıyla yazılı olarak iletilir - üst simge ve alt simge karakterleri. Ayrıca 28 harften 22 harf her iki tarafta ve 6 harf sadece sağ tarafta bağlanmıştır. Kuran bize 23 yıl bozulmadan geldi. Kuran son ilahi kitaptır ve ondan sonra başka kitap gelmeyecektir. Bütün insanlığa indirilmiştir. Kuran'ın kanunları kıyamete kadar yürürlükte kalacak ve değişmeyecektir. Kuran-ı Kerim, Yüce Allah'ın Peygamber Muhammed'e (sav) verdiği sonsuz, büyük bir mucizedir. Kuran okumak ibadettir. Herkese bu eşsiz harika kitabı her gün okumasını ve anlamını bilmesini tavsiye ediyorum. Yaratıcınızla nasıl okuyup konuşacağınızı öğrenmek için acele edin. Allah bize Cennette oturmayı ve Kendisinin seçtiği Arapça dilini konuşmayı nasip etsin. Dilyarom Bektaeva, ustaz of Aktobe bölgesel Merkez Camii "Nur Gasır" http://nurgasyr.kz/index.php/ma-alar/1826-yazyk-zhitelej-dzhannata
CEVAP:
aleyküm selam kardeşim! Onun gibi yerli ve cahil "sahte Ustazlar" Müslümanları yanıltmamak için onlardan uzaklaştırılmalıdır. Aktöbe camisinde bu tür saçmalıklar yayıldığı ve cahil hocalar tutulduğu için, belki de bu şehirde bu kadar çok aşırı mezhepçi olmasının nedeni budur. Ne Kuran'da ne de Sünnette, Arapça'nın tüm cennet sakinlerinin ortak dili olacağına dair en ufak bir ipucu bile yoktur. Arapça bilmiyorlarsa, diğer milletlerden temsilcilerin Cennette birbirleriyle nasıl iletişim kuracaklarını bir düşünün?!! Daha önce benzer bir soruyu yanıtladı:Adlandırılmış Veriler
Fiziksel adreslere göre bellekle çalışma
Ek Veri ve Bellek İşlemleri
İşlemci Kontrol Komutları
Sözlük yönetimi komutları
G/Ç Komutları
Kesinti ve İstisna İşleme
"Arapça Cennet ehlinin dilidir!" (Yaklaşık anlam)
Değerli kardeşlerim, sizden bu hadis ile ilgili soruya açıklık getirmenizi rica ediyorum, sahih midir? Genel olarak bu sözler Hz.Muhammed aleyhisselam'ın sözleri midir?
barakAllahu fikum ve jazakumullahu hayran!
"Resulullah (sallallahu aleyhi ve sellem) şöyle buyurdu: "Ben bir Arabım, Kuran Arapçadır ve cennet yerlerinin dili Arapçadır."
Şeyhülislam İbn Teymiyye'ye -Allah ona rahmet etsin- soruldu: "Kıyamet gününde insanlar hangi dili konuşacaklar? Cenâb-ı Hak insanlara Arapça mı hitap edecek? Cehennem ehlinin dilinin Farsça, Cennet ehlinin Arapça olduğu iddiası doğru mudur?
Bunun üzerine o: "Hamd, âlemlerin Rabbi olan Allah'a mahsustur! O gün insanların hangi dili konuşacakları, Rablerinin kendilerine nasıl ve hangi dille hitap edeceği bilinmez, O büyük ve yücedir. Ne Cenab-ı Allah, ne de Resulü, salât ve selâm bize bu konuda bir şey söylememiştir ve Cehennem ehlinin dilinin Farsça, cennet ehlinin dilinin de Arapça olacağı güvenilir değildir. Ve Allah onlardan razı olsun, sahabeler arasında bu konuda ihtilaf olduğunu bilmiyoruz. Tam tersine bundan bahsetmekten kaçındılar çünkü bunun hakkında konuşmak boşunaydı. Ancak bu konuda sonraki nesiller arasında fikir ayrılıkları olmuştur. Kimisi Arapça konuşacaklarını, kimisi de Cehennem ehli için bunun Cehennem ehli için geçerli olmadığını, çünkü Farsça cevap vereceklerini ve Cehennemdeki dillerinin bu olduğunu söyledi. Üçüncüsü, insanların Asur dilinde iletişim kuracakları, çünkü diğer tüm dillerin soyundan geldiği Adem'in dili. Dördüncüsü, Arapça konuşacakları için bu, Cennet sakinleri için geçerli değildir. Ancak hiçbirinin, ne akıl tarafından ne de şeriat kaynaklarından bu sözleri lehine bir argümanı yoktur, ancak bunlar herhangi bir delilden arınmış ifadelerdir. En iyisini Allah Teâlâ bilir!” Bakınız Mecmu'ul Fetva 4/299.Kutsal Kitap tercüme edilebilir mi?
cennette mi–soğuk?
Bütün Slavlar İncil'i anladı mı?
Diller yakın ve… paralel
Rahip mi, papaz mı?
Çeviriler kutsal ve saygısız
soruların cevapları