Concetti Chiave

  • Il programma inizializza un vettore contenente valori specifici e due variabili per memorizzare gli indici di un numero specifico.
  • Viene utilizzato un ciclo per scorrere il vettore e trovare il primo e l'ultimo indice del numero 60.
  • L'area dati inizia all'indirizzo 0x80, come specificato nella direttiva .org STARTDATI.
  • Quando viene trovato un numero 60, l'indirizzo corrente viene memorizzato e aggiornato nelle variabili F e L.
  • Il vettore di reset è definito nella sezione RESET, puntando all'inizio del programma principale.

1 ;2.asm

2;

Inizializzazione del vettore

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:

Ciclo principale del programma

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

Domande da interrogazione

  1. Qual è l'obiettivo principale del programma descritto nel codice?
  2. L'obiettivo del programma è memorizzare in F l'indice del primo numero 60 trovato in un vettore e in L l'indirizzo dell'ultimo numero 60 trovato.

  3. Come è strutturato il vettore di dati nel programma?
  4. Il vettore è composto da una serie di byte, tra cui i valori 60, 4, 5, 70, 7, 45, 60, 3, 3, 5, 9, 7, 12, 45, 60, 3, e inizia all'indirizzo 0x80.

  5. Quali variabili vengono inizializzate nel programma e quali valori assumono?
  6. Le variabili inizializzate sono F e L, entrambe impostate a 0 all'inizio del programma.

  7. Qual è il ruolo del ciclo principale nel programma?
  8. Il ciclo principale confronta ogni elemento del vettore con il valore 60 e aggiorna le variabili F e L in base alla posizione degli elementi trovati.

  9. Cosa accade quando il programma trova un numero 60 nel vettore?
  10. Quando viene trovato un numero 60, il programma salva l'indirizzo corrente in L e continua a cercare, aggiornando L ogni volta che trova un nuovo 60.

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community