;            File: e17-conta5.ed.txt
;
;          Autore: Roberto FULIGNI
;
; Ultima modifica: 19/10/2024
;
;     Descrizione: Scrivere un programma per il simulatore che conti quante volte la
;                  cifra 5 è presente in un numero n inizialmente contenuto nella
;                  locazione di memoria 100 inserendo il risultato nella locazione 
;                  di memoria 101.
;
;    MEMORIA RAM (DATA)
;    Variabile    Indirizzo    Valore  
;    --------------------------------
;      n             100:       535
;      conta         101:         ?  (soluzione: 2)
;      temp          102:
;      q             103:
;

; Strategia: occorre ricavare da n la cifra delle unità, quindi rimuoverla
;            dividendo n per 10 e ripetendo l'operazione fintantoché n > 0.
;            A ogni ripetizione si aggiorna un apposito contatore se la cifra è 5.

SET A #0
STO 101           ; Azzera il contatore

LOD R0 100        ; Preserviamo il valore di n copiandolo in una variabile temporanea
SET R1 #0
ADD               ; A <-- R0 + R1
STO 102           ; ora si può operare sulla locazione di indirizzo 102

ciclo:
LOD R0 102        ; Ricavo la cifra delle unità di temp con l'algoritmo del resto
SET R1 #10
DIV
STO 103           ; Conservo il valore del quoziente nella variabile q (indirizzo 103)
MOV R0
MUL
LOD R0 102
MOV R1
SUB               ; Ora le unità di temp sono presenti nel registro A

; Occorre verificare se le unità siano 5...
MOV R0            ; Sposto le unità in R0
SET R1 #5
SUB               ; Se le unità sono cinque, allora A deve essere esattamente 0
JMZ unita5
JMP continua      ; Se le unità non sono 5, si continua semplicemente con l'algoritmo

unita5:
LOD R0 101       ; Carico il contatore in R0...
SET R1 #1
ADD              ; ... lo incremento ...
STO 101          ; ... e infine lo salvo nuovamente nella locazione di memoria 101

continua:
LOD R0 103      ; recupero il quoziente elaborato il precedenza (di fatto è il numero 
                ; da elaborare privato delle unità) ...
SET R1 #0
ADD             ; ... lo inserisco in A ...
STO 102         ; ... e lo salvo in temp

JMG ciclo       ; Se ci sono altre cifre da elaborare (A > 0), si ripete l'algoritmo

HLT
