Combinazione comandi DMC8

di il
6 risposte

Combinazione comandi DMC8

Durante lo svolgimenti di alcuni esercizi mi sono accorto che il testo combinava in successione alcuni comandi, senza passare prima per i registri, per ottenere in maniera molto più rapida il risultato richiesto rendendo così superflui altri tipi di ragionamenti; vi porgo un esempio:

Il testo mi chiede, in breve, di realizzare un programma che controlli la velocità di 8 ruote tachimetriche:
porti ingresso -> WHELLS (ID 00h) con otto linee W7...W0 una per ogni ruota;
-> VELREL (ID 01h) con otto bit (R7...R0) settabili dall'esterno
porti uscita: -> ERROR (ID 02h) con otto bit (E7...E0) ciascuno corrispondere ad ogni ruota

ogni ruota ha 32 buchi == 32 impulsi per completare un giro.
timer interrupt ogni 50ms richiesta hardware, risposa gestita in automatico.
Prog principale deve controllare i sensore degli otto tachimetri ed incrementare il corrispettivo conteggio della velocità.
Interrupt valuta il valore delle velocità confrontandole con quella di riferimento ad ogni secondo,e porre ERROR ad 1 o 0 a seconda che esse superino o meno la velocità di riferimento.

Io ho fatto tutto il programma ma sono bloccato nell'interrupt, una volta letti i valori devo velocità devo settare le uscite un maniera opportuna; il punto in questione è il seguente:

.
.
LD LH,SELECT_VELL
;assegno il primo indirizzo delle variabili (che ho creato per contenere le ;varie velocità relative ;all'ing WHELLS)

LOOP: LD A,(HL)
SUB B ; in B è contenuta la velocità di riferimento
RR E ; il CARRY è salvato nel reg E

LD (HL),00h
INC HL ; incremento l'indirizzo di mem
DEC C ; variabile contatore per indicare quante variabili mi rimangono da analizzare
JP NZ,LOOP
.
.
Il mio dubbio è: se il risultato della sottrazione è salvato nell'accumulatore A, come può essere che il risultato in A sia fatto ruotare verso destra (o meglio il CARRY)e che RR E agisca su A se fa riferimento la registro E?

p.s. se servono altri pezzi di codice per chiarire il tutto li inserisco

6 Risposte

  • Re: Combinazione comandi DMC8

    Che CPU è DMC8 ?

    Comunque, è solo il CARRY che finisce in E, dopo l'operazione, non capisco di che influenza di A con E parli ... la domanda non è chiara.
  • Re: Combinazione comandi DMC8

    Il DMC8 è la versione più semplificata del microprocessore Z80

    per definizione quando uso un comando, in questo caso, RR E faccio ruotare verso dx il contenuto del registro specificato dopo il codice mnemonico (RR); perciò dovrei avere il bit 0 che si è spostato dentro il CARRY, il quale avrà preso il posto del bit 7 e cosi via.
    se prendiamo in analisi il contenuto di A, li troviamo il risultato della sottrazione di A-B con in più il bit di CARRY settato ad uno (nel caso in cui si necessiti di un prestito).
    Quello che a me sembra è che l'Accumulatore A ed il registro E non non siano "connessi" tra di loro anche se i comandi sono messi di seguito
  • Re: Combinazione comandi DMC8

    E' solo il carry che va in E. Ma il carry è conseguenza della SUB

    Addirittura, dato che non mi pare che il carry ti serva, puoi anche omettere la RR E
  • Re: Combinazione comandi DMC8

    Ok va bene, quindi comandi di questo genere o similari configurazioni agiscono sul carry, giusto?

    cmq l'usare il carry per questo esercizio (come visto da soluzione) ha semplificato di molto questa fase di svolgimento dell'es, e per questo cerco di riassumere più comandi possibili con solo quelli pìù efficaci

    grazie del tuo aiuto!
  • Re: Combinazione comandi DMC8

    Spybot ha scritto:


    ok va bene, quindi comandi di questo genere o similari configurazioni agiscono sul carry, giusto?
    La RR ruota il registro tramite il Carry. E' quello che fa.
    cmq l'usare il carry per questo esercizio (come visto da soluzione) ha semplificato di molto questa fase di svolgimento dell'es, e per questo cerco di riassumere più comandi possibili con solo quelli pìù efficaci
    Questa non l'ho capita ...
  • Re: Combinazione comandi DMC8

    Quello che intendevo dire è che quando inizio a ragionare su come svolgere determinate azioni, non sempre riesco trovare, alla prima, un metodo di svolgimento compatto basato soltanto su alcune comandi con i quali fare le opportune considerazioni, quindi a volte nel leggere le soluzioni non commentate senza avere ben in mente una certa procedura risulta difficile da interpretare
    tornando al mio caso, per come ho poi proceduto, l'utilizzo del carry si è rivelato utile
    (purtroppo l'es l'ho scritto a penna e non ti posso fare un copia ed incolla )
Devi accedere o registrarti per scrivere nel forum
6 risposte