Menü English Ukrainian Rusça Ana Sayfa

Hobiler ve profesyoneller için ücretsiz teknik kütüphane Ücretsiz teknik kütüphane


Bilişim ve bilgi teknolojileri. Hile sayfası: kısaca, en önemlisi

Ders notları, kopya kağıtları

Rehber / Ders notları, kopya kağıtları

makale yorumları makale yorumları

içindekiler

  1. Bilişim. Bilgi
  2. Sayıların bilgisayarda gösterimi. Bir algoritmanın resmileştirilmiş kavramı
  3. Pascal'a Giriş
  4. Standart Prosedürler ve Fonksiyonlar
  5. Pascal dil operatörleri
  6. Yardımcı algoritma kavramı
  7. Pascal'daki prosedürler ve işlevler
  8. İleri tanımları ve alt programların bağlantısı. Direktif
  9. Alt program parametreleri
  10. Alt program parametre türleri
  11. Pascal'da dize türü. String Tipi Değişkenler İçin Prosedürler ve Fonksiyonlar
  12. Yazılar
  13. Setler
  14. Dosyalar. Dosya işlemleri
  15. Modüller. Modül türleri
  16. Referans veri türü. dinamik bellek. dinamik değişkenler. Dinamik bellekle çalışma
  17. Soyut veri yapıları
  18. Yığınlar
  19. Kuyruklar
  20. Ağaç Veri Yapıları
  21. Ağaçlar üzerinde operasyonlar
  22. Operasyon Uygulama Örnekleri
  23. Bir grafik kavramı. Bir grafiği temsil etmenin yolları
  24. Çeşitli Grafik Gösterimleri
  25. Pascal'da nesne türü. Nesne kavramı, tanımı ve kullanımı
  26. miras
  27. Nesneleri Örnekleme
  28. Bileşenler ve Kapsam
  29. Yöntemler
  30. Yapıcılar ve yıkıcılar
  31. Yıkıcılar
  32. Sanal Yöntemler
  33. Nesne veri alanları ve biçimsel yöntem parametreleri
  34. Инкапсуляция
  35. Genişleyen Nesneler
  36. Nesne Türü Uyumluluğu
  37. Assembler Hakkında
  38. Mikroişlemci yazılım modeli
  39. Kullanıcı kayıtları
  40. Genel amaçlı kayıtlar
  41. segment kayıtları
  42. Durum ve kontrol kayıtları
  43. Mikroişlemci sistem kayıtları
  44. Kontrol kayıtları
  45. Sistem adres kayıtları
  46. Hata ayıklama kayıtları
  47. Montaj programı yapısı
  48. Assembly dili sözdizimi
  49. Segmentasyon Direktifleri
  50. Makine talimat yapısı
  51. Komut işlenenlerini belirleme yöntemleri
  52. adresleme yöntemleri
  53. Veri aktarım komutları
  54. aritmetik komutları
  55. mantık komutları
  56. Kontrol Aktarım Komutları

1. Bilgisayar bilimi. Bilgi

Temsil ve işleme / bilgi. Sayı sistemleri

Bilişim, çeşitli bilim, teknoloji ve üretim alanlarındaki nesnelerin ve ilişkilerinin yapılarının resmileştirilmiş bir temsili ile ilgilenmektedir. Mantıksal formüller, veri yapıları, programlama dilleri vb. gibi nesneleri ve olguları modellemek için çeşitli biçimsel araçlar kullanılır.

Bilgisayar biliminde bilgi gibi temel bir kavramın çeşitli anlamları vardır:

1) harici bilgi biçimlerinin resmi sunumu;

2) bilginin soyut anlamı, iç içeriği, anlambilimi;

3) bilginin gerçek dünyayla ilişkisi.

Ancak, kural olarak, bilgi soyut anlamı - anlambilim olarak anlaşılır. Bilgi paylaşmak istiyorsak, yorumun doğruluğunun ihlal edilmemesi için tutarlı görüşlere ihtiyacımız var. Bunu yapmak için, bilginin temsilinin yorumlanması bazı matematiksel yapılarla tanımlanır. Bu durumda bilgi işleme, titiz matematiksel yöntemlerle gerçekleştirilebilir.

Bilginin matematiksel tanımlarından biri, bir fonksiyon olarak temsil edilmesidir.

y = f(x,t)

t zaman nerede,

x, bazı alanlarda y'nin değerinin ölçüldüğü bir noktadır. x ve t fonksiyon parametrelerine bağlı olarak bilgiler sınıflandırılabilir.

Parametreler sürekli bir dizi değer alan skaler nicelikler ise, bu şekilde elde edilen bilgilere sürekli (veya analog) denir. Parametrelere belirli bir değişiklik adımı verilirse, bilgiye ayrık denir. Ayrık bilgi evrensel olarak kabul edilir.

Ayrık bilgiler genellikle, alfabetik gösterimin sembolik bilgilerinin özel bir durumu olan dijital bilgilerle tanımlanır. Bir alfabe, herhangi bir nitelikteki sonlu bir semboller kümesidir. Bilgisayar biliminde çok sık olarak, bir alfabenin karakterlerinin diğerinin karakterleriyle temsil edilmesi gerektiğinde, yani bir kodlama işleminin gerçekleştirilmesi gerektiğinde bir durum ortaya çıkar.

Uygulamanın gösterdiği gibi, diğer alfabeleri kodlamanıza izin veren en basit alfabe, genellikle 0 ve 1 ile gösterilen iki karakterden oluşan ikili alfabedir. İkili alfabenin n karakterini kullanarak 2n karakteri kodlayabilirsiniz ve bu yeterlidir. herhangi bir alfabeyi kodlamak için.

İkili alfabenin bir sembolü ile temsil edilebilen değere, minimum bilgi birimi veya bit denir. 8 bit dizisi - bayt. 256 farklı 8 bitlik dizi içeren bir alfabeye bayt alfabesi denir.

Sayı sistemi, sayıları adlandırmak ve yazmak için bir dizi kuraldır. Konumsal ve konumsal olmayan sayı sistemleri vardır.

Sayının basamağının değeri, sayıdaki basamağın konumuna bağlıysa, sayı sistemine konumsal denir. Aksi takdirde, buna konumsal olmayan denir. Bir sayının değeri, bu rakamların sayı içindeki konumuna göre belirlenir.

2. Bilgisayarda sayıların gösterimi. Bir algoritmanın resmileştirilmiş kavramı

32 bit işlemciler 232-1 RAM'e kadar çalışabilir ve adresler 00000000 - FFFFFFFF aralığında yazılabilir. Ancak gerçek modda, işlemci 220-1'e kadar bellekle çalışır ve adresler 00000 - FFFFF aralığındadır. Bayt bellek, hem sabit hem de değişken uzunluktaki alanlarda birleştirilebilir. Word, 2 bayttan oluşan sabit uzunlukta bir alandır, double word 4 baytlık bir alandır. Alan adresleri çift veya tek olabilir, çift adresler işlemleri daha hızlı gerçekleştirir.

Sabit noktalı sayılar, bilgisayarlarda tamsayı ikili sayılar olarak temsil edilir ve boyutları 1, 2 veya 4 bayt olabilir.

Tamsayı ikili sayılar, ikinin tümleyeninde temsil edilir. Pozitif bir sayının tümleyen kodu, sayının kendisine eşittir ve negatif bir sayının tümleyen kodu aşağıdaki formül kullanılarak elde edilebilir:

x = 10n - \x\, burada n sayının bit derinliğidir.

İkili sayı sisteminde, bitleri ters çevirerek, yani birimleri sıfırlarla değiştirerek ve en az anlamlı bite bir ekleyerek ek bir kod elde edilir.

Mantisin bit sayısı, sayıların gösteriminin kesinliğini belirler, makine sipariş bitlerinin sayısı, kayan noktalı sayıların temsil aralığını belirler.

Bir algoritmanın resmileştirilmiş kavramı

Bir algoritma ancak aynı zamanda bazı matematiksel nesneler mevcutsa var olabilir. Bir algoritmanın resmileştirilmiş kavramı, özyinelemeli fonksiyonlar kavramı, normal Markov algoritmaları, Turing makineleri ile bağlantılıdır.

Matematikte, herhangi bir argüman seti için fonksiyonun benzersiz bir değerinin belirlendiği bir yasa varsa, bir fonksiyona tek değerli denir. Bir algoritma böyle bir yasa gibi davranabilir; bu durumda fonksiyonun hesaplanabilir olduğu söylenir.

Özyinelemeli işlevler, hesaplanabilir işlevlerin bir alt sınıfıdır ve hesaplamaları tanımlayan algoritmalara, tamamlayıcı özyinelemeli işlev algoritmaları denir. İlk olarak, eşlik eden algoritmanın önemsiz, açık olduğu temel özyinelemeli işlevler sabitlenir; daha sonra üç kural tanıtılır - temel işlevler temelinde daha karmaşık özyinelemeli işlevlerin elde edildiği ikame, özyineleme ve minimizasyon operatörleri.

Temel işlevler ve bunlara eşlik eden algoritmalar şunlar olabilir:

1) n bağımsız değişkenli, aynı şekilde sıfıra eşit bir fonksiyon. Daha sonra, fonksiyonun işareti φn ise, argüman sayısı ne olursa olsun, fonksiyonun değeri sıfıra eşit olmalıdır;

2) Ψ ni biçimindeki n bağımsız değişkenin kimlik fonksiyonu. Daha sonra, eğer fonksiyonun işareti Ψ ni ise, o zaman fonksiyonun değeri soldan sağa sayılarak i-inci argümanın değeri olarak alınmalıdır;

3) Bir bağımsız argümanın λ-fonksiyonu. Daha sonra, fonksiyonun işareti λ ise, fonksiyonun değeri, argümanın değerinden sonraki değer olarak alınmalıdır.

3. Pascal diline giriş

Dilin temel sembolleri - harfler, sayılar ve özel karakterler - alfabesini oluşturur. Pascal dili aşağıdaki temel sembol setini içerir:

1) 26 Latince küçük harf ve 26 Latince büyük harf:

2) _ (alt çizgi);

3) 10 basamak: 0 1 2 3 4 5 6 7 8 9;

4) operasyon işaretleri:

+ - O / = <> < > <= >= := @;

5) sınırlayıcılar:., ( ) [ ] (..) { } (* *).. : ;

6) belirteçler: ^ # $;

7) hizmet (ayrılmış) sözcükleri: ABSOLUTE, ASSEMBLER, AND, ARRAY, ASM, BEGIN, CASE, CONST, CONSTRUCTOR, DESTRUCTOR, DIV, DO, DOWNTO, ELSE, END, EXPORT, EXTERNAL, FAR, FILE, FOR, FORWARD, FONKSİYON, GOTO, IF, UYGULAMA, IN, INDEX, DEVİR, INLINE, ARAYÜZ, KESİNTİ, ETİKET, KÜTÜPHANE, MOD, NAME, NIL, YAKIN, DEĞİL, OBJECT, OF, OR, PACKED, ÖZEL, PROSEDÜR,

PROGRAM, KAMU, KAYIT, TEKRAR, YERLEŞİM, SET,

SHL, SHR, STRING, SONRA, TO, TİP, BİRİM, KADAR, KULLANIM ALANLARI,

VAR, SANAL, WHILE, WITH, XOR.

Listelenenlere ek olarak, temel karakter kümesi bir boşluk içerir.

Pascal'da bir kural vardır: tür, kullanımından önce gelen bir değişken veya işlevin bildiriminde açıkça belirtilir. Pascal tipi kavramı aşağıdaki ana özelliklere sahiptir:

1) herhangi bir veri türü, bir sabitin ait olduğu, bir değişkenin veya ifadenin alabileceği veya bir işlem veya fonksiyonun üretebileceği bir değerler kümesini tanımlar;

2) bir sabitin, değişkenin veya ifadenin verdiği değerin türü, biçimlerine veya tanımlarına göre belirlenebilir;

3) her işlem veya işlev, sabit tip argümanlar gerektirir ve sabit tip bir sonuç üretir.

Pascal'da skaler ve yapılandırılmış veri türleri vardır. Skaler türler, standart türleri ve kullanıcı tanımlı türleri içerir. Standart türler tamsayı, gerçek, karakter, boole ve adres türlerini içerir.

Tamsayı türleri, değerleri belirli bir bilgisayarda izin verilen tamsayılar kümesi tarafından gerçekleştirilen sabitleri, değişkenleri ve işlevleri tanımlar.

Pascal aşağıdaki operatör önceliğine sahiptir:

1) parantez içindeki hesaplamalar;

2) fonksiyon değerlerinin hesaplanması;

3) tekli işlemler;

4) işlemler * / div mod ve;

5) işlemler + - veya xor;

6) ilişki işlemleri = <> < > <= >=.

4. Standart prosedürler ve işlevler

aritmetik fonksiyonlar

1.Fonksiyon Abs(X); parametrenin mutlak değerini döndürür.

2. İşlev ArcTan(X: Genişletilmiş): Genişletilmiş; argümanın ark tanjantını döndürür.

3. Fonksiyon Exp(X: Gerçek): Gerçek; üssü döndürür.

4.Frac(X: Gerçek): Gerçek; argümanın kesirli kısmını döndürür.

5. Fonksiyon Int(X: Gerçek): Gerçek; argümanın tamsayı kısmını döndürür.

6. Fonksiyon Ln(X: Gerçek): Gerçek; gerçek türde bir x ifadesinin doğal logaritmasını (Ln e = 1) döndürür.

7.Fonksiyon Pi: Genişletilmiş; 3.1415926535 olarak tanımlanan Pi değerini döndürür.

8.Fonksiyon Sin(X: Genişletilmiş): Genişletilmiş; argümanın sinüsünü döndürür.

9.Fonksiyon Sqr(X: Genişletilmiş): Genişletilmiş; argümanın karesini döndürür.

10.Function Sqrt(X: Genişletilmiş): Genişletilmiş; argümanın karekökünü döndürür.

Değer Dönüştürme Prosedürleri ve Fonksiyonları

1. Prosedür Str(X [: Genişlik [: Ondalık Sayılar]]; var S); X sayısını bir dize temsiline dönüştürür.

2. Fonksiyon Chr(X: Bayt): Karakter; ASCII tablosundaki x dizin numarasına sahip karakteri döndürür.

3.Fonksiyon Yüksek(X); parametre aralığındaki en büyük değeri döndürür.

4.FonksiyonDüşük(X); parametre aralığındaki en küçük değeri döndürür.

5. FunctionOrd(X): LongInt; numaralandırılmış bir tür ifadesinin sıra değerini döndürür.

6. İşlev Yuvarlak(X: Genişletilmiş): LongInt; gerçek bir değeri tam sayıya yuvarlar.

7. İşlev Trunc(X: Genişletilmiş): LongInt; gerçek tür değerini bir tamsayıya keser.

8. Prosedür Val(S; var V; var Code: Integer); bir sayıyı S dize değerinden sayısal bir temsile V dönüştürür.

Sıra Değer Prosedürleri ve Fonksiyonları

1. Prosedür Dec(var X [; N: LongInt]); X değişkeninden bir veya N çıkarır.

2. Prosedür Inc(var X [; N: LongInt]); X değişkenine bir veya N ekler.

3. İşlev Tek(X: UzunInt): Boolean; X tek sayıysa True, değilse False döndürür.

4.FunctionPred(X); parametrenin önceki değerini döndürür.

5 Fonksiyon Succ(X); sonraki parametre değerini döndürür.

5. Pascal dil operatörleri

koşullu operatör

Tam bir koşullu ifadenin formatı aşağıdaki gibi tanımlanır:

B ise S1 yoksa S2

burada B bir dallanma (karar verme) koşulu, mantıksal bir ifade veya bir ilişkidir; S1, S2 - bir yürütülebilir ifade, basit veya bileşik.

Koşullu bir ifade yürütülürken, önce B ifadesi değerlendirilir, ardından sonucu analiz edilir: B doğruysa, o zaman S1 ifadesi yürütülür - o zaman dalı ve S2 ifadesi atlanır; B yanlışsa, S2 ifadesi - else dalı yürütülür ve S1 ifadesi atlanır.

İfade seç

Operatör yapısı aşağıdaki gibidir:

Vakalar

c1: talimat1;

c2: talimat2;

...

cn: talimatN;

başka talimat

sonunda;

burada S, değeri hesaplanmakta olan sıralı türde bir ifadedir;

c1, c2,..., on - S ifadelerinin karşılaştırıldığı sıra tipi sabitler; talimat,..., talimatN - sabiti S ifadesinin değeriyle eşleşenin çalıştırıldığı operatörler;

talimat - S ifadesinin değeri c1, o2, on sabitlerinden herhangi biriyle eşleşmediğinde yürütülen bir operatör.

Parametreli döngü ifadesi

for deyimi yürütülmeye başladığında başlangıç ​​ve bitiş değerleri bir kez belirlenir ve bu değerler for deyiminin yürütülmesi boyunca korunur. for ifadesinin gövdesinde yer alan ifade, başlangıç ​​ve bitiş değerleri arasındaki aralıktaki her değer için bir kez yürütülür. Döngü sayacı her zaman bir başlangıç ​​değerine sıfırlanır.

Ön koşullu döngü ifadesi

B S yaparken;

burada B, doğruluğu kontrol edilen mantıksal bir koşuldur (döngüyü sonlandırmak için bir koşuldur)$;

S - döngü gövdesi - bir ifade. Bir ifadenin tekrarını denetleyen ifade Boolean türünde olmalıdır. İç deyim yürütülmeden önce değerlendirilir. İç ifade, ifade Trie olarak değerlendirildiği sürece tekrar tekrar yürütülür. İfade baştan False olarak değerlendirilirse, önkoşul döngü ifadesinde yer alan ifade yürütülmez.

Son koşullu döngü ifadesi

S'yi B'ye kadar tekrarlayın;

burada B, doğruluğu kontrol edilen mantıksal bir koşuldur (döngüyü sonlandırmak için bir koşuldur);

S - bir veya daha fazla döngü gövdesi ifadesi. İfadenin sonucu boole türünde olmalıdır. Yineleme ve anahtar sözcükler arasında yer alan ifadeler, ifade True olarak değerlendirilene kadar sırayla yürütülür. İfade dizisinin her yürütülmesinden sonra ifade değerlendirildiği için ifade dizisi en az bir kez yürütülecektir.

6. Yardımcı algoritma kavramı

Problem çözme algoritması, problemin tamamını ayrı alt görevlere ayırarak tasarlanmıştır. Tipik olarak, alt görevler alt rutinler olarak uygulanır.

Bir alt program, parametre adı verilen bazı gelen niceliklerin farklı değerleriyle ana algoritmada tekrar tekrar kullanılan bazı yardımcı algoritmalardır.

Programlama dillerinde alt yordam, programda yalnızca bir yerde tanımlanan ve yazılan, ancak programda bir veya daha fazla noktadan yürütme için çağrılabilen bir dizi ifadedir. Her alt program benzersiz bir adla tanımlanır.

Pascal'da prosedürler ve işlevler olmak üzere iki tür alt program vardır. Bir prosedür ve bir işlev, adlandırılmış bir bildirimler ve ifadeler dizisidir. Prosedürleri veya fonksiyonları kullanırken, program, prosedür veya fonksiyonun metnini ve prosedür veya fonksiyona yapılan bir çağrıyı içermelidir. Açıklamada belirtilen parametrelere biçimsel, alt programa yapılan çağrıda belirtilenlere gerçek adı verilir. Tüm resmi parametreler aşağıdaki kategorilere ayrılabilir:

1) parametreler-değişkenler;

2) sabit parametreler;

3) parametre değerleri;

4) prosedür parametreleri ve fonksiyon parametreleri, yani prosedür tipi parametreler;

5) türlenmemiş değişken parametreler.

Prosedürler ve işlevler metinleri, prosedürler ve işlevler açıklamalarına yerleştirilmiştir.

Prosedür ve fonksiyon isimlerini parametre olarak geçirme

Birçok problemde, özellikle hesaplamalı matematikte, prosedür ve fonksiyonların adlarını parametre olarak geçirmek gerekir. Bunu yapmak için, TURBO PASCAL, açıklanana bağlı olarak prosedürel veya işlevsel olmak üzere yeni bir veri türü tanıttı. (Prosedür ve fonksiyon tipleri, tip bildirimi bölümünde açıklanmıştır.)

