Assembly dili komut yapısı içerir. Assembly dili programlama düzeyinde komut yapısı. Assembly Dili Veri Biçimi ve Komut Yapısı

Assembly dili komutları (Ders)

DERS PLANI

1. Ana işlem grupları.

Pentium.

1. Ana işlem grupları

Mikroişlemciler, aşağıdaki ana işlem gruplarını uygulayan bir dizi talimat yürütür:

yönlendirme işlemleri,

Aritmetik işlemler,

mantıksal işlemler,

vardiya işlemleri,

karşılaştırma ve test işlemleri,

bit işlemleri,

Program yönetimi işlemleri;

İşlemci kontrol işlemleri.

2. İşlemci komutlarının anımsatıcı kodları Pentium

Komutları açıklarken, genellikle Assembly dilinde programlama yaparken komutu belirtmeye yarayan anımsatıcı atamaları (anımsatıcı kodlar) kullanılır. Assembler'ın farklı sürümleri için, bazı komutların anımsatıcı kodları farklılık gösterebilir. Örneğin, bir alt programı çağırma komutu için anımsatıcı kod kullanılır.ARAMA veya JSR ("Atlamak alt program”). Bununla birlikte, ana mikroişlemci türleri için çoğu komutun anımsatıcı kodları aynıdır veya gerçekleştirilmekte olan işlemi tanımlayan karşılık gelen İngilizce sözcüklerin kısaltmaları oldukları için biraz farklıdır. İşlemciler için benimsenen komut anımsatıcılarını göz önünde bulundurun Pentium.

Komutları ilet. Bu grubun ana komutu komuttur.MOV , iki kayıt arasında veya bir kayıt ile bir hafıza hücresi arasında veri aktarımı sağlayan. Bazı mikroişlemciler, iki bellek hücresi arasında bir aktarımın yanı sıra, birkaç kaydın içeriğinin bellekten bir grup aktarımı gerçekleştirir. Örneğin, 68 ailesinin mikroişlemcileri motorola xxx komutu yürütTAŞINMAK , bir bellek hücresinden diğerine aktarımı sağlayan komut veHAREKET belirli bir kayıt kümesinin içeriğini belleğe yazan veya bellekten yükleyen (16 kayda kadar). TakımXCHG iki işlemci kaydının veya bir kayıt ve bir bellek hücresinin içeriğinin karşılıklı değişimini gerçekleştirir.

Giriş komutları İÇİNDE ve çıktı DIŞARI işlemci kaydından harici bir cihaza veri aktarımını veya harici bir cihazdan kayda veri alımını gerçekleştirin. Bu komutlar, verilerin aktarıldığı arabirim cihazının (G/Ç bağlantı noktası) numarasını belirtir. Birçok mikroişlemcinin harici aygıtlara erişim için özel komutları olmadığını unutmayın. Bu durumda, sisteme veri girişi ve çıkışı komutu kullanılarak gerçekleştirilir.MOV , gerekli arayüz cihazının adresini belirtir. Böylece harici bir cihaz, bir hafıza hücresi olarak adreslenir ve adres alanında, sisteme bağlı arayüz cihazlarının (portların) adreslerinin bulunduğu belirli bir bölüm tahsis edilir.

Aritmetik işlemler için komutlar. Bu gruptaki ana komutlar, bir dizi seçeneği olan toplama, çıkarma, çarpma ve bölmedir. Toplama komutları EKLEMEK ve çıkarma ALT ile uygun işlemleri gerçekleştirmekCiki yazmaca, bir yazmaca ve bir bellek konumuna sahip olmak veya bir anlık işlenen kullanmak. Takımlar AD C , SB B özelliğin değerini dikkate alarak toplama ve çıkarma işlemini gerçekleştirinC, önceki işlemi gerçekleştirme sürecinde aktarımın oluşumu sırasında ayarlanır. Bu komutların yardımıyla, basamak sayısı işlemci kapasitesini aşan işlenenlerin sıralı olarak eklenmesi gerçekleştirilir. Takım NEG işlenenin işaretini değiştirerek onu ikiye tümleyene dönüştürür.

İşaretli sayılar üzerinde çarpma ve bölme işlemleri yapılabilir (komutlarBEN MUL, BEN DIV ) veya imzasız (komutlar MUL, DIV ). İşlemin sonucu kayıt defterinde bulunur. Çarparken (komutlarMUL , IMUL ) uyum sağlamak için iki kayıt kullanan çift haneli bir sonuç verir. Bölme yaparken (komutlarDIV , IDIV ) bir pay olarak, çift basamaklı bir işlenen kullanılır, iki yazmaca yerleştirilir ve sonuç olarak bölüm ve kalan iki yazmaca yazılır.

Mantık Komutları . Hemen hemen tüm mikroişlemciler, komutları kullanarak aynı adlı işlenen bitleri üzerinde gerçekleştirilen AND, OR, Exclusive OR mantıksal işlemlerini gerçekleştirir. VE, VEYA, X VEYA . İşlemler, bir kayıt ve bir bellek konumu olmak üzere iki kaydın içeriği üzerinde veya bir anlık işlenen kullanılarak gerçekleştirilir. Takım OLUMSUZ İşlenenin her bir bitinin değerini ters çevirir.

Shift Komutları. Mikroişlemciler, adreslenen işlenenlerin aritmetik, mantıksal ve döngüsel kaydırmalarını bir veya daha fazla bit ile gerçekleştirir. Kaydırılacak işlenen, bir yazmaçta veya bellek konumunda olabilir ve kaydırma bitlerinin sayısı, talimatta bulunan anlık işlenen kullanılarak belirtilir veya belirtilen yazmacın içeriği tarafından belirlenir. Transfer işareti genellikle vardiyanın uygulanmasında yer alır.Cdurum kaydında (SR veya EFLAGLAR), kayıttan veya bellek konumundan çekilen işlenenin son bitini içerir.

Karşılaştırma ve test komutları . Operand karşılaştırması genellikle komutla yapılır.CMP özelliklerin değerlerini ayarlayarak işlenenlerin çıkarılmasını gerçekleştiren N, Z, V, C sonuca göre durum kaydında. Bu durumda çıkarma işleminin sonucu kaydedilmez ve işlenenlerin değerleri değişmez. Elde edilen karakteristik değerlerin müteakip analizi, göreceli değerin (>,<, =) операндов со знаком или без знака. Использование различных способов адресации позволяет производит сравнение содержимого двух регистров, регистра и ячейки памяти, непосредственно заданного операнда с содержимым регистра или ячейки памяти.

