installfest-2020-assembler

Presentations

installfest-2020-assembler

Materials for assembly language workshop

   _____                              ___.   .__                
  /  _  \   ______ ______ ____   _____\_ |__ |  |   ___________ 
 /  /_\  \ /  ___//  ___// __ \ /     \| __ \|  | _/ __ \_  __ \
/    |    \\___ \ \___ \\  ___/|  Y Y  \ \_\ \  |_\  ___/|  | \/
\____|__  /____  >____  >\___  >__|_|  /___  /____/\___  >__|   
        \/     \/     \/     \/      \/    \/          \/       

Úvod


Proč assembler?

  1. Větší efektivita využití CPU (čím novější generace, tím více relevantní)
  2. Rychlejší (a predikovatelné) přerušovací rutiny
  3. Efektivita při práci s pamětí (cache+RAM)
  4. Kompaktní kód
  5. Lepší pochopení práce s gdb a dalšími debuggery

Role assembleru

Několik úrovní abstrakce (vrstev nad HW)


Assemblery v minulosti

  1. První generace mainframů
    • vývojové diagramy v roli „vyššího jazyka“
    • assembler
    • strojový kód (zpočátku ruční překlad!)
  2. Mainframy a později minipočítače
    • přechod k vyšším programovacím jazykům
    • levnější vývoj, šance na přenositelnost
  3. Osmibitové herní konzole
    • assembler jediná rozumná volba
  4. Domácí mikropočítače
    • návrat „ke kořenům“
    • prakticky jediná volba pro profesionální aplikace
  5. Osobní mikropočítače
    • Motorola 68000
    • 8086/80286…
    • specifické použití assembleru (hry, dema, …)
  6. DSP
    • výpočetní subrutiny (FFT…)
    • přerušovací rutiny

Assemblery v současnosti

  1. Firmware
  2. Kód pracující přímo s HW (senzory, CPU+FPGA)
  3. DSP a MCU - rychlé přerušovací rutiny!
  4. Instrukce nedostupné ve vyšším programovacím jazyce
  5. Specifické subrutiny (SIMD, SSE, rotace, hledání vzorků…)
  6. Zpracování signálů
  7. Kodeky
  8. Virtuální stroje generující strojový kód
  9. Reverse engineering :-)
  10. Samomodifikující se kód
  11. DSP
  12. Fingerprints (A86)

Použití assembleru v současnosti

  1. Většinou velmi SPECIFICKÉ pro určitou oblast
  2. 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

Assembler a Linux


GNU Assembler


Syscally a GNU Assembler


Ukončení procesu funkcí “exit”


„Hello world“ v assembleru