Bir fonksiyon ve prosedür tipi, bir prosedürün başlığı ve resmi parametrelerin bir listesini içeren ancak adı olmayan bir fonksiyon olarak tanımlanır. Parametresiz bir fonksiyon veya prosedür tipi tanımlamak mümkündür, örneğin:

tip

Proc = prosedür;

Prosedürel veya işlevsel bir tür bildirdikten sonra, resmi parametreleri - prosedürlerin ve işlevlerin adlarını - tanımlamak için kullanılabilir. Ayrıca, adları gerçek parametre olarak geçirilecek olan gerçek prosedürleri veya işlevleri yazmak gerekir.

7. Pascal'daki prosedürler ve işlevler

Pascal'daki Prosedürler

Prosedürün açıklaması, modül bağlantı bölümü dışında program bloğundan farklı olmayan bir başlık ve bir bloktan oluşur. Başlık, Prosedür anahtar sözcüğünden, prosedürün adından ve parantez içindeki isteğe bağlı bir resmi parametre listesinden oluşur:

Prosedür <ad> [(<resmi parametrelerin listesi>)];

Her resmi parametre için türü tanımlanmalıdır. Bir prosedür açıklamasındaki parametre grupları noktalı virgülle ayrılır.

Prosedürün yapısı programa neredeyse tamamen benzer. Ancak prosedür bloğunda modül bağlantı bölümü yoktur. Blok iki bölümden oluşur: tanımlayıcı ve yönetici. Açıklayıcı kısım, prosedürün unsurlarının bir tanımını içerir. Ve yürütme bölümünde, gerekli sonucun elde edilmesini sağlayan prosedür için erişilebilir program öğeleri (örneğin, küresel değişkenler ve sabitler) ile eylemler belirtilir. Bir prosedürün talimat bölümü, bir programın talimat bölümünden yalnızca, end anahtar sözcüğünün bölümü nokta yerine noktalı virgülle bitirmesi bakımından farklıdır.

Bir prosedürü çağırmak için bir prosedür çağrısı ifadesi kullanılır. Prosedürün adından ve parantez içine alınmış bir argüman listesinden oluşur. Prosedür çalıştırıldığında yürütülecek deyimler, prosedür modülünün deyim bölümünde yer almaktadır.

Bazen bir prosedürün kendisini aramasını istersiniz. Bu arama yöntemine özyineleme denir. Özyineleme, ana görevin, her biri ana görevle çakışan bir algoritmaya göre uygulanan alt görevlere bölünebildiği durumlarda yararlıdır.

Pascal'daki İşlevler

Bir işlev bildirimi, programın değerin hesaplandığı ve döndürüldüğü bölümünü tanımlar. Bir fonksiyon açıklaması bir başlık ve bir bloktan oluşur. Başlık, Function anahtar sözcüğünü, işlevin adını, parantez içine alınmış isteğe bağlı bir biçimsel parametre listesini ve işlevin dönüş türünü içerir. Fonksiyon başlığının genel görünümü aşağıdaki gibidir:

<ad> [(<resmi parametrelerin listesi>)]: <dönüş türü>;

Turbo Pascal 7.0'ın Borland uygulamasında, bir işlevin dönüş değeri bileşik türden olamaz. Borland Delphi entegre geliştirme ortamlarında kullanılan Object Pascal dili, dosya türü dışında her türlü sonuç döndürmeye izin verir.

Bir fonksiyon bloğu, yapı olarak bir prosedür bloğuna benzer bir yerel bloktur. Bir fonksiyonun gövdesi, sol tarafında fonksiyonun adı olan en az bir atama talimatı içermelidir. İşlev tarafından döndürülen değeri belirleyen odur. Bu tür birkaç komut varsa, işlevin sonucu, en son yürütülen atama talimatının değeri olacaktır.

İşlev çağrıldığında işlev etkinleştirilir. Bir fonksiyon çağrıldığında, fonksiyon tanımlayıcısı ve fonksiyonu değerlendirmek için gereken parametreler belirtilir. Bir işlev çağrısı, ifadelere işlenen olarak dahil edilebilir. İfade değerlendirildiğinde, işlev yürütülür ve işlenenin değeri, işlev tarafından döndürülen değer olur.

İşlev bloğunun operatör kısmı, işlev etkinleştirildiğinde yürütülmesi gereken ifadeleri belirtir. Bir modül, bir işlev tanımlayıcısına bir değer atayan en az bir atama ifadesi içermelidir. Fonksiyonun sonucu atanan son değerdir. Böyle bir atama ifadesi yoksa veya yürütülmediyse, işlevin dönüş değeri tanımsızdır.

Bir modül içindeki bir işlev - bir işlev çağrılırken bir işlev tanımlayıcısı kullanılırsa, işlev yinelemeli olarak yürütülür.

8. İletim açıklamaları ve alt programların bağlantısı. Direktif

Bir program birkaç alt program içerebilir, yani programın yapısı karmaşık olabilir. Ancak, bu altyordamlar aynı yuvalama düzeyinde olabilir, bu nedenle, özel bir iletme bildirimi kullanılmadığı sürece, önce altyordam bildirimi, ardından ona yapılan çağrı gelmelidir.

Bir ifade bloğu yerine bir iletme yönergesi içeren bir prosedür bildirimine iletme bildirimi denir. Bu bildirimden sonra bir yerde, tanımlayıcı bir bildirimle bir prosedür tanımlanmalıdır. Tanımlayıcı bir bildirim, aynı prosedür tanımlayıcısını kullanan ancak resmi parametreler listesini atlayan ve bir ifade bloğu içeren bir bildirimdir. İleri bildirim ve tanımlayıcı bildirim, prosedür ve işlev bildiriminin aynı bölümünde görünmelidir. Bunlar arasında, ileri bildirim prosedürüne atıfta bulunabilecek diğer prosedürler ve işlevler bildirilebilir. Böylece karşılıklı özyineleme mümkündür.

İleri açıklama ve tanımlayıcı açıklama, prosedürün tam açıklamasıdır. Prosedürün ileri açıklama kullanılarak açıklandığı kabul edilir.

Program oldukça fazla alt program içeriyorsa, program görsel olmaktan çıkar, içinde gezinmek zor olacaktır. Bunu önlemek için bazı rutinler diskte kaynak dosya olarak saklanır ve gerekirse derleme aşamasında bir derleme yönergesi kullanılarak ana programa bağlanır.

Yönerge, normal bir yorumun olabileceği bir programda herhangi bir yere yerleştirilebilen özel bir yorumdur. Bununla birlikte, yönergenin özel bir gösterimi olması bakımından farklılık gösterirler: boşluk bırakmadan kapatma parantezinden hemen sonra $ işareti yazılır ve ardından yine boşluk olmadan yönerge belirtilir.

Örnek:

1) {$E+} - matematik yardımcı işlemcisini taklit eder;

2) {$F+} - uzak türdeki arama prosedürlerini ve işlevlerini oluşturur;

3) {$N+} - matematik yardımcı işlemcisini kullanın;

4) {$R+} - aralıkların sınırların dışında olup olmadığını kontrol edin.

Bazı derleme anahtarları bir parametre içerebilir, örneğin:

{$I dosya adı} - adlandırılmış dosyayı derlenmiş programın metnine dahil eder

9. Alt program parametreleri

Bir prosedürün veya fonksiyonun tanımı, resmi parametrelerin bir listesini belirtir. Resmi bir parametre listesinde bildirilen her parametre, açıklanan prosedür veya fonksiyon için yereldir ve bu prosedür veya fonksiyonla ilişkili modüldeki tanımlayıcısı tarafından referans alınabilir.

Üç tür parametre vardır: değer, değişken ve türlenmemiş değişken. Aşağıdaki gibi karakterize edilirler:

1. Önünde anahtar sözcüğü olmayan bir parametre grubu, değer parametrelerinin bir listesidir.

2. Öncesinde const anahtar sözcüğü ve ardından bir tür gelen bir parametre grubu, sabit parametrelerin bir listesidir.

3. Var anahtar sözcüğünden önce gelen ve ardından bir tür gelen bir grup parametre, değişken parametrelerinin bir listesidir.

Değer parametreleri

Biçimsel bir değer parametresi, prosedür veya işlev çağrıldığında ilgili gerçek parametreden başlangıç ​​değerini alması dışında, prosedür veya işlev için yerel bir değişken gibi ele alınır. Resmi bir değer parametresinin uğradığı değişiklikler, gerçek parametrenin değerini etkilemez. Karşılık gelen gerçek değer parametre değeri bir ifade olmalı ve değeri bir dosya türü veya bir dosya türü içeren herhangi bir yapı türü olmamalıdır.

Gerçek parametre, resmi değer parametresinin türüyle uyumlu atama türünde olmalıdır. Parametre dize türündeyse, biçimsel parametrenin boyutu 255 olacaktır.

Sabit Parametreler

Bir alt rutinin gövdesinde, sabit bir parametrenin değeri değiştirilemez. Parametreler-sabitleri, alt programdaki değişiklikleri istenmeyen ve yasaklanması gereken parametreleri düzenlemek için kullanılabilir.

Değişken parametreler

Bir alt programdan bir çağrı bloğuna bir değer geçirilmesi gerektiğinde bir değişken parametresi kullanılır. Bu durumda, altyordam çağrıldığında, biçimsel parametrenin yerini değişken argümanı alır ve resmi parametrede yapılan herhangi bir değişiklik argümana yansıtılır.

Prosedürel Değişkenler

Bir prosedür tipi tanımlandıktan sonra, bu tipteki değişkenleri tanımlamak mümkün hale gelir. Bu tür değişkenlere prosedürel değişkenler denir. Tamsayı türünde bir değer atanabilen bir tamsayı değişkeni gibi, bir prosedürel değişkene de bir prosedürel türde bir değer atanabilir. Böyle bir değer elbette başka bir prosedür değişkeni olabilir, fakat aynı zamanda bir prosedür veya fonksiyon tanımlayıcısı da olabilir. Bu bağlamda, bir prosedürün veya fonksiyonun bildirimi, değeri prosedür veya fonksiyon olan özel bir tür sabitin tanımı olarak görülebilir.

Diğer herhangi bir atamada olduğu gibi, sol taraftaki ve sağ taraftaki değişkenin değerlerinin atama uyumlu olması gerekir. Prosedürel tiplerin atama uyumlu olması için aynı sayıda parametreye sahip olması ve karşılık gelen pozisyonlardaki parametrelerin aynı tipte olması gerekir. Prosedürel tip bildirimindeki parametre adlarının hiçbir etkisi yoktur.

Ek olarak, atama uyumluluğunu sağlamak için, bir prosedür veya işlev, bir prosedür değişkenine atanacaksa, standart veya yuvalanmış olmamalıdır.

10. Alt program parametrelerinin türleri

Değer parametreleri

Biçimsel bir değer parametresi yerel bir değişken olarak ele alınır; prosedür veya işlev çağrıldığında başlangıç ​​değerini karşılık gelen gerçek parametreden alır. Resmi bir değer parametresinin uğradığı değişiklikler, gerçek parametrenin değerini etkilemez. value parametresinin karşılık gelen gerçek değeri bir ifade olmalı ve değeri dosya türünde olmamalıdır.

Sabit Parametreler

Biçimsel sabit parametreler, bir prosedür veya işlev çağrıldığında değerlerini alır. Resmi bir sabit parametreye atamalara izin verilmez. Resmi bir sabit parametre, başka bir prosedüre veya işleve gerçek bir parametre olarak geçirilemez.

Değişken parametreler

Bir prosedürden veya fonksiyondan çağıran programa bir değerin iletilmesi gerektiğinde bir değişken parametresi kullanılır. Etkinleştirildiğinde, resmi parametre değişkeni gerçek değişkenle değiştirilir, resmi parametre değişkenindeki değişiklikler gerçek parametreye yansıtılır.

Türsüz Parametreler

Resmi parametre türlenmemiş bir değişken parametresi olduğunda, karşılık gelen gerçek parametre bir değişken veya sabit referans olabilir. var anahtar sözcüğüyle bildirilen türlenmemiş bir parametre değiştirilebilirken, const anahtar sözcüğüyle bildirilen türlenmemiş bir parametre salt okunurdur.

Prosedürel Değişkenler

Bir prosedür tipi tanımladıktan sonra, bu tipteki değişkenleri tanımlamak mümkün hale gelir. Bu tür değişkenlere prosedürel değişkenler denir. Bir prosedürel değişkene, prosedür tipi bir değer atanabilir.

Atamadaki prosedür veya işlev şöyle olmalıdır:

1) standart değil;

2) iç içe değil;

3) satır içi bir prosedür değil;

4) kesme prosedürü ile değil.

Prosedür Türü Parametreleri

Prosedürel tipler herhangi bir bağlamda kullanılabildiğinden, prosedürleri ve fonksiyonları parametre olarak alan prosedürleri veya fonksiyonları tanımlamak mümkündür. Yordam türü parametreler, özellikle birden çok yordam veya işlev üzerinde ortak eylemler gerçekleştirmeniz gerektiğinde kullanışlıdır.

Bir prosedür veya fonksiyon parametre olarak geçirilecekse, atama ile aynı tip uyumluluk kurallarına uymalıdır. Yani, bu tür prosedürler veya işlevler far yönergesi ile derlenmelidir, yerleşik işlevler olamazlar, iç içe geçemezler ve satır içi veya kesme öznitelikleri ile tanımlanamazlar.

11. Pascal'da dize türü. String Tipi Değişkenler İçin Prosedürler ve Fonksiyonlar

Belirli bir uzunluktaki karakter dizisine string denir. Dize türündeki değişkenler, değişkenin adı, ayrılmış sözcük dizesi ve isteğe bağlı olarak, ancak zorunlu olmamakla birlikte, köşeli parantez içinde maksimum boyutu, yani dizenin uzunluğunu belirterek tanımlanır. Maksimum dize boyutunu ayarlamazsanız, varsayılan olarak 255 olacaktır, yani dize 255 karakterden oluşacaktır.

Bir dizgenin her elemanına numarası ile başvurulabilir. Bununla birlikte, diziler, dizilerde olduğu gibi, eleman eleman değil, bir bütün olarak girdi ve çıktıdır. Girilen karakter sayısı, maksimum dize boyutunda belirtilenden fazla olmamalıdır, bu nedenle, böyle bir fazlalık meydana gelirse, "ekstra" karakterler yok sayılır.

String Tipi Değişkenler İçin Prosedürler ve Fonksiyonlar

1. Fonksiyon Kopyalama(S: String; Index, Count: Integer): String;

Bir dizenin alt dizesini döndürür. S, String türünde bir ifadedir. Index ve Count tamsayı tipi ifadelerdir. İşlev, Dizin konumundan başlayarak Sayım karakterlerini içeren bir dize döndürür. Dizin S uzunluğundan büyükse, işlev boş bir dize döndürür.

2. Prosedür Sil(var S: String; Index, Count: Integer);

Dizin konumundan başlayarak S dizesinden Count uzunluğundaki karakterlerden oluşan bir alt dizeyi kaldırır. S, String türünde bir değişkendir. Index ve Count tamsayı tipi ifadelerdir. Dizin S uzunluğundan büyükse, hiçbir karakter kaldırılmaz.

3. Prosedür Ekle(Kaynak: Dize; var S: Dize; İndeks: Tamsayı); Belirtilen bir konumdan başlayarak bir alt dizeyi bir dizede birleştirir. Kaynak, String türünde bir ifadedir. S, herhangi bir uzunluktaki String türünde bir değişkendir. İndeks, tamsayı türünün bir ifadesidir. Ekle, Kaynak'ı S konumundan başlayarak S'ye ekler.

4. Fonksiyon Uzunluğu(S: Dize): Tamsayı;

S dizesinde gerçekte kullanılan karakter sayısını döndürür. Boş sonlandırılmış dizeleri kullanırken, karakter sayısının mutlaka bayt sayısına eşit olmadığını unutmayın.

5. Fonksiyon Pos(Substr: String; S: String): Tamsayı; Bir dizede bir alt dize arar. Pos, S içindeki Substr'yi arar

ve S içindeki Substr'nin ilk karakterinin indeksi olan bir tamsayı değeri döndürür. Substr bulunmazsa, Pos sıfır döndürür.

12. Kayıtlar

Kayıt, farklı türlere ait sınırlı sayıda mantıksal olarak ilişkili bileşenlerin bir koleksiyonudur. Bir kaydın bileşenleri, her biri bir adla tanımlanan alanlar olarak adlandırılır. Bir kayıt alanı, alanın adını ve ardından alanın türünü belirtmek için iki nokta üst üste işareti içerir. Kayıt alanları, dosya türü dışında Pascal'da izin verilen herhangi bir türde olabilir.

Pascal dilinde bir kaydın tanımı, RECORD servis kelimesi ve ardından kaydın bileşenlerinin açıklaması kullanılarak gerçekleştirilir. Girişin açıklaması END servis kelimesi ile biter.

Örneğin, bir not defterinde soyadları, baş harfleri ve telefon numaraları bulunur, bu nedenle not defterinde ayrı bir satırı aşağıdaki giriş olarak göstermek uygundur:

Satır yazın = Kayıt

FIO: Dize[20];

TEL: Dizi[7];

sonunda;

var str: Satır;

Kayıt açıklamaları, tür adını kullanmadan da mümkündür, örneğin:

var str: Kayıt

FIO: Dize[20];

TEL: Dizi[7];

sonunda;

Bir kayda bir bütün olarak atıfta bulunulmasına, yalnızca atama işaretinin solunda ve sağında aynı türdeki kayıt adlarının kullanıldığı atama ifadelerinde izin verilir. Diğer tüm durumlarda, ayrı kayıt alanları çalıştırılır. Tek bir kayıt bileşenine atıfta bulunmak için, kaydın adını belirtmeli ve nokta ile ayırarak istenen alanın adını belirtmelisiniz. Böyle bir isme bileşik ad denir. Bir kayıt bileşeni ayrıca bir kayıt olabilir, bu durumda ayırt edici ad iki değil, daha fazla ad içerecektir.

Referans kaydı bileşenleri, with append operatörü kullanılarak basitleştirilebilir. Her alanı karakterize eden bileşik adları yalnızca alan adlarıyla değiştirmenize ve birleştirme ifadesinde kayıt adını tanımlamanıza olanak tanır.

Bazen tek bir kaydın içeriği, alanlarından birinin değerine bağlıdır. Pascal dilinde, ortak ve değişken bölümlerden oluşan bir kayıt açıklamasına izin verilir. Varyant kısmı, yapının P durumu kullanılarak belirtilir; burada P, kaydın ortak bölümündeki alanın adıdır. Bu alan tarafından kabul edilen olası değerler varyant deyiminde olduğu gibi aynı şekilde listelenir. Ancak, bir varyant deyiminde olduğu gibi gerçekleştirilecek eylemi belirtmek yerine, varyant alanları parantez içinde belirtilir. Varyant parçasının açıklaması, servis kelimesi sonu ile biter. Alan tipi P, varyant bölümünün başlığında belirtilebilir. Kayıtlar, yazılan sabitler kullanılarak başlatılır.

13. Setler

Pascal dilinde küme kavramı, kümelerin matematiksel kavramına dayanır: farklı öğelerin sınırlı bir koleksiyonudur. Somut bir küme türü oluşturmak için numaralandırılmış veya aralıklı bir veri türü kullanılır. Bir kümeyi oluşturan elemanların tipine temel tip denir.

İşlev sözcükleri kümesi kullanılarak çoklu bir tür tanımlanır, örneğin:

tip M = B Kümesi;

M çoğul tür olduğunda, B temel türdür.

Değişkenlerin çoğul bir türe ait olup olmadığı doğrudan değişken bildirimi bölümünde belirlenebilir.

Küme türü sabitleri, virgülle ayrılmış, temel tür öğelerinin veya aralıkların parantez içine alınmış bir dizisi olarak yazılır.

Atama (:=), birleşim (+), kesişim (*) ve çıkarma (-) işlemleri, bir küme türündeki değişkenlere ve sabitlere uygulanabilir. Bu işlemlerin sonucu çoğul türün bir değeridir:

1) ['A','B'] + ['A','D'] ['A','B','D'] verir;

2) ['A'] * ['A','B','C'] ['A'] verecek;

