% Progetto ALU
%
% Forma base del Teorema di Pitagora C=A+B
%
% Valori definiti nel programma
%
% Programma elaborato da
%
% Giovanni DI CECCA & Virginia BELLINO
% 50 / 887 408 / 466
%
% http://www.dicecca.net
% Pulisci memoria
clear
% Pulisci schermo
clc
disp(' Programma che calcola la forma base del Teorema di Pitagora')
disp(' ')
disp(' C=A+B')
disp(' ')
disp(' Programma elaborato da')
disp(' ')
disp(' Giovanni DI CECCA & Virginia BELLINO')
disp(' 50 / 887 408 / 466')
disp(' ')
disp(' http://www.dicecca.net')
disp(' ')
disp(' ')
d=input('Inserire il valore di a in decimale ');
e=input('Inserire il valore di b in decimale ');
% Metti il valore in a in binario
a=int2bin(d,10)
% Associa a b lo stesso valore di a
b=a
% Carry iniziale valido per tutte le computazioni
c_flag=0
% Routine che permette attraverso le interruzioni di calcolo di incrementare
% i valori e sommarli fino sa fare il quadrato
% ----- Inzizio Routine per il calcolo di a -----
% Inizializzazione della variabile a 1, perch si deve consuiderare che un ciclo
% viene eseguito appena parte la routine del calcolo del quadrato
c=[0 0 0 0 0 0 0 0 0 1]
f=0; % Inizializza la varianbile f
% Il ciclo while consente di fare un controllo sulla CONDIZIONE che il contatore dell'ALU
% fornisce durante il computo
while f~=d
disp (' ')
disp('----- Inizio ciclo -----')
disp (' ')
% Inserisci il codice di somma
op_code=[0 0 0 0];
% Carica l'ALU
[y,flags]=alu(a,b,op_code,c_flag)
a=y; % Inserisci il valore calcolato in a
g=b; % deposita il valore di b in una variabile temporanea
% ---- Inizio ciclo di interruzione del contatore ----
b=c; % Inserisci in b il valore di c
op_code=[0 1 0 0]; % Inserisci il codice d incrementazione
% Carica l'ALU
[y,flags]=alu(a,b,op_code,c_flag)
c=y; % Copia in c il valore incrementato
f=bin2int(c); % Converti il valore binario di c e depositalo in f
b=g % Ricolloca il valore di g in b
% ---- Fine ciclo di interruzione del contatore ----
disp (' ')
disp('----- Fine ciclo -----')
disp (' ')
end
disp (' ')
disp (['a = 'mat2str(bin2int(a))]) % Stampa a video il valore calcolato
d=a; % deposita il d il valore calcolato di a
% ----- Inzizio Routine per il calcolo di b -----
% Metti il valore in a in binario
a=int2bin(e,10)
% Associa a b lo stesso valore di a
b=a
% Il ciclo while consente di fare un controllo sulla CONDIZIONE che il contatore dell'ALU
% fornisce durante il computo
c=[0 0 0 0 0 0 0 0 0 1]
f=0; % Inizializza la varianbile f
% Il ciclo while consente di fare un controllo sulla CONDIZIONE che il contatore
% fornisce durante il computo
while f~=e
disp (' ')
disp('----- Inizio ciclo -----')
disp (' ')
% Inserisci il codice di somma
op_code=[0 0 0 0];
% Carica l'ALU
[y,flags]=alu(a,b,op_code,c_flag)
a=y; % Inserisci il valore calcolato in a
g=b; % deposita il valore di b in una variabile temporanea
% ---- Inizio ciclo di interruzione del contatore ----
b=c; % Inserisci in b il valore di c
op_code=[0 1 0 0]; % Inserisci il codice d incrementazione
% Carica l'ALU
[y,flags]=alu(a,b,op_code,c_flag)
c=y; % Copia in c il valore incrementato
f=bin2int(c); % Converti il valore binario di c e depositalo in f
b=g % Ricolloca il valore di g in b
% ---- Fine ciclo di interruzione del contatore ----
disp (' ')
disp('----- Fine ciclo -----')
disp (' ')
end
disp (' ')
disp (['b = 'mat2str(bin2int(a))]) % Stampa a video il valore calcolato
e=a; % deposita il d il valore calcolato di b
% ----- Inzizio Routine per il calcolo di c -----
a=d % associa ad a il valore di d
b=e % associa ad b il valore di e
op_code=[0 0 0 0] % Inseirisci il codice di somma
% Carica l'ALU
[y,flags]=alu(a,b,op_code,c_flag)
disp (' ')
disp (['c = 'mat2str(bin2int(y))]) % Stampa a video il valore calcolato
h=y % Inserisci in h il valore calcolato di c
% -------- Inizio procedura della radice quadrata di c --------
% Inizializzazine della variabile a
a=[0 0 0 0 0 0 0 0 0 1]
% Inizializzazine della variabile b
b=[0 0 0 0 0 0 0 0 1 0]
% Inizializzazine della variabile c
c=[0 0 0 0 0 0 0 0 0 1]
disp('------------------------------- Inizio ciclo sqr ----------------------')
% Il ciclo while consente di fare un controllo sulla CONDIZIONE che il contatore dell'ALU
% fornisce durante il computo
while f~=h
disp (' ')
disp('----- Inizio ciclo -----')
disp (' ')
% Inserisci il codice di somma 1 e 2 interrupt
op_code=[0 0 0 0];
% ---- 1 Interruzione di calcolo ---- 1+2
% Carica l'ALU
[y,flags]=alu(a,b,op_code,c_flag)
a=y; % Conserva il valore calcolato in a
g=b; % deposita il valore di b in una variabile temporanea
% ---- 2 Interruzione di calcolo ---- y + 2
b=[0 0 0 0 0 0 0 0 1 0];
% Carica l'ALU
[y,flags]=alu(a,b,op_code,c_flag)
j=y; % Conserva il valore calcolato in j
% ---- 3 Interruzione di calcolo ---- y' + y"
% a considera il valore di a calcolato nella 1 interruzione
b=j % Inserisici in b il risultato della 2 interruzione
% Carica l'ALU
[y,flags]=alu(a,b,op_code,c_flag)
a=y % Memorizza il valore y'+y" calcolato
f=bin2int(a) % Converti il valore binario di a e depositalo in f
% ---- 4 Interruzione di calcolo ---- incb la cui immagine c
b=c; % Inserisci in b il valore di c
op_code=[0 1 0 0]; % Inserisci il codice d incrementazione
% Carica l'ALU
[y,flags]=alu(a,b,op_code,c_flag)
c=y; % Copia in c il valore incrementato
b=g % Ricolloca il valore di g in b
% ---- Fine ciclo di interruzione del contatore ----
bin2int(y)
disp (' ')
disp('----- Fine ciclo -----')
disp (' ')
end
disp (' ')
disp (['c = 'mat2str(bin2int(c))]) % Stampa a video il valore calcolato