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
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ů.