3) ['A','B','C'] - ['A','B'] ['C'] verecek

Aşağıdaki işlemler birden çok değere uygulanabilir: kimlik (=), kimlik dışı (<>), (<=), içerir (>=). Bu işlemlerin sonucu bir boole türüne sahiptir:

1) ['A','B'] = ['A','C'] YANLIŞ verecek;

2) ['A','B'] <> ['A','C'] DOĞRU verecek;

3) ['B'] <= ['B','C'] DOĞRU verecek;

4) ['C','D'] >= ['A'] YANLIŞ verecektir.

Bu işlemlere ek olarak, bir küme tipinin değerleri ile çalışmak için, işlem işaretinin solundaki taban tipinin elemanının işlem işaretinin sağındaki kümeye ait olup olmadığını kontrol eden işlemde kullanılır. . Bu işlemin sonucu bir boole.

Birden çok türdeki değerler, bir G/Ç listesinin öğeleri olamaz. Pascal dilinden derleyicinin her somut uygulamasında, kümenin üzerine kurulduğu taban tipinin eleman sayısı sınırlıdır.

14. Dosyalar. Dosya işlemleri

Dosya veri türü, aynı türdeki bileşenlerin sıralı bir koleksiyonunu tanımlar.

Dosyalarla çalışırken G/Ç işlemleri yapılır. Giriş işlemi, verilerin harici bir cihazdan belleğe aktarılmasıdır, çıkış işlemi ise verilerin bellekten harici bir cihaza aktarılmasıdır.

Metin dosyaları

Bu tür dosyaları tanımlamak için bir Metin türü vardır:

var TF1, TF2: Metin;

Bileşen Dosyaları

Bir bileşen veya yazılan dosya, bileşenlerinin beyan edilen tipine sahip bir dosyadır.

type M = T Dosyası;

M dosya türünün adıdır;

T - bileşen tipi. İşlemler prosedürler kullanılarak gerçekleştirilir.

Yaz(f, X1,X2,...XK)

Türlenmemiş dosyalar

Yazılmamış dosyalar, bilgisayar belleğinin keyfi bölümlerini diske yazmanıza ve okumanıza izin verir.

var f: Dosya;

1. Prosedür Atama(var F; DosyaAdı: Dize); Bir dosya adını bir değişkene eşler.

2. Prosedür Kapat(varF);

Dosya değişkeni ile harici disk dosyası arasındaki bağlantıyı keser ve dosyayı kapatır.

3.Function Eof(var F): Boolean;

{Yazılan veya yazılmayan dosyalar}

Fonksiyon Eof[(var F: Metin)]: Boolean;

{metin dosyaları}

Bir dosyanın sonunu kontrol eder.

4. Prosedür Silme(var F);

F ile ilişkili harici dosyayı siler.

5. Function FileSize(var F): Tamsayı;

F dosyasının bayt cinsinden boyutunu döndürür.

6.Fonksiyon FilePos(varF): LongInt;

Bir dosya içindeki geçerli konumu döndürür.

7. Prosedür Sıfırlama(var F [: Dosya; RecSize: Word]);

Mevcut bir dosyayı açar.

8. Prosedür Yeniden Yazma(var F: Dosya [; Yeniden Boyutlandır: Word]);

Yeni bir dosya oluşturur ve açar.

9. Prosedür Arama(var F; N: LongInt);

Geçerli dosya konumunu belirtilen bileşene taşır.

10. Prosedür Ekle(var F: Metin);

İlave.

11.Function Eoln[(var F: Metin)]: Boolean;

Bir dizenin sonunu kontrol eder.

12. Prosedür Okuma(F, V1 [, V2..., Vn]);

{Yazılan ve yazılmayan dosyalar}

Prosedür Okuma([var F: Metin;] V1 [, V2..., Vn]);

{metin dosyaları}

Bir dosya bileşenini bir değişkene okur.

13. Prosedür Readln([var F: Text;] V1 [, V2..., Vn]);

Satır sonu işaretçisi de dahil olmak üzere dosyadaki bir karakter dizisini okur ve bir sonrakinin başına gider.

14. Fonksiyon SeekEof[(var F: Metin)]: Boolean;

Dosya sonu işaretini döndürür. Yalnızca açık metin dosyaları için kullanılır.

15. Prosedür Writeln([var F: Text;] [P1, P2..., Pn]);

{metin dosyaları}

Bir Yazma işlemi gerçekleştirir ve ardından dosyaya bir satır sonu işaretçisi yerleştirir.

15. Modüller. Modül türleri

Pascal'daki bir birim (UNIT), özel olarak tasarlanmış bir alt program kitaplığıdır. Bir modül, bir programın aksine, kendi başına yürütülmek üzere başlatılamaz, yalnızca yapım programlarına ve diğer modüllere katılabilir.

Pascal'daki bir modül, ayrı olarak depolanmış ve bağımsız olarak derlenmiş bir program birimidir.

Modülün tüm program öğeleri iki bölüme ayrılabilir:

1) diğer programlar veya modüller tarafından kullanılması amaçlanan program öğeleri, bu tür öğeler modülün dışında görünür olarak adlandırılır;

2) yalnızca modülün çalışması için gerekli olan yazılım öğelerine görünmez (veya gizli) denir.

birim <modül adı>; {modül başlığı}

arayüzey

{modülün görünür program öğelerinin açıklaması}

uygulama

{modülün gizli programlama öğelerinin açıklaması}

başlamak

{modül öğesi başlatma ifadeleri}

sonu.

Bir modülde bildirilen bir değişkene atıfta bulunmak için, nokta ile ayrılmış modül adı ve değişken adından oluşan bir bileşik ad kullanmalısınız.

Modüllerin özyinelemeli kullanımı yasaktır. Modül türlerini listeleyelim.

1. SİSTEM modülü.

SYSTEM modülü, G/Ç, dizi işleme, kayan nokta işlemleri ve dinamik bellek ayırma gibi tüm yerleşik özellikler için alt düzey destek rutinleri uygular.

2. DOS modülü.

Dos modülü, GetTime, SetTime, DiskSize vb. gibi en sık kullanılan DOS çağrılarına eşdeğer olan çok sayıda Pascal rutini ve işlevi uygular.

3. CRT modülü.

CRT modülü, ekran modu kontrolü, genişletilmiş klavye kodları, renkler, pencereler ve sesler gibi bilgisayarın özellikleri üzerinde tam kontrol sağlayan bir dizi güçlü program uygular.

4. GRAFİK modülü.

Bu modülde yer alan prosedür ve fonksiyonları kullanarak ekranda çeşitli grafikler oluşturabilirsiniz.

5. OVERLAY modülü.

OVERLAY modülü, gerçek modlu bir DOS programının bellek gereksinimlerini azaltmanıza olanak tanır.

16. Referans veri türü. dinamik bellek. dinamik değişkenler. Dinamik bellekle çalışma

Statik bir değişken (statik olarak tahsis edilmiş), programda açıkça bildirilen bir değişkendir ve adıyla anılır. Statik değişkenlerin bellekte yerleştirileceği yer, program derlendiğinde belirlenir. Bu tür statik değişkenlerin aksine, Pascal programları dinamik değişkenler oluşturabilir. Dinamik değişkenlerin temel özelliği, program yürütülürken oluşturulmaları ve bunlar için bellek ayrılmasıdır.

Dinamik değişkenler, dinamik bir bellek alanına (yığın alanı) yerleştirilir. Bir dinamik değişken, değişken bildirimlerinde açıkça belirtilmez ve adıyla başvurulamaz. Bu tür değişkenlere işaretçiler ve referanslar kullanılarak erişilir.

Referans türü (işaretçi), temel tür adı verilen belirli bir türdeki dinamik değişkenlere işaret eden bir dizi değeri tanımlar. Bir başvuru tipi değişken, bellekteki dinamik bir değişkenin adresini içerir. Temel tür bildirilmemiş bir tanımlayıcıysa, işaretçi türüyle tür bildiriminin aynı bölümünde bildirilmelidir.

Ayrılmış sözcük nil, hiçbir şeye işaret etmeyen bir işaretçi değerine sahip bir sabiti belirtir.

Dinamik değişkenlerin tanımına bir örnek verelim.

var p1, p2: ^gerçek;

p3, p4: ^tamsayı;

...

Dinamik Hafıza Prosedürleri ve Fonksiyonları

1. Prosedür Yeni{var p: İşaretçi).

p" dinamik değişkenini yerleştirmek için dinamik bellek alanında yer ayırır ve adresini p işaretçisine atar.

2. Prosedür At (var p: İşaretçi).

Yeni prosedür tarafından dinamik değişken tahsisi için ayrılan belleği boşaltır ve p işaretçisinin değeri tanımsız hale gelir.

3. Prosedür GetMem(var p: İşaretçi; boyut: Word).

Yığın alanında bir bellek bölümü tahsis eder, başlangıcının adresini p işaretçisine atar, bölümün bayt cinsinden boyutu size parametresi tarafından belirlenir.

4. Prosedür FreeMem(varp: İşaretçi; boyut: Word).

Başlangıç ​​adresi p işaretçisi tarafından belirtilen ve boyutu, size parametresi tarafından belirtilen bellek alanını serbest bırakır. İşaretçi değeri p tanımsız hale gelir.

5. Mark{var p: Pointer) prosedürü, çağrı sırasında boş dinamik bellek bölümünün başlangıcının adresini p işaretçisine yazar.

6. Release(var p: Pointer) prosedürü, Mark prosedürü tarafından p pointer'a yazılan adresten başlayarak dinamik belleğin bir bölümünü serbest bırakır, yani Mark prosedürüne yapılan çağrıdan sonra kullanılan dinamik belleği temizler.

7. MaxAvail işlevi: Longint, dinamik belleğin en uzun boş bölümünün bayt cinsinden uzunluğunu döndürür.

8. MemAvail işlevi: Longint, bayt cinsinden toplam boş dinamik bellek miktarını döndürür.

9. SizeOf(X):Word helper işlevi, X tarafından işgal edilen boyutu bayt cinsinden döndürür; burada X, herhangi bir türün değişken adı veya tür adı olabilir.

17. Soyut veri yapıları

Diziler, kümeler ve kayıtlar gibi yapılandırılmış veri türleri, programın tüm yürütülmesi sırasında boyutları değişmediği için statik yapılardır.

Bir problemin çözümü sırasında genellikle veri yapılarının boyutlarını değiştirmesi gerekir. Bu tür veri yapılarına dinamik denir. Bunlar yığınları, kuyrukları, listeleri, ağaçları vb. içerir.

Dinamik yapıların diziler, kayıtlar ve dosyalar yardımıyla tanımlanması, bilgisayar belleğinin israfına yol açar ve problem çözme süresini artırır.

Herhangi bir dinamik yapının her bileşeni, en az iki alan içeren bir kayıttır: "işaretçi" türünde bir alan ve ikincisi - veri yerleştirme için. Genel olarak, bir kayıt bir değil, birkaç işaretçi ve birkaç veri alanı içerebilir. Bir veri alanı bir değişken, bir dizi, bir küme veya bir kayıt olabilir.

İşaretleme kısmı listenin bir elemanının adresini içeriyorsa, liste tek yönlü (veya tek bağlantılı) olarak adlandırılır. İki bileşen içeriyorsa, çift bağlantılıdır. Listelerde çeşitli işlemler gerçekleştirebilirsiniz, örneğin:

1) listeye bir eleman eklemek;

2) belirli bir anahtarla listeden bir öğenin çıkarılması;

3) belirli bir anahtar alan değerine sahip bir öğe arayın;

4) listenin öğelerini sıralamak;

5) listenin iki veya daha fazla listeye bölünmesi;

6) iki veya daha fazla listeyi tek bir listede birleştirmek;

7) diğer işlemler.

Bununla birlikte, bir kural olarak, çeşitli problemlerin çözümünde tüm işlemlere ihtiyaç duyulmaz. Bu nedenle uygulanması gereken temel işlemlere bağlı olarak farklı liste türleri vardır. Bunların en popülerleri yığın ve sıradır.

18. Yığınlar

Yığın dinamik bir veri yapısıdır, bir bileşenin eklenmesi ve bir ucundan yapılan bir bileşenin çıkarılması yığının tepesi olarak adlandırılır. Yığın, LIFO (Son Giren İlk Çıkar) - "Son giren ilk çıkar" ilkesine göre çalışır.

Yığınlar üzerinde gerçekleştirilen genellikle üç işlem vardır:

1) yığının ilk oluşumu (birinci bileşenin kaydı);

2) yığına bir bileşen eklemek;

3) bileşenin seçimi (silme).

Bir yığın oluşturmak ve onunla çalışmak için, ilki yığının üstünü belirleyen ve ikincisi yardımcı olan "işaretçi" türünde iki değişkeniniz olmalıdır.

Örnek. Yığın oluşturan, buna rastgele sayıda bileşen ekleyen ve ardından tüm bileşenleri okuyan bir program yazın.

Program Yığını;

crt kullanır;

tip

Alfa = Dizi[10];

PBileşik = ^Bileşik;

Comp = kayıt

SD: Alfa;

pSonraki: PComp

sonunda;

var

pÜst: PCmp;

sc: Alfa;

ProsedürStack oluşturun(var pTop: PComp; var sC: Alfa);

başlamak

Yeni(pTop);

pTop^.pSonraki:= NIL;

pTop^.sD:= sC;

sonunda;

ProsedürComp'u ekleyin(var pTop: PComp; var sC: Alfa);

var pAux: PCmp;

başlamak

YENİ(pAux);

pAux^.pSonraki:= pÜst;

pTop:=pAux;

pTop^.sD:= sC;

sonunda;

Prosedür DelComp(var pTop: PComp; var sC: ALFA);

başlamak

sC:= pTop^.sD;

pTop:= pTop^.pSonraki;

sonunda;

başlamak

clrscr;

writeln(STRING GİRİN);

readln(sc);

CreateStack(pTop, sc);

tekrar et

writeln(STRING GİRİN);

readln(sc);

AddComp(pTop, sc);

sC = 'SON'a kadar;

19. Kuyruklar

Kuyruk, bir bileşenin bir uçta eklendiği ve diğer uçta alındığı dinamik bir veri yapısıdır. Sıra, FIFO (İlk Giren İlk Çıkar) - "İlk giren ilk hizmet alır" ilkesine göre çalışır.

Örnek. Bir kuyruk oluşturan, buna rastgele sayıda bileşen ekleyen ve ardından tüm bileşenleri okuyan bir program yazın.

Program SIRA;

crt kullanır;

tip

Alfa = Dizi[10];

PBileşik = ^Bileşik;

Comp = kayıt

SD: Alfa;

pSonraki: PComp;

sonunda;

var

pBegin, pEnd: PComp;

sc: Alfa;

Prosedür Sırası oluşturun(var pBegin,pEnd: PComp; var

sc: Alfa);

başlamak

Yeni(pBaşlangıç);

pBaşla^.pSonraki:= NIL;

pBaşla^.sD:= sC;

pEnd:=pBaşlangıç;

sonunda;

Prosedür AddQueue(var pEnd: PComp; var sC:

alfa);

var pAux: PCmp;

başlamak

Yeni(pAux);

pAux^.pSonraki:= NIL;

pEnd^.pSonraki:= pAux;

pEnd:= pAux;

pEnd^.sD:= sC;

sonunda;

Prosedür DelQueue(var pBegin: PComp; var sC:

alfa);

başlamak

sC:=pBaşla^.sD;

pBegin:= pBegin^.pNext;

sonunda;

başlamak

clrscr;

writeln(STRING GİRİN);

readln(sc);

CreateQueue(pBegin, pEnd, sc);

tekrar et

writeln(STRING GİRİN);

readln(sc);

AddQueue(pEnd, sc);

sC = 'SON'a kadar;

20. Ağaç veri yapıları

Ağaç benzeri bir veri yapısı, aralarında ilişkilerin - kaynak ile oluşturulan arasındaki bağlantının - olduğu sonlu bir eleman-düğümler kümesidir.

N. Wirth tarafından önerilen özyinelemeli tanımı kullanırsak, o zaman t taban tipine sahip bir ağaç veri yapısı ya boş bir yapıdır ya da alt ağaçlar olarak adlandırılan t taban tipine sahip sonlu bir ağaç yapıları kümesinin olduğu t tipi bir düğümdür. birleşmiş.

Ardından, ağaç yapıları ile çalışırken kullanılan tanımları veriyoruz.

Y düğümü, x düğümünün hemen altında bulunuyorsa, y düğümüne, x düğümünün hemen soyundan gelen denir ve x, y düğümünün hemen atası olur, yani, x düğümü i'inci seviyedeyse, o zaman y düğümü buna göre olur (i+1)-. seviyede yer alır.

Bir ağaç düğümünün maksimum seviyesine ağacın yüksekliği veya derinliği denir. Bir ata, ağacın yalnızca bir düğümüne sahip değildir - kökü.

Çocuğu olmayan ağaç düğümlerine yaprak düğümleri (veya ağacın yaprakları) denir. Diğer tüm düğümlere dahili düğümler denir. Bir düğümün yakın çocuklarının sayısı, o düğümün derecesini belirler ve belirli bir ağaçtaki bir düğümün mümkün olan maksimum derecesi, ağacın derecesini belirler.

Atalar ve torunlar birbirinin yerine geçemez, yani orijinal ile oluşturulan arasındaki bağlantı yalnızca bir yönde hareket eder.

Ağacın kökünden belirli bir düğüme giderseniz, bu durumda geçilecek ağacın dallarının sayısına bu düğüm için yolun uzunluğu denir. Bir ağacın tüm dalları (düğümleri) sıralanırsa, ağacın sıralı olduğu söylenir.

İkili ağaçlar, ağaç yapılarının özel bir durumudur. Bunlar, her çocuğun en fazla iki çocuğu olduğu, sol ve sağ alt ağaçlar olarak adlandırılan ağaçlardır. Dolayısıyla ikili ağaç, derecesi iki olan bir ağaç yapısıdır.

Bir ikili ağacın sıralaması şu kuralla belirlenir: her düğümün kendi anahtar alanı vardır ve her düğüm için anahtar değeri, sol alt ağacındaki tüm anahtarlardan büyük ve sağ alt ağacındaki tüm anahtarlardan küçüktür.

Derecesi ikiden büyük olan ağaçlara kuvvetli dallanma denir.

21. Ağaçlar üzerinde operasyonlar

Ayrıca, ikili ağaçlarla ilgili tüm işlemleri ele alacağız. I. Bir ağaç inşa etmek.

Sıralı bir ağaç oluşturmak için bir algoritma sunuyoruz.

1. Ağaç boşsa, veriler ağacın köküne aktarılır. Ağaç boş değilse, ağacın düzeni bozulmayacak şekilde dallarından biri indirilir. Sonuç olarak, yeni düğüm ağacın bir sonraki yaprağı olur.

2. Mevcut bir ağaca düğüm eklemek için yukarıdaki algoritmayı kullanabilirsiniz.

3. Ağaçtan bir düğümü silerken dikkatli olmalısınız. Kaldırılacak düğüm bir yapraksa veya sadece bir çocuğu varsa, işlem basittir. Silinecek düğümün iki alt öğesi varsa, onun soyundan gelenler arasında yerine konulabilecek bir düğüm bulması gerekecektir. Ağacın sipariş edilmesi gerekliliği nedeniyle bu gereklidir.

Bunu yapabilirsiniz: kaldırılacak düğümü, sol alt ağaçta en büyük anahtar değerine sahip düğümle veya sağ alt ağaçta en küçük anahtar değerine sahip düğümle değiştirin ve ardından istenen düğümü bir yaprak olarak silin.

II. Belirli bir anahtar alan değerine sahip bir düğüm arayın.

Bu işlemi yaparken ağacın üzerinden geçmek gerekir. Bir ağaç yazmanın farklı biçimlerini hesaba katmak gerekir: önek, sonek ve sonek.

