Montaj ile ilk adımlar

İçindekiler
toplantı işlevi masaüstü bilgisayarların veya dizüstü bilgisayarların mimarisini programlamak için gerekli tüm öğeleri sağlamak olan düşük seviyeli bir dildir. Öğrenme eğrisi biraz diktir ve aşağıdaki gibi üst düzey dillerden çok az kavram uygulanabilir. Python, Ruby veya JavaAncak, programlama mimarileri için en güçlü dildir. x64.
Karmaşık bir dil olmasına rağmen, en güncel sürümlerinde onaltılık sayıları bir kenara bırakıp, makro kullanımına izin verme ve kullanıcı tanımlı dahil etme gibi daha yüksek özelliklere ek olarak, daha kolay hatırlanması ve okunması kolay adlandırma kuralları ile değiştirir. veri tipleri.
Geliştirme süreci sona erdiğinde, bu kod satırları montaj programı tarafından okunur ve daha sonra aşağıdakine benzer bir işlemle makine koduna çevrilir. derleme üst düzey dillerde ama burada denir katılmak.
Bu eğitimin amaçları doğrultusunda, ilk etapta kodlama sürecinin nasıl olduğunu göreceğiz. 32 bituygulamalarda dili ve kodlama sürecini daha iyi anlamak için temel bir adım olduğundan, 64 bit, bu mimari ile birçok özelliği paylaşarak x86 64-bit.
Kodlamaya başlamanın birçok yolu vardır toplantı 32 bit uygulamalar için, ancak bunu yapmanın en kolay ve en pratik yollarından biri Görsel stüdyo denilen bir şeye sahip olduğundan çevrimiçi toplanmış kodu nerede toplantı gömülü C++ normal ve güncel, bu, ayrılmış kelime ile tek bir satırda veya kod bloklarında yapılabilir. __asm.
Önemli__asm ​​​​anahtar kelimesi tek bir alt çizgi ile kullanılabilir. Bu, daha az modern uygulamalarda uyumluluğu sağlamak için kullanılan eski bir yönergedir.
Bunu netleştirdikten sonra yapmamız gereken ilk şey, Görsel stüdyo, bu eğitim için sürümü kullandık ifade etmek ancak kod her iki sürümde de geçerlidir. SDI. Aşağıdaki linkten indiriyoruz SDI ve yükleyicide çalıştırıyoruz:

Kurulum işlemi bittikten sonra kodlamaya başlayabiliriz. toplantı, bunun için kodunu nasıl gömebileceğimizi göstereceğimiz küçük bir örnek yapacağız. toplantı içinde C++ ayrılmış kelime ile __asm, burada bu kelimenin yanındaki herhangi bir kod parçası, yerel kod olarak kabul edilecektir. toplantı derleyici tarafından C++.
Visual Studio'muzu açıyoruz ve yeni bir tür proje oluşturuyoruz Win32 Konsol Uygulaması, Biz iteriz Tamam ve bize ne tür bir proje istediğimizi soran proje oluşturma sihirbazı görüntülenecektir ve eğer boş bir tane istiyorsak, tüm varsayılan seçenekleri bırakıp düğmesine basmanızı öneririz. Sonuçlandırmak:

BÜYÜT

Sihirbaz, projemiz için bir kütüphane ve ana yöntemi içerecek bir temel kod oluşturacak, şöyle görünmelidir:
 #include "stdafx.h" int _tmain (int argc, _TCHAR * argv []) {dönüş 0;}
Temel koda sahip olmak, şimdi satırımızı eklememiz gerekiyor. toplantı, ayrıca konsoldan çıktı alabilmek için kütüphaneyi eklemeliyiz ve ad alanı her şeyin düzgün çalışması için son kodu görelim:
 #include "stdafx.h" #include ad alanını kullanarak std; int _tmain (int argc, _TCHAR * argv []) {int x = 0; _asm mov x, 25 cout << "x için değer:" <<>
