IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 2 - Instalace kompilátoru assembleru ve Windows

V minulé lekci, Úvod do programování v Assembleru, jsme si řekli co to Assembler vlastně je, proč se jej učit, a dokonce si i ukázali jak vypadá.

Již víme, že ASM nabízí více možností vývoje. V tomto základním kurzu si ukážeme, jak se vyvíjejí moderní aplikace v assembleru pro Windows a také 16bitové aplikace používající přímo jen služby BIOSu. Uvidíte, jak co funguje, a dále budete moci navázat dalším kurzem pro již specifickou platformu. Bez nakouknutí by ale volba nebyla tak snadná a proto si zkusíme obojí.

V dnešním ASM tutoriálu si připravíme vývojové prostředí pro náš první ASM program pro Windows. Program v assembleru můžeme napsat v libovolném textovém editoru a pak jednoduše zkompilovat z příkazové řádky. Pokud ho ale budeme chtít ladit, budeme k tomu potřebovat nějaké vývojové prostředí (IDE). V tomto kurzu budeme používat Visual Studio.

Instalace Visual Studia

Visual Studio je profesionální nástroj od Microsoftu, ale na výuku si můžeme zdarma stáhnout verzi Community. Při instalaci se nabízí sady funkcí pro vývoj webových aplikací, mobilních aplikací, Azure a vývoj aplikací pomocí .NET, ale to nebudeme v tomto kurzu potřebovat. Pro assembler nám stačí vybrat pouze Vývoj desktopových aplikací pomocí C++.

Pokud chcete ušetřit místo na disku, můžete v pravé části zrušit některé volitelné komponenty. Nebudeme potřebovat MFC, ATL, CMAKE a už vůbec ne Live Share.

AsmDude

Po úspěšné instalaci Visual Studia si ještě můžeme přidat rozšíření z menu Extensions -> Manage Extensions. Pro Assembler existuje rozšíření AsmDude, které umí zvýrazňovat syntaxi. Bez něj budou zdrojové kódy černobílé. AsmDude bohužel není bez chyb. Například nedokáže rozpoznat funkce Windows a červeně je podtrhává. Ale stále lepší než nic.

Instalace WinInc

Při programování jakékoli složitější aplikace pro Windows budeme potřebovat hlavičkové soubory. Ty obsahují deklarace všech systémových funkcí, struktur a konstant, abychom je byli schopní používat. Tyto soubory nejsou součástí Visual Studia a je nutné si stáhnout open-source projekt WinInc. Z něj budeme potřebovat pouze složku Include/, uložíme ji např. do C:\Program Files (x86)\WinInc\Include.

Instalace UASM

Visual Studio sice obsahuje kompilátor MASM, ale ten používat nebudeme. Má totiž problém s kompilací WinInc hlavičkových souborů a neumí volat 64-bitové funkce pomocí INVOKE. Místo toho si nainstalujeme UASM, který je kompatibilní s MASM, ale neobsahuje tolik závažných chyb. Navíc je open-source a jako bonus podporuje Linux. Kromě UASM bychom mohli použít také kompilátor ASMC, který má ale horší dokumentaci. UASM i ASMC jsou dost podobné, protože oba vycházejí z JWasm, jehož vývoj skončil v roce 2014. Proto většina příkladů v tomto kurzu funguje nejen v UASM, ale i v ASMC.

UASM se nemusí složitě instalovat. Stačí rozbalit ZIP archiv do kterékoli složky na disku (třeba do C:\Program Files (x86)\UASM\).

V návodu k UASM je napsáno, že je třeba nainstalovat Build Customizations Targets. To ale používat nebudeme, protože nefunguje ve Visual Studiu 2019.

Vytvoření ASM projektu

Po spuštění Visual Studia klikneme na Create a new project. Zvolíme projekt Windows Desktop Wizard (jazyk C++, platforma Windows, typ Desktop).

Během vytváření projektu si ještě musíme vybrat, jestli chceme Console Application (aplikace pro příkazový řádek) nebo Desktop Application (okenní aplikace). Nezapomeneme také zaškrtnout Empty project, jinak by Visual Studio vygenerovalo C++ soubory, které nepotřebujeme.