Soru ortaya çıkıyor: onlarla çalışmak en uygun olacak şekilde ağacın düğümlerini nasıl temsil edecek? Bir dizi kullanarak bir ağacı temsil etmek mümkündür; burada her düğüm, bir karakter tipi bilgi alanına ve bir referans tipine ait iki alana sahip olan birleşik tipteki bir değer ile tanımlanır. Ancak bu, ağaçların önceden belirlenmemiş çok sayıda düğüme sahip olması nedeniyle çok uygun değildir. Bu nedenle, bir ağacı tanımlarken dinamik değişkenleri kullanmak en iyisidir. Daha sonra her düğüm, belirli sayıda bilgi alanının tanımını içeren aynı türden bir değerle temsil edilir ve karşılık gelen alanların sayısı ağacın derecesine eşit olmalıdır. Torunların yokluğunu sıfır referansıyla tanımlamak mantıklıdır. Daha sonra Pascal'da bir ikili ağacın tanımı şöyle görünebilir:

TÜR TreeLink = ^Ağaç;

ağaç = kayıt;

Bilgi: <veri türü>;

Sol, Sağ: TreeLink;

Son.

22. Operasyonların uygulanmasına örnekler

1. Minimum yükseklikte XNUMX düğümlü bir ağaç veya mükemmel dengelenmiş bir ağaç oluşturun (böyle bir ağacın sol ve sağ alt ağaçlarının düğüm sayısı birden fazla olmamalıdır).

Özyinelemeli yapı algoritması:

1) ilk düğüm ağacın kökü olarak alınır;

2) nl düğümlerinin sol alt ağacı aynı şekilde oluşturulur;

3) nr düğümlerinin sağ alt ağacı aynı şekilde oluşturulur;

sayı = n - nl - 1

Bilgi alanı olarak klavyeden girilen düğüm numaralarını alacağız. Bu yapıyı uygulayan özyinelemeli işlev şöyle görünecektir:

İşlev Ağacı(n: Bayt): TreeLink;

Vart: TreeLink; nl,nr,x: Bayt;

Başlamak

n = 0 ise Ağaç:= nil

başka

Başlamak

nl:= n bölüm 2;

nr = n - nl - 1;

writeln('köşe numarasını giriniz);

readln(x);

yeni(t);

t^.inf:= x;

t^.left:= Ağaç(nl);

t^.sağ:= Ağaç(nr);

Ağaç:=t;

End;

{Ağaç}

Son.

2. İkili sıralı ağaçta, anahtar alanının verilen değerine sahip düğümü bulun. Ağaçta böyle bir öğe yoksa, ağaca ekleyin.

Arama Prosedürü(x: Bayt; var t: TreeLink);

Başlamak

t = sıfır ise

Başlamak

Yeni(t);

t^inf := x;

t^.sol:= nil;

t^.sağ:= nil;

Son

Aksi takdirde x < t^.inf ise

Ara(x, t^.sol)

Aksi takdirde x > t^.inf ise

Ara(x, t^.sağ)

başka

Başlamak

{işlem bulunan öğe}

...

End;

Son.

23. Grafik kavramı. Bir grafiği temsil etmenin yolları

Bir grafik, G = (V,E) çiftidir; burada V, köşeler olarak adlandırılan, rastgele bir yapıya sahip nesneler kümesidir ve E, kenarlar olarak adlandırılan ei = (vil, vi2), vijOV çiftlerinin bir ailesidir. Genel durumda, V kümesi ve (veya) E ailesi sonsuz sayıda eleman içerebilir, ancak biz sadece sonlu grafikleri, yani hem V hem de E'nin sonlu olduğu grafikleri dikkate alacağız. ei'ye dahil edilen öğelerin sırası önemliyse, grafiğe yönlendirilmiş, kısaltılmış - digraph, aksi takdirde - yönsüz denir. Bir digrafın kenarlarına yay denir.

eğer e = , o zaman v ve u köşelerine kenarın uçları denir. Burada e kenarının v ve u köşelerinin her birine bitişik (olay) olduğunu söylüyoruz. Vertices v ve ve ayrıca bitişik (olay) olarak da adlandırılır. Genel durumda, e = formunun kenarları ; bu tür kenarlara döngü denir.

Bir grafiğin tepe noktasının derecesi, iki kez sayılan döngülerle birlikte verilen tepe noktasına gelen kenarların sayısıdır.

Bir düğümün ağırlığı, belirli bir düğüme atanan bir sayıdır (gerçek, tamsayı veya rasyonel).

Bir grafikteki yol (veya bir digraftaki rota), v0, (v0,v1), v1,..., (vn -1,) biçimindeki alternatif bir köşe ve kenar dizisidir (veya bir digraftaki yaylar). vn), vn. n sayısına yol uzunluğu denir. Yinelenen kenarları olmayan bir yola zincir, yinelenen köşeleri olmayan bir yola basit zincir adı verilir. Yinelenen kenarları olmayan kapalı bir yola döngü (veya

bir digrafta kontur); köşeleri tekrarlamadan (ilk ve son hariç) - basit bir döngü.

Herhangi iki köşesi arasında bir yol varsa bir graf bağlı, aksi takdirde bağlantısız olarak adlandırılır.

Grafikleri temsil etmenin çeşitli yolları vardır.

1. İnsidans matrisi.

Bu, n'nin köşe sayısı ve m'nin kenarların sayısı olduğu bir n x m dikdörtgen matrisidir.

2. Komşuluk matrisi.

Bu, n × n boyutlarında bir kare matristir, burada n köşe sayısıdır.

3. Komşulukların listesi (olaylar). olan bir veri yapısını temsil eder.

grafiğin her bir köşesi için, kendisine bitişik köşelerin bir listesini saklar. Liste, i-inci elemanı, i-inci tepe noktasına bitişik köşeler listesine bir işaretçi içeren bir işaretçiler dizisidir.

4. Liste listesi.

Bir dalın her birine bitişik köşe listelerini içerdiği ağaç benzeri bir veri yapısıdır.

24. Çeşitli Grafik Gösterimleri

Bir grafiği insidans listesi olarak uygulamak için aşağıdaki türü kullanabilirsiniz:

TypeList = ^S;

S=kayıt;

inf: Bayt;

sonraki: Liste;

sonunda;

Daha sonra grafik aşağıdaki gibi tanımlanır:

Vargr: Dizinin[1..n] listesi;

Şimdi grafik geçiş prosedürüne dönelim. Bu, grafiğin tüm köşelerini görüntülemenize, tüm bilgi alanlarını analiz etmenize izin veren yardımcı bir algoritmadır. Bir grafik geçişini derinlemesine düşünürsek, iki tür algoritma vardır: özyinelemeli ve özyinelemesiz.

Pascal'da derinlik öncelikli geçiş prosedürü şöyle görünür:

Prosedür Obhod(gr: Grafik; k: Bayt);

Varg: Grafik; l: Liste;

Başlamak

kasım[k]:= yanlış;

gr:=gr;

g^.inf <> k yaparken

g:= g^.sonraki;

l:= g^.smeg;

l <> nil başlarken

kasım[l^.inf] ise Obhod(gr, l^.inf);

l:= l^.sonraki;

End;

End;

Bir grafiği bir liste listesi olarak temsil etme

Aşağıdaki gibi bir liste listesi kullanılarak bir grafik tanımlanabilir:

TypeList = ^Tlist;

tlist=kayıt

inf: Bayt;

sonraki: Liste;

sonunda;

Grafik = ^TGpaph;

TGpaph = kayıt

inf: Bayt;

smeg: Liste;

sonraki: grafik;

sonunda;

Grafiği genişlikte çaprazlarken, rastgele bir tepe noktası seçeriz ve ona bitişik tüm köşelere aynı anda bakarız.

Genişlikteki bir grafiği sözde kodda dolaşmak için bir prosedür:

Prosedür Obhod2(v);

Başlamak

sıra = O;

kuyruk <= v;

kas[v] = Yanlış;

Sıra <> O yaparken

Başlamak

p <= sıra;

spisok(p)'deki u için

Eğer yeni[u] ise

Başlamak

kas[u]:= Yanlış;

sıra <= u;

End;

End;

End;

25. Pascal'da nesne türü. Bir nesne kavramı, tanımı ve kullanımı

Nesne yönelimli bir programlama dili üç ana özellikle karakterize edilir:

1) kapsülleme. Kayıtları, bu kayıtların alanlarını işleyen prosedürler ve işlevlerle birleştirmek, yeni bir veri türü oluşturur - bir nesne;

2) miras. Bir nesnenin tanımı ve hiyerarşiyle ilgili her bir alt nesnenin tüm ana nesnelerin koduna ve verilerine erişme yeteneği ile bir alt nesne hiyerarşisi oluşturmak için daha fazla kullanımı;

3) polimorfizm. Bir eyleme tek bir ad vermek, daha sonra hiyerarşideki her nesnenin o eylemi kendisine uygun bir şekilde gerçekleştirmesiyle, nesnelerin hiyerarşisinde yukarı ve aşağı paylaşılır.

Nesneden bahsetmişken, yeni bir veri türü - nesne tanıtıyoruz. Nesne türü, sabit sayıda bileşenden oluşan bir yapıdır. Her bileşen, ya kesin olarak tanımlanmış bir türde veri içeren bir alandır ya da bir nesne üzerinde işlemler gerçekleştiren bir yöntemdir.

Bir nesne türü, başka bir nesne türünün bileşenlerini devralabilir. T2 türü, T1 türünden miras alıyorsa, T2 türü, G türünün bir alt öğesidir ve G türünün kendisi, G2 türünün bir üst öğesidir.

Aşağıdaki kaynak kodu, bir nesne türü bildirimi örneği sağlar.

tip

nokta = nesne

X, Y: tam sayı;

sonunda;

Rect = nesne

A, B: TP Noktası;

prosedür Init(XA, YA, XB, YB: Tamsayı);

prosedür Copy(var R: TRectangle);

prosedür Taşı(DX, DY: Tamsayı);

prosedür Grow(DX, DY: Tamsayı);

prosedür Intersect(var R: TRectangle);

prosedür Birleştirme(var R: TRectangle);

fonksiyon İçerir(P: Nokta): Boolean;

sonunda;

Diğer türlerin aksine, nesne türleri yalnızca bir program veya modülün kapsamının en dış düzeyindeki tür bildirimi bölümünde bildirilebilir. Bu nedenle, nesne türleri bir değişken bildirimi bölümünde veya bir prosedür, işlev veya yöntem bloğu içinde bildirilemez.

Bir dosya tipi bileşen tipi, bir nesne tipine veya nesne tipi bileşenleri içeren herhangi bir yapı tipine sahip olamaz.

26. Miras

Kalıtım, çocuk tüm alanlarını ve yöntemlerini ebeveynden alırken (devralırken), mevcut ebeveyn türlerinden yeni alt türler oluşturma sürecidir.

Bu durumda soyundan gelen türe mirasçı veya alt tür denir. Ve alt türün miras aldığı türe üst tür denir.

Devralınan alanlar ve yöntemler değiştirilmemiş veya yeniden tanımlanmış (değiştirilmiş) olarak kullanılabilir.

N. Wirth kendi dilinde Pascal maksimum basitlik için çabaladı, bu yüzden kalıtım ilişkisini tanıtarak onu karmaşıklaştırmadı. Bu nedenle, Pascal'daki türler miras alamaz.

Ancak Turbo Pascal 7.0, bu dili kalıtımı destekleyecek şekilde genişletir. Böyle bir uzantı, kayıtlarla ilgili, ancak çok daha güçlü olan yeni bir veri yapısı kategorisidir. Bu yeni kategorideki veri türleri, yeni ayrılmış Object kelimesi kullanılarak tanımlanır. Sözdizimi, kayıtları tanımlama sözdizimine çok benzer:

Tip

<tür adı> = Nesne [(<üst tür adı>)]

([<kapsam>]

<alanların ve yöntemlerin açıklaması>)+

sonunda;

Parantez içindeki bir sözdizimi yapısından sonraki "+" işareti, bu yapının bu açıklamada bir veya daha fazla kez yer alması gerektiği anlamına gelir.

Kapsam, aşağıdaki anahtar kelimelerden biridir:

▪ Özel;

▪ Korumalı;

▪ Kamuya açık.

Kapsam, açıklamaları bu kapsamı adlandıran anahtar sözcüğü izleyen bileşenlerin programın hangi bölümlerinde kullanılabilir olacağını belirtir.

Bileşen kapsamları hakkında daha fazla bilgi için 28. soruya bakın.

Kalıtım, program geliştirmede kullanılan güçlü bir araçtır. Bir hiyerarşi oluşturan türdeki nesneler arasındaki ilişkiyi ifade etmek için dili kullanarak, problemin nesneye dayalı ayrıştırmasını pratikte uygulamanıza izin verir ve ayrıca program kodunun yeniden kullanımını teşvik eder.

27. Nesneleri somutlaştırma

Bir nesnenin bir örneği, bir nesne türünün bir değişkeni veya sabiti bildirilerek veya "nesne türüne işaretçi" türünde bir değişkene standart Yeni prosedür uygulanarak oluşturulur. Ortaya çıkan nesneye, nesne türünün bir örneği denir.

Bir nesne türü sanal yöntemler içeriyorsa, herhangi bir sanal yöntem çağrılmadan önce bir kurucu çağrılarak bu nesne türünün örnekleri başlatılmalıdır.

Bir nesne türünün örneğini atamak, örneğin başlatılması anlamına gelmez. Bir nesne, yapıcının çağrılması ile yürütmenin fiilen yapıcının kod bloğundaki ilk ifadeye ulaştığı nokta arasında çalışan derleyici tarafından oluşturulan kod tarafından başlatılır.

Nesne örneği başlatılmazsa ve aralık denetimi etkinleştirilirse ({$R+} yönergesiyle), nesne örneğinin sanal yöntemine yapılan ilk çağrı, bir çalışma zamanı hatası verir. Aralık denetimi {$R-} yönergesi tarafından kapatılırsa, başlatılmamış bir nesnenin sanal yöntemine yapılan ilk çağrı, öngörülemeyen davranışlara yol açabilir.

Zorunlu başlatma kuralı, yapı türlerinin bileşenleri olan örnekler için de geçerlidir. Örneğin:

var

Yorum: TStrField dizisi [1..5];

ben: tam sayı

başlamak

I için:= 1 ile 5 arası

Yorum [I].Init (1, I + 10, 40, 'first_name');

.

.

.

I için:= 1'den 5'e Yorum Yap [I].Bitti;

sonunda;

Dinamik örnekler için, başlatma tipik olarak yerleştirme ile ilgilidir ve temizleme, Yeni ve Atma standart prosedürlerinin genişletilmiş sözdizimi yoluyla elde edilen silme ile ilgilidir. Örneğin:

var

SP: StrFieldPtr;

başlamak