Bazı mikroişlemciler bir test komutu yürütür TST karşılaştırma komutunun tek bir işlenen çeşididir. Bu komut yürütüldüğünde, işaretler ayarlanır N, Z adreslenen işlenenin işaretine ve değerine (eşit veya sıfır olmayan) göre.

Bit operasyon talimatları . Bu komutlar özelliğin değerini ayarlarCtest edilen bitin değerine göre durum kaydındamilyar adreslenen işlenende. Bazı mikroişlemcilerde bit testi sonucuna göre bir işaret koyulur.Z. Test biti numarasıNya komutta belirtilen yazmacın içeriği ya da anlık bir işlenen tarafından ayarlanır.

Bu grubun komutları, test edilen biti değiştirmek için farklı seçenekler uygular. BT bu bitin değerini değiştirmeden tutar.Command B T S test ettikten sonra değer ayarlar milyar=1 ve komut B T C - Anlam milyar=0.Komut B T C test ettikten sonra bit bn'nin değerini tersine çevirir.

Program yönetimi işlemleri. Programı kontrol etmek için, aralarında aşağıdakiler bulunan çok sayıda komut kullanılır:

- koşulsuz kontrol aktarım komutları;

- koşullu atlama komutları;

- program döngülerini düzenlemek için komutlar;

- kesme komutları;

- özellik değiştirme komutları

Koşulsuz kontrol transferi komut tarafından gerçekleştirilir.JMP , program sayacına yüklenenbilgisayaryürütülecek bir sonraki komutun adresi olan yeni içerik. Bu adres ya doğrudan komutta belirtilirJMP (doğrudan adres) veya mevcut içeriğin toplamı olarak hesaplanırbilgisayarve işaretli bir sayı olan komutta belirtilen ofset (göreli adresleme). Çünkübilgisayarprogramın bir sonraki komutunun adresini içerir, ardından son yöntem geçişin adresini ayarlar, sonraki adrese göre belirli bir bayt sayısı kadar kaydırılır. Ofset pozitif ise programın bir sonraki komutlarına, ofset negatif ise bir önceki komutlara geçiş gerçekleştirilir.

Alt program ayrıca komutu kullanarak kontrolün koşulsuz olarak aktarılmasıyla da çağrılır.ARAMA (veya JSR ). Ancak bu durumda yüklemeden öncebilgisayar alt programın ilk komutunun adresini belirten yeni içerik, alt programın yürütülmesinden sonra ana programa (veya Alt programları iç içe yerleştirirken önceki alt program). Koşullu atlama komutları (program dalları)bilgisayargenellikle durum kaydındaki çeşitli niteliklerin mevcut değerine göre ayarlanan belirli koşullar karşılanırsa yeni içerik. Koşul karşılanmazsa, bir sonraki program komutu yürütülür.

Özellik yönetimi komutları, özellikleri saklayan durum kaydının içeriğini okumanın yanı sıra bireysel özelliklerin değerlerini değiştirmeyi de sağlar. Örneğin, Pentium işlemciler komutları uygular. LAHF Ve SAHF , işaretleri içeren düşük baytı durum kaydından yükleyen EFLAG kayıt baytını azaltmak için EAX ve düşük bayt doldurma EFLAGLAR kayıttan EAX.. Komutlar CLC, STC transfer bayrağı CF=0, CF=1 ve komutun değerlerini ayarlayın CMC bu özelliğin değerinin tersine çevrilmesine neden olur. Nitelikler, koşullu atlamalar sırasında program yürütme akışını belirlediğinden, özellik değiştirme talimatları genellikle programı kontrol etmek için kullanılır.

İşlemci Kontrol Komutları . Bu grup, durdurma komutlarını, işlem yapmamayı ve işlemcinin veya bireysel bloklarının çalışma modunu belirleyen bir dizi komutu içerir. TakımHLT programın yürütülmesini sonlandırır ve işlemciyi, kesme veya yeniden başlatma sinyallerinin alınması üzerine meydana gelen bir durma durumuna sokar ( Sıfırla). Takım HAYIR Herhangi bir işlem yapılmasına neden olmayan (“boş” bir komut), program gecikmelerini uygulamak veya programda oluşan boşlukları doldurmak için kullanılır.

Özel ekipler CLI, STI kesme isteklerinin hizmetini devre dışı bırakın ve etkinleştirin. işlemcilerde Pentium bunun için bir kontrol biti (bayrak) kullanılırEĞER kayıtta EFLAGLAR.

Birçok modern mikroişlemci, kullanıcının veya diğer aygıtların belirli bir sistemde kullanılan işlemci türü hakkında bilgi edinmesine izin veren bir tanımlama komutu verir. işlemcilerde Pentuim komut bunun için var CPU kimliği , işlemci hakkında gerekli verilerin kayıtlara girdiği sırada EAX,ebx,ECX,EDX ve daha sonra kullanıcı veya işletim sistemi tarafından okunabilir.

İşlemci tarafından uygulanan çalışma modlarına ve belirtilen işlenmiş veri türlerine bağlı olarak, yürütülebilir komutlar seti önemli ölçüde genişletilebilir.

Bazı işlemciler, bu tür sayıları işlerken BCD aritmetik işlemleri gerçekleştirir veya özel sonuç düzeltme talimatları gerçekleştirir. Birçok yüksek performanslı işlemci şunları içerir: FPU - sayı işleme bloğu C "kayan nokta".

Bir dizi modern işlemcide, birkaç tamsayı veya sayının grup işlemi uygulanır. C Prensibine göre tek komut ile “kayan nokta” SIMD (“Tek Yönerge – Çoklu Veri ”) - “Tek komut – Çok fazla veri”. İşlemlerin birkaç işlenen üzerinde eşzamanlı olarak yürütülmesi, video ve ses verileriyle çalışırken işlemcinin performansını önemli ölçüde artırır. Bu tür işlemler, görüntü işleme, ses sinyali işleme ve diğer uygulamalarda yaygın olarak kullanılmaktadır. Bu işlemleri gerçekleştirmek için, çeşitli işlemci türlerinde bulunan ilgili talimat setlerini uygulayan işlemcilere özel bloklar eklenir ( Pentium, atlon) adını aldıMMX (“ Milti-Medya Uzantısı ”) – Multimedya Uzantısı,SSE(“ Akış SIMD Uzantısı ”) – Akış SIMD - eklenti, “3 DEklenti- 3D Genişletme.

