|
|
KMIC |
Překlad a simulace programu v simulátoru Wookie171 |
|
Assembler, linker a simulátor naleznete v adresáři q:\jednocip\m68hc11\AS6811 na serveru DZIN nebo zde.
Překlad se provede dávkou:
a.bat *.asm
kde *.asm je zdrojový kód programu.
Správně provedený překlad vygeneruje soubor *.rel, který je nutno slinkovat dávkou:
l.bat *.rel
Dávka l.bat vyžaduje přítomnost souboru cvic.lnk (lokace segmentů DATA a CODE v paměti) ve stejném adresáři. Výstupem linkeru jsou soubory *.s19 a *.rst.
Soubor *.s19 je možné otevřít v simulátoru wookie171.exe. Při otevírání souboru v simulátoru postupujte podle těchto kroků:
- Po otevření souboru *.s19 v simulátoru ponechte první dialogové okno "SETHC11 Mode" beze změny a potvrďte ho tlačítkem OK.
- Ve druhém dialogovém okně "Choose LST file format" zvolte v rolovacím boxu "File Type" položku "AS6811/IASM11 [addr code]" a dialogové okno potvrďte tlačítkem OK.
- V okně "Code View" stiskněte tlačítko "Load LST file" a nahrajte soubor *.rst.
- V dialogovém okně "Choose LST file format" zvolte v rolovacím boxu "File Type" položku "AS6811/IASM11 [addr code]".
|
|
Assembler AS6811 |
$%, 0b, 0B ;Binarni cislo
$&, 0o, 0O, 0q, 0Q ;Oktalove cislo
$#, 0d, 0D ;Dekadicke cislo
$$, 0h, 0H, 0x, 0X ;Hexadecimalni cislo
Příklady:
$$12, 0h12, 0H12, 0x12, 0X12 ;hexadecimalni cislo 12
$&45, 0o45, 0O45, 0q45, 0Q45 ;oktalove cislo 45
$#123, 0d123, 0D123 ;dekadicke cislo 123
$%10101010, 0b10101010, 0B10101010 ;binarni cislo 10101010
.module retezec ;retezec bude pridan do vystupniho souboru prekladu jako identifikace modulu
Příklad:
.module MujProgram ;definuje nazev tohoto modulu jako "MujProgram"
JMENO_NAVESTI: ;definuje navest v programu (adresu) na niz je mozne se odkazovat pomoci jejiho jmena "JMENO_NAVESTI"
.area DATA (REL) ;segment pro data
.area CODE (REL) ;segment pro program
.byte exp ;definice jednoho bajtu (8 bitu)
.db exp ;totez
.byte exp1,exp2,expn ;definice jednobajtovych vyrazu jdoucich po sobe
.db exp1,exp2,expn ;totez
.word exp ;definice dvou bajtu (16 bitu)
.dw exp ;totez
.word exp1,exp2,expn ;definice dvoubajtovych vyrazu jdoucich po sobe
.dw exp1,exp2,expn ;totez
.blkb N ;vymezeni N bajtu v pameti
.ds N ;totez
.blkw N ;vymezeni N dvoubajtu (slov) v pameti
.ascii /retezec/ ;definice retezce
Příklady:
N1: .byte 10 ;definice bajtu s inicializaci na hodnotu 10 dekadicky
N1: .db 10 ;totez co predchozi
N2: .byte 0h10 ;definice bajtu s inicializaci na hodnotu 10 hexadecimalne
N3: .byte 0x10 ;totez co predchozi
N5: .byte 0b10101010 ;definice bajtu s inicializaci na hodnotu 10101010 binarne
N6: .byte 'a ;definice bajtu dle ascii hodnoty znaku 'a'
HLASKA: .byte 'a, 'h, 'o, 'j ;definice pole bajtu podle ascii hodnot po sobe jdoucich znaku "ahoj"
POLE1: .byte 1,2,3,4,5,6,7,100,-10,0 ;definice pole o velikosti 10 bajtu + inicializace
N7: .word 14523 ;definice dvou bajtu s inicializaci na hodnotu 14523 dekadicky
N8: .word 0b1000000010101010 ;definice dvou bajtu s inicializaci na hodnotu 1000000010101010 binarne
POLE2: .blbk 25 ;vymezi prostoru v pameti pro 25 bajtu
POLE3: .blkw 25 ;vymezi prostoru v pameti pro 50 bajtu (25 slov)
ZPRAVA: .ascii /HELLO WORLD/ ;vymezi v pameti blok obsahujici ascii retezec "HELLO WORLD"
| Definice symbolicke konstanty |
sym1 .equ expr ;je ekvivalentni sym1 = expr
Příklady:
DELKA .equ 10 ;odted se jakykoliv vyskyt navesti DELKA nahradi cislem 10
CISLO: .blkw 1
CISLO_H .equ CISLO ;navesti CISLO_H ukazuje na vyssi bajt 16-ti bitoveho slova CISLO
CISLO_L .equ CISLO + 1 ;navesti CISLO_L ukazuje na nizsi bajt 16-ti bitoveho slova CISLO
;nastavi VYSL podle CISLO tak, ze
; CISLO = 127 -> VYSL = 1
; CISLO < 127 -> VYSL = 3
; CISLO > 127 -> VYSL = 2
.module nastav
.area DATA (REL)
CISLO: .blkb 1
VYSL: .blkb 1
.area CODE (REL)
ldaa #0x02
staa VYSL
ldaa CISLO
cmpa #0x7F
bne VM
dec VYSL
jmp END
VM: bls MN
jmp END
MN: inc VYSL
END: jmp END
;Vyplni blok dat od adresy POLE1 cisly 1-32
;a nasledne ho zkopiruje do oblasti POLE2
.module pole1
.area DATA (REL)
DELKA .equ 32
POLE1: .blkb DELKA
POLE2: .blkb DELKA
.area CODE (REL)
ldx #POLE1
ldaa #1
STORE: staa 0,x
inx
inca
cmpa #DELKA+1
bne STORE
ldx #POLE1
ldy #POLE2
ldab #0
MOVE: ldaa 0,x
staa 0,y
inx
iny
incb
cmpb #DELKA
bne MOVE
END: jmp END
|
|
|