Yeni(SP, Init(1, 1, 25, 'ilk_ad');

SP^.Put('Vladimir');

SP^.Ekran;

.

.

.

Atın (SP, Bitti);

sonu.

Bir nesne türüne yönelik bir işaretçi, herhangi bir üst nesne türüne bir işaretçi ile uyumlu atamadır, bu nedenle çalışma zamanında bir nesne türüne yönelik bir işaretçi, o türün bir örneğini veya herhangi bir alt türün örneğini işaret edebilir.

28. Bileşenler ve Kapsam

Bir fasulye tanımlayıcısının kapsamı, nesne türünün ötesine uzanır. Ayrıca, bir bean tanımlayıcısının kapsamı, nesne türü ve onun alt öğelerinin yöntemlerini uygulayan prosedürler, işlevler, yapıcılar ve yıkıcılar blokları boyunca uzanır. Bu düşüncelere dayanarak, bileşen tanımlayıcısı, nesne türü içinde ve tüm alt öğeleri ve tüm yöntemleri içinde benzersiz olmalıdır.

Bir nesne türü bildiriminde, bir yöntem başlığı, bildirim henüz tamamlanmamış olsa bile, açıklanan nesne türünün parametrelerini belirtebilir.

Tüm geçerli kapsamların bileşenlerini içeren bir tür bildirimi için aşağıdaki şemayı göz önünde bulundurun:

Tip

<tür adı> = Nesne [(<üst tür adı>)]

Özel Etkinlik

<alanların ve yöntemlerin özel açıklamaları>

korumalı

<korunan alan ve yöntem açıklamaları>

Açık Alan

<alanların ve yöntemlerin genel açıklamaları>

sonunda;

Private bölümünde açıklanan alanlar ve yöntemler, yalnızca bildirimlerini içeren modül içinde kullanılabilir, başka hiçbir yerde kullanılamaz.

Korumalı alanlar ve yöntemler, yani Korumalı bölümünde açıklananlar, türün tanımlandığı modüle ve bu türün torunlarına görünür.

Genel bölümündeki alanlar ve yöntemlerin kullanımlarında herhangi bir kısıtlama yoktur ve bu tür bir nesneye erişimi olan programın herhangi bir yerinde kullanılabilir.

Tür bildiriminin özel bölümünde açıklanan bileşen tanımlayıcısının kapsamı, nesne türü bildirimini içeren modül (program) ile sınırlıdır. Başka bir deyişle, özel tanımlayıcı çekirdekler, nesne türü bildirimini içeren modül içinde sıradan genel tanımlayıcılar gibi davranır ve modülün dışında herhangi bir özel çekirdek ve tanımlayıcı bilinmez ve erişilemez. İlgili nesne türlerini aynı modüle koyarak, bu nesnelerin birbirlerinin özel bileşenlerine erişmesini sağlayabilirsiniz ve bu özel bileşenler diğer modüller tarafından bilinmeyecektir.

29. Yöntemler

Bir nesne türü içindeki bir yöntem bildirimi, bir ileri yöntem bildirimine (ileriye) karşılık gelir. Bu nedenle, bir nesne türü bildiriminden sonra bir yerde, ancak nesne türü bildiriminin kapsamı ile aynı kapsamda, bildirimi tanımlanarak bir yöntem uygulanmalıdır.

Prosedürel ve işlevsel yöntemler için, tanımlayıcı bildirim, bu durumda prosedür veya işlev tanımlayıcısının bir yöntem tanımlayıcısı olarak ele alınması dışında, normal bir prosedür veya işlev bildirimi biçimini alır.

Bir yöntemin tanımlayıcı açıklaması, her zaman, bir nesne tipine sahip resmi bir değişken parametresine karşılık gelen, Self tanımlayıcısı ile örtük bir parametre içerir. Bir yöntem bloğu içinde Self, yöntemi çağırmak için yöntem bileşeni belirtilen örneği temsil eder. Böylece Self alanlarının değerlerinde yapılan herhangi bir değişiklik örneğe yansıtılır.

Sanal Yöntemler

Yöntemler varsayılan olarak statiktir, ancak yapıcılar dışında sanal olabilirler (yöntem bildirimine sanal yönerge dahil edilerek). Derleyici, derleme işlemi sırasında statik yöntem çağrılarına yapılan başvuruları çözerken, sanal yöntem çağrıları çalışma zamanında çözümlenir. Bu bazen geç bağlama olarak adlandırılır.

Statik bir yöntemi geçersiz kılmak, yöntem başlığını değiştirmekten bağımsızdır. Buna karşılık, bir sanal yöntem geçersiz kılma, sırayı, parametre türlerini ve adlarını ve varsa işlev sonuç türlerini korumalıdır. Ayrıca, yeniden tanımlama yine sanal yönergeyi içermelidir.

Dinamik Yöntemler

Borland Pascal, dinamik yöntemler adı verilen ek geç bağlama yöntemlerini destekler. Dinamik yöntemler, sanal yöntemlerden yalnızca çalışma zamanında gönderilme biçimleriyle farklılık gösterir. Diğer tüm açılardan, dinamik yöntemler sanal olanlara eşdeğer kabul edilir.

Dinamik yöntem bildirimi, sanal yöntem bildirimine eşdeğerdir, ancak dinamik yöntem bildirimi, virtual anahtar sözcüğünden hemen sonra belirtilen dinamik yöntem dizinini içermelidir. Bir dinamik yöntemin dizini, 1 ile 656535 arasında bir tamsayı sabiti olmalı ve nesne türünde veya onun atalarında bulunan diğer dinamik yöntemlerin dizinleri arasında benzersiz olmalıdır. Örneğin:

prosedür FileOpen(var Msg: TMessage); sanal 100;

Bir dinamik yöntemin geçersiz kılınması, parametrelerin sırası, türleri ve adlarıyla eşleşmeli ve üst yöntemin işlevinin sonuç türüyle tam olarak eşleşmelidir. Geçersiz kılma ayrıca, ata nesne türünde belirtilen aynı dinamik yöntem dizini tarafından takip edilen bir sanal yönerge içermelidir.

30. Yapıcılar ve yıkıcılar

Yapıcılar ve yıkıcılar, yöntemlerin özel biçimleridir. New ve Dispose standart prosedürlerinin genişletilmiş sözdizimi ile bağlantılı olarak kullanılan yapıcılar ve yıkıcılar, dinamik nesneleri yerleştirme ve kaldırma yeteneğine sahiptir. Ek olarak, yapıcılar, sanal yöntemler içeren nesnelerin gerekli başlatmasını gerçekleştirme yeteneğine sahiptir. Tüm yöntemler gibi, yapıcılar ve yıkıcılar miras alınabilir ve nesneler herhangi bir sayıda yapıcı ve yıkıcı içerebilir.

Oluşturucular, yeni oluşturulan nesneleri başlatmak için kullanılır. Tipik olarak, başlatma, yapıcıya parametre olarak iletilen değerlere dayanır. Bir sanal yöntemin gönderme mekanizması, nesneyi ilk başlatan yapıcıya bağlı olduğundan, bir yapıcı sanal olamaz.

İşte bazı kurucu örnekleri:

yapıcı Field.Copy(var F: Field);

başlamak

Öz:=F;

sonunda;

Türetilmiş (alt) türden bir kurucunun ana eylemi, hemen hemen her zaman, nesnenin miras alınan alanlarını başlatmak için hemen üst öğesinin uygun kurucusunu çağırmaktır. Bu yordamı yürüttükten sonra, yapıcı nesnenin yalnızca türetilmiş türe ait alanlarını başlatır.

Yıkıcılar, yapıcıların tersidir ve nesneleri kullanıldıktan sonra temizlemek için kullanılır. Normalde temizleme, nesnedeki tüm işaretçi alanlarının kaldırılmasından oluşur.

Dikkat

Bir yıkıcı sanal olabilir ve çoğu zaman öyledir. Bir yıkıcı nadiren parametrelere sahiptir. İşte yıkıcılara bazı örnekler:

yıkıcı Alan Bitti;

başlamak

FreeMem(Ad, Uzunluk(Ad^) + 1);

sonunda;

yıkıcı StrField.Done;

başlamak

FreeMem(Değer, Len);

Alan Bitti;

sonunda;

Yukarıdaki TStrField gibi bir alt türün yıkıcısı. Bitti, genellikle ilk önce türetilmiş türde tanıtılan işaretçi alanlarını kaldırır ve ardından son adım olarak, nesnenin devralınan işaretçi alanlarını kaldırmak için hemen üst öğenin uygun toplayıcı-yıkıcısını çağırır.

31. Yıkıcılar

Borland Pascal, dinamik olarak ayrılmış bir nesneyi temizlemek ve silmek için çöp toplayıcı (veya yıkıcı) adı verilen özel bir yöntem türü sağlar. Yıkıcı, bir nesneyi silme adımını, o nesne türü için gereken diğer eylemler veya görevlerle birleştirir. Tek bir nesne türü için birden çok yıkıcı tanımlayabilirsiniz.

Yıkıcılar miras alınabilir ve statik veya sanal olabilirler. Farklı sonlandırıcılar farklı nesne türleri gerektirme eğiliminde olduğundan, genellikle her nesne türü için doğru yıkıcının yürütülmesi için yıkıcıların her zaman sanal olması önerilir.

Nesnenin tür tanımı sanal yöntemler içerse bile, ayrılmış sözcük yok edicinin her temizleme yöntemi için belirtilmesi gerekmez. Yıkıcılar gerçekten yalnızca dinamik olarak ayrılmış nesneler üzerinde çalışır.

Dinamik olarak ayrılmış bir nesne temizlendiğinde, yıkıcı özel bir işlev gerçekleştirir: dinamik olarak ayrılmış bellek alanında her zaman doğru sayıda baytın serbest bırakılmasını sağlar. Statik olarak tahsis edilmiş nesnelerle bir yıkıcı kullanma konusunda hiçbir endişe olamaz; aslında, programcı nesnenin türünü yıkıcıya iletmeyerek, bu tür bir nesneyi Borland Pascal'daki dinamik bellek yönetiminin tüm avantajlarından mahrum bırakır.

Yıkıcılar, polimorfik nesnelerin temizlenmesi gerektiğinde ve işgal ettikleri belleğin yeniden tahsis edilmesi gerektiğinde aslında kendileri olurlar.

Polimorfik nesneler, Borland Pascal'ın genişletilmiş tür uyumluluk kuralları nedeniyle bir üst türe atanan nesnelerdir. "Polimorfik" terimi uygundur, çünkü bir nesneyi işleyen kod, derleme zamanında tam olarak ne tür bir nesneyi işlemesi gerektiğini "bilmez". Bildiği tek şey, bu nesnenin, belirtilen nesne türünün soyundan gelen bir nesneler hiyerarşisine ait olduğudur.

Yıkıcı yöntemin kendisi boş olabilir ve yalnızca bu işlevi yerine getirebilir:

yıkıcıAnObject.Done;

başlamak

sonunda;

Bu yıkıcıda yararlı olan, gövdesinin özelliği değildir, ancak derleyici, yıkıcının ayrılmış sözcüğüne yanıt olarak sonsöz kodu üretir. Hiçbir şeyi dışa aktarmayan, ancak programı başlatmadan önce başlatma bölümünü yürüterek görünmez işler yapan bir modül gibidir. Tüm aksiyon perde arkasında gerçekleşir.

32. Sanal Yöntemler

Nesne türü bildiriminin ardından yeni ayrılmış sanal sözcük geliyorsa, bir yöntem sanal olur. Bir üst türdeki bir yöntem sanal olarak bildirilirse, bir derleyici hatasından kaçınmak için alt türlerde aynı ada sahip tüm yöntemlerin de sanal olarak bildirilmesi gerekir.

Aşağıdakiler, uygun şekilde sanallaştırılmış örnek bordrodaki nesnelerdir:

tip

PEÇalışan = ^TEÇalışan;

Temployee = nesne

Ad, Başlık: dize[25;

Oran: Gerçek;

yapıcı Init(AName, ATitle: String; ARate: Real);

fonksiyon GetPayAmount: Gerçek; sanal;

işlev GetName: Dize;

işlev GetTitle: Dize;

GetRate işlevi: Gerçek;

prosedür Göster; sanal;

sonunda;

Saatlik = ^Saatlik;

Tourly = nesne(TEmployee);

Zaman: Tamsayı;

yapıcı Init(AName, ATitle: String; ARate: Real;

Zaman: Tamsayı);

fonksiyon GetPayAmount: Gerçek; sanal;

fonksiyon GetTime: Tamsayı;

sonunda;

PSalared = ^TSalared;

TSalaried = nesne(TEmployee);

fonksiyon GetPayAmount: Gerçek; sanal;

sonunda;

PCommissioned = ^TCommissioned;

TCommissioned = nesne(Maaşlı);

Komisyon: Gerçek;

Satış Tutarı: Gerçek;

yapıcı Init(AName, ATitle: String; ARate,

ACommission, ASalesAmount: Gerçek);

fonksiyon GetPayAmount: Gerçek; sanal;

sonunda;

Yapıcı, sanal yöntem mekanizması için bazı kurulum işleri yapan özel bir prosedür türüdür. Ayrıca, herhangi bir sanal yöntem çağrılmadan önce yapıcı çağrılmalıdır. Oluşturucuyu çağırmadan sanal bir yöntemi çağırmak sistemi engelleyebilir ve derleyicinin yöntemlerin çağrıldığı sırayı kontrol etmesinin bir yolu yoktur.

Sanal yöntemleri olan her nesne türünün bir yapıcısı olmalıdır.

Oluşturucu, başka bir sanal yöntem çağrılmadan önce çağrılmalıdır. Oluşturucuya önceden çağrı yapılmadan sanal bir yöntemin çağrılması, bir sistem kilidine neden olabilir ve derleyici, yöntemlerin çağrıldığı sırayı denetleyemez.

33. Nesne veri alanları ve biçimsel yöntem parametreleri

Yöntemlerin ve nesnelerinin ortak bir kapsamı paylaştığı gerçeğinin anlamı, bir yöntemin biçimsel parametrelerinin herhangi bir nesnenin veri alanıyla aynı olamayacağıdır. Bu, nesne yönelimli programlamanın dayattığı yeni bir sınırlama değil, Pascal'ın her zaman sahip olduğu aynı eski kapsam kurallarıdır. Bu, bir prosedürün resmi parametrelerinin prosedürün yerel değişkenleriyle aynı olmasını yasaklamakla aynıdır. Bir prosedür için bu hatayı gösteren bir örnek düşünün:

prosedür CrunchIt(Crunchee: MyDataRec, Crunchby,

Hata Kodu: tamsayı);

var

A, B: karakter;

Hata Kodu: tamsayı;

başlamak

.

.

.

sonunda;

ErrorCode yerel değişkeninin bildirimini içeren satırda bir hata oluşuyor. Bunun nedeni, resmi parametre ve yerel değişkenin tanımlayıcılarının aynı olmasıdır.

Bir prosedürün yerel değişkenleri ve biçimsel parametreleri ortak bir kapsamı paylaşır ve bu nedenle aynı olamaz. Böyle bir şey derlemeye çalışırsanız, bir "Hata 4: Yinelenen tanımlayıcı" mesajı alacaksınız. Aynı hata, bu yöntemin ait olduğu nesnenin alanının adına resmi bir yöntem parametresi atanmaya çalışılırken de ortaya çıkıyor.

Bir veri yapısının içine bir altyordam başlığı koymak, Turbo Pascal'daki bir yeniliğe bir selam olduğundan, koşullar biraz farklıdır, ancak Pascal kapsamının temel ilkeleri değişmemiştir.

Değişken ve parametre tanımlayıcılarını seçerken yine de belirli bir kültüre saygı göstermeniz gerekir. Bazı programlama stilleri, yinelenen tanımlayıcıların riskini azaltmak için tür alanlarını adlandırmanın yollarını sunar. Örneğin, Macar notasyonu, alan adlarının bir "m" önekiyle başlamasını önerir.

34. Kapsülleme

Bir nesnedeki kod ve verilerin birleşimine kapsülleme denir. Prensipte, bir nesnenin kullanıcısının hiçbir zaman nesnenin alanlarına doğrudan erişmemesi için yeterli yöntemleri sağlamak mümkündür. Smalltalk gibi bazı diğer nesne yönelimli diller zorunlu kapsülleme gerektirir, ancak Borland Pascal'ın bir seçeneği vardır.

Örneğin, TEmployee ve Thourly nesneleri, dahili veri alanlarına doğrudan erişmeye kesinlikle gerek kalmayacak şekilde yazılmıştır:

tip

Temployee = nesne

Ad, Başlık: dize[25;

Oran: Gerçek;

prosedür Init(AName, ATitle: string; ARate: Real);

işlev GetName: Dize;

işlev GetTitle: Dize;

GetRate işlevi: Gerçek;

fonksiyon GetPayAmount: Gerçek;

sonunda;

Thourly = nesne(TEÇalışan)

Zaman: Tamsayı;

prosedür Init(AName, ATitle: string; ARate:

Gerçek, Atime: Tamsayı);

fonksiyon GetPayAmount: Gerçek;

sonunda;

Burada yalnızca dört veri alanı vardır: Ad, Unvan, Oran ve Zaman. GetName ve GetTitle yöntemleri, sırasıyla çalışanın soyadını ve konumunu görüntüler. GetPayAmount yöntemi, Çalışmaya yapılan ödemelerin miktarını hesaplamak için Oranı ve çalışan bir Thourly ve Time olması durumunda kullanır. Artık doğrudan bu veri alanlarına başvurmaya gerek yoktur.

THourly türünde bir AnHourly örneğinin varlığını varsayarsak, AnHourly'nin veri alanlarını işlemek için aşağıdaki gibi bir dizi yöntem kullanabiliriz:

Bir saatlik yapmak ile

başlamak

Init (Aleksandr Petrov, Forklift operatörü' 12.95, 62);

{Soyadı, pozisyonu ve tutarı görüntüler

ödemeler}

Göstermek;

sonunda;

Bir nesnenin alanlarına erişimin yalnızca bu nesnenin yöntemleri yardımıyla gerçekleştirildiğine dikkat edilmelidir.

35. Genişleyen nesneler

Türetilmiş bir tür tanımlanırsa, üst türün yöntemleri devralınır, ancak istenirse geçersiz kılınabilir. Devralınan bir yöntemi geçersiz kılmak için, devralınan yöntemle aynı ada sahip, ancak farklı bir gövdeye ve (gerekirse) farklı bir parametre kümesine sahip yeni bir yöntem bildirmeniz yeterlidir.

Aşağıdaki örnekte saatlik ücret ödenen bir çalışanı temsil eden bir alt tip TEmployee tanımlayalım:

const

Ödeme Süreleri = 26; { ödeme dönemleri }

Fazla Mesai Eşiği = 80; {ödeme dönemi için }

Fazla Mesai Faktörü = 1.5; { saatlik ücret }

tip

Thourly = nesne(TEÇalışan)

Zaman: Tamsayı;

prosedür Init(AName, ATitle: string; ARate:

Gerçek, Atime: Tamsayı);

fonksiyon GetPayAmount: Gerçek;

sonunda;

prosedür THourly.Init(AName, ATitle: string;

ARate: Gerçek, Atime: Tamsayı);

başlamak

TEmployee.Init(AName, ATitle, ARate);

Zaman:= Bir Zaman;

sonunda;

işlev THourly.GetPayAmount: Gerçek;

var

Fazla mesai: Tamsayı;

başlamak

Uzatma:= Zaman - Uzatma Eşiği;

fazla mesai > 0 ise

GetPayAmount:= RoundPay(Fazla Mesai Eşiği * Oran

+

OranıFazla Zaman * Fazla Mesai Faktörü

*Oran)

başka

GetPayAmount:= RoundPay(Zaman * Oran)

sonunda;

Geçersiz kılınan bir yöntemi çağırırken, türetilmiş nesne türünün ebeveynin işlevselliğini içerdiğinden emin olmalısınız. Ayrıca, ebeveyn yöntemindeki herhangi bir değişiklik, tüm alt yöntemleri otomatik olarak etkiler.

Önemli not: Yöntemler geçersiz kılınabilirken, veri alanları geçersiz kılınamaz. Bir nesne hiyerarşisinde bir veri alanı tanımlandıktan sonra, hiçbir alt tip tam olarak aynı ada sahip bir veri alanını tanımlayamaz.

36. Nesne türlerinin uyumluluğu

Kalıtım, Borland Pascal'ın tür uyumluluk kurallarını bir dereceye kadar değiştirir. Bir soyundan gelen, tüm atalarının tür uyumluluğunu devralır.

Bu genişletilmiş tür uyumluluğu üç biçimde gerçekleşir:

1) nesnelerin uygulamaları arasında;

2) nesne uygulamalarına yönelik işaretçiler arasında;

3) resmi ve gerçek parametreler arasında. Tür uyumluluğu yalnızca çocuktan ebeveyne uzanır.

Örneğin, TSalaried, TEmployee'nin bir çocuğudur ve TCommissioned, TSalried'in bir çocuğudur. Aşağıdaki açıklamaları göz önünde bulundurun:

var

Çalışan: TEÇalışan;

ASalared: TSalared;

Görevlendirildi: Görevlendirildi;

TEmployeePtr: ^TEçalışan;

TsalariedPtr: ^TSalaried;

TCommissionedPtr: ^TCommissioned;

Bu açıklamalar kapsamında aşağıdaki atama operatörleri geçerlidir:

Bir Çalışan:=ASalı;

ASalared:= ACommissioned;

TGörevlendirilenPtr:= AGörevlendirilen;

Genel olarak, tip uyumluluk kuralı şu şekilde formüle edilir: kaynak, alıcıyı tamamen doldurabilmelidir. Türetilmiş türler, kalıtım özelliği nedeniyle üst türlerinin içerdiği her şeyi içerir. Bu nedenle, türetilmiş tür, ebeveynin boyutundan daha küçük olmayan bir boyuta sahiptir. Bir alt nesneye bir üst nesne atamak, üst nesnenin bazı alanlarını tanımsız bırakabilir, bu da tehlikeli ve dolayısıyla yasa dışıdır.

Atama deyimlerinde, yalnızca her iki tür için ortak olan alanlar kaynaktan hedefe kopyalanacaktır. Atama operatöründe:

Bir Çalışan:= A Görevlendirildi;

Yalnızca ACommissioned'daki Ad, Unvan ve Oran alanları AnEmployee'ye kopyalanacaktır, çünkü bunlar TCommissioned ve TEmployee arasında paylaşılan alanlardır. Tür uyumluluğu, nesne türlerine yönelik işaretçiler arasında da çalışır ve nesne uygulamalarıyla aynı genel kuralları izler. Bir çocuğa bir işaretçi, ebeveyne bir işaretçiye atanabilir. Önceki tanımlar göz önüne alındığında, aşağıdaki işaretçi atamaları geçerlidir:

TSalaredPtr:= TGörevlendirilenPtr;

TEmployeePtr:= TSalariedPtr;

TEmployeePtr:= PCmissionedPtr;

Belirli bir nesne türünün biçimsel bir parametresi (bir değer veya bir değişken parametresi), kendi türündeki bir nesneyi veya tüm alt türlerdeki nesneleri gerçek parametresi olarak alabilir. Bunun gibi bir prosedür başlığı tanımlarsanız:

prosedür CalcFedTax(Kurban: TSalared);

o zaman gerçek parametre türleri TSalared veya TCommissioned olabilir, ancak TEmployee olamaz. Kurban da değişken bir parametre olabilir. Bu durumda aynı uyumluluk kurallarına uyulur.

value parametresi, parametre olarak gönderilen gerçek nesnenin bir göstergesidir ve değişken parametresi, gerçek parametrenin bir kopyasıdır. Bu kopya, yalnızca resmi değer parametresinin türünün parçası olan alanları içerir. Bu, gerçek parametrenin resmi parametre tipine dönüştürüldüğü anlamına gelir.

37. Montajcı hakkında

Bir zamanlar, montajcı, bir bilgisayarın yararlı bir şey yapmasının imkansız olduğunu bilmeden bir dildi. Yavaş yavaş durum değişti. Bir bilgisayarla daha uygun iletişim araçları ortaya çıktı. Ancak diğer dillerden farklı olarak assembler ölmedi, üstelik prensipte bunu da yapamadı. Neden? Niye? Bir cevap ararken, genel olarak Assembly dilinin ne olduğunu anlamaya çalışacağız.

Kısacası, montaj dili, makine dilinin sembolik bir temsilidir. En düşük donanım seviyesindeki makinedeki tüm işlemler, yalnızca makine dilinin komutları (talimatları) tarafından yürütülür. Bundan, ortak isme rağmen, her bilgisayar türü için derleme dilinin farklı olduğu açıktır. Bu aynı zamanda assembler'da yazılan programların görünümü ve bu dilin bir yansıması olduğu fikirler için de geçerlidir.

Donanımla ilgili sorunları (veya bir programın hızını artırmak gibi donanımla ilgili daha fazlasını) gerçekten çözmek, montajcı bilgisi olmadan imkansızdır.

Bir programcı veya başka herhangi bir kullanıcı, sanal dünyalar oluşturmak için programlara kadar herhangi bir üst düzey aracı kullanabilir ve belki de bilgisayarın aslında programının yazıldığı dilin komutlarını değil, dönüştürülmüş temsillerini yürüttüğünden şüphelenmez bile. tamamen farklı bir dilin sıkıcı ve donuk bir dizi komutları şeklinde - makine dili. Şimdi böyle bir kullanıcının standart olmayan bir sorunu olduğunu hayal edin. Örneğin, programı olağandışı bir aygıtla çalışmalı veya bilgisayar donanımı ilkeleri hakkında bilgi gerektiren diğer eylemleri gerçekleştirmelidir. Programcının programını yazdığı dil ne kadar iyi olursa olsun, montajcıyı bilmeden yapamaz. Ve hemen hemen tüm üst düzey dil derleyicilerinin, modüllerini montajcıdaki modüllerle bağlama veya montajcı programlama seviyesine erişimi destekleme araçları içermesi tesadüf değildir.

Bir bilgisayar, her biri sistem birimi adı verilen tek bir birime bağlı birkaç fiziksel aygıttan oluşur.

38. Mikroişlemcinin yazılım modeli

Günümüz bilgisayar pazarında çok çeşitli bilgisayar türleri bulunmaktadır. Bu nedenle, tüketicinin bir sorusu olacağını varsaymak mümkündür - belirli bir bilgisayar türünün (veya modelinin) yeteneklerinin nasıl değerlendirileceği ve diğer bilgisayar türlerinden (modeller) ayırt edici özellikleri.

Farklı makinelerde temelde çok az farklılık gösterdiğinden, yalnızca bir bilgisayarın blok şemasını dikkate almak bunun için yeterli değildir: tüm bilgisayarlarda RAM, işlemci ve harici cihazlar bulunur.

Bilgisayarın tek bir mekanizma olarak işlev gördüğü yollar, araçlar ve kaynaklar farklıdır.

İşlevsel program kontrollü özellikleri açısından bir bilgisayarı karakterize eden tüm kavramları bir araya getirmek için özel bir terim vardır - bilgisayar mimarisi.

Bilgisayar mimarisi kavramı, karşılaştırmalı değerlendirmeleri için 3. nesil makinelerin ortaya çıkmasıyla ilk kez anılmaya başlandı.

Herhangi bir bilgisayarın montaj dilini öğrenmeye başlamak, ancak bilgisayarın hangi bölümünün bu dilde programlama için görünür ve kullanılabilir olduğunu bulduktan sonra mantıklıdır. Bu, bir kısmı mikroişlemci program modeli olan ve programcı tarafından az ya da çok kullanılabilen 32 kayıt içeren sözde bilgisayar programı modelidir.

Bu kayıtlar iki büyük gruba ayrılabilir:

1) 16 kullanıcı kaydı;

