Concetti Chiave

  • Il programma inizializza le prime 16 celle di memoria a partire dall'indirizzo 80h con due sequenze numeriche distinte.
  • La prima sequenza inizia con il numero 10 e aumenta di 10, mentre la seconda parte da 15 e aumenta di 15.
  • Utilizza cicli di loop per scrivere le sequenze in memoria, incrementando l'indice X per accedere alle celle successive.
  • Il vettore di reset all'indirizzo FFFE garantisce l'avvio corretto del programma principale dopo un reset.
  • Il termine del programma è gestito con un loop infinito sull'istruzione FINE, mantenendo il processore in attesa.

1 ;1.asm

Inizializzazione della memoria

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

  1. Qual è la sequenza di valori inizializzati nella memoria a partire dalla locazione 80h?
  2. La sequenza di valori inizializzati è 10, 15, 20, 30, 30, 45, ecc., come indicato nel testo.

  3. Dove si trova l vettore di reset nel programma?
  4. Il vettore di reset si trova alla posizione FFFE, come specificato nel testo.

  5. Qual è l'inizio dell'area dati nel programma?
  6. L'inizio dell'area dati è definito alla locazione 0080, come riportato nel testo.

  7. Qual è la funzione del ciclo LOOP nel programma?
  8. Il ciclo LOOP serve a scrivere una sequenza di valori nella memoria, incrementando il valore di A e l'indirizzo di X fino a raggiungere un certo limite, come descritto nel testo.

  9. Cosa accade alla fine del programma?
  10. Alla fine del programma, viene eseguita un'istruzione di loop infinito sull'ultima istruzione, come indicato nella sezione FINE.

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community