Assembler

Jayzk Assembler ovládá počítač na nějnižší úrovni - skrze registry, porty, paměť, přerušení. Proto pro každý procesor (Intel 86, SPARC, PowerPC, ...) existuje jiná sada příkazů a programy pro různé druhy procesorů jsou vzájemně nepřenositelné. Abyste na obrazovku vypsali nějaký text, musíte si nejdříve připravit grafickou kartu a pak ukládat jednotlivé znaky do příslušného registru a volat přerušení. Naprogramovat i velice jednoduchou věc v Assembleru je o mnoho těžší, než napsat řádku v C, Delphi, Javě, něřkuli v Pythonu nebo dalších vyšších jazycích. Odměnou vám však může být program, který poběží rychleji než v jiných jazycích.

K čemu je a není Assembler vhodný

Assembler se však nehodí pro rozsáhlejší projekty, kdy se člověk začne ztrácet v tom, v jakém registru má zrovna něco uloženého a na jaké místo v paměti se má odkazovat. To lépe zvládnou moderní překladače pro vyšší jazyky a vy se můžete starat spíše o logiku věci, než o to, zda přesunutím této instrukce před jinou nezrychlím provádění programu o pár taktů. Assembler se proto víceméně hodí pro psaní kratších programů nebo ovladačů. Od dob 386 se navíc přidal problém chráněného módu.

Problémy s Assemblerem

Před procesory řady 386 a vyššími pracovaly procesory v takzvaném reálném módu. Program i programátor měli naprosto bezvýhradní přístup k hardware a mohli si s ním dělat téměř co chtěli. Pak ale nastoupil režim chráněný. Mezi program a počítač se postavilo jádro operačního systému a některé věci již lze provádět jen voláním jádra, které dbá na to, aby se s počítačem a perifériemi nic nestalo, stará se o multitasking (současný běh více programů) a ochranu paměti (aby jeden program nepřepisoval data jinému programu) a společně s ovladači pak standardizovalo i přístup k hardware. Do té doby museli být pro stejné periferie různých výrobců i různé programy. Dnes je ovládání standardizované, ale platíme za to opět rychlostí programů.

Plus pro Assembler

Pro assembler v poslední době taky hovoří fakt, že překadače neumí optimalizovat výstup pro novější instrukce nových procesorů a tak jsou několik let za vývojem harware. Pokud se vy naučíte tyto instrukce využívat, můžete je ve svých programech použít.

K čemu se Assembler hodí

Znalost Assembleru je však nejvíce výhodná pro to, že zjistíte, jak počítač vlastně funguje uvnitř, jak se zpracovávájí jedničky a nuly, které procházejí procesorem, co s čím souvisí a pomůže vám to psát lepší programy ve vyšších programovacích jazycích.

Můžete se podívat na výukový assembler DLX.

Rozcestníček po vzdělání:
  • Art of Assembly Language - rozsáhlá učebnice assembleru pro DOS, Windows (chráněný mód), Linux (taktéž chráněný mód) a další čtení
  • PC Assembly Language - učebnice Assembleru formou tutoriálu
  • Nasm - překladač Assembleru
  • TechHelp - starý DOSový program, nicméně obsahuje velice užitečné znalosti o hardwaru, přerušení, portech a podobně
  • The IA-32 Intel(R) Architecture Software Developer's Manual - popis/manuál procesorů Pentium 4. Mezi další dokumentací naleznete spoustu zajímavých textů.
  • Ports - vyčerpávající popis vstupně výstupního prostoru XT, AT a PS/2
  • 256bytes - s 256 byty přeloženého kódu se dají dělat divy. Můžete se o tom přesvědčit v této sbírce.

Malý tahák

Připravuje se... (a možná se nepřipraví)

Tabulka ASCII
ASCII kódy
0
00h
1
01h
2
02h
3
03h
4
04h
5
05h
6
06h
7
07h
8
08h
9
09h
10
01h
11
0bh
12
0ch
13
0dh
14
0eh
15
0fh
0=00h NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI
16=10h DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US
32=20h ! " # $ % & ' ( ) * + , - . /
48=30h 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
64=40h @ A B C D E F G H I J K L M N O
80=50h P Q R S T U V W X Y Z [ \ ] ^ _
96=60h ` a b c d e f g h i j k l m n o
112=70h p q r s t u v w x y z { | } ~ DEL

Význam řídících znaků:

  • ACK = acknowledge
  • BEL = bell
  • BS = backspace
  • CAN = cancel
  • CR = carriage return
  • DCx = device control x
  • DEL = delete
  • DLE = data line escape
  • EM = end of medium
  • ENQ = enquiry
  • EOT = end of transmision
  • ESC = escape
  • ETB = end of transmision block
  • ETX = end of text
  • FF = form feed
  • FS = file separator
  • GS = group separator
  • HT = horizontal tab
  • LF = line feed
  • NAK = negative acknowledge
  • NUL = null
  • RS = record separator
  • SI = shift in
  • SO = shift out
  • SOH = start of heading
  • STX = start of text
  • SUB = substitute
  • SYN = synchronous idle
  • US = unit separator
  • VT = vertical tab

Pro vytvoření COM spustitelného souboru pomocí Nasm napište: nasm soubor.asm -o vystup.com

Ke stažení

36UPS: Semafor
Úloha pro 36UPS (úvod do počítačových systémů). Za úkol bylo naprogramovat křižovatku (program ovládající přípravek připojený k počítači), aby zohledňoval počet aut, přijíždějící v různých směrech (jedno auto = jedno stisknutí tlačítka v daném směru). Přiložen je i emulátor přípravku na počítači, který ale bohuž moc nefunguje :(
36SOJ: Úloha 1.
1. úloha pro 36SOJ (Strojově orientované jazyky). Program má za úkol naléz v poli prvků ten nejmenší, největší a jejich index v poli.
36SOJ: Úloha 2.
2. úloha: program opisuje zadávané znaky, a když narazí na dekadické číslo, opíše do závorek za něj jeho hexadecimální hodnotu. Ukončení: ESC
36SOJ: Úloha 3.
Program vypíše tabulku kódů kláves a je-li nějáka stlačena, zvýrazní její kód. Po uvolnění zůstává kód zvýrazněn, ale jinou barvou. Ukončuje se klávesou ESC.
36SOJ: Úloha 4.
V grafickém režimu 320x200 pomocí Bressenhamova algoritmu vyplní obrazovku čárami dle naprogramované palety barev.
36SOJ: Úloha 5.
Softwarová lupa nad obrázkem .tga, zadaným jako parametr při spouštění programu. Ovládá se myší. Na to jak funguje rutina MapBuild se mě neptejte, tuhle část jsme dostali už naprogramovanou ;-) (detaily)
Tetris
Semestrální práce pro 36SOJ. Hru snad nemusím představovat. Velice jednoduchá grafika se vešla jen do 869 bytů.