Burada yaptığımız, x adında bir değişken tanımlamak ve ardından kod aracılığıyla toplantı Sonunda yazdırmak için 25 değerini atadık. cout, gördüğümüz gibi, gömmek oldukça basit bir işlemdir. Montaj kodu, şimdi sadece küçük programımızı çalıştırmamız gerekiyor, bunun için basabiliriz Ctrl + F5 programımızın derlenip çalıştırılacağı yer, bakalım bu işlem nasıl görünüyor:

BÜYÜT

Ek olarak, birden çok kod satırı ekleyebiliriz toplantı bizim kodumuzda C++ayrılmış kelimeyi yerleştirerek elde edebileceğimiz __asm ve bir kod bloğu açarak bunu nasıl başardığımızı görelim:
 float Sqrt (float f) {__asm ​​​​{fld f // f'yi işlem yığınına koyun fsqrt // sqrt hesapla}}
Sıralı montajın avantajlarıYerel bir uygulama yerine satır içi derleme kullanmanın birçok faydası vardır. 32 bit nın-nin toplantı, örneğin işlevlere parametrelerin gönderilmesi tamamen aşağıdakilerin derleyicisi tarafından gerçekleştirilir. C++ ve tam olarak makine kodunu enjekte edecek, böylece bir bellek taşması veya bunun gibi bir şey hakkında endişelenmemize gerek kalmayacak.
Ancak avantajlarımız olduğu gibi, bu kodlama yönteminde de dezavantajlar buluyoruz, bunlardan biri geliştiricinin, yığını manipüle etme veya hatta kendi kurallarını tanımlama gibi uygulama üzerindeki kontrolünü biraz kaybetmesidir.
Çevrimiçi derleme çok fazla esneklik sunar ve bu dünyaya hızlı ve kolay bir şekilde girmemizi sağlar, ancak bu kodlama yöntemi geliştiricilerin bazı Montaj öğelerine erişmesini engeller, bu nedenle projemize yerel ve ayrı kod eklemek yaygındır.
Bunun için dosyalarımızı ayrı ayrı oluşturmamız ve ardından ihtiyacımız olan yöntemleri eklememiz gerekiyor, hedefimize ulaşmak için aşağıdaki adımları izleyeceğiz:
1- İlk önce yeni bir proje oluşturuyoruz, bu bir tür proje olabilir C++ veya windows uygulaması, her ikisi de dosyaları eklemek için çalışır toplantı.
2- Bir dosya ekliyoruz C++ arayacağımız projemize müdür.cpp dosyamızdan bir prosedür çağırmakla sorumlu olacak toplantı bir dizi sayısal değer gönderip ardından bu prosedürün ne döndürdüğünü yazdırıyoruz, dosyamızın içeriğini görelim müdür.cpp:
 #include ad alanını kullanarak std; extern "C" int findMinorNum (int * i, int sayı); int ana () {int dizi [] = {4, 2, 6, 4, 5, 1, 8, 9, 5, -5 }; cout << "En küçük sayı:" << findMinorNum (dizi, 10) << endl; cin.get(); 0 döndür;}
3- Ardından projemize sağ tıklıyoruz, arayüzümüzün sağ tarafında, bölümünde bulunur. Çözüm Gezgini. seçiyoruz Bağımlılıklar Oluştur ve sonra Özelleştirmeler Oluşturun. Bunu, Visual Studio'nun uzantılı dosyaları nasıl işleyeceğini belirlemek için yapıyoruz. .asmC++ derleyicisinin bu dosyaları derlemesini istemediğimizden, amacımız VS'nin bu dosyaları DAHA FAZLA böylece onları bir araya getiriyorum ve sonra C ++ ile bağlantılı bu dosyalar son yürütülebilir dosyayı oluşturmaktan sorumlu olacak.
4- Bağımlılıkları bitirmek için şu seçeneği seçiyoruz: daha fazla M aşağıdaki resimde gördüğümüz gibi:

BÜYÜT

Montaj kodu ile herhangi bir dosya eklemeden önce bu adımı gerçekleştirmek önemlidir. Görsel stüdyo bir dosyanın oluşturulduğunda değil, oluşturulduğunda ne yapması gerektiğini atar.
5- O zaman başka bir C++ dosyası eklememiz gerekiyor, ancak bu sefer uzantı ile .asm, bu eğitim için onu aradım montajcı.asm. Aynı şekilde, derleyici ana yönteminizin nerede olduğunu bulmakta sorun yaşayabileceğinden, buna main.asm dışında herhangi bir ad koyabiliriz.
6- Arşivimiz montajcı.asm Bunlar arasında en küçük değer olan bir dizi sayısal değerden hesaplama yapmakla görevli olacak ve daha sonra C++ Cout üzerinden işlemek için değeri almakla ilgilenecek, dosyamızın içeriğini görelim:
; assembler.asm.xmm.model flat, c.data.code findNumMenor proc exportmov edx, dword ptr [esp + 4]; mov ecx, dword ptr [esp + 8]; mov eax, 7fffffffh; cmp ecx, 0; jle Bitti ; MainLoop: cmp dword ptr [edx], eax; cmovl eax, dword ptr [edx]; edx, 4 ekleyin; dec ecx; jnz MainLoop; Bitti: ret; findNumMinor endpend
Bu, dosyalarımızı ve mantığımızı ayırmamızı sağlar. 32 bite dayalı bu tür prosedürlerin gerçekleştirilmesi çok az kullanılır ancak tüm etkilerini bilmek önemlidir, şimdi bir uygulama için kodumuzu nasıl değiştireceğimize bakalım. 64 bit ortamımıza uyum sağlamak için atmamız gereken adımların yanı sıra Görsel stüdyo.
Visual Studio, yerel derlemeyi projemize eklemek için gerekli tüm araçları içerir. C++, ancak dayalı olarak çalışmak 64 bit projemize bazı ek konfigürasyonlar yapmamız gerekiyor, bakalım:
1- Bu tür kodlamayı gerçekleştirme adımları önceki örneğimize benzer, ancak uyarlamak için VS seçeneğe gidiyoruz Yapı ve biz seçiyoruz Yapılandırma yöneticisi:

2- Yapılandırma yöneticisi ekranında seçeneği seçeceğiz Yeni veya proje platformunu seçmek için ikinci bir ekran görüntüleyecek olan platform sütununda yeni olanı seçiyoruz. x64 ve seçenekte Ayarları Şuradan Kopyala seçeneğini seçtik bıraktık Win32. Bu yapacak VS sürüm yollarını değiştir 32 bit nın-nin DAHA FAZLA buna 64, yani tüm işler IDE tarafından yapılacaktır.

BÜYÜT

3- Bu yapıldıktan sonra kodumuzu derleyebilir ve çalıştırabiliriz, ancak dosyamızı değiştirmeliyiz. toplantı farklı mimariler üzerinde çalıştığımız için dosyamızın yeni kodunu görelim:
; Listeleme: assembler.asm .code; int findMinorNum (int * dizi, int sayı) FindSmallest proc; hareket eax, 7ffffffh; cmp edx, 0;jle Bitti; MainLoop: cmp dword ptr [rcx], eax; cmovl eax, dword ptr [rcx]; rcx, 4 ekleyin; aralık edx; jnz MainLoop; Bitmiş: ret; En Küçük Endp'yi Bul; son;
Bununla bu öğreticiyi bitiriyoruz, programlamaya ilk kez bir bakış attık. toplantı, ilk başta biraz karmaşık görünebilir, ancak uygun bir ustalıkla C++ ve makine dilinin temel kavramları, geliştirmelerimizde ilginç ve faydalı şeyler başarabiliriz.Bu Eğitimi beğendiniz ve yardım ettiniz mi?Yazara olumlu puan vermek için bu düğmeye basarak yazarı ödüllendirebilirsiniz.

Arkadaşlarınızla sayfasını paylaşan sitenin gelişimine yardımcı olacak

wave wave wave wave wave