2) 16 sistem kaydı.

Assembly dili programları, kayıtları çok yoğun bir şekilde kullanır. Çoğu kayıtların belirli bir işlevsel amacı vardır.

Yukarıda listelenen kayıtlara ek olarak, işlemci geliştiricileri, belirli hesaplama sınıflarını optimize etmek için tasarlanmış yazılım modeline ek kayıtlar ekler. Böylece Intel Corporation'ın Pentium Pro (MMX) işlemci ailesinde Intel'in MMX uzantısı tanıtıldı. 8 (MM0-MM7) 64-bit kayıt içerir ve birkaç yeni veri tipi çiftleri üzerinde tamsayı işlemleri gerçekleştirmenize izin verir:

1) sekiz paketlenmiş bayt;

2) dört paketlenmiş kelime;

3) iki çift kelime;

4) dörtlü kelime;

Başka bir deyişle, tek bir MMX uzantısı talimatı ile, bir programcı örneğin iki double word'ü birbirine ekleyebilir. Fiziksel olarak yeni kayıt eklenmedi. MM0-MM7, 64 bitlik FPU (kayan nokta birimi - yardımcı işlemci) yazmaç yığınının mantisleridir (alt 80 bit).

Ek olarak, şu anda programlama modelinin aşağıdaki uzantıları var - 3DNOW! AMD'den; SSE, SSE2, SSE3, SSE4. Son 4 uzantı hem AMD hem de Intel işlemciler tarafından desteklenmektedir.

39. Kullanıcı kayıtları

Adından da anlaşılacağı gibi, programcı programlarını yazarken bunları kullanabildiği için kullanıcı kayıtları denir. Bu kayıtlar şunları içerir:

1) programcılar tarafından veri ve adresleri depolamak için kullanılabilen sekiz adet 32 ​​bitlik kayıt (bunlara genel amaçlı kayıtlar (RON) da denir):

▪ eax/ax/ah/al;

▪ ebx/bx/bh/bl;

▪ edx/dx/dh/dl;

▪ ecx/cx/ch/cl;

▪ ebp/bp;

▪ esi/si;

▪ edi/di;

▪ esp/sp.

2) altı segment kaydı:

▪ cs;

▪ ds;

▪ ss;

▪ es;

▪fs;

▪gs;

3) durum ve kontrol kayıtları:

▪ bayraklar, bayrakları/bayrakları kaydeder;

▪ komut işaretçisi kaydı eip/ip.

Aşağıdaki şekil, mikroişlemcinin ana kayıtlarını göstermektedir:

Genel amaçlı kayıtlar

40. Genel kayıtlar

Bu grubun tüm kayıtları, "alt" bölümlerine erişmenize izin verir. Bu kayıtların sadece alt 16 ve 8 bitlik kısımları kendi kendine adresleme için kullanılabilir. Bu kayıtların üst 16 biti bağımsız nesneler olarak mevcut değildir.

Genel amaçlı kayıtlar grubuna ait kayıtları listeleyelim. Bu kayıtlar fiziksel olarak aritmetik mantık birimi (ALU) içindeki mikroişlemcide bulunduğundan, bunlara ALU kayıtları da denir:

1) eax/ax/ah/al (Akümülatör kaydı) - pil. Ara verileri depolamak için kullanılır. Bazı komutlarda bu kaydın kullanılması gerekir;

2) ebx/bx/bh/bl (Temel kayıt) - temel kayıt. Bazı nesnelerin temel adresini bellekte saklamak için kullanılır;

3) ecx/cx/ch/cl (Sayım kaydı) - sayaç kaydı. Bazı tekrarlayan eylemleri gerçekleştiren komutlarda kullanılır. Kullanımı genellikle örtük ve ilgili komutun algoritmasında gizlidir.

Örneğin, döngü organizasyonu komutu, kontrolü belirli bir adreste bulunan bir komuta aktarmanın yanı sıra, ecx/cx kaydının değerini birer birer analiz eder ve azaltır;

4) edx/dx/dh/dl (Veri kaydı) - veri kaydı.

Tıpkı eax/ax/ah/al kaydı gibi, ara verileri depolar. Bazı komutlar kullanımını gerektirir; bazı komutlar için bu dolaylı olarak gerçekleşir.

Aşağıdaki iki kayıt, sözde zincir operasyonlarını, yani her biri 32, 16 veya 8 bit uzunluğunda olabilen eleman zincirlerini sıralı olarak işleyen operasyonları desteklemek için kullanılır:

1) esi/si (Kaynak Dizin kaydı) - kaynak dizin. Zincir operasyonlarındaki bu kayıt, kaynak zincirdeki elemanın mevcut adresini içerir;

2) edi/di (Hedef Dizin kaydı) - alıcının (alıcının) dizini. Zincir operasyonlarındaki bu kayıt, hedef zincirindeki mevcut adresi içerir.

Donanım ve yazılım düzeyindeki mikroişlemci mimarisinde yığın gibi bir veri yapısı desteklenir. Mikroişlemci komut sisteminde yığınla çalışmak için özel komutlar vardır ve mikroişlemci yazılım modelinde bunun için özel kayıtlar vardır:

1) esp/sp (Yığın İşaretçi kaydı) - yığın işaretçi kaydı. Geçerli yığın segmentinde yığının en üstüne bir işaretçi içerir.

2) ebp/bp (Temel İşaretçi kaydı) - yığın çerçevesi temel işaretçi kaydı. Yığın içindeki verilere rastgele erişim düzenlemek için tasarlanmıştır.

Bazı talimatlar için kayıtların sabit olarak sabitlenmesinin kullanılması, makine temsillerinin daha kompakt bir şekilde kodlanmasını mümkün kılar. Bu özellikleri bilmek, gerekirse, program kodunun kapladığı en az birkaç baytlık bellek tasarrufu sağlayacaktır.

41. Segment kayıtları

Mikroişlemci yazılım modelinde altı segment kaydı vardır: cs, ss, ds, es, gs, fs.

Varlıkları, organizasyonun özelliklerinden ve Intel mikroişlemcileri tarafından RAM kullanımından kaynaklanmaktadır. Mikroişlemci donanımının, programın yapısal organizasyonunu segment adı verilen üç parça şeklinde desteklemesi gerçeğinde yatmaktadır. Buna göre, böyle bir bellek organizasyonuna bölümlenmiş denir.

Programın belirli bir zamanda erişime sahip olduğu bölümleri belirtmek için bölüm kayıtları amaçlanmıştır. Aslında (hafif bir düzeltme ile) bu kayıtlar, karşılık gelen bölümlerin başladığı bellek adreslerini içerir. Bir makine talimatını işleme mantığı, bir talimat alınırken, program verilerine erişilirken veya yığına erişilirken, iyi tanımlanmış segment kayıtlarındaki adreslerin dolaylı olarak kullanılacağı şekilde yapılandırılır.

Mikroişlemci aşağıdaki segment türlerini destekler.

1. Kod segmenti. Program komutlarını içerir. Bu segmente erişmek için cs kaydı (kod segment kaydı) kullanılır - segment kodu kaydı. Mikroişlemcinin erişime sahip olduğu makine talimatı bölümünün adresini içerir (yani, bu talimatlar mikroişlemci boru hattına yüklenir).

2. Veri segmenti. Program tarafından işlenen verileri içerir. Bu segmente erişmek için ds kaydı (veri segmenti kaydı) kullanılır - mevcut programın veri segmentinin adresini saklayan bir segment veri kaydı.

3. Yığın segmenti. Bu segment, yığın adı verilen bir bellek bölgesidir. Mikroişlemci yığınla çalışmayı şu prensibe göre düzenler: ilk önce bu alana yazılan son eleman seçilir. Bu segmente erişmek için, ss kaydı (yığın segment kaydı) kullanılır - yığın segmentinin adresini içeren yığın segment kaydı.

4. Ek veri segmenti. Dolaylı olarak, çoğu makine talimatının yürütme algoritmaları, işledikleri verilerin, adresi ds segment kaydında bulunan veri segmentinde bulunduğunu varsayar. Program için bir veri segmenti yeterli değilse, üç ek veri segmenti daha kullanma imkanına sahiptir. Ancak, adresi ds segment kaydında bulunan ana veri segmentinin aksine, ek veri segmentleri kullanılırken, adreslerinin komutta özel segment yeniden tanımlama önekleri kullanılarak açıkça belirtilmesi gerekir. Ek veri segmentlerinin adresleri es, gs, fs (uzantı veri segmenti kayıtları) kayıtlarında yer almalıdır.

42. Durum ve kontrol kayıtları

Mikroişlemci, hem mikroişlemcinin kendisinin hem de yönergeleri boru hattına yüklenen programın durumu hakkında sürekli olarak bilgi içeren birkaç kayıt içerir. Bu kayıtlar şunları içerir:

1) bayrak kayıt bayrakları/bayrakları;

2) eip/ip komut işaretçi kaydı.

Bu kayıtları kullanarak, komut yürütmenin sonuçları hakkında bilgi alabilir ve mikroişlemcinin durumunu etkileyebilirsiniz. Bu kayıtların amacını ve içeriğini daha ayrıntılı olarak ele alalım.

1. bayraklar/bayraklar (bayrak kaydı) - bayrak kaydı. Bayrakların/bayrakların bit derinliği 32/16 bittir. Bu kaydın bireysel bitlerinin belirli bir işlevsel amacı vardır ve bunlara bayraklar denir. Bu kaydın alt kısmı, i8086 için bayrak kaydına tamamen benzer.

Nasıl kullanıldıklarına bağlı olarak, bayrak/bayrak kaydının bayrakları üç gruba ayrılabilir:

1) sekiz durum bayrağı.

Bu bayraklar, makine talimatları yürütüldükten sonra değişebilir. Bayrak kaydının durum bayrakları, aritmetik veya mantıksal işlemlerin yürütülmesinin sonucunun özelliklerini yansıtır. Bu, hesaplama sürecinin durumunu analiz etmeyi ve koşullu atlama komutları ve alt program çağrıları kullanarak buna yanıt vermeyi mümkün kılar.

2) bir kontrol bayrağı.

Belirtilen df (Dizin Bayrağı). Bayrak kaydının bit 10'unda bulunur ve zincirleme komutlar tarafından kullanılır. df bayrağının değeri, bu işlemlerde eleman eleman işlemenin yönünü belirler: dizinin başından sonuna (df = 0) veya tam tersi, dizinin sonundan başlangıcına (df = 1). df bayrağıyla çalışmak için özel komutlar vardır: cld (df bayrağını kaldırın) ve std (df bayrağını ayarlayın).

Bu komutların kullanılması, df bayrağını algoritmaya göre ayarlamanıza ve dizeler üzerinde işlem yaparken sayaçların otomatik olarak artırılıp azaltıldığından emin olmanızı sağlar. 3) beş sistem bayrağı.

G/Ç'yi, maskelenebilir kesintileri, hata ayıklamayı, görev değiştirmeyi ve 8086 sanal modunu kontrol ederler.Uygulama programlarının bu bayrakları gereksiz yere değiştirmeleri önerilmez, çünkü bu çoğu durumda programın sonlanmasına neden olur.

2. eip/ip (Instraksiyon İşaretçi kaydı) - talimat işaretçi kaydı. eip/ip kaydı 32/16 bit genişliğindedir ve mevcut talimat segmentindeki cs segment kaydının içeriğine göre yürütülecek bir sonraki talimatın ofsetini içerir. Bu kayıt, programcı tarafından doğrudan erişilebilir değildir, ancak değeri, koşullu ve koşulsuz atlamalar, çağırma prosedürleri ve prosedürlerden geri dönme komutlarını içeren çeşitli kontrol komutları tarafından yüklenir ve değiştirilir. Kesintilerin meydana gelmesi aynı zamanda eip/ip kaydını da değiştirir.

43. Mikroişlemci sistem kayıtları

Bu kayıtların adı, sistemde belirli işlevleri yerine getirdiklerini gösterir. Sistem kayıtlarının kullanımı sıkı bir şekilde düzenlenmiştir. Korumalı modu sağlayan onlardır. Nitelikli bir sistem programcısının en düşük seviyeli işlemleri gerçekleştirebilmesi için kasıtlı olarak görünür bırakılan mikroişlemci mimarisinin bir parçası olarak da düşünülebilirler.

Sistem kayıtları üç gruba ayrılabilir:

1) dört kontrol kaydı;

Kontrol kayıtları grubu 4 kayıt içerir:

▪ cr0;

▪ cr1;

▪ cr2;

▪ cr3;

2) dört sistem adres kaydı (bellek yönetim kayıtları da denir);

Sistem adres kayıtları aşağıdaki kayıtları içerir:

▪ global tanımlayıcı tablo kaydı gdtr;

▪ yerel tanımlayıcı tablo kaydı Idtr;

▪ kesme tanımlayıcı tablo kaydı idtr;

▪ 16 bitlik görev kaydı tr;

3) sekiz hata ayıklama kaydı. Bunlar şunları içerir:

▪ dr0;

▪ dr1;

▪ dr2;

▪ dr3;

▪ dr4;

▪ dr5;

▪ dr6;

▪ dr7.

Assembler'da program yazmak için sistem kayıtları bilgisi gerekli değildir, çünkü bunlar çoğunlukla en düşük seviyeli işlemler için kullanılır. Bununla birlikte, yazılım geliştirmedeki mevcut eğilimler (özellikle, genellikle insan kodundan daha yüksek verimlilikte kod üreten yüksek seviyeli dillerin modern derleyicilerinin önemli ölçüde artan optimizasyon yeteneklerinin ışığında), Assembler'ın kapsamını en düşük sorunları çözmek için daraltıyor. - Yukarıdaki kayıtların bilgisinin çok faydalı olabileceği seviye problemleri.

44. Kontrol kayıtları

Kontrol kayıtları grubu dört kayıt içerir: cr0, cr1, cr2, cr3. Bu kayıtlar genel sistem kontrolü içindir. Kontrol kayıtları sadece ayrıcalık seviyesi 0 olan programlarda mevcuttur.

Mikroişlemcinin dört kontrol kaydı olmasına rağmen, bunlardan sadece üçü mevcuttur - işlevleri henüz tanımlanmamış olan cr1 hariç tutulmuştur (ileride kullanılmak üzere ayrılmıştır).

cr0 kaydı, gerçekleştirilen belirli görevlerden bağımsız olarak, mikroişlemcinin çalışma modlarını kontrol eden ve durumunu global olarak yansıtan sistem bayraklarını içerir.

Sistem bayraklarının amacı:

1) pe (Protect Enable), bit 0 - korumalı modu etkinleştir. Bu bayrağın durumu, mikroişlemcinin belirli bir zamanda gerçek (pe = 0) veya korumalı (pe = 1) olmak üzere iki moddan hangisinde çalıştığını gösterir;

2) mp (Math Present), bit 1 - bir yardımcı işlemcinin varlığı. Her zaman 1;

3) ts (Görev Değiştirildi), bit 3 - görev değiştirme. İşlemci, başka bir göreve geçtiğinde bu biti otomatik olarak ayarlar;

4) am (Hizalama Maskesi), bit 18 - hizalama maskesi.

Bu bit, hizalama kontrolünü etkinleştirir (am = 1) veya devre dışı bırakır (am = 0);

5) cd (Önbellek Devre Dışı), bit 30 - önbelleği devre dışı bırakın.

Bu biti kullanarak, dahili önbelleğin (birinci seviye önbellek) kullanımını devre dışı bırakabilir (cd = 1) veya etkinleştirebilirsiniz (cd = 0);

6) pg (çağrı), bit 31 - çağrıyı etkinleştir (pg = 1) veya devre dışı bırak (pg = 0).

Bayrak, bellek organizasyonunun sayfalama modelinde kullanılır.

cr2 kaydı, RAM sayfalamasında, geçerli talimat, o anda bellekte olmayan bir bellek sayfasında bulunan adrese eriştiğinde durumu kaydetmek için kullanılır.

Böyle bir durumda mikroişlemcide bir istisna numarası 14 oluşur ve bu istisnaya neden olan komutun lineer 32 bitlik adresi cr2 kaydına yazılır. Bu bilgi ile istisna işleyici (14) istenen sayfayı belirler, onu belleğe alır ve programın normal çalışmasına devam eder;

cr3 yazmacı aynı zamanda disk belleği için kullanılır. Bu, sözde birinci düzey sayfa dizini kaydıdır. Geçerli görevin sayfa dizininin 20 bitlik fiziksel temel adresini içerir. Bu dizin, her biri ikinci düzey sayfa tablosunun adresini içeren 1024 32 bit tanımlayıcı içerir. Sırayla, ikinci düzey sayfa tablolarının her biri, bellekteki sayfa çerçevelerini adresleyen 1024 32 bitlik tanımlayıcı içerir. Sayfa çerçeve boyutu 4 KB'dir.

45. Sistem adreslerinin kayıtları

Bu kayıtlara aynı zamanda bellek yönetim kayıtları da denir.

Mikroişlemcinin çoklu görev modunda programları ve verileri korumak için tasarlanmıştır. Mikroişlemci korumalı modda çalışırken, adres alanı şu bölümlere ayrılır:

1) küresel - tüm görevler için ortak;

2) yerel - her görev için ayrı. Bu bölüm, mikroişlemci mimarisinde aşağıdaki sistem kayıtlarının varlığını açıklar:

1) global tanımlayıcı tablosu gdtr'nin (Global Descriptor Table Register), 48 bit boyutunda ve global tanımlayıcı tablosu GDT'nin 32-bit (bit 16-47) temel adresini ve bir 16-bit (bit) içeren register 0-15) GDT tablosunun bayt cinsinden boyutu olan sınır değeri;

2) 16 bit boyutuna sahip olan ve yerel tanımlayıcı tablosu LDT'nin sözde tanımlayıcı seçicisini içeren yerel tanımlayıcı tablo kaydı ldtr (Yerel Tanımlayıcı Tablo Kaydı). Bu seçici, yerel tanımlayıcı tablosu LDT'yi içeren segmenti tanımlayan GDT'ye yönelik bir işaretçidir;

3) kesme tanımlayıcı tablosunun kaydı idtr (Kesme Tanımlayıcı Tablo Kaydı), 48 bitlik ve IDT kesme tanımlayıcı tablosunun 32 bitlik (bit 16-47) temel adresini ve bir 16 bitlik (bit) içeren 0-15) IDT tablosunun bayt cinsinden boyutu olan sınır değeri;

