Complex ALU

by

 

23 Oct 2006 (Updated )

A Simulator of Complex ALU

incr3d.m
%            Progetto ALU
%
% Forma base del Teorema di Pitagora C=A+B
%
%    Valori definiti da tastiera
% 
%       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
% fornisce durante il computo
while f~=d
   
   disp (' ')
   disp ('----- Inizio ciclo di calcolo del quadrato -----')
   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 ----
   disp (' ')
   disp ('----- Inizio ciclo di interruzione contatore -----')
   disp (' ')

   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
   
   disp (' ')
   disp ('----- Fine ciclo di interruzione contatore -----')
   disp (' ')
   % ---- Fine ciclo di interruzione del contatore ----
   
   disp (' ')
   disp ('----- Fine ciclo di calcolo del quadrato -----')
   disp (' ')
end

disp (' ')
disp ('----- Valore calcolato -----')
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

% 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
% fornisce durante il computo
while f~=e
   
   disp (' ')
   disp ('----- Inizio ciclo di calcolo del quadrato -----')
   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 ----
   disp (' ')
   disp ('----- Inizio ciclo di interruzione contatore -----')
   disp (' ')
   
   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
   
   disp (' ')
   disp ('----- Fine ciclo di calcolo del quadrato -----')
   disp (' ')
   % ---- Fine ciclo di interruzione del contatore ----
end

disp (' ')
disp ('----- Valore calcolato -----')
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 -----

disp (' ')
disp (' ')
disp ('----- Inzizio Routine per il calcolo di c -----')
disp (' ')

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 (' ')
disp ('----- Valore calcolato -----')
disp (' ')
disp (['c = 'mat2str(bin2int(y))]) % Stampa a video il valore calcolato


% ----------------------------------------------------------------------
% ------------------ Inizio procedura radice quadrata ------------------
% ----------------------------------------------------------------------

% Inizializzazione delle variabili
f=0

e=0

f=bin2int(y)

a=[0 0 0 0 0 0 0 0 0 1]

b=[0 0 0 0 0 0 0 0 1 0]

c=[0 0 0 0 0 0 0 0 0 0]

%break

% Valuta la condizione del while per il calcolo della radice quadrata

while f~=e
    
    % ------------ 1 Interruzione a + b -> a ------------
    disp(' ------------ 1 Interruzione a + b -> a ------------')
    
    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;
    
    
    % ------------ 2 Interruzione a + b -> a ------------
    disp(' ------------ 2 Interruzione a + b -> a ------------')
    op_code=[0 0 0 0] % Inseirisci il codice di somma con carry
    
    % Carica l'ALU
    [y,flags]=alu(a,b,op_code,c_flag)
    
    a=y;
    
    % Copia il valore di c convertito in dec di c per il confronto con f
    e=bin2int(y)
   
        
    % ------------ 3 Interruzione incrementa il contatore ------------
    disp(' ------------ 3 Interruzione incrementa il contatore ------------')
    op_code=[0 1 0 0] % Inseirisci il codice di incrementa b
    
    b=c; % associa a b il valore di c
    
    % Carica l'ALU
    [y,flags]=alu(a,b,op_code,c_flag)

    % Deposita il valore incrementato in c
    c=y
     
    % Inerisci in b il valore 2
    b=[0 0 0 0 0 0 0 0 1 1]
    
end

disp (' ')
disp (' ')
disp ('----- Valore calcolato -----')
disp (' ')
disp (['c = 'mat2str(bin2int(y))]) % Stampa a video il valore calcolato

Contact us