Questo programma deve effettuare la divisione intera fra due numeri, cioè fornire solo la parte intera del quoziente.
Un algoritmo che potremmo riprodurre a mano è il seguente:
sottraggo il divisore al dividendo più volte e arresto il
processo quando il dividendo diventa inferiore al divisore,
conto il numero di sottrazioni che ho fatto,
il risultato è pari al numero che ho contato
Supponiamo di voler dividere 10 per 3
Primo passo
Dividendo – Divisore = 10 – 3 = 7
Poiché il dividendo è ancora superiore al divisore posso proseguire con una seconda sottrazione
Poiché il dividendo è ancora superiore al divisore posso proseguire con una seconda sottrazione
Ora non posso proseguire poiché il dividendo è diventato inferiore al divisore. Il risultato della divisione è 3.
Usa il foglio excel per sperimentare altre simulazioni
Vediamo ora la soluzione implementata in uno pseudolinguaggio assembly
1. COPIA D IN A[1]
2. COPIA 0 IN C[2]
3. SOTTRAI A,E[3]
4. INCREMENTA C[4]
5. CONFRONTA A CON E
6. SE A>=E TORNA ALL’ISTRUZIONE 3[5]
7. FINE
La soluzione non è perfetta. Immaginiamo, infatti, che il dividendo sia minore del divisore. In tal caso il risultato dovrebbe essere nullo. Il nostro programma, invece, fa effettuare sempre almeno una sottrazione, per cui darebbe come risultato della divisione 1.
Poiché il programma deve avere validità generale cioè deve funzionare indipendentemente dal valore degli operandi, dobbiamo appartare una modifica
1. COPIA D IN A
2. COPIA 0 IN C
3. CONFRONTA A CON E
4. SE A<E VAI A FINE[6]
5. SOTTRAI A,E
6. INCREMENTA C
7. CONFRONTA A CON E
8. SE A>=E TORNA ALL’ISTRUZIONE 5
9. FINE
[1] IN GENERE NEI MICROPROCESSORI L’ACCUMULATORE DEVE ESSERE SEMPRE IL PRIMO OPERANDO DELLE ISTRUZIONI LOGICO ARITMETICHE, DA CIO’ LA NECESSITA’ DI COPIARE IL CONTENUTO DEL DIVIDENDO NELL’ACCUMULATORE PER POTER SVOLGERE LE ISTRUZIONI DI SOTTRAZIONE
[2] IL REGISTRO C SERVIRA’ COME CONTATORE DELLE SOTTRAZIONI CHE DOVREMO FARE. PERCIO’ CI ASSICURIAMO CHE SIA INIZIALMENTE A ZERO
[3] INIZIAMO LE SOTTRAZIONI
[4] AD OGNI SOTTRAZIONE INCREMENTIAMO IL CONTATORE C
[5] LE
SOTTRAZIONI DEVONO CONTINUARE FINQUANDO IL DIVIDENDO E’ ANCORA MAGGIORE O
UGUALE AL DIVISORE. LA CONDIZIONE DI UGUALE SI HA QUANDO IL DIVIDENDO E’
PERFETTAMENTE DIVISIBILE PER IL DIVISORE
[6] PER EVITARE L’ERRORE PREDETTO CI ASSICURIAMO PRELIMINARMENTE CHE IL DIVIDENDO NON SIA MINORE DEL DIVISORE. SE SI VERIFICA QUEST’ULTIMA EVENTUALITA’ TERMINIAMO IL PROGRAMMA E IL CONTATORE C RESTA A ZERO FORNENDO IL RISULTATO CORRETTO.