ISU Cvičení 2 Marta Čudová Supercomputing Technologies Reseaŕch Group Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole icudova@fit.vutbr.cz
Osnova dnešního cvičení Vývojové prostředí pro asemblery, překlad, sestavení a spuštění programu v příkazové řádce Codasip Studio Codeblocks IDE Dark side of Windows command line Nasm a GoLink Užitečné prográmky Marta Čudová - ISU, 2. cvičení 2
Motivace Já bych všechny ty internety a počítače zakázala. (Věra Pohlová, důchodkyně, anketa METRO, 1999) Marta Čudová - ISU, 2. cvičení 3
Co to je Assembler? Nízkoúrovňový programovací jazyk Symbolické instrukce procesoru Při překladu se převedou na reálné instrukce procesoru (do sekvence 0 a 1) Pracuje přímo s registry procesoru na rozdíl od vyšších programovacích jazyků ASSEMBLER! Marta Čudová - ISU, 2. cvičení 4
Pojmy Instrukce označení kódového příkazu pro provedené elementární operace procesoru. Posloupnost těchto instrukcí tvoří strojový kód. Různé procesory mohou mít různé sady takových instrukcí. Tvar (příklad): název operand1, operand2 (MOV EAX, 5) Registr malé ale velmi rychlé úložiště dat Je součástí procesoru, jejich počet a velikost záleží na dané architektuře Uchovávají data a adresu Př. Intel 32-bit 8 32-bit registrů pro obecné použití Intel 64-bit 16 64-bit registrů pro obecné použití Registry pro obecné použití: Datové (EAX aritmetické operace, input/output, EBX - adresování, ECX čítač v cyklech, EDX input/output, aritmetické operace mul, div) Ukazatelé (EIP ukazuje na následující instrukci, ESP offset v rámci programového zásobníku, EBP pomáhá při referencování proměnných předávaných do subrutiny) Indexové (ESI zdrojový index pro operaci s řetězci, EDI cílový index pro operace s řetězci) Marta Čudová - ISU, 2. cvičení 5
Program v Assembleru 3 sekce section.data Deklarace inicializovaných dat a konstant nemění se za běhu. section.bss Deklarace proměnných. section.text Kód Segmenty section.text main: global main ; your code Data (section.data + section.bss), code (section.text), stack (obsahuje data předávaná mezi funkcemi) Každý segment je odkazován ukazatelem v segment registru Marta Čudová - ISU, 2. cvičení 6
Codasip Studio (Eclipse) Kde ho najít? Hledej Exáč v "Q:\codasip Workspace, ve kterém si budete ukládat všechna cvičení, si vytvořte na disku P! Nová verze Stáhněte z wiki a nainstalujte Eclipse IDE Workspace nastavte na./isu (mělo by se nabídnout samo). Stáhněte si isu-tools-2016.zip. Marta Čudová - ISU, 2. cvičení 7
Aby to nebylo tak jednoduché Pokud pracujete v linuxu, pak Překopírujte složku /jre z Q:/codasip do složky se staženým Eclipsem (ve Windows by to mělo fungovat, ale když ji překopírujete, nic se nestane). V project exploreru vidíte několik projektů hp* jsou cvičení na hypotetické počítače, které probírat nebudeme. Koho to však zajímá, může si cvičení projít doma. Pozor! Projekt nelze spustit, pouze debuggovat. V editoru rozklikněte nasm_sw1 - Otevřete Makefile a proveďte tyto změny: Pokud jste ve Windows: Doplňte LDFLAGS=-Lc:/windows/system32 -lkernel32 -lmsvcrt Pracujte se souborem nasm_sw1_win.s Pokud jste v Linuxu: Změňte LD=ld na LD = gcc Doplňte LDFLAGS=-m32 Změňte formát na $(ASM) -f elf32 -F dwarf -g -o $@ $< Pracujte se souborem nasm_sw1_lin.s Zkuste projekt spustit program by měl končit s kódem 12. Marta Čudová - ISU, 2. cvičení 8
Hello world! %include "rw32-2015.inc" section.data msg db 'Hello, world!', 0 section.text Tento soubor překopírujte z isutools-2016 do daného projektu Proměnná obsahující řetězec zakončený 0. global main main: mov esi, msg call WriteString ret WriteString je definovaný v rw32-2015.inc: Vypis retezce ukonceneho 0 (ASCIIZ), jehoz adresa je ulozena v registru ESI. Kód v nasm_sw1_win/lin.s zakomentujte nebo ho nahraďte kódem s Hello World. Marta Čudová - ISU, 2. cvičení 9
Debugger v Codasip Studio (Eclipse) Zobrazí se obrazovka níže: Klikni na brouka pro spuštění debuggovacího módu Ovládací lišta debuggeru Klikněte na i pro krokování po instrukcích! Nezapomeňte do kódu vložit breakpoint. Indikátor, že jste v debuggeru Start debuggeru Žluté šipky určují krokování po řádcích, skok do funkce, Pro přechod do editoru musíte nejprve vypnout debugger! Zastavení debuggeru Marta Čudová - ISU, 2. cvičení 10
Debugger v Codasip Studio (Eclipse) Lze sledovat jednotlivé registry. Při změně dojde k jejich zvýraznění. Krokování programu po instrukcích. Modrá šipka ukazuje právě zpracovávanou instrukci. Marta Čudová - ISU, 2. cvičení 11
CodeBlocks IDE Stáhněte a nainstalujte z wiki Nastavení compileru a debuggeru by též mělo být na wiki Stáhněte si isu_exercise_2.zip a rozbalte. Nezapomeňte nastavit cesty (viz wiki) Při debuggování klikněte na okýnko v broučkem v horní liště (debugging windows) a nechce si zobrazit CPU registers, Disassembly a Memory. Marta Čudová - ISU, 2. cvičení 12
CodeBlocks IDE Sestavení a spuštění projektu Ovládání debuggeru Debugging windows - volba Projekty Vložte breakpoint Debugging windows Marta Čudová - ISU, 2. cvičení 13
Příkazová řádka ve Windows Jak ji spustit? Nabídka Start napiš cmd (enter) Základní příkazy, které budeme používat: Příkaz ve Win Příkaz v Linux Co to dělá dir ls Zobrazí seznam složek cd jmeno_slozky chdir jmeno_slozky cd jmeno_slozky Změní aktuální složku. D: cd jmeno_slozky Změna na disk D. Viz https://commandwindows.com/command3.htm Marta Čudová - ISU, 2. cvičení 14
Ruční překlad Prohlédněte si soubor rw32-2015.inc Definice dostupných funkcí, konstant, Překladač program, který překládá kód zapsaný pomocí vyšších programovacích jazyků do jazyka nižšího (do strojového kódu). nasm -f win32 [-g] helloworld.asm -> helloworld.obj golink helloworld.obj [/fo helloworld.exe] /console [/debug coff /entry:start] msvcrt.dll kernel32.dll -> helloworld.exe Linker program, který spojuje objektové soubory a knihovny do jediného spustitelného souboru (popř. knihovny). Řeší reference nedefinovaných symbolů jejich vyhledáním v ostatních objektových souborech. Marta Čudová - ISU, 2. cvičení 15
Alternativy příkazové řádky Moba Xterm Linux terminal pro Win s X11 serverem, SSH klientem a mnoho více Umožňuje připojení externích disků Power Shell Vestavěný ve Win Umožňuje skriptování, pipelinování a mnoho dalšího Marta Čudová - ISU, 2. cvičení 16
Příští cvičení Podíváme se na zobrazení binárních čísel, hlavně záporných Probereme typy transformací Co budete potřebovat? Tužku a papír (budeme ale pracovat i na počítači) Znalosti z prvního cvičení Účast na přednášce probírající dané téma vřele vítána Marta Čudová - ISU, 2. cvičení 17
Dík za pozornost