Şirketin işlemcilerinin karakteristik bir özelliği bilgi 80286 modelinden başlayarak, işlemci korumalı sanal adres modunda çalışırken sağlanan belleğe erişirken öncelik kontrolüdür - " Korumalı mod " (korumalı mod). Bu modu uygulamak için, bellek korumasını kabul edilen öncelikli erişim algoritmasına göre düzenlemeye yarayan özel komut grupları kullanılır.

Assembly dili komut yapısı Makine komutları seviyesinde programlama, bilgisayar programlamanın mümkün olduğu minimum seviyedir. Makine talimatları sistemi, makine donanımına talimatlar vererek gerekli eylemleri gerçekleştirmek için yeterli olmalıdır. Her makine talimatı iki kısımdan oluşur: "ne yapılacağını" tanımlayan bir işletim bölümü ve "ne yapılacağını" işleyen nesneleri tanımlayan bir işlenen. Mikroişlemcinin Assembly dilinde yazılmış makine yönergesi, aşağıdaki biçime sahip tek bir satırdır: etiket yönergesi/yönerge işlenen(ler)i; yorumlar Etiket, komut/yönerge ve işlenen en az bir boşluk veya sekme karakteriyle ayrılır. Komut işlenenleri virgülle ayrılır.

Bir derleme dili yönergesinin yapısı Bir derleme dili yönergesi, derleyiciye mikroişlemcinin hangi eylemi gerçekleştirmesi gerektiğini söyler. Derleme yönergeleri, program metninde belirtilen, derleme işlemini veya çıktı dosyasının özelliklerini etkileyen parametrelerdir. İşlenen, verinin başlangıç ​​değerini (veri bölümünde) veya talimat tarafından etkilenecek öğeleri (kod bölümünde) belirtir. Bir talimatın bir veya iki işleneni olabilir veya hiç işleneni olmayabilir. İşlenenlerin sayısı, komut kodu tarafından dolaylı olarak belirtilir. Komut veya yönergenin bir sonraki satırda devam etmesi gerekiyorsa, ters eğik çizgi karakteri kullanılır: "" . Varsayılan olarak, derleyici komutlarda ve yönergelerde büyük ve küçük harfler arasında ayrım yapmaz. Direktif ve komut örnekleri Count db 1 ; Ad, yönerge, bir işlenen mov eax, 0 ; Komut, iki işlenen

Tanımlayıcılar, değişken adlarını ve etiket adlarını belirtmek için kullanılan geçerli karakter dizileridir. Tanımlayıcı, aşağıdaki karakterlerden bir veya daha fazlasından oluşabilir: Latin alfabesinin tüm harfleri; 0'dan 9'a kadar sayılar; özel karakterler: _, @, $, ? . Etiketin ilk karakteri olarak bir nokta kullanılabilir. Rezerve edilmiş derleyici adları (yönergeler, işleçler, komut adları) tanımlayıcı olarak kullanılamaz. Tanımlayıcının ilk karakteri bir harf veya özel bir karakter olmalıdır. Maksimum uzunluk tanımlayıcı 255 karakterdir, ancak tercüman ilk 32 karakteri kabul eder, geri kalanı dikkate alınmaz. Assembler yönergesi içermeyen bir satıra yazılan tüm etiketler iki nokta üst üste ":" ile bitmelidir. Etiket, komut (yönerge) ve işlenen, dizide herhangi bir belirli konumda başlamak zorunda değildir. Programın daha fazla okunabilirliği için bunları bir sütuna yazmanız önerilir.

Etiketler Assembler yönergesi içermeyen bir satıra yazılan tüm etiketler iki nokta üst üste ":" ile bitmelidir. Etiket, komut (yönerge) ve işlenen, dizide herhangi bir belirli konumda başlamak zorunda değildir. Programın daha fazla okunabilirliği için bunları bir sütuna yazmanız önerilir.

Yorumlar Bir programda yorumların kullanılması, özellikle bir dizi talimatın amacının belirsiz olduğu durumlarda programın anlaşılırlığını artırır. Açıklamalar, bir kaynak modülün herhangi bir satırında noktalı virgülle (;) başlar. Sağındaki tüm karakterler "; ' satırının sonuna yorumlar gelir. Yorum, "boşluk" dahil olmak üzere herhangi bir yazdırılabilir karakter içerebilir. Yorum tüm satırı kapsayabilir veya aynı satırdaki komutu takip edebilir.

Bir Assembly dili programının yapısı Bir Assembly dili programı, modül adı verilen ve her biri bir veya daha fazla veri, yığın ve kod segmenti tanımlayabilen birkaç bölümden oluşabilir. Eksiksiz herhangi bir derleme dili programı, yürütülmesinin başladığı bir ana veya ana modül içermelidir. Bir modül, uygun direktiflerle bildirilen program, veri ve yığın segmentlerini içerebilir.

Bellek Modelleri Segmentleri bildirmeden önce, bir yönerge kullanarak bellek modelini belirtmeniz gerekir. MODEL değiştiricisi memory_model, call_convention, OS_type, stack_parameter Temel derleme dili bellek modelleri: Bellek modeli Kod adresleme Veri adresleme İşletim sistemi Kod ve veri serpiştirme MS-DOS YAKININDA TINY MS-DOS YAKININDA Geçerli KÜÇÜK MS-DOS YAKININDA, Windows Hayır ORTA ÇOK YAKIN MS-DOS, Windows Hayır KOMPAKT YAKIN UZAK MS-DOS, Windows UZAKTA BÜYÜK MS-DOS Yok, Windows BÜYÜK UZAK YOK MS-DOS, Windows YAKINDA YOK Windows 2000, Windows XP, Windows Geçerli DÜZ YAKIN NT,

Bellek Modelleri Küçük model yalnızca 16 bitlik MS-DOS uygulamalarında çalışır. Bu modelde, tüm veriler ve kod tek bir fiziksel segmentte bulunur. Bu durumda program dosyasının boyutu 64 KB'yi geçmez. Küçük model, bir kod segmentini ve bir veri segmentini destekler. Bu model kullanılırken veri ve kod, yakın (yakın) olarak adreslenir. Orta model, birden çok kod parçasını ve bir veri bölümünü destekler; kod bölümlerindeki tüm bağlantılar varsayılan olarak uzak (uzak) olarak kabul edilir ve veri bölümündeki bağlantılar yakın (yakın) olarak kabul edilir. Kompakt model, uzak veri adresleme (uzak) kullanan birden fazla veri segmentini ve yakın veri adresleme (yakın) kullanan bir kod segmentini destekler. Büyük model, çoklu kod segmentlerini ve çoklu veri segmentlerini destekler. Varsayılan olarak, tüm kod ve veri referansları uzak kabul edilir. Devasa model, büyük bellek modeline neredeyse eşdeğerdir.

