Complex ALU

by

 

23 Oct 2006 (Updated )

A Simulator of Complex ALU

Pitagora con Program Interrupt.m
%            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

Contact us