Materials for assembly language workshop
_____ ___. .__
/ _ \ ______ ______ ____ _____\_ |__ | | ___________
/ /_\ \ / ___// ___// __ \ / \| __ \| | _/ __ \_ __ \
/ | \\___ \ \___ \\ ___/| Y Y \ \_\ \ |_\ ___/| | \/
\____|__ /____ >____ >\___ >__|_| /___ /____/\___ >__|
\/ \/ \/ \/ \/ \/ \/
- Větší efektivita využití CPU (čím novější generace, tím více relevantní)
- Rychlejší (a predikovatelné) přerušovací rutiny
- Efektivita při práci s pamětí (cache+RAM)
- Kompaktní kód
- Lepší pochopení práce s gdb a dalšími debuggery
Několik úrovní abstrakce (vrstev nad HW)
- 5 uživatelské aplikace
- 4½ (skriptovací engine)
- 4 vyšší programovací jazyk
- 3 assembler
- 2 strojový kód
- 1 syscalls
- 0 HW
- První generace mainframů
- vývojové diagramy v roli „vyššího jazyka“
- assembler
- strojový kód (zpočátku ruční překlad!)
- Mainframy a později minipočítače
- přechod k vyšším programovacím jazykům
- levnější vývoj, šance na přenositelnost
- Osmibitové herní konzole
- assembler jediná rozumná volba
- Domácí mikropočítače
- návrat „ke kořenům“
- prakticky jediná volba pro profesionální aplikace
- Osobní mikropočítače
- Motorola 68000
- 8086/80286...
- specifické použití assembleru (hry, dema, ...)
- DSP
- výpočetní subrutiny (FFT...)
- přerušovací rutiny
- Firmware
- Kód pracující přímo s HW (senzory, CPU+FPGA)
- DSP a MCU - rychlé přerušovací rutiny!
- Instrukce nedostupné ve vyšším programovacím jazyce
- Specifické subrutiny (SIMD, SSE, rotace, hledání vzorků...)
- Zpracování signálů
- Kodeky
- Virtuální stroje generující strojový kód
- Reverse engineering :-)
- Samomodifikující se kód
- DSP
- Fingerprints (A86)
- Většinou velmi SPECIFICKÉ pro určitou oblast
- Naprostá většina aplikací není psána pouze v assembleru
- Coreboot: většinou C, jen zhruba 1% asm
- Důvod: výhody vyšších programovacích jazyků + snadnější audit kódu
- as (GNU Assembler, GAS)
- NASM (Netwide Assembler)
- Yasm
- FASM (flat assembler)
- Součást klasického toolchainu
- cpp → gcc → as → ld → spustitelný_soubor
- Původně jen AT&T syntaxe
- Dnes i „Intel“ syntaxe (na x86/x86-64)
- Různý způsob zápisu podle platformy!
- Jména registrů
- Konstanty
- Adresování
- Komentáře
- i386, syntaxe AT&T
- i386, syntaxe Intel
- ARM (32bit)
- AArch64