Bellek Modelleri Düz model, bölümlere ayrılmamış bir program yapılandırması varsayar ve yalnızca 32 bit işletim sistemlerinde kullanılır. Bu model, veri ve kodun aynı 32 bit segmentte bulunması bakımından küçük modele benzer. Yönerge öncesi düz model için program geliştirmek. model düz direktiflerden birini yerleştirmelidir: . 386, . 486, . 586 veya. 686. İşlemci seçim yönergesinin seçimi, programlar yazılırken kullanılabilen komut dizisini belirler. İşlemci seçim direktifinden sonraki p harfi, korumalı çalışma modu anlamına gelir. Veri ve kod adresleme yakında, tüm adresler ve işaretçiler 32 bit.

bellek modelleri. MODEL değiştiricisi memory_model, call_convention, OS_type, stack_parameter Değiştirici parametresi, segment türlerini tanımlamak için kullanılır ve aşağıdaki değerleri alabilir: 16 kullan (seçilen modelin segmentleri 16 bit olarak kullanılır) use 32 (seçilen modelin segmentleri kullanılır) 32-bit olarak). call_convention parametresi, üst düzey diller (C++, Pascal) dahil olmak üzere diğer dillerden bir prosedür çağrılırken parametrelerin nasıl iletildiğini belirlemek için kullanılır. Parametre şu değerleri alabilir: C, BASIC, FORTRAN, PASCAL, SYSCALL, STDCALL.

bellek modelleri. MODEL değiştiricisi memory_model, call_convention, OS_type, stack_parameter OS_type parametresi varsayılan olarak OS_DOS'tur ve şu anda bu parametre için desteklenen tek değerdir. stack_param parametresi şu şekilde ayarlanır: NEARSTACK (SS kaydı DS'ye eşittir, veri ve yığın bölgeleri aynı fiziksel segmentte bulunur) FARSTACK (SS kaydı DS'ye eşit değildir, veri ve yığın bölgeleri farklı fiziksel segmentlerde bulunur). Varsayılan değer NEARSTACK'tir.

"Hiçbir şey yapmayan" program örneği. 686 S. MODEL DAİRE, STDCALL. VERİ. KOD BAŞLAT: RET END START RET - mikroişlemci komutu. Programın doğru şekilde sonlandırılmasını sağlar. Programın geri kalanı çevirmenin işleyişi ile ilgilidir. . 686 P - Pentium 6 (Pentium II) korumalı mod komutlarına izin verilir. Bu yönerge, işlemci modelini belirterek desteklenen birleştirici komut kümesini seçer. . MODEL FLAT, stdcall - düz bellek modeli. Bu bellek modeli ameliyathanede kullanılmaktadır. Windows sistemi. stdcall, kullanılacak kuralı çağıran prosedürdür.

"Hiçbir şey yapmayan" program örneği. 686 S. MODEL DAİRE, STDCALL. VERİ. KOD BAŞLAT: RET SON BAŞLAT . VERİ - veri içeren program bölümü. Bu program yığını kullanmaz, yani segment. Yığın eksik. . KOD - programın kodu içeren bir bölümü. BAŞLAT - etiket. END START - programın sonu ve derleyiciye programın BAŞLAT etiketinden başlatılması gerektiğine dair bir mesaj. Her program, sonu işaret eden bir END yönergesi içermelidir kaynak kodu programlar. END direktifini takip eden tüm satırlar göz ardı edilir.END direktifinden sonraki etiket, derleyiciye programın çalıştırıldığı ana modülün adını söyler. Program bir modül içeriyorsa, END yönergesinden sonraki etiket atlanabilir.

Assembly dili tercümanları Tercüman, programlama dillerinden birinde sunulan bir programı, nesne kodu adı verilen hedef dildeki bir programa dönüştüren bir program veya donanımdır. Destekleyici makine talimatı anımsatıcılarına ek olarak, her tercümanın genellikle başka hiçbir şeyle uyumsuz olan kendi yönergeleri ve makroları vardır. Ana derleme dili çevirici türleri şunlardır: MASM (Microsoft Assembler), TASM (Borland Turbo Assembler), FASM (Flat Assembler) - Tomasz Gryshtar (Lehçe) tarafından yazılan ücretsiz dağıtılan çok geçişli birleştirici, NASM (Netwide Assembler) - a Intel x mimarisi 86 için ücretsiz birleştirici, Simon Tatham tarafından Julian Hall ile birlikte oluşturuldu ve şu anda Source'ta küçük bir geliştirme ekibi tarafından geliştiriliyor. dövmek açık.

Src="https://present5.com/presentation/-29367016_63610977/image-15.jpg" alt="Microsoft Visual Studio 2005'te program çevirisi 1) Dosya->Yeni->Proje'yi seçerek bir proje oluşturun menü ve"> Трансляция программы в Microsoft Visual Studio 2005 1) Создать проект, выбрав меню File->New->Project и указав имя проекта (hello. prj) и тип проекта: Win 32 Project. В дополнительных опциях мастера проекта указать “Empty Project”.!}

Src="https://present5.com/presentation/-29367016_63610977/image-16.jpg" alt="Microsoft Visual Studio 2005'te program çevirisi 2) Proje ağacında (Görünüm->Çözüm Gezgini) ekleyin"> Трансляция программы в Microsoft Visual Studio 2005 2) В дереве проекта (View->Solution Explorer) добавить файл, в котором будет содержаться текст программы: Source. Files->Add->New. Item.!}

Programın Microsoft Visual Studio 2005'e çevirisi 3) Code C++ dosya türünü seçin, ancak uzantılı adı belirtin. asm:

Programın Microsoft Visual Studio 2005'e çevirisi 5) Derleyici seçeneklerini ayarlayın. Proje dosyası menüsünde sağ düğmeyi seçin Özel Yapı Kuralları…

Programın çevirisi Microsoft Visual Studio 2005'te ve beliren pencerede Microsoft Macro Assembler'ı seçin.

Programın Microsoft Visual Studio 2005'te çevirisi merhaba dosyasında sağ tuşla kontrol edin. Özellikler menüsünden proje ağacının asm'sini seçin ve Genel->Araç: Microsoft Macro Assembler'ı ayarlayın.