4) ldtr kaydı gibi bir seçici, yani GDT tablosundaki bir tanımlayıcıya yönelik bir işaretçi içeren 16 bitlik görev kaydı tr (Görev Kaydı). Bu tanımlayıcı, mevcut Görev Segmenti Durumunu (TSS) açıklar. Bu segment, sistemdeki her görev için oluşturulur, sıkı bir şekilde düzenlenmiş bir yapıya sahiptir ve görevin bağlamını (mevcut durumunu) içerir. TSS segmentlerinin temel amacı, başka bir göreve geçiş anında bir görevin mevcut durumunu kaydetmektir.

46. ​​​​Debug kayıtları

Bu, donanım hata ayıklaması için tasarlanmış çok ilginç bir kayıt grubudur. Donanım hata ayıklama araçları ilk olarak i486 mikroişlemcisinde ortaya çıktı. Donanımda, mikroişlemci sekiz hata ayıklama kaydı içerir, ancak bunlardan yalnızca altısı gerçekte kullanılır.

Dr0, dr1, dr2, dr3 kayıtları 32 bit genişliğe sahiptir ve dört kesme noktasının doğrusal adreslerini ayarlamak için tasarlanmıştır. Bu durumda kullanılan mekanizma şu şekildedir: Mevcut program tarafından oluşturulan herhangi bir adres, dr0... dr3 kayıtlarındaki adreslerle karşılaştırılır ve bir eşleşme varsa 1 numaralı hata ayıklama istisnası oluşturulur.

dr6 kaydı, hata ayıklama durumu kaydı olarak adlandırılır. Bu kayıttaki bitler, son istisna sayısı 1'in oluşmasına neden olan nedenlere göre ayarlanır.

Bu bitleri ve amaçlarını listeliyoruz:

1) b0 - bu bit 1 olarak ayarlanmışsa, dr0 kaydında tanımlanan kontrol noktasına ulaşılmasının bir sonucu olarak son istisna (kesinti) meydana geldi;

2) b1 - b0'a benzer, ancak dr1 kaydındaki bir kontrol noktası için;

3) b2 - b0'a benzer, ancak dr2 kaydındaki bir kontrol noktası için;

4) b3 - b0'a benzer, ancak dr3 kaydındaki bir kontrol noktası için;

5) bd (bit 13) - hata ayıklama kayıtlarını korumaya yarar;

6) bs (bit 14) - istisna 1'e bayrak kaydındaki tf = 1 bayrağının durumundan kaynaklanıyorsa 1'e ayarlanır;

7) Eğer istisna 15, TSS t = 1'de ayarlanan tuzak biti ile bir göreve geçişten kaynaklanıyorsa bt (bit 1) 1'e ayarlanır. Bu kayıttaki diğer tüm bitler sıfırlarla doldurulur. İstisna işleyicisi 1, dr6 içeriğine göre istisnanın oluşma nedenini belirlemeli ve gerekli önlemleri almalıdır.

dr7 kaydı, hata ayıklama kontrol kaydı olarak adlandırılır. Bir kesmenin oluşturulacağı aşağıdaki koşulları belirlemenize olanak tanıyan dört hata ayıklama kesme noktası kaydının her biri için alanlar içerir:

1) kontrol noktası kayıt konumu - yalnızca mevcut görevde veya herhangi bir görevde. Bu bitler, dr8 kaydının alt 7 bitini kaplar (sırasıyla dr2, drl, dr0, dr2 kayıtları tarafından ayarlanan her kesme noktası (aslında bir kesme noktası) için 3 bit).

Her çiftin ilk biti yerel çözünürlük olarak adlandırılır; bunu ayarlamak, geçerli görevin adres alanı içindeyse kesme noktasına etkili olmasını söyler.

Her çiftteki ikinci bit, verilen kesme noktasının sistemdeki tüm görevlerin adres alanları içinde geçerli olduğunu gösteren genel izni belirtir;

2) kesmenin başlatıldığı erişim türü: yalnızca bir komut alırken, yazarken veya veri yazarken / okurken. Kesinti oluşumunun bu niteliğini belirleyen bitler, bu kaydın üst kısmında bulunur. Sistem kayıtlarının çoğuna programlı olarak erişilebilir.

47. Montajcıda programın yapısı

Bir montaj dili programı, bellek bölümleri adı verilen bir bellek blokları topluluğudur. Bir program bu blok bölümlerinden bir veya daha fazlasından oluşabilir. Her bölüm, her biri ayrı bir program kodu satırı işgal eden bir dil cümlesi koleksiyonu içerir.

Montaj ifadeleri dört tiptir.

Makine talimatlarının sembolik karşılığı olan komutlar veya talimatlar.

Çevirme işlemi sırasında, montaj talimatları, mikroişlemci talimat setinin karşılık gelen komutlarına dönüştürülür. Bir Assembler talimatı, kural olarak, genel olarak düşük seviyeli diller için tipik olan bir mikroişlemci talimatına karşılık gelir.

Aşağıda, eax kaydında saklanan ikili sayıyı bir arttıran bir talimat örneği verilmiştir:

eax dahil

▪ makro komutlar - program metninin belirli bir şekilde biçimlendirilmiş cümleleri, yayın sırasında başka cümlelerle değiştirilir.

Aşağıdaki program sonu makrosu bir makro örneğidir:

makrodan çık

movax,4c00h

int 21h

son

▪ montajcı çevirmenine belirli eylemleri gerçekleştirmesi için verilen talimatlar olan direktifler.

Direktiflerin makine gösteriminde karşılığı yoktur; Örnek olarak, listeleme dosyasının başlığını belirleyen TITLE yönergesi şu şekildedir: %TITLE "Listing 1"

▪ Rus alfabesindeki harfler de dahil olmak üzere herhangi bir karakteri içeren yorum satırları. Yorumlar çevirmen tarafından dikkate alınmaz. Örnek:

; bu satır bir yorumdur

48. Montaj Sözdizimi

Bir programı oluşturan cümleler, bir komuta, makroya, yönergeye veya yoruma karşılık gelen sözdizimsel bir yapı olabilir. Montajcı çevirmeninin bunları tanıması için belirli sözdizim kurallarına göre oluşturulmaları gerekir. Bunu yapmak için, dilbilgisi kuralları gibi dilin sözdiziminin resmi bir tanımını kullanmak en iyisidir. Bir programlama dilini bu şekilde tanımlamanın en yaygın yolları, sözdizimi diyagramları ve genişletilmiş Backus-Naur formlarıdır. Sözdizimi diyagramlarıyla çalışırken, oklarla gösterilen geçiş yönüne dikkat edin. Sözdizimi diyagramları, programın giriş cümlelerini ayrıştırırken çevirmenin mantığını yansıtır.

Geçerli karakterler:

1) tüm Latin harfleri: A - Z, a - z;

2) 0'dan 9'a kadar sayılar;

3) işaretler? @, $, &;

4) ayırıcılar.

Jetonlar aşağıdaki gibidir.

1. Tanımlayıcılar - işlem kodlarını, değişken adlarını ve etiket adlarını belirtmek için kullanılan geçerli karakter dizileri. Bir tanımlayıcı bir sayı ile başlayamaz.

2. Karakter zincirleri - tek veya çift tırnak içine alınmış karakter dizileri.

3. Tam sayılar.

Olası montajcı deyimleri türleri.

1. Aritmetik operatörler. Bunlar şunları içerir:

1) tekli "+" ve "-";

2) ikili "+" ve "-";

3) çarpma "*";

4) tamsayı bölümü "/";

5) "mod" bölümünün geri kalanını elde etmek.

2. Kaydırma operatörleri, ifadeyi belirtilen bit sayısı kadar kaydırır.

3. Karşılaştırma operatörleri (dönüş "doğru" veya "yanlış") mantıksal ifadeler oluşturmak için tasarlanmıştır.

4. Mantıksal operatörler, ifadeler üzerinde bit düzeyinde işlemler gerçekleştirir.

5. İndeks operatörü [].

6. ptr türü yeniden tanımlama operatörü, bir ifade tarafından tanımlanan bir etiketin veya değişkenin türünü yeniden tanımlamak veya nitelemek için kullanılır.

7. Segment yeniden tanımlama operatörü ":" (iki nokta üst üste), fiziksel adresin belirli bir segment bileşenine göre hesaplanmasına neden olur.

8. Yapı tipi adlandırma operatörü "." (nokta) ayrıca bir ifadede olması durumunda derleyicinin belirli hesaplamaları yapmasına neden olur.

9. seg ifadesinin adresinin parça bileşenini elde etmeye yönelik operatör, bir etiket, değişken, parça adı, grup adı veya bazı sembolik ad olabilen, ifade için parçanın fiziksel adresini döndürür.

10. İfade ofsetinin ofsetini elde etme operatörü, ifadenin ofsetinin değerini, ifadenin tanımlandığı segmentin başlangıcına göre bayt cinsinden almanıza olanak tanır.

49. Segmentasyon Direktifleri

Segmentasyon, modüler programlama kavramıyla ilgili daha genel bir mekanizmanın parçasıdır. Farklı programlama dillerinden olanlar da dahil olmak üzere derleyici tarafından oluşturulan nesne modüllerinin tasarımının birleştirilmesini içerir. Bu, farklı dillerde yazılmış programları birleştirmenizi sağlar. SEGMENT direktifindeki işlenenler, böyle bir birlik için çeşitli seçeneklerin uygulanması içindir.

Onları daha ayrıntılı olarak düşünün.

1. Segment hizalama özelliği (hizalama türü), bağlayıcıya segmentin başlangıcının belirtilen sınıra yerleştirilmesini sağlamasını söyler:

1) BYTE - hizalama yapılmaz;

2) WORD - segment, ikinin katı olan bir adreste başlar, yani fiziksel adresin son (en az önemli) biti 0'dır (kelime sınırına hizalanmıştır);

3) DWORD - segment, dördün katı olan bir adreste başlar;

4) PARA - segment, 16'nın katı olan bir adreste başlar;

5) SAYFA - segment, 256'nın katı olan bir adreste başlar;

6) MEMPAGE - segment, 4 KB'nin katı olan bir adreste başlar.

2. Birleştirme segmenti özelliği (kombinatoryal tip), bağlayıcıya aynı ada sahip farklı modüllerin segmentlerini nasıl birleştireceğini söyler:

1) ÖZEL - segment, bu modülün dışında aynı ada sahip diğer segmentlerle birleştirilmeyecektir;

2) KAMU - bağlayıcıyı aynı ada sahip tüm segmentleri bağlamaya zorlar;

3) ORTAK - aynı adreste aynı ada sahip tüm segmentlere sahiptir;

4) AT xxxx - segmenti paragrafın mutlak adresinde bulur;

5) STACK - yığın segmentinin tanımı.

3. Bir segment sınıfı özniteliği (sınıf türü), bir programı birden çok modül segmentinden birleştirirken, bağlayıcının uygun segment sırasını belirlemesine yardımcı olan alıntılanmış bir dizedir.

4. Segment boyutu özelliği:

1) KULLANIM16 - bu, segmentin 16 bit adreslemeye izin verdiği anlamına gelir;

2) USE32 - segment 32-bit olacaktır. İmkansızlığı telafi etmenin bir yolu olmalı.

segmentlerin yerleşimini ve kombinasyonunu doğrudan kontrol edin. Bunu yapmak için MODEL bellek modelini belirtmek için yönergeyi kullanmaya başladılar. Bu yönerge, basitleştirilmiş bölümleme yönergelerinin kullanılması durumunda önceden tanımlanmış adlara sahip olan bölümleri, bölüm yazmaçlarıyla (yine de ds'yi açıkça başlatmanız gerekse de) bağlar.

MODEL yönergesinin zorunlu parametresi bellek modelidir. Bu parametre, POU için bellek segmentasyon modelini tanımlar. Bir program modülünün, daha önce bahsettiğimiz basitleştirilmiş segment tanımlama direktifleri tarafından tanımlanan sadece belirli segment tiplerine sahip olabileceği varsayılmaktadır.

50. Makine talimat yapısı

Bir makine komutu, mikroişlemciye, belirli kurallara göre kodlanmış, bir işlem veya eylem gerçekleştirmesi için bir göstergedir. Her komut, aşağıdakileri tanımlayan öğeleri içerir:

1) ne yapmalı?

2) üzerinde bir şeyler yapılması gereken nesneler (bu öğelere işlenenler denir);

3) nasıl yapılır?

Bir makine talimatının maksimum uzunluğu 15 bayttır.

1. Ön ekler.

Her biri 1 bayt olan veya atlanabilen isteğe bağlı makine talimat öğeleri. Bellekte, önekler komuttan önce gelir. Öneklerin amacı, komut tarafından gerçekleştirilen işlemi değiştirmektir. Bir uygulama aşağıdaki önek türlerini kullanabilir:

1) segment değiştirme öneki;

2) adres biti derinliği öneki, adres bit uzunluğunu (32- veya 16-bit) belirtir;

3) işlenen bit uzunluğu öneki, adres bit uzunluğu önekine benzer, ancak komutun çalıştığı işlenen bit uzunluğunu (32 bit veya 16 bit) gösterir;

4) Tekrar öneki zincirleme komutlarla kullanılır.

2. İşlem kodu.

Komut tarafından gerçekleştirilen işlemi açıklayan gerekli öğe.

3. Adresleme modu bayt modr/m.

Bu baytın değeri, kullanılan işlenen adres formunu belirler. İşlenenler bir veya iki kayıtta bellekte olabilir. İşlenen bellekteyse, modr/m baytı bileşenleri belirtir (ofset, taban ve dizin kayıtları)

etkin adresini hesaplamak için kullanılır. modr/m baytı üç alandan oluşur:

1) mod alanı, işlenenin adresi tarafından talimatta işgal edilen bayt sayısını belirler;

2) reg/cop alanı, ya birinci işlenenin yerine komutta bulunan kaydı ya da işlem kodunun olası bir uzantısını belirler;

3) r/m alanı mod alanı ile birlikte kullanılır ve ya birinci işlenenin yerinde komutta bulunan kaydı (eğer mod = 11 ise) ya da etkin adresi hesaplamak için kullanılan taban ve dizin kayıtlarını belirler. (komuttaki ofset alanıyla birlikte).

4. Bayt ölçeği - dizin - taban (bayt sib). İşlenenleri adresleme olanaklarını genişletmek için kullanılır. Sib bayt üç alandan oluşur:

1) ölçek alanları ss. Bu alan, kardeş baytın sonraki 3 bitini kaplayan indeks bileşen indeksi için ölçek faktörünü içerir;

2) dizin alanları. İşlenenin etkin adresini hesaplamak için kullanılan dizin kayıt numarasını saklamak için kullanılır;

3) temel alanlar. İşlenenin etkin adresini hesaplamak için de kullanılan temel kayıt numarasını saklamak için kullanılır.

5. Ofset alanı komutta.

İşlenenin etkin adresinin değerini tamamen veya kısmen (yukarıdaki hususlara tabi olarak) temsil eden 8-, 16- veya 32-bit işaretli bir tamsayı.

6. Anında işlenenin alanı. 8- temsil eden isteğe bağlı bir alan,

16- veya 32-bit anında işlenen. Bu alanın varlığı, elbette, modr/m baytının değerine yansır.

51. Komut işlenenlerini belirleme yöntemleri

İşlenen, dolaylı olarak üretici yazılımı düzeyinde ayarlanır

Bu durumda, talimat açıkça hiçbir işlenen içermez. Komut yürütme algoritması bazı varsayılan nesneleri (kayıtlar, bayraklardaki bayraklar vb.) kullanır.

İşlenen, talimatın kendisinde belirtilir (anında işlenen)

İşlenen talimat kodundadır, yani onun bir parçasıdır. Böyle bir işleneni saklamak için, talimatta 32 bit uzunluğa kadar bir alan tahsis edilir. Anında işlenen yalnızca ikinci (kaynak) işlenen olabilir. Hedef işlenen, bellekte veya bir kayıt defterinde olabilir. İşlenen kayıtlardan birindedir.Kayıt işlenenleri kayıt adlarıyla belirtilir. Kayıtlar kullanılabilir:

1) 32-bit register EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP;

2) 16-bit register AX, BX, CX, DX, SI, DI, SP, BP;

3) 8-bit register AH, AL, BH, BL, CH, CL, DH,

D.L.;

4) segment kayıtları CS, DS, SS, ES, FS, GS. Örneğin, add ax,bx komutu, ax ve bx kayıtlarının içeriğini ekler ve sonucu bx'e yazar. dec si komutu, si'nin içeriğini 1 azaltır.

İşlenen bellekte

Bu, işlenenleri belirlemenin en karmaşık ve aynı zamanda en esnek yoludur. Aşağıdaki iki ana adresleme türünü uygulamanıza olanak tanır: doğrudan ve dolaylı.

Buna karşılık, dolaylı adresleme aşağıdaki çeşitlere sahiptir:

1) dolaylı baz adresleme; diğer adı kayıt dolaylı adreslemedir;

2) ofset ile dolaylı baz adresleme;

3) ofset ile dolaylı dizin adresleme;

4) dolaylı temel indeks adresleme;

5) ofset ile dolaylı temel indeks adresleme.

İşlenen bir G/Ç bağlantı noktasıdır

RAM adres alanına ek olarak, mikroişlemci, G/Ç aygıtlarına erişmek için kullanılan bir G/Ç adres alanını korur. G/Ç adres alanı 64 KB'dir. Bu alandaki herhangi bir bilgisayar aygıtı için adresler tahsis edilir. Bu alan içindeki belirli bir adres değerine G/Ç bağlantı noktası adı verilir. Fiziksel olarak, G / Ç bağlantı noktası, giriş ve çıkış özel montajcı talimatları kullanılarak erişilen bir donanım kaydına (mikroişlemci kaydı ile karıştırılmamalıdır) karşılık gelir.

İşlenen yığında

Komutların hiç işleneni olmayabilir, bir veya iki işleneni olabilir. Çoğu talimat, biri kaynak işlenen ve diğeri hedef işlenen olan iki işlenen gerektirir. Bir işlenenin bir kayıt veya bellekte bulunabilmesi ve ikinci işlenenin bir kayıtta veya doğrudan talimatta olması önemlidir. Anında işlenen yalnızca bir kaynak işlenen olabilir. İki işlenen makine talimatında, aşağıdaki işlenen kombinasyonları mümkündür:

1) kayıt ol - kayıt ol;

2) kayıt - hafıza;

3) hafıza - kayıt;

4) acil işlenen - kayıt;

5) acil işlenen - bellek.

52. Adresleme yolları

Doğrudan Adresleme

Bu, bir işleneni bellekte adreslemenin en basit şeklidir, çünkü etkin adres talimatın kendisinde bulunur ve onu oluşturmak için ek kaynaklar veya kayıtlar kullanılmaz. Etkili adres, doğrudan 8, 16, 32 bit olabilen makine talimatı ofset alanından alınır. Bu değer, veri segmentinde bulunan bayt, kelime veya çift kelimeyi benzersiz şekilde tanımlar.

Doğrudan adresleme iki tip olabilir.

Göreceli doğrudan adresleme

Göreceli atlama adresini belirtmek için koşullu atlama talimatları için kullanılır. Böyle bir geçişin göreliliği, makine talimatının ofset alanının 8-, 16- veya 32-bitlik bir değer içermesi gerçeğinde yatmaktadır; bu, talimatın çalışması sonucunda, içeriğine eklenecektir. ip/eip talimat işaretçi kaydı. Bu ekleme sonucunda geçişin gerçekleştirildiği adres elde edilir.

Mutlak doğrudan adresleme

Bu durumda, etkin adres makine talimatının bir parçasıdır, ancak bu adres sadece talimattaki ofset alanının değerinden oluşur. İşlenenin fiziksel adresini bellekte oluşturmak için, mikroişlemci bu alana 4 bit kaydırılan segment kaydının değerini ekler. Bu adreslemenin çeşitli biçimleri bir montajcı komutunda kullanılabilir.

Dolaylı temel (kayıt) adresleme

Bu adresleme ile işlenenin etkin adresi, sp / esp ve bp / ebp (bunlar bir yığın segmenti ile çalışmak için özel kayıtlardır) hariç, genel amaçlı kayıtların herhangi birinde olabilir. Bir komutta sözdizimsel olarak, bu adresleme modu, kayıt adının köşeli parantez [] içine alınmasıyla ifade edilir.

