Concetti Chiave
- Il programma inizia all'indirizzo EE00, con il vettore di reset posizionato a FFFE.
- Inizializza le prime 16 celle di memoria dalla locazione 80h con due sequenze di numeri incrementali.
- La prima sequenza parte da 10 e incrementa di 10, mentre la seconda parte da 15 e incrementa di 15.
- Utilizza istruzioni di loop per riempire le celle di memoria con le due sequenze diverse.
- Include un loop infinito alla fine del programma per mantenere l'esecuzione attiva.
1 ;1.asm
3 ;Inizializzi le prime 16 celle di memoria, a partire dalla 80h
4 ;con la seguente sequenza: 10, 15, 20, 30, 30, 45 ... ecc.
5
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 00 14 .byte 0x00 ; locazione 80h
0081 00 15 .byte 0x00
0082 00 16 .byte 0x00
0083 00 17 .byte 0x00
0084 00 18 .byte 0x00
0085 00 19 .byte 0x00
0086 00 20 .byte 0x00
0087 00 21 .byte 0x00
0088 00 22 .byte 0x00
0089 00 23 .byte 0x00
008A 00 24 .byte 0x00
008B 00 25 .byte 0x00
008C 00 26 .byte 0x00
008D 00 27 .byte 0x00
008E 00 28 .byte 0x00
008F 00 29 .byte 0x00 ; locazione 8Fh
30 ;
31 .area PROGRAMMA (ABS)
EE00 32 .org STARTPGM
33
EE00 34 MAIN:
EE00 AE 80 35 LDX #VETT ;metto in X 0x80
EE02 A6 0A 36 LDA #10 ; metto in A il primo numero della prima sequenza
EE04 37 LOOP:
EE04 F7 38 STA ,X ; metto A nel byte indirizzato da X
EE05 AB 0A 39 ADD #10 ; aggiungo 10 all'accumulatore
EE07 5C 40 INCX
EE08 5C 41 INCX ; incrementa X 2 volte per puntare al byte successivo della prima sequenza
EE09 51 90 02 42 CBEQX #0x90, ALTRA ; confronto X con il primo indirizzo oltre la sequenza da scrivere
43 ; se uguali salta a ALTRA
EE0C 20 F6 44 BRA LOOP ;altrimenti torna a LOOP
45 ;
EE0E 46 ALTRA:
EE0E AE 80 47 LDX #VETT ; metto in X 0x80
EE10 5C 48 INCX ; mi posiziono sul primo indirizzo della seconda sequenza
EE11 A6 0F 49 LDA #15 ; metto in A il primo numero della seconda sequenza
EE13 50 LOOP2:
EE13 F7 51 STA ,X ; metto A nel byte indirizzato da X
EE14 AB 0F 52 ADD #15 ; aggiungo 15 all'accumulatore
EE16 5C 53 INCX
EE17 5C 54 INCX ; incrementa X 2 volte per puntare al byte successivo della seconda sequenza
EE18 51 91 02 55 CBEQX #0x91, FINE ; confronto X con il primo indirizzo oltre la sequenza da scrivere
56 ; se uguali salta a FINE
EE1B 20 F6 57 BRA LOOP2 ;altrimenti torna a LOOP2
58 ;
EE1D 20 FE 59 FINE: BRA FINE ; loop infinito sull'ultima istruzione
60 ;
61 .area RESET (ABS)
FFFE 62 .org RESETVECT
FFFE EE 00 63 .word MAIN
64
ASxxxx Assembler V01.70 + NoICE + SDCC mods + Flat24 Feb-1999 (Motorola 68HC08), page 1.
Symbol Table
4 ALTRA EE0E R
4 FINE EE1D R
4 LOOP EE04 R
4 LOOP2 EE13 R
4 MAIN EE00 R
RESETVECT = FFFE
STARTDATI = 0080
STARTPGM = EE00
2 VETT 0080 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 10 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
Domande da interrogazione
- Qual è lo scopo principale del programma descritto nel testo?
- Quali sono le due sequenze numeriche utilizzate per l'inizializzazione della memoria?
- Come viene gestito il flusso del programma per scrivere le sequenze in memoria?
- Qual è il ruolo del vettore di reset nel programma?
- Come viene gestito il termine del programma?
Il programma inizializza le prime 16 celle di memoria a partire dall'indirizzo 80h con due sequenze numeriche distinte.
Le sequenze numeriche sono 10, 20, 30, ecc. per la prima e 15, 30, 45, ecc. per la seconda.
Il programma utilizza cicli di loop per scrivere le sequenze in memoria, incrementando l'indice X per passare alla cella successiva e confrontando l'indice con un valore limite per determinare quando passare alla sequenza successiva o terminare.
Il vettore di reset, posizionato all'indirizzo FFFE, punta all'inizio del programma principale (MAIN) per garantire che il programma inizi correttamente dopo un reset.
Il programma termina con un loop infinito sull'istruzione FINE, che mantiene il processore in uno stato di attesa senza eseguire ulteriori operazioni.