Src="https://present5.com/presentation/-29367016_63610977/image-22.jpg" alt="Microsoft Visual Studio 2005'te program çevirisi 6) Build->Build hello.prj'yi seçerek dosyayı derleyin ."> Трансляция программы в Microsoft Visual Studio 2005 6) Откомпилировать файл, выбрав Build->Build hello. prj. 7) Запустить программу, нажав F 5 или выбрав меню Debug->Start Debugging.!}

İşletim Sistemi Windows'ta Programlama İşletim Sistemi Windows'ta Programlama, API işlevlerinin (Uygulama Program Arayüzü, yani yazılım uygulama arayüzü) kullanımına dayalıdır. Sayıları 2000'e ulaşıyor. Windows programı büyük ölçüde bu tür aramalardan oluşuyor. ile tüm etkileşimler harici cihazlar ve işletim sisteminin kaynakları, kural olarak, bu tür işlevler aracılığıyla gerçekleşir. Windows işletim sistemi düz bellek modeli kullanır. Herhangi bir bellek konumunun adresi, bir 32 bitlik kaydın içeriği tarafından belirlenecektir. Windows için 3 tip program yapısı vardır: diyalog (ana pencere bir diyalogdur), konsol veya penceresiz yapı, klasik yapı (pencere, çerçeve).

Arama pencere özellikleri API Yardım dosyasında, herhangi bir API işlevi, işlev_adı türü olarak temsil edilir (FA 1, FA 2, FA 3) Tür – dönüş değeri türü; FAKS – sıralarına göre resmi argümanların listesi.Örneğin, int Mesaj. Kutu (HWND h. Wnd, LPCTSTR lp. Text, LPCTSTR lp. Caption, UINT u. Type); Bu işlev bir mesaj ve çıkış düğme(ler)i içeren bir pencere görüntüler. Parametrelerin anlamı: h. Wnd - mesaj penceresinin görüneceği pencereye gidin, lp. Metin - pencerede görünecek metin, lp. Başlık - pencere başlığındaki metin, u. Tip - pencere tipi, özellikle çıkış düğmelerinin sayısını belirleyebilirsiniz.

Windows API işlevlerini çağırma int Mesaj. Kutu (HWND h. Wnd, LPCTSTR lp. Text, LPCTSTR lp. Caption, UINT u. Type); Neredeyse tüm API işlev parametreleri aslında 32 bitlik tam sayılardır: HWND 32 bitlik bir tamsayıdır, LPCTSTR 32 bitlik bir dize işaretçisidir, UINT 32 bitlik bir tamsayıdır. İşlevlerin daha yeni sürümlerine atlamak için genellikle işlevlerin adına "A" soneki eklenir.

Windows API işlevlerini çağırma int Mesaj. Kutu (HWND h. Wnd, LPCTSTR lp. Text, LPCTSTR lp. Caption, UINT u. Type); MASM kullanırken, adın sonuna @N N eklemelisiniz - iletilen bağımsız değişkenlerin yığında kapladığı bayt sayısı. Win 32 API işlevleri için bu sayı, bağımsız değişken sayısı n çarpı 4 olarak tanımlanabilir (her bağımsız değişkendeki bayt): N=4*n. Bir işlevi çağırmak için derleyicinin CALL komutu kullanılır. Bu durumda, işleve ilişkin tüm bağımsız değişkenler ona yığın (PUSH komutu) aracılığıyla iletilir. Argüman geçiş yönü: SOLDAN SAĞA - AŞAĞIDAN YUKARI. Bağımsız değişken u önce yığına itilecek. tip. Belirtilen işlevi çağırmak şuna benzer: CALL Mesajı. kutu. [e-posta korumalı]

Windows API işlevlerini çağırma int Mesaj. Kutu (HWND h. Wnd, LPCTSTR lp. Text, LPCTSTR lp. Caption, UINT u. Type); Herhangi bir API işlevini yürütmenin sonucu genellikle EAX kaydında döndürülen bir tamsayıdır. OFFSET yönergesi bir "segment ofseti" veya üst düzey dil terimleriyle bir dizgenin başlangıcına yönelik bir "işaretçi"dir. C'deki #define gibi EQU direktifi bir sabit tanımlar. EXTERN yönergesi, derleyiciye bir işlevin veya tanıtıcının modülün dışında olduğunu söyler.

Programın bir örneği "Herkese merhaba!" . 686 S. MODEL DAİRE, STDCALL. STACK 4096. DATA MB_OK EQU 0 STR 1 DB "İlk programım", 0 STR 2 DB "Herkese merhaba!", 0 HW DD ? HARİCİ mesaj. kutu. [e-posta korumalı]: YAKIN. KOD BAŞLAT: BAS MB_OK BASIN OFSET STR 1 BASIN OFSET STR 2 BASIN HW CALL Mesaj. kutu. [e-posta korumalı] RET SON BAŞLANGIÇ

INVOKE yönergesi MASM dil çeviricisi ayrıca bir makro aracı kullanarak işlev çağrısını basitleştirmeyi mümkün kılar - INVOKE yönergesi: INVOKE işlevi, parametre1, parametre2, ... İşlev çağrısına @16 eklemeye gerek yoktur; parametreler tam olarak fonksiyon açıklamasında verildikleri sırayla yazılır. tercüman makroları parametreleri yığına iter. INVOKE direktifini kullanmak için PROTO direktifini kullanarak fonksiyon prototipinin şu şekilde bir açıklamasına sahip olmalısınız: Mesaj. kutu. BİR PROTO: DWORD, : DWORD

Assembly dilinde yapılar

Yukarıda ele aldığımız diziler, aynı türden öğelerin bir koleksiyonudur. Ancak uygulamalarda genellikle belirli bir veri kümesini dikkate alma ihtiyacı vardır. farklı tip bazı tek tip olarak.

Bu, örneğin, farklı türlerdeki bir veri koleksiyonunu tek bir nesneyle ilişkilendirmenin gerekli olduğu veritabanı programları için çok önemlidir.

Örneğin, daha önce üç baytlık bir dizi öğeyle çalışan Liste 4'e baktık. Sırasıyla her öğe, farklı türde iki öğeydi: bir baytlık sayaç alanı ve depolama ve işleme için gereken bazı bilgileri daha fazla taşıyabilen iki baytlık bir alan. Okuyucu, yüksek seviyeli dillerden birine aşinaysa, o zaman böyle bir nesnenin genellikle özel bir veri türü kullanılarak tanımlandığını bilir - yapılar.