32-bitová vs. 64-bitová aplikace

Než se pustíme do programování, ze všeho nejdříve se musíme rozhodnout, jestli chceme 32-bitovou nebo 64-bitovou aplikaci. Podle toho na panelu nástrojů zvolíme x86 nebo x64. Na rozdíl od vyšších programovacích jazyků, které jsou nezávislé na procesoru (např. C#, Java), nebo jsou snadno přenositelné (např. C++), v assembleru není možné mít společný zdrojový kód pro x86 a x64 architektury. Jestliže se teď rozhodneme pro x86 a za rok budeme chtít přejít na x64, budeme muset všechno obtížně přepisovat. První 64-bitové procesory se začaly prodávat v roce 2003 a v té době byly Windows XP. Dnes má 32-bitový operační systém už jen pár procent uživatelů.

Nastavení debugování ASM ve Visual Studio

Na panelu nástrojů lze přepínat mezi konfiguracemi Debug a Release. U projektu v assembleru mezi nimi není rozdíl, protože kompilátor assembleru nedělá žádné optimalizace. Stačí nám tedy používat jen jedinou konfiguraci, třeba Debug. Aby fungovalo ladění, je nutné v Project -> Properties v sekci Linker / Debugging zvolit Generate Debug Information optimized for sharing and publishing (/DEBUG:FULL). Potom v menu Tools -> Options v sekci Debugging je nutné zaškrtnout Enable address-level debugging.

Vytvoření souboru se zdrojovým kódem

Nový soubor do projektu přidáme kliknutím pravým tlačítkem na "Source Files" v Solution Explorer, a pak na Add -> New Item. Jako typ souboru můžeme zvolit třeba C++ File (.cpp), ale v názvu souboru musíme příponu změnit na .asm. Potom v Solution Explorer klikneme na nově přidaný soubor a zvolíme Properties. Tam uvidíme "Does not participate in build", což změníme na Custom Build Tool. Po kliknutí na tlačítko Použít se v levém panelu objeví položka Custom Build Tool:

Custom Build Tool - Základy assembleru

Zadáme parametry kompilátoru:

  • Command Line - "C:\Program Files (x86)\UASM\uasm.exe" -win64 -Cp -Zi -nologo /I "C:\Program Files (x86)\WinInc\Include" "-Fo$(IntDir)%(FileName).obj" "%(FullPath)". Cesty k UASM a WinInc případně změňte podle toho, kde je máte nainstalované. Parametr -win64 je pro 64-bitové aplikace. U 32-bitových aplikací použijte parametr -coff. Parametr -Cp nastavuje rozlišování velkých/malých písmen (to je důležité). Parametr -Zi je nutný pro ladění. Parametr -nologo vypne zobrazování licence a verze během kompilace.
  • Outputs: $(IntDir)%(FileName).obj. Pokud projekt obsahuje více ASM souborů, je nutné Custom Build Tool nakonfigurovat pro každý z nich. V Solution Explorer lze nastavit vlastnosti několika souborů najednou, když se označí myší s klávesou Ctrl.

Pokud byste někdy místo UASM chtěli zkusit také MASM od Microsoftu, nebudete muset nastavovat Custom Build Tool, ale v Solution Exploreru kliknete pravým tlačítkem na projekt a pak v Build Dependencies -> Build Customizations zaškrtnete masm.

Můžeme hned pro kontrolu zkusit projekt zkompilovat z menu Build -> Build Solution. U prázdného ASM souboru by se měl zobrazit error A2099: END directive required at end of file. Pokud se zobrazí jiná chyba, pak jsou asi špatně parametry nebo cesta ke kompilátoru.

V příští lekci, Hello world v ASM ve Windows, si vytvoříme první jednoduchý program, který zobrazí text "Hello world".


 

Předchozí článek
Úvod do programování v Assembleru
Všechny články v sekci
Základy assembleru
Přeskočit článek
(nedoporučujeme)
Hello world v ASM ve Windows
Článek pro vás napsal Petr Laštovička
Avatar
Uživatelské hodnocení:
17 hlasů
Autor se věnuje vývoji webových aplikací v ASP.NET a aplikací pro Windows v C++ nebo C#.
Aktivity