První kroky s montáží

Obsah
Shromáždění je nízkoúrovňový jazyk, jehož funkcí je poskytnout všechny potřebné prvky pro programování architektury stolních počítačů nebo notebooků. Jeho křivka učení je trochu strmá a z jazyků na vysoké úrovni, jako je, lze použít jen velmi málo konceptů Python, Ruby nebo JavaJe to však nejsilnější jazyk pro programování architektur založený na x64.
Přestože jde o složitý jazyk, ve svých nejaktuálnějších verzích ponechává stranou použití hexadecimálů a nahrazuje je konvencemi pojmenovávání, které jsou snadněji zapamatovatelné a čitelné, navíc s vyššími charakteristikami, jako je umožnění používání maker a začlenění definované uživatelem. typy dat.
Když proces vývoje skončí, tyto řádky kódu načte program sestavení a poté je přeloží do strojového kódu podobným procesem jako sestavení v jazycích na vysoké úrovni, ale zde se tomu říká připojit se.
Pro účely tohoto tutoriálu v první instanci uvidíme, jaký je proces kódování 32 bitů, protože jde o zásadní krok k lepšímu porozumění jazyku a procesu kódování v aplikacích 64 bitů, a to sdílením mnoha charakteristik s architekturou x86 64bitové.
Existuje mnoho způsobů, jak začít s kódováním Shromáždění pro 32bitové aplikace, ale jedním z nejjednodušších a nejpraktičtějších způsobů, jak to udělat, je Vizuální studio protože se tomu něco říká sestaveno online kde kód Shromáždění je vložen do C ++ normální a aktuální, to lze provést na jednom řádku nebo v blocích kódu s vyhrazeným slovem __asm.
DůležitéKlíčové slovo __asm ​​lze použít s jediným podtržítkem. Toto je stará směrnice používaná k zajištění kompatibility v méně moderních aplikacích.
Když jsme si to ujasnili, první věc, kterou musíme udělat, je získat Vizuální studio, pro tento tutoriál jsme použili verzi Vyjádřit kód je však platný v obou verzích SDI. Stahujeme v následujícím odkazu náš SDI a spustíme v instalačním programu:

Po dokončení procesu instalace můžeme začít kódovat ShromážděníZa tímto účelem uděláme malý příklad, kde předvedeme, jak můžeme vložit kód Shromáždění v C ++ s vyhrazeným slovem __asm, kde jakýkoli segment kódu vedle tohoto slova bude považován za nativní kód Shromáždění kompilátorem C ++.
Otevřeme naše Visual Studio a vytvoříme nový typ projektu Aplikace konzoly Win32, tlačíme dobře a zobrazí se průvodce vytvořením projektu, který se nás zeptá, jaký typ projektu chceme a pokud chceme prázdný, doporučujeme nechat všechny výchozí možnosti a stisknout Dokončit:

ZVĚTŠIT

Průvodce vytvoří základní kód pro náš projekt, který bude obsahovat knihovnu a hlavní metodu, měla by vypadat takto:
 #include "stdafx.h" int _tmain (int argc, _TCHAR * argv []) {return 0;}
Když máme nyní základní kód, musíme přidat náš řádek Shromáždění, navíc musíme přidat knihovnu, abychom mohli tisknout pomocí konzoly a jmenný prostor aby vše fungovalo správně, podívejme se na konečný kód:
 #include "stdafx.h" #include using namespace std; int _tmain (int argc, _TCHAR * argv []) {int x = 0; _asm mov x, 25 cout << "Hodnota pro x je:" <<>
Co jsme zde udělali, je definovat proměnnou nazvanou x a poté prostřednictvím kódu Shromáždění přiřadíme mu hodnotu 25, abychom jej nakonec vytiskli cout, jak vidíme, je to docela jednoduchý proces pro vložení Kód montáže, nyní stačí spustit náš malý program, pro to můžeme stisknout Ctrl + F5 kde bude náš program kompilován a spuštěn, podívejme se, jak tato operace vypadá:

ZVĚTŠIT

