2. diel - Inštalácia kompilátora assembleri vo Windows
Už vieme, že ASM ponúka viac možností vývoja. V tomto základnom kurze si ukážeme, ako sa vyvíjajú moderné aplikácie v assembleri pre Windows a tiež 16-bitové aplikácie používajúce priamo len služby BIOSu. Uvidíte, ako čo funguje, a ďalej budete môcť nadviazať ďalším kurzom pre už špecifickú platformu. Bez nakouknutí by ale voľba nebola tak jednoduchá a preto si skúsime oboje.
V dnešnom ASM tutoriálu si pripravíme vývojové prostredie pre náš prvý ASM program pre Windows. Program v assembleri môžeme napísať v ľubovoľnom textovom editore a potom jednoducho skompilovať z príkazového riadku. Pokiaľ ho ale budeme chcieť ladiť, budeme k tomu potrebovať nejaké vývojové prostredie (IDE). V tomto kurze budeme používať Visual Studio.
Inštalácia Visual Studia
Visual Studio je profesionálny nástroj od Microsoftu, ale na výučbu si môžeme zadarmo stiahnuť verziu Community. Pri inštalácii sa ponúka sady funkcií pre vývoj webových aplikácií, mobilných aplikácií, Azure a vývoj aplikácií pomocou .NET, ale to nebudeme v tomto kurze potrebovať. Pre assembler nám stačí vybrať len Vývoj desktopových aplikácií pomocou C ++.
Ak chcete ušetriť miesto na disku, môžete v pravej časti zrušiť niektoré voliteľné komponenty. Nebudeme potrebovať MFC, ATL, CMAKE a už vôbec nie Live Share.
AsmDude
Po úspešnej inštalácii Visual Studia si ešte môžeme pridať rozšírenie z menu Extensions -> Manage Extensions. Pre Assembler existuje rozšírenie AsmDude, ktoré vedia zvýrazňovať syntax. Bez neho budú zdrojové kódy čiernobiele. AsmDude bohužiaľ nie je bez chýb. Napríklad nedokáže rozpoznať funkcie Windows a červeno je podtrháva. Ale stále lepšie ako nič.
Inštalácia WinInc
Pri programovaní akejkoľvek zložitejšie aplikácie pre Windows budeme
potrebovať hlavičkové súbory. Tie obsahujú deklarácia všetkých
systémových funkcií, štruktúr a konštánt, aby sme ich boli schopní
používať. Tieto súbory nie sú súčasťou Visual Studia a je nutné si
stiahnuť open-source projekt WinInc. Z neho budeme
potrebovať iba zložku Include/
, uložíme ju napr. Do
C:\Program Files (x86)\WinInc\Include
.
Inštalácia UASM
Visual Studio síce obsahuje kompilátor MASM, ale ten používať nebudeme.
Má totiž problém s kompiláciou WinInc hlavičkových súborov a nevie volať
64-bitové funkcie pomocou INVOKE
. Namiesto toho si nainštalujeme
UASM, ktorý je
kompatibilný s MASM, ale neobsahuje toľko závažných chýb. Naviac je
open-source a ako bonus podporuje Linux.
UASM sa nemusí zložito inštalovať. Stačí rozbaliť ZIP archív do
ktorejkoľvek zložky na disku (napríklad do
C:\Program Files (x86)\UASM\
).
V návode na UASM je napísané, že je potrebné nainštalovať Build Customizations Targets. To ale používať nebudeme, pretože nefunguje vo Visual Studiu 2019.
Vytvorenie ASM projektu
Po spustení Visual Studia klikneme na Create a new project. Zvolíme projekt Windows Desktop Wizard (jazyk C ++, platforma Windows, typ Desktop).
Počas vytvárania projektu si ešte musíme vybrať, či chceme Console Application (aplikácie pre príkazový riadok) alebo Desktop Application (okenné aplikácie). Nezabudneme tiež zaškrtnúť Empty project, inak by Visual Studio vygenerovalo C ++ súbory, ktoré nepotrebujeme.
32-bitová vs. 64-bitová aplikácia
Než sa pustíme do programovania, zo všetkého najskôr sa musíme rozhodnúť, či chceme 32-bitovú alebo 64-bitovú aplikáciu. Podľa toho na paneli nástrojov zvolíme x86 alebo x64. Na rozdiel od vyšších programovacích jazykov, ktoré sú nezávislé na procesore (napr. C #, Java), alebo sú ľahko prenositeľné (napr. C ++), v assembleri nie je možné mať spoločný zdrojový kód pre x86 a x64 architektúry. Ak sa teraz rozhodneme pre x86 a za rok budeme chcieť prejsť na x64, budeme musieť všetko ťažko prepisovať. Prvý 64-bitové procesory sa začali predávať v roku 2003 a v tej dobe boli Windows XP. Dnes má 32-bitový operačný systém už len pár percent užívateľov.
Nastavenie debugovania ASM vo Visual Studio
Na paneli nástrojov možno prepínať medzi konfiguráciami Debug a Release. U projektu v assembleri medzi nimi nie je rozdiel, pretože kompilátor assembleri nerobí žiadne optimalizácie. Stačí nám teda používať len jedinú konfiguráciu, treba Debug. Aby fungovalo ladenie, je nutné v Project -> Properties v sekcii Linker / Debugging zvoliť Generate Debug Information optimized for sharing and publishing (/ DEBUG: FULL). Potom v menu Tools -> Options v sekcii Debugging je nutné zaškrtnúť Enable address-level debugging.
Vytvorenie súboru so zdrojovým kódom
Nový súbor do projektu pridáme kliknutím pravým tlačidlom na "Source
Files" v Solution Explorer, a potom na Add -> New Item. Ako typ súboru
môžeme zvoliť napríklad C ++ File (.cpp
), ale v názve súboru
musíme príponu zmeniť na .asm
. Potom v Solution Explorer
klikneme na novo pridaný súbor a zvolíme Properties. Tam uvidíme "Does not
participate in build", čo zmeníme na Custom Build Tool. Po
kliknutí na tlačidlo Použiť sa v ľavom paneli zobrazí položka Custom
Build Tool:
Zadáme parametre kompilátora:
- 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 prípadne zmeňte podľa toho, kde ich máte nainštalované. Parameter-win64
je pre 64-bitové aplikácie. U 32-bitových aplikácií použite parameter-coff
. Parameter-Cp
nastavuje rozlišovanie veľkých / malých písmen (to je dôležité). Parameter-Zi
je nutný pre ladenie. Parameter-nologo
vypne zobrazovanie licencie a verzie počas kompilácie. - Outputs:
$(IntDir)%(FileName).obj
. Ak projekt obsahuje viac ASM súborov, je nutné Custom Build Tool nakonfigurovať pre každý z nich. V Roztok Explorer možno nastaviť vlastnosti niekoľkých súborov naraz, keď sa označí myšou s klávesom Ctrl.
Môžeme hneď na kontrolu skúsiť projekt skompilovať z menu Build ->
Build Solution. U prázdneho ASM súboru by sa mal zobraziť
error A2099: END directive required at end of file
. Ak sa zobrazí
iná chyba, potom sú asi zle parametre alebo cesta ku kompilátora.
V budúcej lekcii, Hello world v ASM vo Windows , si vytvoríme prvý jednoduchý program, ktorý
zobrazí text "Hello world"
.