Assembly dilinin kullanılabilirliğini artırmak için bu veri türü de içine dahil edilmiştir.

bir manastır yapı farklı türde sabit sayıda öğeden oluşan bir veri türüdür.

Yapıları bir programda kullanmak için üç şey yapmanız gerekir:

    Sormak yapı şablonu .

    Özünde bu, daha sonra bu türdeki değişkenleri tanımlamak için kullanılabilecek yeni bir veri türü tanımlamak anlamına gelir.

    Tanımlamak yapı örneği .

    Bu aşama, önceden tanımlanmış (bir şablon kullanılarak) yapıyla belirli bir değişkenin başlatılmasını içerir.

    Düzenlemek yapı üyelerine erişme .

arasındaki farkın ne olduğunu en başından anlamanız çok önemlidir. Tanım programdaki yapılar ve tanım.

betimlemek bir programdaki yapı, yalnızca onun şemasını veya modelini belirtmek anlamına gelir; bellek tahsis edilmemiştir.

Bu şablon, çevirmen için yalnızca alanların konumu ve varsayılan değerleri hakkında bilgi olarak kabul edilebilir.

Tanımlamak yapı, tercümana hafıza tahsis etmesi ve bu hafıza alanına sembolik bir isim vermesi talimatını vermek anlamına gelir.

Yapıyı programda sadece bir kez tanımlayabilir ve istediğiniz sayıda tanımlayabilirsiniz.

Yapı şablonu açıklaması

Yapı şablonu bildirimi aşağıdaki sözdizimine sahiptir:

yapı_adı STRUC

yapı_adı ENDS

Burada veri açıklama direktiflerinin bir dizisidir db, dw, dd, dq Ve dt.

İşlenenleri, alanların boyutunu ve isteğe bağlı olarak başlangıç ​​değerlerini belirler. Bu değerler, yapı tanımlandığında muhtemelen karşılık gelen alanları başlatacaktır.

Şablonu açıklarken daha önce belirttiğimiz gibi, bu yalnızca tercüman için bilgi olduğundan, bellek ayrılmaz.

Konum programdaki şablon isteğe bağlı olabilir, ancak tek geçişli çevirmenin mantığına göre, bu yapının türüne sahip değişkenin tanımlandığı yerden önce bulunmalıdır. Yani, bir veri segmentindeki bir yapının tipine sahip bir değişkeni tanımlarken, şablonu veri segmentinin başına veya ondan önce yerleştirilmelidir.

Belirli bir departmanın çalışanlarından oluşan bir veri tabanı modelleme örneğini kullanarak yapılarla çalışmayı düşünün.

Basit olması için, giriş sırasında bilgi dönüştürme probleminden kurtulmak için tüm alanların sembolik olduğu konusunda hemfikir olacağız.

Bu veritabanının kayıt yapısını aşağıdaki şablon ile tanımlayalım:

Bir yapı türü ile veri tanımlama

Programda şablon yardımıyla açıklanan yapıyı kullanmak için bu yapının tipine sahip bir değişken tanımlamak gerekir. Bunun için aşağıdaki sözdizimi kullanılır:

[değişken adı] yapı_adı

    değişken ismi- verilen yapısal tipin değişken tanımlayıcısı.

    Bir değişken adı belirtmek isteğe bağlıdır. Belirtilmemişse, tüm uzunlukların toplamı büyüklüğünde bir hafıza alanı yapı elemanları.

    Değerler listesi- açılı ayraçlar içine alınmış yapı elemanlarının başlangıç ​​değerlerinin virgülle ayrılmış listesi.

    Görevi de isteğe bağlıdır.

    Liste eksikse, verilen değişken için yapının tüm alanları, varsa şablondaki değerlerle başlatılır.

    Tek tek alanların başlatılmasına izin verilir, ancak bu durumda eksik alanlar virgülle ayrılmalıdır. Eksik alanlar, yapı şablonundaki değerlerle başlatılacaktır. Bu yapının türüyle yeni bir değişken tanımlarken, şablonundaki tüm alan değerlerini kabul edersek (yani, varsayılan olarak ayarlanır), o zaman sadece köşeli ayraçlar yazmanız gerekir.

    Örneğin: muzaffer işçi.

Örneğin, yukarıda açıklanan yapının türü ile birkaç değişken tanımlayalım.

Yapı Yöntemleri

Herhangi bir programlama diline yapısal bir tür ekleme fikri, farklı türlerdeki değişkenleri tek bir nesnede birleştirmektir.

Dil, belirli bir yapı örneğinde bu değişkenlere erişmenin bir yolunu sağlamalıdır. Belirli bir yapıya sahip bir alana bir komutta atıfta bulunmak için özel bir operatör kullanılır - sembol ". " (nokta). Aşağıdaki sözdiziminde kullanılır:

    adres_ifadesi- aşağıda belirtilen sözdizimi kurallarına uygun olarak bazı yapısal türde bir değişken tanımlayıcı veya parantez içinde bir ifade (Şekil 1);

    yapı_alan_adı- yapı şablonundan alan adı.

    Bu aslında aynı zamanda bir adres veya daha doğrusu alanın yapının başından itibaren ofseti.

Yani operatör " . " (nokta) ifadeyi değerlendirir

Pirinç. 5. Bir yapı alanı erişim işlecindeki bir adres ifadesinin sözdizimi

Tanımladığımız yapıyı örnek üzerinde gösterelim. çalışan yapılarla çalışmak için bazı teknikler.

Örneğin, ayıklayın balta yaşla birlikte alan değerleri. Sağlıklı bir kişinin yaşının 99'dan fazla olması muhtemel olmadığından, bu karakter alanının içeriği sicile yerleştirildikten sonra balta komutu ile ikili gösterime dönüştürmek uygun olacaktır. ad.

Dikkatli olun, çünkü veri depolama prensibi nedeniyle “düşük adreste düşük bayt” yaşın en büyük basamağı konulacaktır. al ve en küçüğü Ah.

Düzeltmek için sadece komutu kullanın xchg al,ah:

mov ax,word ptr sotr1.age ;her yaşta sotr1

ve şu şekilde mümkündür:

Bir yapı dizisiyle daha fazla çalışma, tek boyutlu bir diziyle aynı şekilde gerçekleştirilir. Burada birkaç soru ortaya çıkıyor:

