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:
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"
.