Velmi stručný návod k programování
v asembleru pro I8086

(Turbo Assembler 3.0, Turbo Linker 5.1, Turbo Debugger 3.0)

 


1. Překladač TASM 3.0

Překladač překládá moduly s implicitní příponou .ASM. Vytváří objektový soubor .OBJ a případně soubor s protokolem o překladu .LST a soubor křížových referencí .XRF.

1.1 Spuštění překladače:

TASM [parametry] sources ,objects ,listings ,xrefs

kde sources, jsou názvy zdrojových souborů a objects, listings a xrefs jsou názvy příslušných dalších generovaných souborů. Jsou-li názvy objektových, listingových a křížových souborů vynechány, odvodí překladač jejich jména ze zdrojového souboru. (Ve veřejných laboratořích je překladač Turbo Assembler v adresáři j:\zcu.cz\novell\pub\bc31\bin.)

Při překladu více souborů najednou lze použít příkaz

TASM source1 + source2 + ... + sourcen

případně

TASM *

pro překlad všech souborů v pracovním adresáři.

Některé parametry pro překlad:

/c výpis křížových referencí
/l nebo /la generování normálního nebo rozšířeného listingového souboru
/z zobrazení řádky s chybou na displeji
/zi vložení ladicích informací do objektového souboru (nutné pro debugger).

Pro jednoduché pokusy může být tedy překladač spouštěn příkazem

TASM /l/zi source

1.2. Některé direktivy a klíčová slova překladače

Turbo Assembler má dva základní režimy, tzv. MASM Mode a Ideal Mode. Jednotlivé direktivy resp. klíčová slova se v obou režimech liší. Dále předpokládáme použití MASM Mode. Použití direktiv viz též přiložené příklady.

Nejdůležitější direktivy:

SEGMENT definice začátku segmentu
ENDS definice konce segmentu
ASSUME indikace obsahu segmentového registru (pro potřebu překladače)
DB,DW,DD definice paměťového místa s rozsahem byte, word, double word
LABEL definice návěští
PROC definice procedury
ENDP konec procedury
.RADIX přepnutí základu číselné soustavy. Implicitně je předpokládána desítková soustava (!).
.386 překlad instrukcí pro I80386
END konec programu

Některá další klíčová slova:

FAR návěští nebo procedura typu FAR resp. použití složené adresy segment:offset
NEAR návěští nebo procedura typu NEAR resp. použití blízké adresy
STACK atribut segmentu pro zásobníkový segment
PTR určení typu proměnné (v operandové části instrukce)
OFFSET offsetová část adresy
SEG segmentová část adresy

2. Linker TLINK 5.1

Linker spojuje relativní moduly v souborech .OBJ a vytváří spustitelný soubor .EXE, případně .COM.

2.1. Spuštění linkeru

Příkazová řádka pro spuštění linkeru má v obecné podobě tvar:

tlink objectfiles,exefile, mapfile, libfiles, deffile

kde objectfiles jsou názvy sestavovaných objektových souborů (implicitní přípona .OBJ), exefile je název spustitelného souboru (.EXE), mapfile, libfile a deffiles jsou názvy mapového, knihovních a definičního souboru.

Při sestavování více objektových souborů jsou jejich jména oddělena mezerou nebo znakem + . Před jménem souboru mohou být uvedeny parametry pro sestavení.

Některé důležité parametry:

 /v  generuje ladicí informace (pro použití s Turbo Debuggerem)
 /l rozšíření mapového souboru o čísla řádek
 /m  rozšíření mapového souboru o PUBLIC
 /s rozšíření mapového souboru o detailní mapu segmentů
 /c PUBLIC a ETERNAL jsou case sensitive
 /3 povoluje zpracování 32bitových modulů

V jednoduchém případě při sestavování dvou modulů MOD1.OBJ a MOD2.OBJ může mít příkazová řádka tvar:

tlink /v MOD1 MOD2 .


3. Turbo Debugger

Turbo Debugger umožňuje ladění programů s využitím symbolických adres a zdrojového textu programu. Pro tyto účelu musí být při překladu sestavování programu pomocí příslušných parametrů vloženy do spustitelného souboru ladicí informace.

Po spuštění Turbo Debuggeru lze pomocí příkazu File – Open otevřít spustitelný soubor (.EXE). Příkazem View – CPU lze otevřít okno se zobrazenými registry procesoru a s obsahem paměti v okolí adresy CS:IP. Okno se zdrojovým textem lze otevřít příkazem View – Module.

Postup při ladění

Pro ladění programů je k dispozici několik základních příkazů, přístupných v menu Run:

Run Spuštění programu od adresy dané okamžitými dodnotami v CS a IP.
Go to cursor Spuštění programu od adresy dané okamžitými dodnotami v CS a IP, zastavení na adrese která odpovídá řádce, na které je právě umístěn kurzor.
Trace into Vykonání jedné instrukce. Je-li tato instrukce CALL, pokračuje se dále krokováním ve volaném podprogramu.
Step over Vykonání jedné instrukce. Volané podprogramy se vykonají celé bez krokování.
Until return Rychlé provedení instrukcí od okamžitého stavu CS:IP až za instrukce RET (návrat z podprogramu). Vhodné pro rychlé vykonání zbytku laděného podprogramu.
Animate Automatické pomalé krokování v programu.
Program reset Nastavení programu do počátečního stavu (jako po zavedení do paměti).

 