Boyutla nasıl başa çıkılır ve dizi öğelerinin indekslenmesi nasıl düzenlenir?

Programda tanımlanan diğer tanımlayıcılar gibi, tercüman yapı tipinin adını ve yapı tipine sahip değişkenin adını bir tip özniteliği olarak atar. Bu özniteliğin değeri, bu yapının alanlarının kapladığı bayt cinsinden boyuttur. Bu değeri operatörü kullanarak çıkarabilirsiniz. tip.

Bir yapı örneğinin boyutu bilindiğinde, bir yapı dizisinde indekslemeyi organize etmek özellikle zor değildir.

Örneğin:

Bir yapıdaki bir alan başka bir yapının karşılık gelen alanına nasıl kopyalanır? Veya tüm yapı nasıl kopyalanır? alanı kopyalayalım isim sahadaki üçüncü çalışan isim beşinci çalışan:

mas_sotr çalışanı 10 dup()

mov bx, ofset mas_sotr

mov si,(işçi yazın)*2 ;si=77*2

mov di,(işçi yazın)*4 ;si=77*4

Bana öyle geliyor ki, bir programcının zanaatı er ya da geç bir insanı iyi bir ev hanımı gibi gösteriyor. O, onun gibi, sürekli olarak bir şeyi nerede kurtaracağını, keseceğini ve minimum yiyecekle harika bir akşam yemeği yapacağını arıyor. Ve eğer bu başarılı olursa, o zaman manevi tatmin ev hanımı ile harika bir akşam yemeğinden daha az ve belki de daha fazla olmaz. Bana öyle geliyor ki, bu tatminin derecesi kişinin mesleğine duyduğu sevginin derecesine bağlı.

Öte yandan, yazılım ve donanım geliştirmedeki ilerleme programcıyı biraz rahatlatır ve çoğu zaman sinek ve fil hakkındaki iyi bilinen atasözüne benzer bir durum vardır - bazı küçük sorunları çözmek için ağır araçlar kullanılır. etkinliği, genel durumda, yalnızca nispeten büyük projelerin uygulanması sırasında önemlidir.

Aşağıdaki iki veri türünün dilinde bulunması, muhtemelen “hostes” in yemek hazırlarken veya ürünleri yerleştirirken (program verileri) masanın çalışma alanını (RAM) mümkün olduğunca verimli kullanma arzusundan kaynaklanmaktadır. ).

Amaca göre, komutlar ayırt edilebilir (IBM PC gibi bir PC derleyicisinin komutlarının anımsatıcı işlem kodlarının örnekleri parantez içinde verilmiştir):

Aritmetik işlemler yaparım (ADD ve ADC - taşıma ile toplama ve toplama, SUB ve SBB - ödünç alma ile çıkarma ve çıkarma, MUL ve IMUL - işaretsiz ve işaretli çarpmalar, DIV ve IDIV - işaretsiz ve işaretli bölmeler, CMP - karşılaştırmalar vb.) ;

l mantıksal işlemleri gerçekleştirme (VEYA, VE, DEĞİL, XOR, TEST, vb.);

l veri aktarımı (MOV - gönder, XCHG - değiş tokuş, IN - mikroişlemciye girin, OUT - mikroişlemciden geri çekin, vb.);

l kontrolün devri (program dalları: JMP - koşulsuz şube, CALL - prosedür çağrısı, RET - prosedürden dönüş, J* - koşullu şube, LOOP - döngü kontrolü, vb.);

