Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
Assembler
Význam assembleru dnes
asm
29. listopadu 2001, 00.00 | Programování aplikací na osobních počítačích v assembleru se již zcela jistě přehouplo přes vrchol své slávy a užitečnosti. Přesto má i dnes pochopení tohoto jazyka své opodstatnění.
Programování aplikací na osobních počítačích v assembleru se již zcela jistě přehouplo přes vrchol své slávy a užitečnosti. Přesto má i dnes pochopení tohoto jazyka své opodstatnění. Programování v RAD aplikacích programátorovi ušetří rutinní práci generováním kódu, který se v různých obměnách objevuje v každém programu, ale zároveň před ním umně skryje (ale zároveň vyřeší) množství problémů, které je v assembleru nutné pracně ošetřovat. Zájem o asm odkrývá spoustu technických detailů souvisejících s architekturou procesoru, komunikací s hardwarem, strukturou dat a posloupností kroků, které musí počítač provést, než např. vytiskne jednoduché "Ahoj". Pochopení fundamentů na kterých jsou vyšší jazyky vybudovány je dnes určitě největší přínos tohoto jazyka. Podobně jasko bývá pascal považován za dobrý nástroj k pochopení algoritmizace a základů programování, tak je assembler ideální nástroj k bližšímu prozkoumání celé řady pojmů, vztahů a principů na kterých jsou vyšší jazyky vybudovány. Přesto existují oblasti (a budou existovat určitě ještě dlouho), ve kterých je znalost assembleru nepostradatelná:-debugging, dissasembling a cracking a ochrana proti němu
-tvorba virů a antivirů
-optimalizace algoritmů
-orientace v programu, ktery napsal někdo znalý assembleru
-programování překladačů
-programování OS
-programování ovladačů
-poznání pozadí programování ve vyšším jazyce
-navrhy nových čipů, procesorů,...
1. Proces tvorby .COM souboru
Proces vytvoření spustitelného souboru od zdrojového kódu je vysvětlen na obrázku:
Editor: Ke tvorbě zdrojového kódu lze použít jakýkoliv textový editor, který generuje čistý text, např. EDIT.COM nebo NotePad. Kromě toho bylo vytvořeno několik povětšinou freeware nebo shareware editorů, které najdete na Internetu, např. Aside nebo AsmEDIT. Zdrovové soubory vytvořené takovým editorem mají příponu .ASM.
Compiler: Compiler nebo česky překladač vytváří soubory .OBJ, které obsahují tzv. relativní kód počítače, ve kterém ještě nejsou známy všechny adresy, apod. Dalším možným výstupem je soubor .LST, ve kterém najdete zdrojový kód s očíslovanými řádky, příslušnými adresami, zakódovanými instrukcemi a co je nejdůležitějsí soubor obsahuje označené řádky spolu s chybami, které obsahují. Překladač od firmy Borland se nazývá Tasm.
Linker: Relativní adresy nahradí absolutními a vytvoří spustitelný soubor .COM. Soubor TLink.
Debugger: Ladící program, který umožňuje krokovat celý program, plus nabízí spoustu dalších důležitých informací. Soubor Td.
El. manuál: Elektronický manuál je nezbytnou pomůckou při tvorbě programů. Obsahuje informace, bez kterých se při programování v assembleru neobejdete. Na Internetu je ke stažení Sysman nebo ABShelp, apod.
1.1 Dávkový soubor - kompilace
Pro zjednodušení práce je výhodné vytvořit si následující dávkový soubor asm.bat:
C:\BP\BIN\TASM %1.asm /Z /la
C:\BP\BIN\TLINK %1.obj /Tdc /x
Překlad zdrojového souboru z jazyka
symbolických adres do strojového kódu provedeme příkazem asm název_souboru, kde název souboru uvedeme bez přípony.2.0 Direktivy překladače
Direktivy jsou součástí zdrojového kódu, nejsou součástí instrukčního repertoáru procesoru ale řídí činnost překladače. Je jich samozřejmě veliké množství, uveďme slespoň ty nejnutnější:
ASSUME - informace pro překladač o přiřazení bázových adres segmentů jednotlivým segmentovým registrům
SEGMENT, ENDS - začátek a konec segmentu
END - direktiva ukončující překlad
ORG - z anglického origin=vznik, počátek, označuje hodnotu čítače instrukcí (IP) pro následující instrukci.
EQU - obdoba const v pascalu, přiřadí symbolu číselné hodnoty nebo řetězce (př. PI EQU 3.1415)
2.1 Struktura .COM souboru
Soubor .COM se skládá z několika základních částí:
|
2.2 Popis .COM souboru
Velikost souboru .COM je omezena na jeden segment, ve kterém jsou uložene data, kód i zásobník. Přesná velikost souboru je tedy 216 -256(PSP) = 65280 bajtů. Registr SP se nastaví na hodnotu FFFEh (konec segmentu PSP). Ukládáním dat na zásobník může dojít k jeho přetečení do oblasti kódu nebo dat a způsobit tak pád systému.
3. Formát instrukce 8086
Pokud si v nějakém editoru otevřete přeložený soubor uvidíte v něm změť ASCII znaků. Jedná se o znakovou verzi strojového formátu instrukce. Tento formát se může skládat až ze šesti slabik. Nejdůležitější částí je operační kód, který je číselným převodem textového zápisu instrukce. Bity d, w mají různý význam, ale většinou určují velikosti operandů, informace vztahující se k 2.slabice, atd.. Část mód určuje typy operandů a část reg typ registru.Pole r/m určuje adresu operandu v paměti. Existence třetí až šesté slabiky záleží na typu instrukce, jejich obsahy zadává programátor.
3.1 Příklad strojového kódu
Mějme jednoduchý příklad, který vytiskne tři znaky A na pozici kurzoru na obrazovce:
|
Abychom pochopili co znamenají podívejme se na následující tabulku:
Edit.com převádí jednotlivá čísla podle ASCII tabulky na příslušné znaky. Zpětným převedením získáme čísla - strojový zápis instrukce, ze kterého můžeme určit symbolický zápis instrukce (funkce debuggeru) s jejími operandy. Součtem všech položek o velikosti jednoho bajtu získáme velikost souboru. Soubor samozřejmě můžeme editovat přímo změnou některého ASCII znaku na jiný. Příkladem takové změny je záměna znaku A na B a znaku ETX na $. Program potom místo tří znaků A vytiskne 35 znaků B. Důležité je ze souboru odstranit znak CR (carriage return), který tam editory za znak LF (line feed) většinou přidají.Všimněte si, že čísla velikosti word 0003h a 4c00h jsou v souboru uložena opačně, tzn., významnější bit (nižší) je uložen jako první. Nejprve uloží 03h a teprve potom 00h. To, že se explicitně zadané hodnoty ukládají stejně jako zapsané instrukce nás vede k možnosti zapsat stejný příklad následujícím způsobem:
|
4. Proměnné
Proměnná je pojmenované místo v paměti, ve kterém je uložena nějaká hodnota. Assembler umožňuje deklarovat několik typů proměnných:
DB (define byte) -proměnná o velikosti 1 bajtu (slabiky)
DW (define word) -proměnná o velikosti 2 bajtů (2 slabiky=slovo)
DD (define double word)-proměnná o velikosti 4 bajtů
DF,DP (define far byte) -proměnná o velikosti 6 bajtů
DQ (define quadword) -proměnná o velikosti 8 bajtů
DT (define tenbyte) -proměnná o velikosti 10 bajtů
4.1 Použití proměnných
Deklarace proměnné o velikosti jednoho bajtu s počáteční hodnotou 0Fh:
PROM DB 0Fh
Deklarace proměnné o velikosti dvou bajtů s nedefinovanou počáteční hodnotou:
PROM DW ?
Deklarace pole o velikosti 100 bajtů s nedeklarovanými hodnotami:
POLE DB 100 dup(?)
Deklarace pole o velikosti 100 * 3 bajty s opakujícími se hodnotami 5, 5, 7 :
POLE DB 100 dup(5,5,7)
Deklarace pole o velikosti 10 * 9 bajů; s opakujícím se řetězcem 'assembler' :
POLE DB 10 dup('assembler')
Deklarace řetězce o velikosti 7 bajtů:
RETEZEC DB 'priklad'
Nakonec jedno upozornění, před číselnými hodnotami v šestnáctkové soustavě musí znakům A,B,C,D,E,F vždy předcházet nějaká číslice a za číslem musí následovat symbol h.
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007