% 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=1
% 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]
% Inizio ciclo while che fa da controllore alla condizione di calcolo
while f~=h
% ---- 1 ciclo di calcolo 1+2 ----
b=[0 0 0 0 0 0 0 0 1 0]
op_code=[0 0 0 0] % Inseirisci il codice di somma
% Carica l'ALU
[y,flags]=alu(a,b,op_code,c_flag)
a=y % usa a come un accu.
% ---- 2 ciclo di calcolo 3+2 ----
% Carica l'ALU
[y,flags]=alu(a,b,op_code,c_flag)
b=y;
% ---- 3 ciclo di calcolo y'+y"+1 ----
op_code=[0 0 0 1] % Inseirisci il codice di somma
% Carica l'ALU
[y,flags]=alu(a,b,op_code,c_flag)
a=y;
f=bin2int(a) % Calcola il val dec di a e sfruttalo per la condizione
% ---- 4 ciclo di calcolo Incrementatore ----
op_code=[0 1 0 0] % Inseirisci il codice di incr b
b=c;
% Carica l'ALU
[y,flags]=alu(a,b,op_code,c_flag)
c=y;
end
bin2int(y) % Calcola il val dec di a e sfruttalo per la condizione