l karakter dizilerini işleme (MOVS - aktarımlar, CMPS - karşılaştırmalar, LODS - indirmeler, SCAS - taramalar. Bu komutlar genellikle bir önek (tekrar değiştirici) ​​REP ile kullanılır;

l program kesintileri (INT - yazılım kesintileri, INTO - taşma durumunda koşullu kesintiler, IRET - kesintiden dönüş);

l mikroişlemci kontrolü (ST* ve CL* - bayrakları ayarla ve temizle, HLT - durdur, WAIT - beklemede, NOP - boşta, vb.).

İLE tam liste Assembler komutları eserlerde bulunabilir.

Veri aktarım komutları

l MOV dst, src - veri aktarımı (taşı - kaynaktan dst'ye taşı).

Aktarımlar: yazmaçlar arasında veya yazmaç ile bellek arasında bir bayt (src ve dst bayt biçimindeyse) veya bir sözcük (src ve dst word biçimindeyse) ve bir yazmaca veya belleğe anlık bir değer yazar.

dst ve src işlenenleri aynı biçime sahip olmalıdır - bayt veya sözcük.

Src şu tipte olabilir: r (kayıt) - kayıt, m (hafıza) - hafıza, i (empedans) - anlık değer. Dst tipi r, m olabilir. İşlenenler tek bir komutta kullanılamaz: i ile birlikte rsegm; m tipinde iki işlenen ve rsegm tipinde iki işlenen). İşlenen i ayrıca basit bir ifade olabilir:

hareket AX, (152 + 101B) / 15

İfade değerlendirmesi yalnızca çeviri sırasında gerçekleştirilir. Bayraklar değişmez.

l PUSH src - yığına bir kelime koymak (push - ile itmek; src'den yığına itin). src'nin içeriğini yığının en üstüne iter - herhangi bir 16 bitlik kayıt (segment dahil) veya 16 bitlik bir sözcük içeren iki bellek konumu. Bayraklar değişmez;

l POP dst - yığından bir sözcük çıkarma (pop - pop; dst'deki yığından sayma). Yığının tepesinden bir kelimeyi kaldırır ve dst'ye - herhangi bir 16 bitlik kayıt defterine (segment dahil) veya iki hafıza konumuna yerleştirir. Bayraklar değişmez.

Makine komutları seviyesinde programlama, programlamanın mümkün olduğu minimum seviyedir. Makine talimatları sistemi, bilgisayar donanımına talimatlar vererek gerekli eylemleri gerçekleştirmek için yeterli olmalıdır.

Her makine talimatı iki bölümden oluşur:

  • ameliyathane - "ne yapılacağının" belirlenmesi;
  • işlenen - işleme nesnelerini, "ne ile yapılacağını" tanımlama.

Mikroişlemcinin Assembly dilinde yazılmış makine yönergesi, aşağıdaki sözdizimsel biçime sahip tek satırdır:

etiket komutu/yönergesi işlenen(ler) ;yorumlar

Bu durumda, bir satırdaki zorunlu alan bir komut veya yönergedir.

Etiket, komut/yönerge ve işlenenler (varsa) en az bir boşluk veya sekme karakteriyle ayrılır.

Bir komut veya yönergenin bir sonraki satırda devam etmesi gerekiyorsa, ters eğik çizgi karakteri kullanılır: \.

Varsayılan olarak, montaj dili komutlarda veya direktiflerde büyük ve küçük harfler arasında ayrım yapmaz.

Örnek kod satırları:

Sayım 1 ;Ad, direktif, bir işlenen
hareket eax,0 ;Komut, iki işlenen
cbw; Takım

Etiketler

Etiket montaj dilinde aşağıdaki karakterleri içerebilir:

  • Latin alfabesinin tüm harfleri;
  • 0'dan 9'a kadar sayılar;
  • özel karakterler: _, @, $, ?.

Nokta, bir etiketin ilk karakteri olarak kullanılabilir, ancak bazı derleyiciler bu karakteri önermez. Ayrılmış derleme dili adları (yönergeler, işleçler, komut adları) etiket olarak kullanılamaz.

Etiketteki ilk karakter bir harf veya özel karakter olmalıdır (sayı değil). Maksimum etiket uzunluğu 31 karakterdir. Assembler yönergesi içermeyen bir satıra yazılan tüm etiketler iki nokta üst üste ile bitmelidir: .

Takımlar

Takım tercümana mikroişlemcinin hangi eylemi gerçekleştirmesi gerektiğini söyler. Bir veri segmentinde, bir komut (veya direktif) bir alanı, çalışma alanını veya sabiti tanımlar. Bir kod segmentinde, bir talimat, taşıma (hareket) veya ekleme (ekleme) gibi bir eylemi tanımlar.

direktifler

Assembler, birleştirme ve bir liste oluşturma sürecini kontrol etmenize izin veren bir dizi operatöre sahiptir. Bu operatörler denir direktifler . Yalnızca programın birleştirilmesi sürecinde hareket ederler ve talimatların aksine makine kodları üretmezler.

işlenenler

işlenen – üzerinde bir makine komutunun veya bir programlama dili operatörünün yürütüldüğü bir nesne.
Bir talimatın bir veya iki işleneni olabilir veya hiç işleneni olmayabilir. İşlenenlerin sayısı, komut kodu tarafından dolaylı olarak belirtilir.
Örnekler:

  • İşlenen yok ret ;Dönüş
  • Bir işlenen inc ecx ;Artış ecx
  • İki işlenen eax,12 ekler; eax'e 12 ekler

Etiket, komut (yönerge) ve işlenen, dizide herhangi bir belirli konumda başlamak zorunda değildir. Ancak, programın daha fazla okunabilirliği için bunları bir sütuna yazmanız önerilir.

İşlenenler olabilir

  • tanımlayıcılar;
  • tek veya çift tırnak içine alınmış karakter dizileri;
  • ikili, sekizli, ondalık veya onaltılık tamsayılar.
tanımlayıcılar

tanımlayıcılar – işlem kodları, değişken adları ve etiket adları gibi program nesnelerini belirtmek için kullanılan geçerli karakter dizileri.

Tanımlayıcı yazma kuralları.

  • Tanımlayıcı bir veya daha fazla karakter olabilir.
  • Karakter olarak Latin alfabesinin harflerini, sayıları ve bazı özel karakterleri kullanabilirsiniz: _, ?, $, @.
  • Tanımlayıcı bir rakam karakteriyle başlayamaz.
  • Kimlik en fazla 255 karakter uzunluğunda olabilir.
  • Çevirmen, tanımlayıcının ilk 32 karakterini kabul eder ve gerisini yok sayar.
Yorumlar

Yorumlar yürütülebilir satırdan bir karakterle ayrılır; . Bu durumda noktalı virgülden sonra satır sonuna kadar yazılan her şey bir yorumdur. Bir programda yorumların kullanılması, özellikle bir dizi talimatın amacının belirsiz olduğu durumlarda programın netliğini artırır. Yorum, boşluklar dahil olmak üzere herhangi bir yazdırılabilir karakter içerebilir. Yorum tüm satırı kapsayabilir veya aynı satırdaki komutu takip edebilir.

Derleme program yapısı

Assembly dilinde yazılmış bir program, adı verilen birkaç bölümden oluşabilir. modüller . Her modül bir veya daha fazla veri, yığın ve kod segmenti tanımlayabilir. Eksiksiz herhangi bir derleme dili programı, yürütülmesinin başladığı bir ana veya ana modül içermelidir. Bir modül, uygun direktiflerle bildirilen kod, veri ve yığın segmentleri içerebilir. Segmentleri bildirmeden önce, .MODEL yönergesini kullanarak bellek modelini belirtmeniz gerekir.

Assembly dilinde "hiçbir şey yapmayan" program örneği:

686P
.MODEL DAİRE, STDCALL
.VERİ
.KOD
BAŞLANGIÇ:

RET
SON BAŞLANGIÇ

Bu program sadece bir mikroişlemci komutu içerir. Bu komut RET'tir. Programın doğru şekilde sonlandırılmasını sağlar. Genel olarak, bu komut bir prosedürden çıkmak için kullanılır.
Programın geri kalanı çevirmenin işleyişi ile ilgilidir.
.686P - Pentium 6 (Pentium II) korumalı mod komutlarına izin verilir. Bu yönerge, işlemci modelini belirterek desteklenen birleştirici komut kümesini seçer. Yönergenin sonundaki P harfi çevirmene işlemcinin korumalı modda çalıştığını söyler.
.MODEL FLAT, stdcall bir düz bellek modelidir. Bu bellek modeli, işletim sistemi Pencereler. stdcall
.DATA, veri içeren bir program bölümüdür.
.CODE, kod içeren bir program bloğudur.
BAŞLAT bir etikettir. Assembler'de etiketler, modern yüksek seviyeli diller hakkında söylenemeyen büyük bir rol oynar.
END START - programın sonu ve tercümana programın BAŞLAT etiketinden başlatılması gerektiğine dair bir mesaj.
Her modül, programın kaynak kodunun sonunu işaretleyen bir END yönergesi içermelidir. END yönergesini izleyen tüm satırlar yok sayılır. END yönergesinin atlanması bir hata oluşturur.
END yönergesinden sonraki etiket, derleyiciye programın yürütülmesinin başladığı ana modülün adını söyler. Program bir modül içeriyorsa, END yönergesinden sonraki etiket atlanabilir.




Tepe