Dále lze použít obvyklé ladicí techniky — vkládání breakpointů, ruční nastavování hodnot do registrů, kontrola a případně změna obsahu proměnných v paměti.

Breakpointy lze použít jak kódové (vykonávání programu se zastaví na určené adrese) tak datové (vykonávání programu se zastaví při manipulaci, tj. zápisu nebo čtení s danou adresou). Příkazy pro ovládání breakpointů jsou v menu Breakpoints:

Toggle Zapnutí a vypnutí daného breakpointu.
At... Nastavení kódového breakpointu.
Changed memory global Nastavení datového breakpointu.

Hardwarová podpora breakpointů je možná jen při použití příslušných driverů.

V menu Data jsou příkazy pro zobrazení obsahu dané proměnné resp. obsahu paměti na dané adrese, pro trvalé zobrazování obsahu zvolených adres atd.

Inspect Zobrazení obsahu zvolené proměnné resp. adresy.
Add watch Trvalé zobrazování obsahu zvolených proměnných resp. adres.

4. Volání služeb MS DOS

Stručně si zde uvedeme jen několik služeb pro vstup a výstup textu a pro ukončení výpočtu.

4.1. Základní pravidla pro volání systémových služeb

Systémové služby se volají programovým přerušením INT 21H. Číslo služby musí být předtím uloženo do registru AH, případné parametry do dalších registrů v závislosti na konkrétní službě. V případě zde popsaných, tzv. tradičních voláních služeb systému je vznik chyby indikován nastavením registru AL na hodnotu FFH. V případě tzv. rozšířených volání je chyba indikována nastavením příznaku CF. V registru AL resp. AX je potom vrácen kód chyby.

4.2. Některé významné služby MS DOS

Vstup znaku z klávesnice

Vstupní parametry: AH 01H
Výstupní parametry: AL ASCII kód přečteného znaku

Služba 01 čte jeden znak ze standardního vstupního zařízení (klávesnice). Pokud není znak k dispozici, čeká dokud se znak na vstupu neobjeví. Kód znaku je vrácen v AL a je automaticky echován na standardním výstupním zařízení. Při stisku speciální klávesy (Ctrl, Alt, ...) je v AL hodnota 00H. Při opakovaném volání služby 01 je v tomto případě vrácen rozšířený kód ASCII.

Vstup řádku z klávesnice

Vstupní parametry: AH 0AH
  DS bázová adresa vyrovnávací paměti
  DX relativní adresa vyrovnávací paměti
    [DS:DX] byte obsahující délku vyrovnávací paměti –2
Výstupní parametry:  [DS:DX+1] počet přečtených znaků (bez znaku Enter)
  [DS:DX+2],  ...  ASCII kódy přečtených znaků

Služba 0A čte znaky ze standardního vstupního zařízení až do ukončení klávesou Enter. Znaky se ukládají do programem určené vyrovnávací paměti. Její první byte musí obsahovat délku paměti zmenšenou o 2, do druhého byte uloží služba počet skutečně přečtených znaků.

Vyprázdnění vyrovnávací paměti klávesnice a vstup znaku

Vstupní parametry: AH  0CH
  AL číslo požadované vstupní služby (01H)
Výstupní parametry:    podle služby požadované v AL

Služba 0CH nejprve vyprázdní vyrovnávací paměť standardního vstupního zařízení. Potom provede volání vstupní služby, jejíž číslo je specifikováno v AL. Lze požadovat služby číslo 01H, 06H, 07H, 08H, 0AH. Případné nastavení obsahu dalších registrů závisí na požadavcích volané vstupní služby, stejně jako poskytované výstupní hodnoty.

Službou 0C lze zajistit, aby program čekal na stisknutí klávesy. V případě přímého použití ostatních vstupních služeb může být programu předán znak, který již byl ve vyrovnávací paměti uložen před vlastním vyvoláním této služby.

Výstup znaku na obrazovku

Vstupní parametry: AH 02H
  DL ASCII kód znaku
Výstupní parametry:   – žádné

Služba 02 zapíše jeden znak na standardní výstupní zařízení (displej). Lze použít i řídicí znaky, které vykonávají specifikovanou funkci (CR, LF, Backspace, ...).

Výstup řetězce na obrazovku

Vstupní parametry: AH 09H
  DS bázová adresa textu
  DX  relativní adresa řetězce znaků
Výstupní parametry:   - nejsou

Služba zapisuje znaky na standardní výstupní zařízení. Začátek řetězce musí být na adrese DS:DX. Konec řetězce musí být označen znakem $ .

Ukončení práce programu

Vstupní parametry: AH  4CH
  AL návratový kód
Výstupní parametry:   - nejsou

Služba 4C uzavře otevřené soubory, uvolní paměť přidělenou programu a předá řízení operačnímu systému. Návratový kód lze použít předání informace rodičovskému procesu.


5. Komentáře k přiloženým programům

5.1. Komentář k programu P0 - struktura jednoduchého programu.

5.2. Komentář k programu P1 - vstup a sečtení čísel, zobrazení výsledku.


6. Další zdroje dat

Na www stránkách firmy Intel jsou k nalezení podrobné manuály k procesorům s architekturou IA-32, včetně instrukčního souboru. Vše je v několika poměrně velkých PDF souborech. Vzhledem k podrobnosti výrazně překračují rozsah předmětu SOJ a jsou vhodné spíše pro vážnější zájemce o dané procesory.


Viz též stručný návod pro překlad a sestavení programu v jazyku C a procedur v assembleru.

K.D. 2000