ISU Cvičení 2 Marta Čudová Supercomputing Technologies Research Group Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole icudova@fit.vutbr.cz
Kdo jsem? SW pro plánování ultrazvukové léčby pomocí simulací šíření ultrazvukových vln a termálního šíření v lidském těle Plánování složitých a kooperujících výpočtů Výběr výpočetních zdrojů a konfigurace spuštění Plánování, spouštění a monitorování úloh Marta Čudová - ISU, 2. cvičení 2
Osnova dnešního cvičení Vývojové prostředí pro asemblery, překlad, sestavení a spuštění programu v příkazové řádce SASM IDE Dark side of Windows command line Nasm a GoLink Užitečné prográmky Codasip Studio (nebudeme probírat) Codeblocks IDE (nebudeme probírat) Marta Čudová - ISU, 2. cvičení 3
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í 4
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í 5
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í 6
SASM IDE Na wiki si stáhněte SASM-ISU-2018.zip a rozbalte archiv na disku P. Překlad Spuštění Debugger Velikost vypisované hodnoty (byte, word, ) Skok na další breakpoint Krokování po řádcích, skok do funkce Stop Výpis paměti Zobrazení registrů Změna formátu (bin, hex, ) Pokud pracujete s polem Výpis hodnoty proměnné var: var Výpis hodnoty z registru ax: $ax Výpis adresy len: &len (např. při použití equ) Marta Čudová - ISU, 2. cvičení 7
Program v Assembleru 3 sekce section.data Deklarace a definice inicializovaných dat a konstant nemění se za běhu. section.bss Deklarace proměnných (definice v programu), nemění se za běhu. Část paměti vyplněná nulami na začátku. section.text Kód Segmenty Má fixní velikost 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í 8
Hello world! %include "rw32-2018.inc" section.data msg db 'Hello, world!', EOL,0 section.text CMAIN: mov esi, msg call WriteString ret Knihovna funkcí, např. čtení z klávesnice, výpis na obrazovku, Proměnná msg obsahující řetězec zakončený EOL a 0. WriteString je definovaný v rw32-2018.inc: Výpis řetězce ukončeného 0 (ASCIIZ), jehož adresa je uložena v registru ESI. Adresujeme po bytech. Marta Čudová - ISU, 2. cvičení 9
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í 10
Ruční překlad Prohlédněte si soubor rw32-2018.inc Definice dostupných funkcí, konstant, bin\nasm.exe -f win32 [-g] i bin\ helloworld.asm helloworld.obj 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). bin\golink.exe helloworld.obj [/fo helloworld.exe] /console [/debug coff /entry:start] /mix msvcrt.dll kernel32.dll 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. helloworld.exe Marta Čudová - ISU, 2. cvičení 11
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í 12
Příští cvičení Práce s pamětí a její adresování Budeme si hrát s debuggerem Co budete potřebovat? Znalosti z přednášky a předchozího cvičení Marta Čudová - ISU, 2. cvičení 13
Pro zájemnce: Další slajdy obsahují menší tutoriál, jak pracovat i s jinými nástroji, které se používaly v ISU loni. Pokud by si někdo chtěl vyzkoušet i něco jiného, tak může (Codasip Studio má třeba lepší debugger). Na cvičeních však s těmito nástroji pracovat nebudeme. Marta Čudová - ISU, 2. cvičení 14
Codasip Studio (Eclipse) - nepovinné 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í 15
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í 16
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í 17
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í 18
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í 19
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í 20
Dík za pozornost