TASM název_souboru /Z TLINK název_souboru_bez_přípony /T /XTím se zajistí generování souborů COM a užitečná věc - výpis celé řádky, na které nastala chyba při překladu.
A SEGMENT ; Název segmentu. ASSUME CS:A,DS:A ; Nastavení seg. registrů na ten segment ORG 100H ; Počáteční offset. ; Všechny tři řádky jsou čistě pro překladač. START: Zde bude již vlastní program A ENDS ; Konec segmentu END START ; Konec startu
Adresa v paměťi se skládá ze dvou částí. Offset a segment. Každých 16 bytů začíná další segment. V něm můžeš pomocí offsetu určit přesné místo, offset 0 ukazuje přesně na začátek segmentu. Pokud bych tedy chtěl absolutní adresu v paměti, je to SEGMENT*16+OFFSET. Adresa se většinou zapisuje ve formátu SEGMENT:OFFSET.
Programy COM se nahrávají pouze do jednoho segmentu, na offset 100H(256). Z toho plyne, že maximální velikost COM programu je 65536-256 bytů (65536 je velikost jednoho segmentu - 16bitů). Na offsetech 0-100H je nahrána tabulka PSP(prefix programového segmentu), ve které jsou různé zajímavé informace týkající se tvého programu.
PROMENNA DB 10 PROM2 DW 5 POLE DB 100 DUP(0) ; To je definice pole. Velikost je 100. RETEZEC DB 'Nazdarek, tohle je retezec',65,66,67,' porad pokracuje'Jak vydíš, nejdřív napíšeš název proměnné, pak typ a nakonec hodnotu, která je tam od začátku. Pole se definuje obdobně-název, typ položek, počet položek, hodnota položek. Řetězce se definují téměř jako v Pascalu, čísla uprostřed jsou ilustrační a znamenají písmena ABC(Ascii hodnoty).
Teď přijde jedna velmi důležitá věc. V programech COM jsou proměnné uložené přímo v kódu programu, přesně tam, kde si je nadefinuješ. V Pascalu (a nejen v něm) jsou proměnné uložené ve speciálně vyhrazeném místě v paměti- v Data segmentu(DS). V COM je DS=CS, tedy místo pro proměnné je přímo v kódu a proto si je nemůžeš napsat kam chceš, musíš dát pozor na možnost, že se při běhu programu procesor do promenných "zatoulá" a bude je považovat za instrukce. Pak by se děly nepředvídatelné věci a je velká šance, že by to spadlo.
CYKLUS: MOV AX,5 ; Toto nefunguje v Pascalu. @CYKLUS: MOV AX,5 ; Toto funguje v Pascalu i assembleru.
Slovo | Vysvětlení |
---|---|
Bit | Jednotka informace. 1 nebo 0. |
Byte | 8 bitů. Nabývá hodnot 0..255 (=28-1). |
Word(slovo) | 16 bitů. Nabývá hodnot 0..65535 (=216-1). |
DoubleWord | 32 bitů. Nabývá hodnot 0..4294967295 (=232-1). |
Instrukce | Příkaz pro procesor. |
Úvodní stránka | Registry procesoru | První program |
Stránku připravuje Lukáš Valenta,
1. v celostátním kole soutěže v programování, kategorie mládež.