nikpez di nikpez
Ominide 738 punti

Assembler HC08 e Array

1 ;2.asm
2;
3 ;Inizializzate un vettore ARRAY: 60,4,5,70,7,45,60,3,3,5,9,7,12,45,60,3 e le variabili
4 ; F: 0 e L:0. Con un ciclo, memorizzate in F l'indice del primo numero 60 trovato ed
5 ; in L l'indirizzo dell'ultimo numero 60 trovato.
6 ;
EE00 7 STARTPGM = 0xee00 ;L'inizio dell'ipotetica ROM (program counter)
FFFE 8 RESETVECT = 0xfffe ;La posizione del vettore di reset
0080 9 STARTDATI = 0x80 ; Inizio area dati
10 ;
11 .area DATI (ABS)
0080 12 .org STARTDATI
0080 13 VETT:

0080 3C 14 .byte 60 ; locazione 80h
0081 04 15 .byte 4
0082 05 16 .byte 5
0083 46 17 .byte 70
0084 07 18 .byte 7
0085 2D 19 .byte 45
0086 3C 20 .byte 60
0087 03 21 .byte 3
0088 03 22 .byte 3
0089 05 23 .byte 5
008A 09 24 .byte 9
008B 07 25 .byte 7
008C 0C 26 .byte 12
008D 2D 27 .byte 45
008E 3C 28 .byte 60
008F 03 29 .byte 3 ; locazione 8Fh
0090 00 30 F:.byte 0
0091 00 31 L:.byte 0
32 ;
33 .area PROGRAMMA (ABS)
EE00 34 .org STARTPGM
35
EE00 36 MAIN:
EE00 AE 80 37 LDX #VETT ;metto in X 0x80
EE02 38 LOOP:
EE02 51 90 18 39 CBEQX #0x90, FINE ; confronto X con il primo indirizzo oltre la sequenza da scrivere
40 ; se uguali salta a FINE
EE05 F6 41 LDA ,X ; metto in A l'elemento corrente puntato da X
EE06 41 3C 0E 42 CBEQA #60, UGUALE ; confronto A con 60
43 ; se uguali salta a UGUALE
EE09 C6 00 91 44 LDA L ; carica L in A
EE0C 41 00 03 45 CBEQA #0, ZERO ; confronto A con 0
46 ; se uguali (in L non c'era già un indirizzo salvato) salta a ZERO
EE0F 5C 47 INC X
EE10 20 F0 48 BRA LOOP ; altrimenti SALTA A LOOP senza incrementare l'indice
EE12 49 ZERO:
EE12 3C 90 50 INC F ; incrementa l'indice perché non è ancora stato trovato un 60
EE14 5C 51 INC X
EE15 20 EB 52 BRA LOOP ; torna a LOOP
EE17 53 UGUALE:
EE17 CF 00 91 54 STX L ; salva in F l'indirizzo del 60 trovato
EE1A 5C 55 INC X
EE1B 20 E5 56 BRA LOOP ; torna a LOOP
57 ;
EE1D 20 FE 58 FINE: BRA FINE ; loop infinito sull'ultima istruzione
59 ;
60 .area RESET (ABS)
FFFE 61 .org RESETVECT
FFFE EE 00 62 .word MAIN
63
ASxxxx Assembler V01.70 + NoICE + SDCC mods + Flat24 Feb-1999 (Motorola 68HC08), page 1.

Symbol Table

2 F 0090 R
4 FINE EE1D R
2 L 0091 R
4 LOOP EE02 R
4 MAIN EE00 R
RESETVECT = FFFE

STARTDATI = 0080
STARTPGM = EE00
4 UGUALE EE17 R
2 VETT 0080 R
4 ZERO EE12 R

ASxxxx Assembler V01.70 + NoICE + SDCC mods + Flat24 Feb-1999 (Motorola 68HC08), page 2.

Area Table

0 _CODE size 0 flags 0
1 DATI size 0 flags 8
2 DATI0 size 12 flags 8
3 PROGRAMMA size 0 flags 8
4 PROGRAMMA1 size 1F flags 8
5 RESET size 0 flags 8
6 RESET2 size 2 flags 8

Registrati via email