Navíc můžeme zahrnout více řádků kódu z Shromáždění v našem kódu C ++, čehož můžeme dosáhnout umístěním vyhrazeného slova __asm a otevření bloku kódu, podívejme se, jak toho dosáhneme:
 float Sqrt (float f) {__asm ​​{fld f // Put f on the operations stack fsqrt // Calculate sqrt}}
Výhody inline montážePoužití řadové montáže namísto nativní aplikace má mnoho výhod 32 bitů z Shromáždění, například odesílání parametrů do funkcí je kompletně zpracováno kompilátorem C ++ a vloží přesné množství strojového kódu, takže se nemusíme starat o přetečení paměti ani nic podobného.
Ale stejně jako máme výhody, nacházíme také nevýhody tohoto způsobu kódování, jednou z nich je, že vývojář ztrácí trochu kontroly nad aplikací, jako je manipulace se zásobníkem nebo dokonce definování vlastních konvencí.
Online montáž nabízí spoustu flexibility a umožňuje nám vstoupit do tohoto světa rychle a snadno, ale tato metoda kódování brání vývojářům v přístupu k některým prvkům Assembly, z tohoto důvodu je běžné do našeho projektu přidávat nativní a samostatný kód.
K tomu potřebujeme vytvořit naše soubory samostatně a poté zahrnout metody, které potřebujeme, abychom dosáhli svého cíle, budeme postupovat podle následujících kroků:
1- Nejprve vytvoříme nový projekt, může to být projekt typu C ++ nebo z aplikace pro Windows, oba pracují na přidání souborů z Shromáždění.
2- Přidáme soubor C ++ k našemu projektu, kterému zavoláme jistina.cpp který bude mít na starosti volání procedury z našeho souboru Shromáždění odeslání pole číselných hodnot a následný tisk toho, co tato procedura vrací, podívejme se na obsah našeho souboru jistina.cpp:
 #include using namespace std; extern "C" int findMinorNum (int * i, int count); int main () {int arr [] = {4, 2, 6, 4, 5, 1, 8, 9, 5, -5}; cout << "Nejmenší číslo je:" << findMinorNum (arr, 10) << endl; cin.get (); vrátit 0;}
3- Poté klikneme pravým tlačítkem na náš projekt, který se nachází na pravé straně našeho rozhraní, v sekci Průzkumník řešení. Vybereme Budujte závislosti a později Vytvářejte přizpůsobení. Děláme to, abychom zjistili, jak bude Visual Studio zpracovávat soubory s příponou .asmProtože nechceme, aby kompilátor C ++ tyto soubory kompiloval, naším cílem je, aby VS tyto soubory poskytoval VÍCE M abych je sestavil a pak tyto soubory propojené s naším C ++ budou zodpovědné za vytvoření konečného spustitelného souboru.
4- Abychom skončili se závislostmi, vybereme možnost více M jak můžeme vidět na následujícím obrázku:

ZVĚTŠIT

Tento krok je důležité provést před přidáním jakýchkoli souborů s kódem sestavení jako Vizuální studio přiřadí, co má soubor dělat při vytváření a ne při vytváření.
5- Pak musíme přidat další soubor C ++, ale tentokrát s příponou .asm, pro tento tutoriál jsem to nazval assembler.asm. Stejným způsobem můžeme do něj vložit libovolný název kromě main.asm, protože kompilátor může mít problémy s vyhledáním, kde je vaše hlavní metoda.
6- Náš archiv assembler.asm Bude mít na starosti výpočet ze série číselných hodnot, což je nejmenší hodnota mezi nimi a potom C ++ Postará se o přijetí hodnoty ke zpracování prostřednictvím cout, podívejme se na obsah našeho souboru:
; 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 Dokončeno ; MainLoop: cmp dword ptr [edx], eax; cmovl eax, dword ptr [edx]; přidat edx, 4; dec ecx; jnz MainLoop; Dokončeno: ret; findNumMinor endpend
To nám umožňuje oddělit naše soubory i naši logiku. Realizace tohoto typu procedur na základě 32 bitů je velmi málo používaná, ale je důležité znát všechny její důsledky, pojďme se nyní podívat, jak měníme náš kód pro aplikaci 64 bitů stejně jako kroky, které musíme učinit, abychom přizpůsobili své prostředí Vizuální studio.
Visual Studio obsahuje všechny potřebné nástroje pro přidání nativní sestavy do našeho projektu C ++, ale pracovat na základě 64 bitů potřebujeme v našem projektu provést několik dalších konfigurací, podívejme se:
1- Kroky k provedení tohoto typu kódování jsou podobné našemu předchozímu příkladu, ale k přizpůsobení VS jdeme na možnost Stavět a vybíráme Správce konfigurace:

2- Na obrazovce správce konfigurace vybereme možnost Nový nebo nový ve sloupci platformy, který zobrazí druhou obrazovku pro výběr platformy projektu, vybereme x64 a v opci Kopírovat nastavení z ponechali jsme vybranou možnost Win32. To udělá VS změnit cesty verzí z 32 bitů z VÍCE M k tomu z 64, veškerou práci tedy provede IDE.

ZVĚTŠIT

3- Jakmile to bude hotové, můžeme zkompilovat náš kód a spustit ho, ale musíme náš soubor upravit Shromáždění protože pracujeme na různých architekturách, podívejme se na nový kód pro náš soubor:
; Výpis: assembler.asm .code; int findMinorNum (int * arr, int count) FindSmallest proc; mov eax, 7fffffffh; cmp edx, 0; jle Dokončeno; MainLoop: cmp dword ptr [rcx], eax; cmovl eax, dword ptr [rcx]; přidat rcx, 4; dec edx; jnz MainLoop; Dokončeno: ret; FindSmallest endp; konec;
Tím tento tutoriál dokončujeme, již jsme se poprvé podívali na programování pomocí ShromážděníNa první pohled se to může zdát poněkud složité, ale s náležitým zvládnutím C ++ a základní pojmy strojového jazyka můžeme dosáhnout zajímavých a užitečných věcí v našem vývoji.Líbil se vám tento návod a pomohl mu?Autora můžete odměnit stisknutím tohoto tlačítka, čímž mu dáte kladný bod

Vám pomůže rozvoji místa, sdílet stránku s přáteli

wave wave wave wave wave