Ofset ile dolaylı baz (kayıt) adresleme

Bu adresleme türü, bir öncekine ektir ve bazı temel adreslere göre bilinen bir kayma ile verilere erişmek için tasarlanmıştır. Bu tür adresleme, program geliştirme aşamasında öğelerin ofseti önceden bilindiğinde ve yapının temel (başlangıç) adresinin dinamik olarak hesaplanması gerektiğinde, veri yapılarının öğelerine erişmek için uygundur. program yürütme aşaması.

Ofset ile dolaylı dizin adresleme

Bu tür adresleme, bir ofset ile dolaylı baz adreslemeye çok benzer. Burada da geçerli adresi oluşturmak için genel amaçlı kayıtlardan biri kullanılır. Ancak dizin adreslemenin, dizilerle çalışmak için çok uygun olan ilginç bir özelliği vardır. İndeks kaydının içeriğinin sözde ölçeklenmesi olasılığı ile bağlantılıdır.

Dolaylı baz dizin adresleme

Bu tür adresleme ile etkin adres, iki genel amaçlı kayıt defterinin içeriğinin toplamı olarak oluşturulur: taban ve dizin. Bu kayıtlar herhangi bir genel amaçlı kayıt olabilir ve genellikle bir indeks kaydının içeriğinin ölçeklendirilmesi kullanılır.

Ofset ile dolaylı temel dizin adresleme

Bu tür adresleme, dolaylı dizinli adreslemenin tamamlayıcısıdır. Etkili adres, üç bileşenin toplamı olarak oluşturulur: temel kaydın içeriği, dizin kaydının içeriği ve komuttaki ofset alanının değeri.

53. Veri aktarım komutları

Genel Veri Aktarım Komutları

Bu grup aşağıdaki komutları içerir:

1) mov, ana veri aktarım komutudur;

2) xchg - çift yönlü veri aktarımı için kullanılır.

Bağlantı Noktası G/Ç Komutları

Temel olarak, cihazları doğrudan bağlantı noktaları üzerinden yönetmek kolaydır:

1) akümülatörde, port numarası - port numarası ile porttan akümülatöre giriş;

2) çıkış portu, akümülatör - akümülatörün içeriğini port numarası ile porta çıkar.

Veri dönüştürme komutları

Birçok mikroişlemci talimatı bu gruba atfedilebilir, ancak çoğu, diğer fonksiyonel gruplara atfedilmelerini gerektiren belirli özelliklere sahiptir.

Yığın Komutları

Bu grup, yığınla esnek ve verimli çalışma düzenlemeye odaklanan bir dizi özel komuttur.

Yığın, program verilerinin geçici olarak depolanması için özel olarak ayrılmış bir bellek alanıdır.

Yığının üç kaydı vardır:

1) ss - yığın segment kaydı;

2) sp/esp - yığın işaretçi kaydı;

3) bp/ebp - yığın çerçevesi temel işaretçi kaydı. Yığınla çalışmayı düzenlemek için yazma ve okuma için özel komutlar vardır.

1. kaynağı itin - kaynak değerini yığının en üstüne yazın.

2. pop ataması - yığının tepesinden değerin hedef işlenen tarafından belirtilen konuma yazılması. Değer böylece yığının tepesinden "kaldırılır".

3. pusha - yığına bir grup yazma komutu.

4. pushaw, pusha komutuyla neredeyse eş anlamlıdır. Bitlik özelliği, use16 veya use32 olabilir. R

5. pushad - pusha komutuna benzer şekilde gerçekleştirilir, ancak bazı özellikler vardır.

Aşağıdaki üç komut, yukarıdaki komutların tersini gerçekleştirir:

1) baba;

2) popaw;

3) pop.

Aşağıda açıklanan talimat grubu, bayrak kaydını yığına kaydetmenize ve yığına bir kelime veya çift kelime yazmanıza izin verir.

1. pushf - bayrakların kaydını yığına kaydeder.

2. pushfw - yığında kelime boyutunda bir bayrak kaydı kaydetme. use16 özniteliği ile her zaman pushf gibi çalışır.

3. pushfd - segmentin bit genişliği özelliğine bağlı olarak (yani, pushf ile aynı) bayrakları veya bayrak bayraklarını yığında kaydetme.

Benzer şekilde, aşağıdaki üç komut, yukarıda tartışılan işlemlerin tersini gerçekleştirir:

1) popf;

2) popfw;

3) popfd.

54. Aritmetik komutlar

Bu tür komutlar iki türle çalışır:

1) tamsayı ikili sayılar, yani ikili sayı sisteminde kodlanmış sayılar.

Ondalık sayılar, bir sayının her ondalık basamağını dört bitlik bir grupla kodlama ilkesine dayanan sayısal bilgilerin özel bir temsilidir.

Mikroişlemci, ikili sayıların eklenmesi kurallarına göre işlenenlerin eklenmesini gerçekleştirir.

Mikroişlemci komut setinde üç ikili ekleme talimatı vardır:

1) inc işlenen - işlenenin değerini arttırır;

2) işlenen1, işlenen2'yi ekleyin - ekleme;

3) adc işlenen1, işlenen2 - taşıma bayrağını dikkate alarak ekleme cf.

İşaretsiz ikili sayıların çıkarılması

Eksi, çıkandan büyükse, fark pozitiftir. Eksi, çıkarılandan küçükse, bir sorun vardır: sonuç 0'dan küçüktür ve bu zaten imzalı bir sayıdır.

İşaretsiz sayıları çıkardıktan sonra, CF bayrağının durumunu analiz etmeniz gerekir. 1'e ayarlanırsa, en önemli bit ödünç alınmıştır ve sonuç, ikisinin tamamlayıcı kodundadır.

İkili sayıların bir işaretle çıkarılması Ancak, ek bir kodda işaretli sayıların eklenmesi yoluyla çıkarma için, her iki işleneni de - hem eksi hem de çıkarmayı - temsil etmek gerekir. Sonuç ayrıca ikinin tümleyen değeri olarak ele alınmalıdır. Ancak burada zorluklar ortaya çıkıyor. Her şeyden önce, işlenenin en önemli bitinin bir işaret biti olarak kabul edilmesiyle ilgilidir.

Bayrağın taşma içeriğine göre. 1 olarak ayarlamak, bu boyuttaki bir işlenen için sonucun işaretli sayıların aralığı dışında olduğunu (yani en önemli bitin değiştiğini) ve programcının sonucu düzeltmek için harekete geçmesi gerektiğini gösterir.

Standart işlenen bit ızgaralarını aşan bir temsil aralığına sahip sayıları çıkarma ilkesi, toplama işlemiyle aynıdır, yani cf taşıma bayrağı kullanılır. Sadece bir sütunda çıkarma işlemini hayal etmeniz ve mikroişlemci talimatlarını sbb talimatı ile doğru bir şekilde birleştirmeniz gerekiyor.

İşaretsiz sayıları çarpma komutu

çok faktör_1

Sayıları bir işaretle çarpma komutu

[aynı işlenen_1, işlenen_2, işlenen_3]

Div divisor komutu, işaretsiz sayıları bölmek içindir.

idiv divisor komutu, işaretli sayıları bölmek içindir.

55. Mantık komutları

Teoriye göre, aşağıdaki mantıksal işlemler ifadeler üzerinde (bitler üzerinde) gerçekleştirilebilir.

1. Olumsuzlama (mantıksal DEĞİL) - bir işlenen üzerinde, sonucu orijinal işlenenin değerinin tersi olan mantıksal bir işlem.

2. Mantıksal ekleme (mantıksal dahil VEYA) - iki işlenen üzerinde, bir veya her iki işlenen doğruysa "doğru" (1) ve her iki işlenen de doğruysa "yanlış" (1) olan mantıksal bir işlem yanlış (0).

3. Mantıksal çarpma (mantıksal VE) - iki işlenen üzerinde, sonucu doğru olan (1) yalnızca her iki işlenen de doğruysa (1) mantıksal bir işlem. Diğer tüm durumlarda, işlemin değeri "yanlış" (0) olur.

4. Mantıksal dışlayıcı ekleme (mantıksal dışlayıcı VEYA) - iki işlenenden yalnızca biri doğru (1) ve yanlış (1) ise sonucu "doğru" (0) olan iki işlenen üzerinde mantıksal bir işlem her iki işlenen de yanlış (0) veya doğru (1)'dir.

4. Mantıksal dışlayıcı ekleme (mantıksal dışlayıcı VEYA) - iki işlenenden yalnızca biri doğru (1) ve yanlış (1) ise sonucu "doğru" (0) olan iki işlenen üzerinde mantıksal bir işlem her iki işlenen de yanlış (0) veya doğru (1)'dir.

Mantıksal verilerle çalışmayı destekleyen aşağıdaki komut kümesi:

1) ve işlenen_1, işlenen_2 - mantıksal çarpma işlemi;

2) veya işlenen_1, işlenen_2 - mantıksal ekleme işlemi;

3) xor işlenen_1, işlenen_2 - mantıksal dışlayıcı ekleme işlemi;

4) test işleneni_1, işlenen_2 - "test" işlemi (mantıksal çarpma ile)

5) işlenen değil - mantıksal olumsuzlama işlemi.

a) belirli rakamları (bitleri) 1'e ayarlamak için komut veya işlenen_1, işlenen_2 kullanılır;

b) belirli rakamları (bitleri) 0'a sıfırlamak için komut ve işlenen_1, işlenen_2 kullanılır;

c) komut xor işlenen_1, işlenen_2 uygulanır:

▪ işlenen_1 ve işlenen_2'deki hangi bitlerin farklı olduğunu bulmak için;

▪ belirtilen bitlerin durumunu işlenen_1'e çevirmek için.

Test operand_1, operand_2 (kontrol operand_1) komutu, belirtilen bitlerin durumunu kontrol etmek için kullanılır.

Komutun sonucu, sıfır bayrağı zf'nin değerini ayarlamaktır:

1) zf = 0 ise, mantıksal çarpmanın bir sonucu olarak sıfır sonuç elde edilir, yani işlenen1'in karşılık gelen birim bitiyle eşleşmeyen maskenin bir birim biti;

2) zf = 1 ise, mantıksal çarpma sıfırdan farklı bir sonuçla sonuçlandı, yani maskenin en az bir birim biti işlenen1'in karşılık gelen bir bitiyle çakıştı.

Tüm kaydırma talimatları, işlenen alanındaki bitleri işlem koduna bağlı olarak sola veya sağa hareket ettirir. Tüm vardiya talimatları aynı yapıya sahiptir; polis işleneni, vardiya sayacı.

56. Kontrol Transfer Komutları

Daha sonra hangi program talimatının yürütülmesi gerektiğini, mikroişlemci cs: (e) ip kayıt çiftinin içeriğinden öğrenir:

1) cs - mevcut kod segmentinin fiziksel adresini içeren kod segmenti kaydı;

2) eip/ip - talimat işaretçi kaydı, yürütülecek bir sonraki talimatın hafızasındaki ofset değerini içerir.

koşulsuz sıçramalar

Değiştirilmesi gerekenler şunlara bağlıdır:

1) koşulsuz dal talimatındaki işlenenin türü (yakın veya uzak);

2) geçiş adresinden önce bir değiştirici belirtmekten; bu durumda, atlama adresinin kendisi doğrudan komutta (doğrudan atlama) veya bir bellek kaydında (dolaylı atlama) olabilir.

Değiştirici değerleri:

1) yakın ptr - etikete doğrudan geçiş;

2) far ptr - başka bir kod segmentindeki bir etikete doğrudan geçiş;

3) word ptr - etikete dolaylı geçiş;

4) dword ptr - başka bir kod segmentindeki bir etikete dolaylı geçiş.

jmp koşulsuz atlama talimatı

jmp [değiştirici] atlama_adresi

Bir prosedür veya alt program, bazı görevlerin ayrıştırılmasının temel işlevsel birimidir. Prosedür, bir komutlar grubudur.

Koşullu Atlamalar

Mikroişlemcide 18 koşullu atlama talimatı vardır. Bu komutlar şunları kontrol etmenizi sağlar:

1) imzalı işlenenler arasındaki ilişki (“daha ​​fazlası daha azdır”);

2) imzasız işlenenler arasındaki ilişki

("daha yüksek, daha düşük");

3) ZF, SF, CF, OF, PF aritmetik bayraklarının durumları (ancak AF değil).

Koşullu atlama talimatları aynı sözdizimine sahiptir: jcc atlama etiketi

cmp karşılaştırma komutunun ilginç bir çalışma şekli vardır. Çıkarma komutuyla tamamen aynıdır - alt işlenen_1, işlenen_2.

cmp komutu, sub komutu gibi, işlenenleri çıkarır ve bayrakları ayarlar. Yapmadığı tek şey, çıkarma işleminin sonucunu ilk işlenenin yerine yazmaktır.

cmp komut sözdizimi - cmp işlenen_1, işlenen_2 (karşılaştır) - iki işleneni karşılaştırır ve karşılaştırmanın sonuçlarına göre bayrakları ayarlar.

Döngülerin organizasyonu

Örneğin, kontrol komutlarının koşullu aktarımını veya koşulsuz atlama komutunu jmp kullanarak, programın belirli bir bölümünün döngüsel yürütülmesini düzenleyebilirsiniz:

1) döngü geçiş etiketi (Döngü) - döngüyü tekrarlayın. Komut, döngü sayacının otomatik olarak azaltılmasıyla üst düzey dillerdeki döngülere benzer döngüler düzenlemenizi sağlar;

2) loope/loopz atlama etiketi

loope ve loopz komutları mutlak eşanlamlıdır;

3) loopne/loopnz atlama etiketi

loopne ve loopnz komutları da mutlak eşanlamlıdır. loope/loopz ve loopne/loopnz komutları, işlemlerinde karşılıklı olarak terstir.

Yazar: Tsvetkova A.V.

İlginç makaleler öneriyoruz bölüm Ders notları, kopya kağıtları:

Normal insan anatomisi. Beşik

Can güvenliği. Beşik

Kısaca XNUMX. yüzyıl Rus edebiyatı. Beşik

Diğer makalelere bakın bölüm Ders notları, kopya kağıtları.

Oku ve yaz yararlı bu makaleye yapılan yorumlar.

<< Geri

En son bilim ve teknoloji haberleri, yeni elektronikler:

Bahçelerdeki çiçekleri inceltmek için makine 02.05.2024

Modern tarımda, bitki bakım süreçlerinin verimliliğini artırmaya yönelik teknolojik ilerleme gelişmektedir. Hasat aşamasını optimize etmek için tasarlanan yenilikçi Florix çiçek seyreltme makinesi İtalya'da tanıtıldı. Bu alet, bahçenin ihtiyaçlarına göre kolayca uyarlanabilmesini sağlayan hareketli kollarla donatılmıştır. Operatör, ince tellerin hızını, traktör kabininden joystick yardımıyla kontrol ederek ayarlayabilmektedir. Bu yaklaşım, çiçek seyreltme işleminin verimliliğini önemli ölçüde artırarak, bahçenin özel koşullarına ve içinde yetişen meyvelerin çeşitliliğine ve türüne göre bireysel ayarlama olanağı sağlar. Florix makinesini çeşitli meyve türleri üzerinde iki yıl boyunca test ettikten sonra sonuçlar çok cesaret vericiydi. Birkaç yıldır Florix makinesini kullanan Filiberto Montanari gibi çiftçiler, çiçeklerin inceltilmesi için gereken zaman ve emekte önemli bir azalma olduğunu bildirdi. ... >>

Gelişmiş Kızılötesi Mikroskop 02.05.2024

Mikroskoplar bilimsel araştırmalarda önemli bir rol oynar ve bilim adamlarının gözle görülmeyen yapıları ve süreçleri derinlemesine incelemesine olanak tanır. Bununla birlikte, çeşitli mikroskopi yöntemlerinin kendi sınırlamaları vardır ve bunların arasında kızılötesi aralığı kullanırken çözünürlüğün sınırlandırılması da vardır. Ancak Tokyo Üniversitesi'ndeki Japon araştırmacıların son başarıları, mikro dünyayı incelemek için yeni ufuklar açıyor. Tokyo Üniversitesi'nden bilim adamları, kızılötesi mikroskopinin yeteneklerinde devrim yaratacak yeni bir mikroskobu tanıttı. Bu gelişmiş cihaz, canlı bakterilerin iç yapılarını nanometre ölçeğinde inanılmaz netlikte görmenizi sağlar. Tipik olarak orta kızılötesi mikroskoplar düşük çözünürlük nedeniyle sınırlıdır, ancak Japon araştırmacıların en son geliştirmeleri bu sınırlamaların üstesinden gelmektedir. Bilim insanlarına göre geliştirilen mikroskop, geleneksel mikroskopların çözünürlüğünden 120 kat daha yüksek olan 30 nanometreye kadar çözünürlükte görüntüler oluşturmaya olanak sağlıyor. ... >>

Böcekler için hava tuzağı 01.05.2024

Tarım ekonominin kilit sektörlerinden biridir ve haşere kontrolü bu sürecin ayrılmaz bir parçasıdır. Hindistan Tarımsal Araştırma Konseyi-Merkezi Patates Araştırma Enstitüsü'nden (ICAR-CPRI) Shimla'dan bir bilim insanı ekibi, bu soruna yenilikçi bir çözüm buldu: rüzgarla çalışan bir böcek hava tuzağı. Bu cihaz, gerçek zamanlı böcek popülasyonu verileri sağlayarak geleneksel haşere kontrol yöntemlerinin eksikliklerini giderir. Tuzak tamamen rüzgar enerjisiyle çalışıyor, bu da onu güç gerektirmeyen çevre dostu bir çözüm haline getiriyor. Eşsiz tasarımı, hem zararlı hem de faydalı böceklerin izlenmesine olanak tanıyarak herhangi bir tarım alanındaki popülasyona ilişkin eksiksiz bir genel bakış sağlar. Kapil, "Hedef zararlıları doğru zamanda değerlendirerek hem zararlıları hem de hastalıkları kontrol altına almak için gerekli önlemleri alabiliyoruz" diyor ... >>

Arşivden rastgele haberler

Hastane hava tahmini 07.08.2002

İngiliz Meteoroloji Servisi'nin tıbbi danışmanı Dr. William Byrd, hastaların acil servislere kabulü hakkında büyük miktarda bilgi işleyerek ve bunu hava değişiklikleriyle karşılaştırarak, uygulama için ilginç ve önemli sonuçlara ulaştı.

Bu nedenle, soğuk algınlığından üç gün sonra, kalp krizinden ölümler, beş gün sonra - felç, 12 - akciğer hastalıklarından sonra daha sık hale gelir. Dr Bird, Reading'in en büyük hastanelerinden birine hastaların hangilerine önceden hazırlanmaları gerektiğini söyleyerek onu birkaç bin pound kurtardı.

Bu yöndeki çalışmalar yeni başlıyor. Araştırmanın yazarı gelecekte herkes için sağlık için kişisel hava tahminleri yapmanın mümkün olacağını söylüyor.

Diğer ilginç haberler:

▪ Duyduğunuz - virüs

▪ Suçların sismolojisi

▪ Uzak galaksilerde keşfedilen dev türbülanslı gaz birikimleri

▪ 7nm otomotiv elektroniği çipleri için tasarım platformu

▪ Uçan 4G kulesi - drone Uçan İNEK

Bilim ve teknolojinin haber akışı, yeni elektronik

 

Ücretsiz Teknik Kitaplığın ilginç malzemeleri:

▪ Web sitesinin radyo bölümü. Makale seçimi

▪ Derzhimorda'nın makalesi. Popüler ifade

▪ makale Bademcikler ne işe yarar? ayrıntılı cevap

▪ makale kuş kirazı. Efsaneler, yetiştirme, uygulama yöntemleri

▪ Kvas makalesi. Basit tarifler ve ipuçları

▪ makale Basit anahtarlama voltaj regülatörü, 9-25/5 volt 0,7 amper. Radyo elektroniği ve elektrik mühendisliği ansiklopedisi

Bu makaleye yorumunuzu bırakın:

Adı:


E-posta isteğe bağlı):


Yorum:





Bu sayfanın tüm dilleri

Ana sayfa | Kütüphane | Makaleler | Site haritası | Site incelemeleri

www.diagram.com.ua

www.diagram.com.ua
2000-2024