nikpez di nikpez
Ominide 738 punti

HC08

1 ;2.asm
2 ;autore ghdp - soluzione minima
3 ;Utilizzando il vettore di cui sopra, scambiate le locazioni di indirizzo pari con quelle di
4 ;indirizzo dispari e calcolate in due variabili P e D le somme degli elementi di valore pari
5 ; e quella degli elementi di valore dispari. Spostate in un secondo vettore tutti gli elementi
6 ; che sono seguiti da un elemento di valore inferiore.
7 ;
EE00 8 STARTPGM = 0xee00 ;L'inizio dell'ipotetica ROM (program counter)
FFFE 9 RESETVECT = 0xfffe ;La posizione del vettore di reset
0080 10 STARTDATI = 0x80 ; Inizio area dati
11 ;
12 .area DATI (ABS)
0080 13 .org STARTDATI
0080 14 VETT:
0080 3C 15 .byte 60 ; locazione 80h

0081 04 16 .byte 4
0082 05 17 .byte 5
0083 46 18 .byte 70
0084 07 19 .byte 7
0085 2D 20 .byte 45
0086 3C 21 .byte 60
0087 03 22 .byte 3
0088 03 23 .byte 3
0089 05 24 .byte 5
008A 09 25 .byte 9
008B 07 26 .byte 7
008C 0C 27 .byte 12
008D 2D 28 .byte 45
008E 3C 29 .byte 60
008F 03 30 .byte 3 ; locazione 8Fh
0090 00 31 P:.byte 0
0091 00 32 D:.byte 0
0092 33 UNO:
0092 01 34 .byte 1 ; usata per fare la AND con l'accumulatore per tst sul bit 0 (pari/dispari)
0093 35 PREC:
0093 00 36 .byte 0 ; usata per memorizzare il valore precedente
0094 37 X1:
0094 00 38 .byte 0 ; usata per puntare il primo vettore
0095 39 X2:
0095 00 40 .byte 0 ; usata per puntare il secondo vettore
0096 41 VETT2:
0096 00 42 .byte 0 ; locazione 96h
0097 00 43 .byte 0
0098 00 44 .byte 0
0099 00 45 .byte 0
009A 00 46 .byte 0
009B 00 47 .byte 0
009C 00 48 .byte 0
009D 00 49 .byte 0
009E 00 50 .byte 0
009F 00 51 .byte 0
00A0 00 52 .byte 0
00A1 00 53 .byte 0
00A2 00 54 .byte 0
00A3 00 55 .byte 0
00A4 00 56 .byte 0
00A5 00 57 .byte 0
58 ;
59 .area PROGRAMMA (ABS)
EE00 60 .org STARTPGM
61
EE00 62 MAIN:
EE00 AE 80 63 LDX #VETT ;metto in X 0x80
EE02 64 LOOP0:
EE02 51 90 10 65 CBEQX #0x90, DOPO ; confronto X con il primo indirizzo oltre la sequenza da scrivere
EE05 F6 66 LDA ,X ;sposta in a il byte puntato da X
EE06 C7 00 93 67 STA PREC
EE09 5C 68 INC X
EE0A F6 69 LDA ,X
EE0B 5A 70 DEC X
EE0C F7 71 STA ,X
EE0D 5C 72 INC X
EE0E C6 00 93 73 LDA PREC
EE11 F7 74 STA ,X
EE12 5C 75 INC X
EE13 20 ED 76 BRA LOOP0 ; fine del ciclo di scambio locazioni pari/dispari
EE15 77 DOPO:
EE15 A6 00 78 LDA #0
EE17 C7 00 93 79 STA PREC ; riazzero il precedente
EE1A AE 96 80 LDX #VETT2
EE1C CF 00 95 81 STX X2 ;inizializzo X2 con l'indirizzo del secondo vettore
EE1F AE 80 82 LDX #VETT ;metto in X 0x80
EE21 83 LOOP:
EE21 51 90 25 84 CBEQX #0x90, FINE ; confronto X con il primo indirizzo oltre la sequenza da scrivere
85 ; se uguali salta a FINE
EE24 F6 86 LDA ,X ;sposta in a il byte puntato da X
EE25 C1 00 93 87 CMP PREC ;confronta il corrente con il precedente (la prima volta contiene 0)
EE28 24 0C 88 BHS POI ; salta perchè non deve copiare nel secondo vettore
EE2A CF 00 94 89 STX X1 ; salva il valore di X
EE2D CE 00 95 90 LDX X2 ;Mette in X l'indirizzo corrente del secondo vettore
EE30 F7 91 STA ,X ; copia nel secondo vettore l'elemento corrente
EE31 3C 95 92 INC X2 ; incrementa il puntatore del secondo vettore
EE33 CE 00 94 93 LDX X1 ; ripristina X
EE36 94 POI:
EE36 C7 00 93 95 STA PREC; memorizzo il corrente come "nuovo" precedente
EE39 C4 00 92 96 AND UNO ; la AND con UNO azzera tutti i bit meno il bit 0 dell'accumulatore
EE3C 41 01 05 97 CBEQA #1, DISPARI ; salta a DISPARI se è a 1 il bit meno significativo
EE3F 3C 90 98 INC P ; incrementa i pari
EE41 5C 99 INC X ; incrementa il puntatore
EE42 20 DD 100 BRA LOOP
EE44 101 DISPARI:
EE44 3C 91 102 INC D ; incrementa i pari
EE46 5C 103 INC X ; incrementa il puntatore
EE47 20 D8 104 BRA LOOP
105
106 ;
EE49 20 FE 107 FINE: BRA FINE ; loop infinito sull'ultima istruzione
108 ;
109 .area RESET (ABS)
FFFE 110 .org RESETVECT
FFFE EE 00 111 .word MAIN
112
ASxxxx Assembler V01.70 + NoICE + SDCC mods + Flat24 Feb-1999 (Motorola 68HC08), page 1.

Symbol Table

2 D 0091 R
4 DISPARI EE44 R
4 DOPO EE15 R
4 FINE EE49 R
4 LOOP EE21 R
4 LOOP0 EE02 R
4 MAIN EE00 R
2 P 0090 R
4 POI EE36 R
2 PREC 0093 R
RESETVECT = FFFE
STARTDATI = 0080
STARTPGM = EE00
2 UNO 0092 R
2 VETT 0080 R
2 VETT2 0096 R

2 X1 0094 R
2 X2 0095 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 26 flags 8
3 PROGRAMMA size 0 flags 8
4 PROGRAMMA1 size 4B flags 8
5 RESET size 0 flags 8
6 RESET2 size 2 flags 8

Registrati via email